shaka-player 3.3.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.csslintrc +11 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/pull_request_template.md +6 -34
- package/.github/workflows/build-and-test.yaml +129 -0
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
- package/.github/workflows/demo-version-index.yaml +37 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +168 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +92 -0
- package/.github/workflows/sync-labels.yaml +33 -0
- package/.github/workflows/update-issues.yaml +29 -0
- package/.github/workflows/validate-pr-title.yaml +35 -0
- package/AUTHORS +3 -0
- package/CHANGELOG.md +1866 -1675
- package/CONTRIBUTING.md +2 -2
- package/CONTRIBUTORS +3 -0
- package/README.md +16 -13
- package/app-engine/README.md +9 -0
- package/app-engine/demo-version-index/README.md +14 -0
- package/app-engine/demo-version-index/app.yaml +28 -0
- package/app-engine/demo-version-index/generate.py +164 -0
- package/app-engine/demo-version-index/main.py +11 -0
- package/app-engine/demo-version-index/requirements.txt +5 -0
- package/app-engine/demo-version-index/templates/index.html +114 -0
- package/app-engine/shaka-player-demo/README.md +18 -0
- package/app-engine/shaka-player-demo/app.yaml +61 -0
- package/app-engine/shaka-player-demo/main.py +95 -0
- package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
- package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
- package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
- package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
- package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
- package/app-engine/shaka-player-demo/posters/standard.png +0 -0
- package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
- package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
- package/app-engine/shaka-player-demo/posters.py +110 -0
- package/app-engine/shaka-player-demo/requirements.txt +5 -0
- package/app-engine/shaka-player-demo/time.txt +1 -0
- package/build/README.md +3 -3
- package/build/checkversion.py +1 -1
- package/build/compiler.py +1 -1
- package/build/conformance.textproto +13 -0
- package/build/docker/Dockerfile +20 -0
- package/build/docker/docker-compose.yml +10 -0
- package/build/gendeps.py +18 -15
- package/build/shaka-lab.yaml +161 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +94 -29
- package/build/types/core +0 -1
- package/build/types/polyfill +1 -3
- package/build/wrapper.template.js +2 -2
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/asset_card.js +1 -2
- package/demo/cast_receiver/index.html +1 -1
- package/demo/cast_receiver/receiver_app.css +14 -14
- package/demo/common/asset.js +17 -1
- package/demo/common/assets.js +31 -0
- package/demo/common/message_ids.js +6 -3
- package/demo/config.js +10 -12
- package/demo/custom.js +39 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/demo_utils.js +0 -1
- package/demo/index.html +1 -1
- package/demo/locales/en.json +6 -3
- package/demo/locales/source.json +22 -10
- package/demo/main.js +12 -9
- package/demo/search.js +2 -1
- package/dist/controls.css +3 -3
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +236 -232
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +236 -232
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +229 -226
- package/dist/locales.js +34 -32
- package/dist/receiver.compiled.debug.js +75 -73
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +75 -73
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +321 -314
- package/dist/shaka-player.compiled.debug.d.ts +321 -314
- package/dist/shaka-player.compiled.debug.externs.js +140 -129
- package/dist/shaka-player.compiled.debug.js +527 -592
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +140 -129
- package/dist/shaka-player.compiled.js +836 -860
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +367 -358
- package/dist/shaka-player.ui.debug.d.ts +367 -358
- package/dist/shaka-player.ui.debug.externs.js +148 -129
- package/dist/shaka-player.ui.debug.js +586 -649
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +148 -129
- package/dist/shaka-player.ui.js +1008 -1028
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- package/docs/design/bg-fetch.md +2 -2
- package/docs/design/codec_preferences.md +1 -1
- package/docs/design/dash-audio-channels.md +3 -3
- package/docs/design/dash-manifests.md +1 -1
- package/docs/design/gap-jumping.md +3 -3
- package/docs/design/preload.md +2 -2
- package/docs/tutorials/config.md +0 -2
- package/docs/tutorials/drm-config.md +5 -0
- package/docs/tutorials/fairplay.md +7 -22
- package/docs/tutorials/faq.md +8 -19
- package/docs/tutorials/index.json +3 -8
- package/docs/tutorials/plugins.md +4 -6
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/upgrade.md +83 -11
- package/docs/tutorials/welcome.md +10 -2
- package/externs/cmcd.js +1 -1
- package/externs/polyfill.js +15 -0
- package/externs/shaka/manifest.js +5 -1
- package/externs/shaka/net.js +12 -0
- package/externs/shaka/offline.js +5 -1
- package/externs/shaka/player.js +39 -32
- package/externs/shaka/text.js +12 -12
- package/externs/sourcebuffer.js +15 -0
- package/karma.conf.js +137 -30
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/ads/client_side_ad.js +13 -2
- package/lib/ads/client_side_ad_manager.js +22 -4
- package/lib/cast/cast_proxy.js +3 -4
- package/lib/cast/cast_utils.js +0 -1
- package/lib/cea/cea608_data_channel.js +2 -2
- package/lib/cea/cea708_service.js +5 -4
- package/lib/cea/mp4_cea_parser.js +11 -5
- package/lib/cea/sei_processor.js +6 -3
- package/lib/dash/content_protection.js +85 -5
- package/lib/dash/dash_parser.js +10 -12
- package/lib/dash/mpd_utils.js +4 -5
- package/lib/dash/segment_list.js +1 -2
- package/lib/dash/segment_template.js +3 -3
- package/lib/hls/hls_parser.js +386 -749
- package/lib/hls/manifest_text_parser.js +5 -6
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/content_workarounds.js +2 -2
- package/lib/media/drm_engine.js +105 -55
- package/lib/media/gap_jumping_controller.js +10 -45
- package/lib/media/media_source_engine.js +90 -17
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +4 -7
- package/lib/media/presentation_timeline.js +19 -10
- package/lib/media/segment_index.js +13 -46
- package/lib/media/segment_reference.js +47 -1
- package/lib/media/streaming_engine.js +35 -17
- package/lib/media/time_ranges_utils.js +5 -12
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +4 -1
- package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
- package/lib/offline/manifest_converter.js +1 -0
- package/lib/offline/storage.js +104 -136
- package/lib/player.js +50 -216
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +15 -9
- package/lib/polyfill/mediasource.js +0 -28
- package/lib/polyfill/patchedmediakeys_nop.js +2 -0
- package/lib/polyfill/patchedmediakeys_webkit.js +2 -0
- package/lib/polyfill/symbol.js +46 -0
- package/lib/text/cue.js +1 -7
- package/lib/text/lrc_text_parser.js +8 -0
- package/lib/text/mp4_ttml_parser.js +8 -0
- package/lib/text/mp4_vtt_parser.js +8 -0
- package/lib/text/sbv_text_parser.js +8 -0
- package/lib/text/simple_text_displayer.js +3 -8
- package/lib/text/srt_text_parser.js +8 -0
- package/lib/text/ssa_text_parser.js +8 -0
- package/lib/text/text_engine.js +19 -3
- package/lib/text/ttml_text_parser.js +16 -5
- package/lib/text/ui_text_displayer.js +2 -8
- package/lib/text/vtt_text_parser.js +24 -2
- package/lib/text/web_vtt_generator.js +1 -7
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +10 -14
- package/lib/util/fairplay_utils.js +109 -0
- package/lib/util/functional.js +0 -42
- package/lib/util/iterables.js +0 -46
- package/lib/util/mime_utils.js +2 -0
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +10 -11
- package/lib/util/platform.js +48 -3
- package/lib/util/player_configuration.js +12 -6
- package/lib/util/pssh.js +24 -8
- package/lib/util/stream_utils.js +96 -25
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -21
- package/lib/util/xml_utils.js +16 -8
- package/package.json +61 -36
- package/roadmap.md +27 -27
- package/shaka-player.uncompiled.js +1 -3
- package/test/abr/simple_abr_manager_unit.js +3 -8
- package/test/ads/ad_manager_unit.js +0 -6
- package/test/cast/cast_proxy_unit.js +0 -8
- package/test/cast/cast_receiver_integration.js +1 -18
- package/test/cast/cast_receiver_unit.js +1 -9
- package/test/cast/cast_sender_unit.js +0 -6
- package/test/cast/cast_utils_unit.js +1 -13
- package/test/cea/cea608_memory_unit.js +0 -5
- package/test/cea/cea708_service_unit.js +0 -7
- package/test/cea/cea708_window_unit.js +0 -5
- package/test/cea/cea_decoder_unit.js +0 -6
- package/test/cea/dtvcc_packet_builder_unit.js +0 -3
- package/test/cea/dtvcc_packet_unit.js +0 -5
- package/test/cea/mp4_cea_parser_unit.js +0 -4
- package/test/dash/dash_parser_content_protection_unit.js +45 -10
- package/test/dash/dash_parser_live_unit.js +2 -15
- package/test/dash/dash_parser_manifest_unit.js +2 -40
- package/test/dash/dash_parser_segment_base_unit.js +1 -8
- package/test/dash/dash_parser_segment_list_unit.js +1 -7
- package/test/dash/dash_parser_segment_template_unit.js +3 -13
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +2 -6
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +101 -234
- package/test/hls/hls_parser_unit.js +517 -447
- package/test/hls/manifest_text_parser_unit.js +0 -10
- package/test/media/adaptation_set_criteria_unit.js +3 -7
- package/test/media/adaptation_set_unit.js +0 -2
- package/test/media/buffering_observer_unit.js +1 -4
- package/test/media/closed_caption_parser_unit.js +0 -3
- package/test/media/drm_engine_integration.js +2 -15
- package/test/media/drm_engine_unit.js +90 -144
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +26 -10
- package/test/media/media_source_engine_unit.js +8 -20
- package/test/media/mp4_segment_index_parser_unit.js +0 -4
- package/test/media/play_rate_controller_unit.js +0 -4
- package/test/media/playhead_unit.js +35 -207
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/quality_observer_unit.js +0 -4
- package/test/media/region_observer_unit.js +1 -6
- package/test/media/region_timeline_unit.js +0 -3
- package/test/media/segment_index_unit.js +15 -31
- package/test/media/segment_reference_unit.js +0 -3
- package/test/media/stall_detector_unit.js +0 -5
- package/test/media/streaming_engine_integration.js +13 -75
- package/test/media/streaming_engine_unit.js +14 -37
- package/test/media/time_ranges_utils_unit.js +0 -7
- package/test/media/transmuxer_integration.js +0 -6
- package/test/media/webm_segment_index_parser_unit.js +0 -4
- package/test/net/data_uri_plugin_unit.js +0 -7
- package/test/net/http_plugin_unit.js +0 -9
- package/test/net/networking_engine_unit.js +0 -11
- package/test/offline/download_progress_estimator_unit.js +0 -2
- package/test/offline/indexeddb_storage_unit.js +0 -6
- package/test/offline/manifest_convert_unit.js +34 -12
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +1 -6
- package/test/offline/offline_scheme_unit.js +0 -8
- package/test/offline/offline_uri_unit.js +0 -2
- package/test/offline/storage_compatibility_unit.js +1 -14
- package/test/offline/storage_integration.js +6 -31
- package/test/player_external.js +1 -15
- package/test/player_integration.js +38 -28
- package/test/player_load_graph_integration.js +1 -6
- package/test/player_src_equals_external.js +3 -9
- package/test/player_src_equals_integration.js +0 -7
- package/test/player_unit.js +78 -37
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/large_file.mpd +1 -1
- package/test/test/boot.js +75 -22
- package/test/test/externs/jasmine.js +2 -2
- package/test/test/externs/karma.js +4 -0
- package/test/test/namespace.js +10 -0
- package/test/test/util/canned_idb.js +0 -8
- package/test/test/util/cea_utils.js +0 -6
- package/test/test/util/dash_parser_util.js +0 -13
- package/test/test/util/fake_ad.js +0 -3
- package/test/test/util/fake_ad_manager.js +0 -9
- package/test/test/util/fake_demo_main.js +0 -5
- package/test/test/util/fake_drm_engine.js +0 -6
- package/test/test/util/fake_media_source_engine.js +11 -11
- package/test/test/util/fake_networking_engine.js +0 -5
- package/test/test/util/fake_text_displayer.js +0 -5
- package/test/test/util/indexeddb_utils.js +1 -10
- package/test/test/util/jasmine_fetch.js +0 -1
- package/test/test/util/loader.js +0 -18
- package/test/test/util/manifest_generator.js +12 -15
- package/test/test/util/manifest_parser_util.js +4 -7
- package/test/test/util/offline_utils.js +1 -5
- package/test/test/util/simple_fakes.js +9 -26
- package/test/test/util/stream_generator.js +0 -14
- package/test/test/util/streaming_engine_util.js +1 -15
- package/test/test/util/test_scheme.js +25 -20
- package/test/test/util/ttml_utils.js +0 -2
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +9 -23
- package/test/test/util/waiter.js +84 -43
- package/test/text/cue_integration.js +2 -6
- package/test/text/lrc_text_parser_unit.js +6 -11
- package/test/text/mp4_ttml_parser_unit.js +6 -10
- package/test/text/mp4_vtt_parser_unit.js +7 -12
- package/test/text/sbv_text_parser_unit.js +5 -10
- package/test/text/simple_text_displayer_unit.js +1 -8
- package/test/text/srt_text_parser_unit.js +5 -10
- package/test/text/ssa_text_parser_unit.js +17 -34
- package/test/text/text_engine_unit.js +47 -12
- package/test/text/text_track_integration.js +0 -2
- package/test/text/ttml_text_parser_unit.js +79 -88
- package/test/text/ui_text_displayer_unit.js +44 -41
- package/test/text/vtt_text_parser_unit.js +55 -66
- package/test/text/web_vtt_generator_unit.js +0 -3
- package/test/ui/ad_ui_unit.js +0 -11
- package/test/ui/localization_unit.js +0 -3
- package/test/ui/text_displayer_layout_unit.js +1 -12
- package/test/ui/ui_customization_unit.js +0 -6
- package/test/ui/ui_integration.js +0 -32
- package/test/ui/ui_unit.js +28 -17
- package/test/util/abortable_operation_unit.js +4 -9
- package/test/util/array_utils_unit.js +0 -2
- package/test/util/buffer_utils_unit.js +0 -2
- package/test/util/cmcd_manager_unit.js +3 -3
- package/test/util/data_view_reader_unit.js +0 -4
- package/test/util/ebml_parser_unit.js +0 -4
- package/test/util/event_manager_unit.js +0 -3
- package/test/util/fake_event_target_unit.js +0 -5
- package/test/util/iterables_unit.js +0 -64
- package/test/util/language_utils_unit.js +0 -3
- package/test/util/manifest_parser_utils_unit.js +0 -2
- package/test/util/mp4_box_parsers_unit.js +0 -5
- package/test/util/mp4_parser_unit.js +0 -4
- package/test/util/multi_map_unit.js +0 -3
- package/test/util/object_utils_unit.js +0 -2
- package/test/util/periods_unit.js +14 -7
- package/test/util/pssh_unit.js +0 -5
- package/test/util/state_history_unit.js +0 -2
- package/test/util/stream_utils_unit.js +26 -15
- package/test/util/string_utils_unit.js +0 -6
- package/test/util/text_parser_unit.js +0 -2
- package/test/util/xml_utils_unit.js +0 -4
- package/ui/controls.js +65 -40
- package/ui/fullscreen_button.js +26 -6
- package/ui/less/ad_controls.less +6 -6
- package/ui/less/buttons.less +6 -6
- package/ui/less/containers.less +10 -12
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +7 -2
- package/ui/less/tooltip.less +4 -4
- package/ui/locales/en.json +1 -0
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/ui/locales/source.json +5 -0
- package/ui/resolution_selection.js +31 -33
- package/ui/seek_bar.js +2 -1
- package/ui/ui.js +0 -17
- package/.github/workflows/build_and_test.yaml +0 -73
- package/.github/workflows/release.yaml +0 -53
- package/docs/tutorials/upgrade-v2-5.md +0 -441
- package/docs/tutorials/upgrade-v3.md +0 -38
- package/externs/svgelement.js +0 -18
- package/externs/webcrypto.js +0 -18
- package/lib/polyfill/mathround.js +0 -49
- package/lib/polyfill/patchedmediakeys_apple.js +0 -744
- package/lib/polyfill/patchedmediakeys_ms.js +0 -698
- package/lib/util/mutex.js +0 -52
- package/test/util/functional_unit.js +0 -82
package/test/test/util/waiter.js
CHANGED
|
@@ -4,14 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.Waiter');
|
|
8
|
-
|
|
9
|
-
goog.require('shaka.log');
|
|
10
|
-
goog.require('shaka.media.TimeRangesUtils');
|
|
11
|
-
goog.require('shaka.test.Util');
|
|
12
|
-
goog.require('shaka.util.EventManager');
|
|
13
|
-
|
|
14
|
-
|
|
15
7
|
shaka.test.Waiter = class {
|
|
16
8
|
/** @param {!shaka.util.EventManager} eventManager */
|
|
17
9
|
constructor(eventManager) {
|
|
@@ -23,6 +15,12 @@ shaka.test.Waiter = class {
|
|
|
23
15
|
|
|
24
16
|
/** @private {number} */
|
|
25
17
|
this.timeoutSeconds_ = 5;
|
|
18
|
+
|
|
19
|
+
/** @private {shaka.Player} */
|
|
20
|
+
this.player_ = null;
|
|
21
|
+
|
|
22
|
+
/** @private {shaka.media.MediaSourceEngine} */
|
|
23
|
+
this.mediaSourceEngine_ = null;
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
// TODO: Consider replacing this with a settings argument on the individual
|
|
@@ -51,6 +49,30 @@ shaka.test.Waiter = class {
|
|
|
51
49
|
return this;
|
|
52
50
|
}
|
|
53
51
|
|
|
52
|
+
/**
|
|
53
|
+
* For tests with access to MediaSourceEngine, this can provide better
|
|
54
|
+
* debugging for buffered ranges on failure.
|
|
55
|
+
*
|
|
56
|
+
* @param {shaka.Player} player
|
|
57
|
+
* @return {!shaka.test.Waiter}
|
|
58
|
+
*/
|
|
59
|
+
setPlayer(player) {
|
|
60
|
+
this.player_ = player;
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* For tests with access to MediaSourceEngine, this can provide better
|
|
66
|
+
* debugging for buffered ranges on failure.
|
|
67
|
+
*
|
|
68
|
+
* @param {shaka.media.MediaSourceEngine} mediaSourceEngine
|
|
69
|
+
* @return {!shaka.test.Waiter}
|
|
70
|
+
*/
|
|
71
|
+
setMediaSourceEngine(mediaSourceEngine) {
|
|
72
|
+
this.mediaSourceEngine_ = mediaSourceEngine;
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
|
|
54
76
|
/**
|
|
55
77
|
* Wait for the video playhead to move forward by some meaningful delta. The
|
|
56
78
|
* Promise is resolved when the playhead moves or the video ends.
|
|
@@ -109,7 +131,6 @@ shaka.test.Waiter = class {
|
|
|
109
131
|
return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
|
|
110
132
|
}
|
|
111
133
|
|
|
112
|
-
|
|
113
134
|
/**
|
|
114
135
|
* Wait for the video playhead to reach a certain target time.
|
|
115
136
|
* If the playhead reaches |timeGoal| or the video ends before |timeout|
|
|
@@ -132,40 +153,51 @@ shaka.test.Waiter = class {
|
|
|
132
153
|
* @return {!Promise}
|
|
133
154
|
*/
|
|
134
155
|
waitForEnd(mediaElement) {
|
|
135
|
-
// Sometimes, the ended flag is not set, or the event does not fire,
|
|
136
|
-
// (I'm looking at **you**, Safari), so also check if we've reached the
|
|
137
|
-
// duration.
|
|
138
|
-
if (mediaElement.ended ||
|
|
139
|
-
mediaElement.currentTime >= mediaElement.duration) {
|
|
140
|
-
return Promise.resolve();
|
|
141
|
-
}
|
|
142
|
-
|
|
143
156
|
// The name of what we're waiting for.
|
|
144
157
|
const goalName = 'end of media';
|
|
145
158
|
|
|
159
|
+
// The conditions for success. Don't rely on either time, or the ended
|
|
160
|
+
// flag, or the ended event, specifically. Any of these is sufficient.
|
|
161
|
+
// This flexibility cuts down on test flake on Safari (currently 14) in
|
|
162
|
+
// particular, where the flag might be set, but the ended event did not
|
|
163
|
+
// fire. We also see flake on Firefox (currently 99), where test playbacks
|
|
164
|
+
// sometimes stop right before duration is reached. (Duration 60.01, audio
|
|
165
|
+
// buffered to 60.01, video buffered to exactly 60.)
|
|
166
|
+
const hasEnded = () => {
|
|
167
|
+
return mediaElement.currentTime >= mediaElement.duration - 0.1 ||
|
|
168
|
+
mediaElement.ended;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
if (hasEnded()) {
|
|
172
|
+
return Promise.resolve();
|
|
173
|
+
}
|
|
174
|
+
|
|
146
175
|
// Cleanup on timeout.
|
|
176
|
+
let timer = null;
|
|
147
177
|
const cleanup = () => {
|
|
178
|
+
if (timer) {
|
|
179
|
+
timer.stop();
|
|
180
|
+
}
|
|
148
181
|
this.eventManager_.unlisten(mediaElement, 'timeupdate');
|
|
149
182
|
this.eventManager_.unlisten(mediaElement, 'ended');
|
|
150
183
|
};
|
|
151
184
|
|
|
152
|
-
// The conditions for success. Don't rely on either time, or the ended
|
|
153
|
-
// flag, or the ended event, specifically. Any of these is sufficient.
|
|
154
|
-
// This flexibility cuts down on test flake on Safari (currently 14) in
|
|
155
|
-
// particular, where the flag might be set, but the ended event did not
|
|
156
|
-
// fire.
|
|
157
185
|
const p = new Promise((resolve) => {
|
|
158
|
-
|
|
159
|
-
if (
|
|
160
|
-
mediaElement.ended) {
|
|
186
|
+
const check = () => {
|
|
187
|
+
if (hasEnded()) {
|
|
161
188
|
cleanup();
|
|
162
189
|
resolve();
|
|
163
190
|
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
// In Firefox 99, there appears to be some bug in the browser preventing
|
|
194
|
+
// events from being triggered at the end of the presentation. So we
|
|
195
|
+
// check for the end once per second. Without this, StreamingEngine
|
|
196
|
+
// integration tests were failing.
|
|
197
|
+
timer = new shaka.util.Timer(check);
|
|
198
|
+
timer.tickEvery(/* seconds= */ 1);
|
|
199
|
+
this.eventManager_.listen(mediaElement, 'timeupdate', check);
|
|
200
|
+
this.eventManager_.listen(mediaElement, 'ended', check);
|
|
169
201
|
});
|
|
170
202
|
|
|
171
203
|
return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
|
|
@@ -263,7 +295,7 @@ shaka.test.Waiter = class {
|
|
|
263
295
|
|
|
264
296
|
// Improve the error message with media-specific debug info.
|
|
265
297
|
if (target instanceof HTMLMediaElement) {
|
|
266
|
-
this.logDebugInfoForMedia_(error
|
|
298
|
+
this.logDebugInfoForMedia_(error, target);
|
|
267
299
|
}
|
|
268
300
|
|
|
269
301
|
// Reject or resolve based on our settings.
|
|
@@ -276,20 +308,29 @@ shaka.test.Waiter = class {
|
|
|
276
308
|
}
|
|
277
309
|
|
|
278
310
|
/**
|
|
279
|
-
* @param {
|
|
311
|
+
* @param {!Error} error
|
|
280
312
|
* @param {!HTMLMediaElement} mediaElement
|
|
281
313
|
* @private
|
|
282
314
|
*/
|
|
283
|
-
logDebugInfoForMedia_(
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
315
|
+
logDebugInfoForMedia_(error, mediaElement) {
|
|
316
|
+
let buffered;
|
|
317
|
+
if (this.player_) {
|
|
318
|
+
buffered = this.player_.getBufferedInfo();
|
|
319
|
+
} else if (this.mediaSourceEngine_) {
|
|
320
|
+
buffered = this.mediaSourceEngine_.getBufferedInfo();
|
|
321
|
+
} else {
|
|
322
|
+
buffered = shaka.media.TimeRangesUtils.getBufferedInfo(
|
|
323
|
+
mediaElement.buffered);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
error.message += '\n' +
|
|
327
|
+
`current time: ${mediaElement.currentTime}\n` +
|
|
328
|
+
`duration: ${mediaElement.duration}\n` +
|
|
329
|
+
`ready state: ${mediaElement.readyState}\n` +
|
|
330
|
+
`playback rate: ${mediaElement.playbackRate}\n` +
|
|
331
|
+
`paused: ${mediaElement.paused}\n` +
|
|
332
|
+
`ended: ${mediaElement.ended}\n` +
|
|
333
|
+
`buffered: ${JSON.stringify(buffered)}\n`;
|
|
334
|
+
shaka.log.error(error.message);
|
|
294
335
|
}
|
|
295
336
|
};
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.VttTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('Cue', () => {
|
|
12
8
|
// This integration test checks platform support for various cue scenarios
|
|
13
9
|
// that have caused platform-specific issues. The unit tests for each parser
|
|
@@ -23,7 +19,7 @@ describe('Cue', () => {
|
|
|
23
19
|
'WEBVTT\n\n' +
|
|
24
20
|
'00:00:20.000 --> 00:00:40.000\n' +
|
|
25
21
|
'Test',
|
|
26
|
-
{periodStart: 7, segmentStart: 10, segmentEnd: 60});
|
|
22
|
+
{periodStart: 7, segmentStart: 10, segmentEnd: 60, vttOffset: 7});
|
|
27
23
|
expect(cues.length).toBe(1);
|
|
28
24
|
expect(cues[0].startTime).toBe(27);
|
|
29
25
|
expect(cues[0].endTime).toBe(47);
|
|
@@ -38,7 +34,7 @@ describe('Cue', () => {
|
|
|
38
34
|
'ID1\n' +
|
|
39
35
|
'00:00:20.000 --> 00:00:40.000 align:middle size:56% vertical:lr\n' +
|
|
40
36
|
'Test',
|
|
41
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
37
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
42
38
|
expect(cues.length).toBe(1);
|
|
43
39
|
});
|
|
44
40
|
|
|
@@ -4,15 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.LrcTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('LrcTextParser', () => {
|
|
12
8
|
it('supports no cues', () => {
|
|
13
9
|
verifyHelper([],
|
|
14
10
|
'',
|
|
15
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
11
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
16
12
|
});
|
|
17
13
|
|
|
18
14
|
it('handles a blank line at the start of the file', () => {
|
|
@@ -22,7 +18,7 @@ describe('LrcTextParser', () => {
|
|
|
22
18
|
],
|
|
23
19
|
'\n\n' +
|
|
24
20
|
'[00:00.00]Test',
|
|
25
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
21
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
26
22
|
});
|
|
27
23
|
|
|
28
24
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -32,7 +28,7 @@ describe('LrcTextParser', () => {
|
|
|
32
28
|
],
|
|
33
29
|
'[00:00.00]Test' +
|
|
34
30
|
'\n\n',
|
|
35
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
31
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
36
32
|
});
|
|
37
33
|
|
|
38
34
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -41,8 +37,7 @@ describe('LrcTextParser', () => {
|
|
|
41
37
|
{startTime: 0, endTime: 2, payload: 'Test'},
|
|
42
38
|
],
|
|
43
39
|
'[00:00.00]Test',
|
|
44
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
45
|
-
});
|
|
40
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
46
41
|
});
|
|
47
42
|
|
|
48
43
|
it('supports multiple cues', () => {
|
|
@@ -55,7 +50,7 @@ describe('LrcTextParser', () => {
|
|
|
55
50
|
'[00:00.00]Test\n' +
|
|
56
51
|
'[00:10.00]Test2\n' +
|
|
57
52
|
'[00:20.00]Test3',
|
|
58
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
53
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
59
54
|
});
|
|
60
55
|
|
|
61
56
|
it('supports different time formats', () => {
|
|
@@ -74,7 +69,7 @@ describe('LrcTextParser', () => {
|
|
|
74
69
|
'[00:30,1]Test4\n' +
|
|
75
70
|
'[00:40,001]Test5\n' +
|
|
76
71
|
'[00:50,02]Test6',
|
|
77
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
72
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
78
73
|
});
|
|
79
74
|
|
|
80
75
|
/**
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.test.TtmlUtils');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
goog.require('shaka.text.Mp4TtmlParser');
|
|
10
|
-
goog.require('shaka.util.BufferUtils');
|
|
11
|
-
goog.require('shaka.util.Error');
|
|
12
|
-
|
|
13
7
|
describe('Mp4TtmlParser', () => {
|
|
14
8
|
const ttmlInitSegmentUri = '/base/test/test/assets/ttml-init.mp4';
|
|
15
9
|
const ttmlSegmentUri = '/base/test/test/assets/ttml-segment.mp4';
|
|
@@ -47,7 +41,7 @@ describe('Mp4TtmlParser', () => {
|
|
|
47
41
|
it('handles media segments with multiple mdats', () => {
|
|
48
42
|
const parser = new shaka.text.Mp4TtmlParser();
|
|
49
43
|
parser.parseInit(ttmlInitSegment);
|
|
50
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
44
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
51
45
|
const ret = parser.parseMedia(ttmlSegmentMultipleMDAT, time);
|
|
52
46
|
// Bodies.
|
|
53
47
|
expect(ret.length).toBe(2);
|
|
@@ -60,8 +54,10 @@ describe('Mp4TtmlParser', () => {
|
|
|
60
54
|
});
|
|
61
55
|
|
|
62
56
|
it('accounts for offset', () => {
|
|
63
|
-
const time1 =
|
|
64
|
-
|
|
57
|
+
const time1 =
|
|
58
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
59
|
+
const time2 =
|
|
60
|
+
{periodStart: 7, segmentStart: 0, segmentEnd: 0, vttOffset: 7};
|
|
65
61
|
|
|
66
62
|
const parser = new shaka.text.Mp4TtmlParser();
|
|
67
63
|
parser.parseInit(ttmlInitSegment);
|
|
@@ -165,7 +161,7 @@ describe('Mp4TtmlParser', () => {
|
|
|
165
161
|
];
|
|
166
162
|
const parser = new shaka.text.Mp4TtmlParser();
|
|
167
163
|
parser.parseInit(ttmlInitSegment);
|
|
168
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
164
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
169
165
|
const result = parser.parseMedia(ttmlSegment, time);
|
|
170
166
|
shaka.test.TtmlUtils.verifyHelper(
|
|
171
167
|
cues, result, {startTime: 23, endTime: 53.5});
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.test.Util');
|
|
8
|
-
goog.require('shaka.text.Cue');
|
|
9
|
-
goog.require('shaka.text.Mp4VttParser');
|
|
10
|
-
goog.require('shaka.util.BufferUtils');
|
|
11
|
-
goog.require('shaka.util.Error');
|
|
12
|
-
|
|
13
7
|
describe('Mp4VttParser', () => {
|
|
14
8
|
const vttInitSegmentUri = '/base/test/test/assets/vtt-init.mp4';
|
|
15
9
|
const vttSegmentUri = '/base/test/test/assets/vtt-segment.mp4';
|
|
@@ -71,7 +65,7 @@ describe('Mp4VttParser', () => {
|
|
|
71
65
|
|
|
72
66
|
const parser = new shaka.text.Mp4VttParser();
|
|
73
67
|
parser.parseInit(vttInitSegment);
|
|
74
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
68
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
75
69
|
const result = parser.parseMedia(vttSegment, time);
|
|
76
70
|
verifyHelper(cues, result);
|
|
77
71
|
});
|
|
@@ -99,7 +93,7 @@ describe('Mp4VttParser', () => {
|
|
|
99
93
|
|
|
100
94
|
const parser = new shaka.text.Mp4VttParser();
|
|
101
95
|
parser.parseInit(vttInitSegment);
|
|
102
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
96
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
103
97
|
const result = parser.parseMedia(vttSegmentMultiPayload, time);
|
|
104
98
|
verifyHelper(cues, result);
|
|
105
99
|
});
|
|
@@ -127,13 +121,13 @@ describe('Mp4VttParser', () => {
|
|
|
127
121
|
|
|
128
122
|
const parser = new shaka.text.Mp4VttParser();
|
|
129
123
|
parser.parseInit(vttInitSegment);
|
|
130
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
124
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
131
125
|
const result = parser.parseMedia(vttSegSettings, time);
|
|
132
126
|
verifyHelper(cues, result);
|
|
133
127
|
});
|
|
134
128
|
|
|
135
129
|
it('parses media segments without a sample duration', () => {
|
|
136
|
-
// Regression test for https://github.com/
|
|
130
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/919
|
|
137
131
|
const cues = [
|
|
138
132
|
{startTime: 10, endTime: 11, payload: 'cue 10'},
|
|
139
133
|
{startTime: 11, endTime: 12, payload: 'cue 11'},
|
|
@@ -149,7 +143,7 @@ describe('Mp4VttParser', () => {
|
|
|
149
143
|
|
|
150
144
|
const parser = new shaka.text.Mp4VttParser();
|
|
151
145
|
parser.parseInit(vttInitSegment);
|
|
152
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
146
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
153
147
|
const result = parser.parseMedia(vttSegNoDuration, time);
|
|
154
148
|
verifyHelper(cues, result);
|
|
155
149
|
});
|
|
@@ -171,7 +165,8 @@ describe('Mp4VttParser', () => {
|
|
|
171
165
|
|
|
172
166
|
const parser = new shaka.text.Mp4VttParser();
|
|
173
167
|
parser.parseInit(vttInitSegment);
|
|
174
|
-
const time =
|
|
168
|
+
const time =
|
|
169
|
+
{periodStart: 10, segmentStart: 0, segmentEnd: 0, vttOffset: 10};
|
|
175
170
|
const result = parser.parseMedia(vttSegment, time);
|
|
176
171
|
verifyHelper(cues, result);
|
|
177
172
|
});
|
|
@@ -4,15 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.SbvTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('SbvTextParser', () => {
|
|
12
8
|
it('supports no cues', () => {
|
|
13
9
|
verifyHelper([],
|
|
14
10
|
'',
|
|
15
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
11
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
16
12
|
});
|
|
17
13
|
|
|
18
14
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -22,7 +18,7 @@ describe('SbvTextParser', () => {
|
|
|
22
18
|
],
|
|
23
19
|
'0:00:20.000,0:00:40.000\n' +
|
|
24
20
|
'Test\n\n',
|
|
25
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
21
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
26
22
|
});
|
|
27
23
|
|
|
28
24
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -32,8 +28,7 @@ describe('SbvTextParser', () => {
|
|
|
32
28
|
],
|
|
33
29
|
'0:00:20.000,0:00:40.000\n' +
|
|
34
30
|
'Test\n',
|
|
35
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
36
|
-
});
|
|
31
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
37
32
|
});
|
|
38
33
|
|
|
39
34
|
it('handles no newline after the final text payload', () => {
|
|
@@ -43,7 +38,7 @@ describe('SbvTextParser', () => {
|
|
|
43
38
|
],
|
|
44
39
|
'0:00:20.000,0:00:40.000\n' +
|
|
45
40
|
'Test',
|
|
46
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
41
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
47
42
|
});
|
|
48
43
|
|
|
49
44
|
it('supports multiple cues', () => {
|
|
@@ -56,7 +51,7 @@ describe('SbvTextParser', () => {
|
|
|
56
51
|
'Test\n\n' +
|
|
57
52
|
'0:00:40.000,0:00:50.000\n' +
|
|
58
53
|
'Test2',
|
|
59
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
54
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
60
55
|
});
|
|
61
56
|
|
|
62
57
|
/**
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('shaka.test.FakeVideo');
|
|
9
|
-
goog.require('shaka.text.Cue');
|
|
10
|
-
goog.require('shaka.text.SimpleTextDisplayer');
|
|
11
|
-
goog.require('shaka.util.Functional');
|
|
12
|
-
goog.requireType('shaka.test.FakeTextTrack');
|
|
13
|
-
|
|
14
7
|
describe('SimpleTextDisplayer', () => {
|
|
15
8
|
const originalVTTCue = window.VTTCue;
|
|
16
9
|
const Cue = shaka.text.Cue;
|
|
@@ -74,7 +67,7 @@ describe('SimpleTextDisplayer', () => {
|
|
|
74
67
|
});
|
|
75
68
|
|
|
76
69
|
it('appends equal time cues in reverse order', () => {
|
|
77
|
-
// Regression test for https://github.com/
|
|
70
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/848
|
|
78
71
|
|
|
79
72
|
// When VTTCue is seen as the real thing (because of the presence of
|
|
80
73
|
// VTTCue.prototype.line), then the reverse-order behavior comes into
|
|
@@ -4,15 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.SrtTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('SrtTextParser', () => {
|
|
12
8
|
it('supports no cues', () => {
|
|
13
9
|
verifyHelper([],
|
|
14
10
|
'',
|
|
15
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
11
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
16
12
|
});
|
|
17
13
|
|
|
18
14
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -23,7 +19,7 @@ describe('SrtTextParser', () => {
|
|
|
23
19
|
'1\n' +
|
|
24
20
|
'00:00:20,000 --> 00:00:40,000\n' +
|
|
25
21
|
'Test\n\n',
|
|
26
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
22
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
27
23
|
});
|
|
28
24
|
|
|
29
25
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -34,8 +30,7 @@ describe('SrtTextParser', () => {
|
|
|
34
30
|
'1\n' +
|
|
35
31
|
'00:00:20,000 --> 00:00:40,000\n' +
|
|
36
32
|
'Test\n',
|
|
37
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
38
|
-
});
|
|
33
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
39
34
|
});
|
|
40
35
|
|
|
41
36
|
it('handles no newline after the final text payload', () => {
|
|
@@ -46,7 +41,7 @@ describe('SrtTextParser', () => {
|
|
|
46
41
|
'1\n' +
|
|
47
42
|
'00:00:20,000 --> 00:00:40,000\n' +
|
|
48
43
|
'Test',
|
|
49
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
44
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
50
45
|
});
|
|
51
46
|
|
|
52
47
|
it('supports multiple cues', () => {
|
|
@@ -61,7 +56,7 @@ describe('SrtTextParser', () => {
|
|
|
61
56
|
'2\n' +
|
|
62
57
|
'00:00:40,000 --> 00:00:50,000\n' +
|
|
63
58
|
'Test2',
|
|
64
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
59
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
65
60
|
});
|
|
66
61
|
|
|
67
62
|
/**
|