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
|
@@ -4,15 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.log');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
goog.require('shaka.text.Cue');
|
|
10
|
-
goog.require('shaka.text.CueRegion');
|
|
11
|
-
goog.require('shaka.text.VttTextParser');
|
|
12
|
-
goog.require('shaka.util.BufferUtils');
|
|
13
|
-
goog.require('shaka.util.Error');
|
|
14
|
-
goog.require('shaka.util.StringUtils');
|
|
15
|
-
|
|
16
7
|
describe('VttTextParser', () => {
|
|
17
8
|
const Cue = shaka.text.Cue;
|
|
18
9
|
const CueRegion = shaka.text.CueRegion;
|
|
@@ -34,13 +25,13 @@ describe('VttTextParser', () => {
|
|
|
34
25
|
it('supports no cues', () => {
|
|
35
26
|
verifyHelper([],
|
|
36
27
|
'WEBVTT',
|
|
37
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
28
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
38
29
|
});
|
|
39
30
|
|
|
40
31
|
it('supports initial comments', () => {
|
|
41
32
|
verifyHelper([],
|
|
42
33
|
'WEBVTT - Comments',
|
|
43
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
34
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
44
35
|
});
|
|
45
36
|
|
|
46
37
|
it('supports comment blocks', () => {
|
|
@@ -48,7 +39,7 @@ describe('VttTextParser', () => {
|
|
|
48
39
|
'WEBVTT\n\n' +
|
|
49
40
|
'NOTE\n' +
|
|
50
41
|
'This is a comment block',
|
|
51
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
42
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
52
43
|
});
|
|
53
44
|
|
|
54
45
|
it('supports comment blocks with inital comment', () => {
|
|
@@ -56,7 +47,7 @@ describe('VttTextParser', () => {
|
|
|
56
47
|
'WEBVTT\n\n' +
|
|
57
48
|
'NOTE - A header comment\n' +
|
|
58
49
|
'This is a comment block',
|
|
59
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
50
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
60
51
|
});
|
|
61
52
|
|
|
62
53
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -67,7 +58,7 @@ describe('VttTextParser', () => {
|
|
|
67
58
|
'WEBVTT\n\n' +
|
|
68
59
|
'00:00:20.000 --> 00:00:40.000\n' +
|
|
69
60
|
'Test\n\n',
|
|
70
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
61
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
71
62
|
});
|
|
72
63
|
|
|
73
64
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -78,8 +69,7 @@ describe('VttTextParser', () => {
|
|
|
78
69
|
'WEBVTT\n\n' +
|
|
79
70
|
'00:00:20.000 --> 00:00:40.000\n' +
|
|
80
71
|
'Test\n',
|
|
81
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
82
|
-
});
|
|
72
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
83
73
|
});
|
|
84
74
|
|
|
85
75
|
it('handles no newline after the final text payload', () => {
|
|
@@ -90,7 +80,7 @@ describe('VttTextParser', () => {
|
|
|
90
80
|
'WEBVTT\n\n' +
|
|
91
81
|
'00:00:20.000 --> 00:00:40.000\n' +
|
|
92
82
|
'Test',
|
|
93
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
83
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
94
84
|
});
|
|
95
85
|
|
|
96
86
|
it('supports cues with no settings', () => {
|
|
@@ -106,7 +96,7 @@ describe('VttTextParser', () => {
|
|
|
106
96
|
'2\n' +
|
|
107
97
|
'00:00:40.000 --> 00:00:50.000\n' +
|
|
108
98
|
'Test2',
|
|
109
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
99
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
110
100
|
});
|
|
111
101
|
|
|
112
102
|
it('supports cues with no ID', () => {
|
|
@@ -120,7 +110,7 @@ describe('VttTextParser', () => {
|
|
|
120
110
|
'Test\n\n' +
|
|
121
111
|
'00:00:40.000 --> 00:00:50.000\n' +
|
|
122
112
|
'Test2',
|
|
123
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
113
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
124
114
|
});
|
|
125
115
|
|
|
126
116
|
it('supports comments within cues', () => {
|
|
@@ -136,7 +126,7 @@ describe('VttTextParser', () => {
|
|
|
136
126
|
'This is a note\n\n' +
|
|
137
127
|
'00:00:40.000 --> 00:00:50.000\n' +
|
|
138
128
|
'Test2',
|
|
139
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
129
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
140
130
|
});
|
|
141
131
|
|
|
142
132
|
it('supports non-integer timecodes', () => {
|
|
@@ -147,7 +137,7 @@ describe('VttTextParser', () => {
|
|
|
147
137
|
'WEBVTT\n\n' +
|
|
148
138
|
'00:00:20.100 --> 00:00:40.505\n' +
|
|
149
139
|
'Test',
|
|
150
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
140
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
151
141
|
});
|
|
152
142
|
|
|
153
143
|
it('supports large timecodes', () => {
|
|
@@ -158,50 +148,50 @@ describe('VttTextParser', () => {
|
|
|
158
148
|
'WEBVTT\n\n' +
|
|
159
149
|
'00:00:20.000 --> 30:00:00.000\n' +
|
|
160
150
|
'Test',
|
|
161
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
151
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
162
152
|
});
|
|
163
153
|
|
|
164
154
|
it('requires header', () => {
|
|
165
155
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_HEADER,
|
|
166
156
|
'',
|
|
167
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
157
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
168
158
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_HEADER,
|
|
169
159
|
'00:00:00.000 --> 00:00:00.020\nTest',
|
|
170
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
160
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
171
161
|
});
|
|
172
162
|
|
|
173
163
|
it('rejects invalid time values', () => {
|
|
174
164
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
175
165
|
'WEBVTT\n\n00.020 --> 0:00.040\nTest',
|
|
176
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
166
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
177
167
|
anyString);
|
|
178
168
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
179
169
|
'WEBVTT\n\n0:00.020 --> 0:00.040\nTest',
|
|
180
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
170
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
181
171
|
anyString);
|
|
182
172
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
183
173
|
'WEBVTT\n\n00:00.20 --> 0:00.040\nTest',
|
|
184
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
174
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
185
175
|
anyString);
|
|
186
176
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
187
177
|
'WEBVTT\n\n00:100.20 --> 0:00.040\nTest',
|
|
188
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
178
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
189
179
|
anyString);
|
|
190
180
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
191
181
|
'WEBVTT\n\n00:00.020 --> 0:00.040\nTest',
|
|
192
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
182
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
193
183
|
anyString);
|
|
194
184
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
195
185
|
'WEBVTT\n\n00:00:00:00.020 --> 0:00.040\nTest',
|
|
196
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
186
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
197
187
|
anyString);
|
|
198
188
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
199
189
|
'WEBVTT\n\n00:61.020 --> 0:00.040\nTest',
|
|
200
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
190
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
201
191
|
anyString);
|
|
202
192
|
errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
203
193
|
'WEBVTT\n\n61:00.020 --> 0:00.040\nTest',
|
|
204
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
194
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0},
|
|
205
195
|
anyString);
|
|
206
196
|
});
|
|
207
197
|
|
|
@@ -226,7 +216,7 @@ describe('VttTextParser', () => {
|
|
|
226
216
|
'Test\n\n' +
|
|
227
217
|
'00:00:40.000 --> 00:00:50.000 vertical:lr\n' +
|
|
228
218
|
'Test2',
|
|
229
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
219
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
230
220
|
});
|
|
231
221
|
|
|
232
222
|
it('supports line setting', () => {
|
|
@@ -258,7 +248,7 @@ describe('VttTextParser', () => {
|
|
|
258
248
|
'Test3\n\n' +
|
|
259
249
|
'00:00:55.000 --> 00:01:05.000 line:12.3%\n' +
|
|
260
250
|
'Test4\n\n',
|
|
261
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
251
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
262
252
|
});
|
|
263
253
|
|
|
264
254
|
it('supports line setting with optional part', () => {
|
|
@@ -280,7 +270,7 @@ describe('VttTextParser', () => {
|
|
|
280
270
|
'Test\n\n' +
|
|
281
271
|
'00:00:40.000 --> 00:00:50.000 line:-1,center\n' +
|
|
282
272
|
'Test2',
|
|
283
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
273
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
284
274
|
});
|
|
285
275
|
|
|
286
276
|
it('supports position setting', () => {
|
|
@@ -294,7 +284,7 @@ describe('VttTextParser', () => {
|
|
|
294
284
|
'Test\n\n' +
|
|
295
285
|
'00:00:25.000 --> 00:00:45.000 position:12.3%\n' +
|
|
296
286
|
'Test2\n\n',
|
|
297
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
287
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
298
288
|
});
|
|
299
289
|
|
|
300
290
|
it('supports position setting with optional part', () => {
|
|
@@ -314,7 +304,7 @@ describe('VttTextParser', () => {
|
|
|
314
304
|
'Test\n\n' +
|
|
315
305
|
'00:00:20.000 --> 00:00:40.000 position:45%,start\n' +
|
|
316
306
|
'Test2',
|
|
317
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
307
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
318
308
|
});
|
|
319
309
|
|
|
320
310
|
it('supports size setting', () => {
|
|
@@ -328,7 +318,7 @@ describe('VttTextParser', () => {
|
|
|
328
318
|
'Test\n\n' +
|
|
329
319
|
'00:00:25.000 --> 00:00:45.000 size:12.3%\n' +
|
|
330
320
|
'Test2\n\n',
|
|
331
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
321
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
332
322
|
});
|
|
333
323
|
|
|
334
324
|
it('supports align setting', () => {
|
|
@@ -339,7 +329,7 @@ describe('VttTextParser', () => {
|
|
|
339
329
|
'WEBVTT\n\n' +
|
|
340
330
|
'00:00:20.000 --> 00:00:40.000 align:center\n' +
|
|
341
331
|
'Test',
|
|
342
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
332
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
343
333
|
});
|
|
344
334
|
|
|
345
335
|
it('supports multiple settings', () => {
|
|
@@ -357,7 +347,7 @@ describe('VttTextParser', () => {
|
|
|
357
347
|
'WEBVTT\n\n' +
|
|
358
348
|
'00:00:20.000 --> 00:00:40.000 align:center size:56% vertical:lr\n' +
|
|
359
349
|
'Test',
|
|
360
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
350
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
361
351
|
});
|
|
362
352
|
|
|
363
353
|
it('supports timestamps with one-digit hour at start time', () => {
|
|
@@ -375,7 +365,7 @@ describe('VttTextParser', () => {
|
|
|
375
365
|
'WEBVTT\n\n' +
|
|
376
366
|
'0:00:20.000 --> 00:00:40.000 align:center size:56% vertical:lr\n' +
|
|
377
367
|
'Test',
|
|
378
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
368
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
379
369
|
});
|
|
380
370
|
|
|
381
371
|
it('supports timestamps with one-digit hour at end time', () => {
|
|
@@ -393,7 +383,7 @@ describe('VttTextParser', () => {
|
|
|
393
383
|
'WEBVTT\n\n' +
|
|
394
384
|
'00:00:20.000 --> 0:00:40.000 align:center size:56% vertical:lr\n' +
|
|
395
385
|
'Test',
|
|
396
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
386
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
397
387
|
});
|
|
398
388
|
|
|
399
389
|
it('supports stamps with one-digit hours at start & end time', () => {
|
|
@@ -411,15 +401,15 @@ describe('VttTextParser', () => {
|
|
|
411
401
|
'WEBVTT\n\n' +
|
|
412
402
|
'0:00:20.000 --> 0:00:40.000 align:center size:56% vertical:lr\n' +
|
|
413
403
|
'Test',
|
|
414
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
404
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
415
405
|
});
|
|
416
406
|
|
|
417
|
-
it('uses time offset from
|
|
407
|
+
it('uses time offset from vttOffset, not periodStart or segmentStart', () => {
|
|
418
408
|
verifyHelper(
|
|
419
409
|
[
|
|
420
410
|
{
|
|
421
|
-
startTime:
|
|
422
|
-
endTime:
|
|
411
|
+
startTime: 50,
|
|
412
|
+
endTime: 60,
|
|
423
413
|
payload: 'Test',
|
|
424
414
|
textAlign: 'center',
|
|
425
415
|
size: 56,
|
|
@@ -429,10 +419,9 @@ describe('VttTextParser', () => {
|
|
|
429
419
|
'WEBVTT\n\n' +
|
|
430
420
|
'0:00:10.000 --> 0:00:20.000 align:center size:56% vertical:lr\n' +
|
|
431
421
|
'Test',
|
|
432
|
-
{periodStart: 60, segmentStart: 80, segmentEnd: 100});
|
|
422
|
+
{periodStart: 60, segmentStart: 80, segmentEnd: 100, vttOffset: 40});
|
|
433
423
|
});
|
|
434
424
|
|
|
435
|
-
|
|
436
425
|
it('parses VTTRegions', () => {
|
|
437
426
|
verifyHelper(
|
|
438
427
|
[
|
|
@@ -460,7 +449,7 @@ describe('VttTextParser', () => {
|
|
|
460
449
|
'viewportanchor=10%,90% scroll=up\n\n' +
|
|
461
450
|
'0:00:20.000 --> 0:00:40.000 region:reg1\n' +
|
|
462
451
|
'Test',
|
|
463
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
452
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
464
453
|
});
|
|
465
454
|
|
|
466
455
|
it('ignores and logs invalid settings', () => {
|
|
@@ -473,7 +462,7 @@ describe('VttTextParser', () => {
|
|
|
473
462
|
'WEBVTT\n\n' +
|
|
474
463
|
'00:00:20.000 --> 00:00:40.000 vertical:es\n' +
|
|
475
464
|
'Test\n\n',
|
|
476
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
465
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
477
466
|
|
|
478
467
|
verifyHelper(
|
|
479
468
|
[
|
|
@@ -482,7 +471,7 @@ describe('VttTextParser', () => {
|
|
|
482
471
|
'WEBVTT\n\n' +
|
|
483
472
|
'00:00:20.000 --> 00:00:40.000 vertical:\n' +
|
|
484
473
|
'Test\n\n',
|
|
485
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
474
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
486
475
|
|
|
487
476
|
verifyHelper(
|
|
488
477
|
[
|
|
@@ -491,7 +480,7 @@ describe('VttTextParser', () => {
|
|
|
491
480
|
'WEBVTT\n\n' +
|
|
492
481
|
'00:00:20.000 --> 00:00:40.000 vertical\n' +
|
|
493
482
|
'Test\n\n',
|
|
494
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
483
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
495
484
|
|
|
496
485
|
verifyHelper(
|
|
497
486
|
[
|
|
@@ -500,7 +489,7 @@ describe('VttTextParser', () => {
|
|
|
500
489
|
'WEBVTT\n\n' +
|
|
501
490
|
'00:00:20.000 --> 00:00:40.000 line:-3%\n' +
|
|
502
491
|
'Test\n\n',
|
|
503
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
492
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
504
493
|
|
|
505
494
|
verifyHelper(
|
|
506
495
|
[
|
|
@@ -509,7 +498,7 @@ describe('VttTextParser', () => {
|
|
|
509
498
|
'WEBVTT\n\n' +
|
|
510
499
|
'00:00:20.000 --> 00:00:40.000 line:45%%\n' +
|
|
511
500
|
'Test\n\n',
|
|
512
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
501
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
513
502
|
|
|
514
503
|
verifyHelper(
|
|
515
504
|
[
|
|
@@ -518,7 +507,7 @@ describe('VttTextParser', () => {
|
|
|
518
507
|
'WEBVTT\n\n' +
|
|
519
508
|
'00:00:20.000 --> 00:00:40.000 align:10\n' +
|
|
520
509
|
'Test\n\n',
|
|
521
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
510
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
522
511
|
|
|
523
512
|
verifyHelper(
|
|
524
513
|
[
|
|
@@ -527,7 +516,7 @@ describe('VttTextParser', () => {
|
|
|
527
516
|
'WEBVTT\n\n' +
|
|
528
517
|
'00:00:20.000 --> 00:00:40.000 align:foo\n' +
|
|
529
518
|
'Test\n\n',
|
|
530
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
519
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
531
520
|
|
|
532
521
|
expect(logWarningSpy).toHaveBeenCalledTimes(7);
|
|
533
522
|
});
|
|
@@ -546,7 +535,7 @@ describe('VttTextParser', () => {
|
|
|
546
535
|
'Test\n\n' +
|
|
547
536
|
'00:00:40.000 --> 00:00:50.000 line:-1\n' +
|
|
548
537
|
'Test2',
|
|
549
|
-
{periodStart: 0, segmentStart: 25, segmentEnd: 65});
|
|
538
|
+
{periodStart: 0, segmentStart: 25, segmentEnd: 65, vttOffset: 0});
|
|
550
539
|
});
|
|
551
540
|
|
|
552
541
|
it('handles timestamp rollover with X-TIMESTAMP-MAP header', () => {
|
|
@@ -562,7 +551,7 @@ describe('VttTextParser', () => {
|
|
|
562
551
|
'Test',
|
|
563
552
|
// Non-null segmentStart takes precedence over X-TIMESTAMP-MAP.
|
|
564
553
|
// This protects us from rollover in the MPEGTS field.
|
|
565
|
-
{periodStart: 0, segmentStart: 95440, segmentEnd: 95550});
|
|
554
|
+
{periodStart: 0, segmentStart: 95440, segmentEnd: 95550, vttOffset: 0});
|
|
566
555
|
|
|
567
556
|
verifyHelper(
|
|
568
557
|
[
|
|
@@ -575,7 +564,7 @@ describe('VttTextParser', () => {
|
|
|
575
564
|
'X-TIMESTAMP-MAP=MPEGTS:9745408,LOCAL:00:00:00.000\n\n' +
|
|
576
565
|
'00:00:00.000 --> 00:00:02.000 line:0\n' +
|
|
577
566
|
'Test2',
|
|
578
|
-
{periodStart: 0, segmentStart: 95550, segmentEnd: 95560});
|
|
567
|
+
{periodStart: 0, segmentStart: 95550, segmentEnd: 95560, vttOffset: 0});
|
|
579
568
|
});
|
|
580
569
|
|
|
581
570
|
it('supports global style blocks', () => {
|
|
@@ -606,7 +595,7 @@ describe('VttTextParser', () => {
|
|
|
606
595
|
'Test\n\n' +
|
|
607
596
|
'00:00:40.000 --> 00:00:50.000\n' +
|
|
608
597
|
'Test2',
|
|
609
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
598
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
610
599
|
});
|
|
611
600
|
|
|
612
601
|
it('supports global style blocks without blank lines', () => {
|
|
@@ -634,7 +623,7 @@ describe('VttTextParser', () => {
|
|
|
634
623
|
'Test\n\n' +
|
|
635
624
|
'00:00:40.000 --> 00:00:50.000\n' +
|
|
636
625
|
'Test2',
|
|
637
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
626
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
638
627
|
});
|
|
639
628
|
|
|
640
629
|
it('supports payload stylized', () => {
|
|
@@ -775,7 +764,7 @@ describe('VttTextParser', () => {
|
|
|
775
764
|
'<b>Test <i>7</i></b>\n\n' +
|
|
776
765
|
'00:01:30.000 --> 00:01:40.000\n' +
|
|
777
766
|
'<b>Test<i>8</b>',
|
|
778
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
767
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
779
768
|
});
|
|
780
769
|
|
|
781
770
|
it('supports specific style blocks', () => {
|
|
@@ -803,7 +792,7 @@ describe('VttTextParser', () => {
|
|
|
803
792
|
'<b>Test</b>\n\n' +
|
|
804
793
|
'00:00:40.000 --> 00:00:50.000\n' +
|
|
805
794
|
'Test2',
|
|
806
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
795
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
807
796
|
});
|
|
808
797
|
|
|
809
798
|
it('supports only two digits in the timestamp', () => {
|
|
@@ -814,7 +803,7 @@ describe('VttTextParser', () => {
|
|
|
814
803
|
'WEBVTT\n\n' +
|
|
815
804
|
'00:00:20.00 --> 00:00:40.00\n' +
|
|
816
805
|
'Test',
|
|
817
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
806
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
818
807
|
});
|
|
819
808
|
|
|
820
809
|
it('supports class with default color', () => {
|
|
@@ -956,7 +945,7 @@ describe('VttTextParser', () => {
|
|
|
956
945
|
'<c.lime>forward slash 1/2 in text</c>\n\n' +
|
|
957
946
|
'00:01:50.000 --> 00:02:00.000\n' +
|
|
958
947
|
'<c.lime>less or more < > in text</c>',
|
|
959
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
948
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
960
949
|
});
|
|
961
950
|
|
|
962
951
|
it('supports default color overriding', () => {
|
|
@@ -982,7 +971,7 @@ describe('VttTextParser', () => {
|
|
|
982
971
|
'::cue(bg_blue) { font-size: 10px; background-color: #FF0 }\n\n' +
|
|
983
972
|
'00:00:10.000 --> 00:00:20.000\n' +
|
|
984
973
|
'<c.red.bg_blue>Example 1</c>\n\n',
|
|
985
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
974
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
986
975
|
});
|
|
987
976
|
|
|
988
977
|
/**
|
package/test/ui/ad_ui_unit.js
CHANGED
|
@@ -4,17 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.Player');
|
|
8
|
-
goog.require('shaka.ads.AdManager');
|
|
9
|
-
goog.require('shaka.test.FakeAd');
|
|
10
|
-
goog.require('shaka.test.FakeAdManager');
|
|
11
|
-
goog.require('shaka.test.UiUtils');
|
|
12
|
-
goog.require('shaka.test.Util');
|
|
13
|
-
goog.require('shaka.test.Waiter');
|
|
14
|
-
goog.require('shaka.ui.Locales');
|
|
15
|
-
goog.require('shaka.util.EventManager');
|
|
16
|
-
goog.requireType('shaka.ui.Localization');
|
|
17
|
-
|
|
18
7
|
describe('Ad UI', () => {
|
|
19
8
|
const UiUtils = shaka.test.UiUtils;
|
|
20
9
|
/** @type {!HTMLLinkElement} */
|
|
@@ -4,17 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.Player');
|
|
8
|
-
goog.require('shaka.test.FakeVideo');
|
|
9
|
-
goog.require('shaka.test.UiUtils');
|
|
10
|
-
goog.require('shaka.test.Util');
|
|
11
|
-
goog.require('shaka.test.Waiter');
|
|
12
|
-
goog.require('shaka.text.Cue');
|
|
13
|
-
goog.require('shaka.text.SimpleTextDisplayer');
|
|
14
|
-
goog.require('shaka.text.UITextDisplayer');
|
|
15
|
-
goog.require('shaka.ui.Overlay');
|
|
16
|
-
goog.require('shaka.util.EventManager');
|
|
17
|
-
|
|
18
7
|
// TODO: Move this suite to the text/ folder where it belongs
|
|
19
8
|
const supportsScreenshots = () => shaka.test.Util.supportsScreenshots();
|
|
20
9
|
filterDescribe('TextDisplayer layout', supportsScreenshots, () => {
|
|
@@ -416,7 +405,7 @@ filterDescribe('TextDisplayer layout', supportsScreenshots, () => {
|
|
|
416
405
|
await checkScreenshot(prefix, 'flat-cue-bg');
|
|
417
406
|
});
|
|
418
407
|
|
|
419
|
-
// https://github.com/
|
|
408
|
+
// https://github.com/shaka-project/shaka-player/issues/2761
|
|
420
409
|
it('deeply-nested cues', async () => {
|
|
421
410
|
const makeCue = (text, fg = '', bg = '', nestedCues = []) => {
|
|
422
411
|
const cue = new shaka.text.Cue(0, 1, text);
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.asserts');
|
|
8
|
-
goog.require('shaka.test.UiUtils');
|
|
9
|
-
goog.require('shaka.test.Waiter');
|
|
10
|
-
goog.require('shaka.util.EventManager');
|
|
11
|
-
goog.requireType('shaka.ui.Overlay');
|
|
12
|
-
|
|
13
7
|
describe('UI Customization', () => {
|
|
14
8
|
const UiUtils = shaka.test.UiUtils;
|
|
15
9
|
/** @type {!HTMLLinkElement} */
|
|
@@ -4,22 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.asserts');
|
|
8
|
-
goog.require('mozilla.LanguageMapping');
|
|
9
|
-
goog.require('shaka.test.Loader');
|
|
10
|
-
goog.require('shaka.test.TestScheme');
|
|
11
|
-
goog.require('shaka.test.UiUtils');
|
|
12
|
-
goog.require('shaka.test.Util');
|
|
13
|
-
goog.require('shaka.test.Waiter');
|
|
14
|
-
goog.require('shaka.ui.Element');
|
|
15
|
-
goog.require('shaka.util.Dom');
|
|
16
|
-
goog.require('shaka.util.EventManager');
|
|
17
|
-
goog.require('shaka.util.Iterables');
|
|
18
|
-
goog.requireType('shaka.Player');
|
|
19
|
-
goog.requireType('shaka.ui.Controls');
|
|
20
|
-
goog.requireType('shaka.ui.Overlay');
|
|
21
|
-
|
|
22
|
-
|
|
23
7
|
describe('UI', () => {
|
|
24
8
|
const Util = shaka.test.Util;
|
|
25
9
|
const UiUtils = shaka.test.UiUtils;
|
|
@@ -470,22 +454,6 @@ describe('UI', () => {
|
|
|
470
454
|
expect(isChosen).not.toBe(null);
|
|
471
455
|
});
|
|
472
456
|
|
|
473
|
-
it('restores the resolutions menu after audio-only playback', async () => {
|
|
474
|
-
/** @type {HTMLElement} */
|
|
475
|
-
const resolutionButton = shaka.util.Dom.getElementByClassName(
|
|
476
|
-
'shaka-resolution-button', videoContainer);
|
|
477
|
-
|
|
478
|
-
// Load an audio-only clip. The menu should be hidden.
|
|
479
|
-
await player.load('test:sintel_audio_only_compiled');
|
|
480
|
-
expect(player.isAudioOnly()).toBe(true);
|
|
481
|
-
expect(resolutionButton.classList.contains('shaka-hidden')).toBe(true);
|
|
482
|
-
|
|
483
|
-
// Load an audio-video clip. The menu should be visible again.
|
|
484
|
-
await player.load('test:sintel_multi_lingual_multi_res_compiled');
|
|
485
|
-
expect(player.isAudioOnly()).toBe(false);
|
|
486
|
-
expect(resolutionButton.classList.contains('shaka-hidden')).toBe(false);
|
|
487
|
-
});
|
|
488
|
-
|
|
489
457
|
/**
|
|
490
458
|
* @return {Element}
|
|
491
459
|
*/
|
package/test/ui/ui_unit.js
CHANGED
|
@@ -4,21 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.asserts');
|
|
8
|
-
goog.require('shaka.media.ManifestParser');
|
|
9
|
-
goog.require('shaka.test.FakeManifestParser');
|
|
10
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
11
|
-
goog.require('shaka.test.UiUtils');
|
|
12
|
-
goog.require('shaka.test.Util');
|
|
13
|
-
goog.require('shaka.ui.OverflowMenu');
|
|
14
|
-
goog.require('shaka.ui.ResolutionSelection');
|
|
15
|
-
goog.require('shaka.util.Functional');
|
|
16
|
-
goog.require('shaka.util.Iterables');
|
|
17
|
-
goog.require('shaka.util.Platform');
|
|
18
|
-
goog.requireType('shaka.Player');
|
|
19
|
-
goog.requireType('shaka.ui.Controls');
|
|
20
|
-
goog.requireType('shaka.ui.Overlay');
|
|
21
|
-
|
|
22
7
|
describe('UI', () => {
|
|
23
8
|
const UiUtils = shaka.test.UiUtils;
|
|
24
9
|
const Util = shaka.test.Util;
|
|
@@ -137,8 +122,7 @@ describe('UI', () => {
|
|
|
137
122
|
// Four is just a random number I (ismena) came up with to test a
|
|
138
123
|
// multi-video use case. It could be replaces with any other
|
|
139
124
|
// (reasonable) number.
|
|
140
|
-
for (
|
|
141
|
-
shaka.util.Functional.ignored(_);
|
|
125
|
+
for (let i = 0; i < 4; i++) {
|
|
142
126
|
const video = /** @type {!HTMLVideoElement} */
|
|
143
127
|
(document.createElement('video'));
|
|
144
128
|
|
|
@@ -658,6 +642,33 @@ describe('UI', () => {
|
|
|
658
642
|
expect(getResolutions()).toEqual(['540p']);
|
|
659
643
|
});
|
|
660
644
|
|
|
645
|
+
it('displays audio quality based on current stream', async () => {
|
|
646
|
+
const manifest =
|
|
647
|
+
shaka.test.ManifestGenerator.generate((manifest) => {
|
|
648
|
+
manifest.addVariant(0, (variant) => {
|
|
649
|
+
variant.addAudio(0);
|
|
650
|
+
variant.bandwidth = 100000;
|
|
651
|
+
});
|
|
652
|
+
manifest.addVariant(1, (variant) => {
|
|
653
|
+
variant.addAudio(1);
|
|
654
|
+
variant.bandwidth = 200000;
|
|
655
|
+
});
|
|
656
|
+
});
|
|
657
|
+
|
|
658
|
+
shaka.media.ManifestParser.registerParserByMime(
|
|
659
|
+
fakeMimeType, () => new shaka.test.FakeManifestParser(manifest));
|
|
660
|
+
|
|
661
|
+
await player.load(
|
|
662
|
+
/* uri= */ 'fake', /* startTime= */ 0, fakeMimeType);
|
|
663
|
+
|
|
664
|
+
const qualityButtons = videoContainer.querySelectorAll(
|
|
665
|
+
'button.explicit-resolution > span');
|
|
666
|
+
const qualityOptions =
|
|
667
|
+
Array.from(qualityButtons).map((btn) => btn.innerText);
|
|
668
|
+
|
|
669
|
+
expect(qualityOptions).toEqual(['200 kbits/s', '100 kbits/s']);
|
|
670
|
+
});
|
|
671
|
+
|
|
661
672
|
/**
|
|
662
673
|
* Use internals to update the resolution menu. Our fake manifest can
|
|
663
674
|
* cause problems with startup where the Player will get stuck using
|
|
@@ -4,11 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.test.Util');
|
|
8
|
-
goog.require('shaka.util.AbortableOperation');
|
|
9
|
-
goog.require('shaka.util.Error');
|
|
10
|
-
goog.require('shaka.util.PublicPromise');
|
|
11
|
-
|
|
12
7
|
describe('AbortableOperation', () => {
|
|
13
8
|
const Util = shaka.test.Util;
|
|
14
9
|
|
|
@@ -392,10 +387,10 @@ describe('AbortableOperation', () => {
|
|
|
392
387
|
expect(value).toBe(500);
|
|
393
388
|
}).finally((ok) => {
|
|
394
389
|
expect(ok).toBe(true);
|
|
395
|
-
// The bug https://github.com/
|
|
396
|
-
// expectation fail because some stages were skipped.
|
|
397
|
-
// check, the test would pass, even though the bug shows
|
|
398
|
-
// basic functionality of 'chain'.
|
|
390
|
+
// The bug https://github.com/shaka-project/shaka-player/issues/1260
|
|
391
|
+
// makes this expectation fail because some stages were skipped.
|
|
392
|
+
// Without this check, the test would pass, even though the bug shows
|
|
393
|
+
// up first in the basic functionality of 'chain'.
|
|
399
394
|
expect(values).toEqual([100, 200, 300, 400, 500]);
|
|
400
395
|
});
|
|
401
396
|
await op.promise;
|