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,14 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('shaka.media.MediaSourcePlayhead');
|
|
9
|
-
goog.require('shaka.test.FakePresentationTimeline');
|
|
10
|
-
goog.require('shaka.test.FakeVideo');
|
|
11
|
-
goog.require('shaka.test.Util');
|
|
12
|
-
goog.require('shaka.util.PlayerConfiguration');
|
|
13
|
-
goog.requireType('shaka.media.Playhead');
|
|
14
|
-
|
|
15
7
|
/**
|
|
16
8
|
* @typedef {{start: number, end: number}}
|
|
17
9
|
*
|
|
@@ -29,16 +21,12 @@ let TimeRange;
|
|
|
29
21
|
* start: number,
|
|
30
22
|
* waitingAt: number,
|
|
31
23
|
* expectedEndTime: number,
|
|
32
|
-
* expectEvent: boolean,
|
|
33
|
-
* jumpLargeGaps: (boolean|undefined),
|
|
34
|
-
* preventDefault: (boolean|undefined)
|
|
35
24
|
* }}
|
|
36
25
|
*
|
|
37
26
|
* @description
|
|
38
27
|
* Parameters for a test where we start playing inside a buffered range and play
|
|
39
28
|
* until the end of the buffer. Then, if we expect it, Playhead should jump
|
|
40
|
-
* to the expected time.
|
|
41
|
-
* event from the Playhead, which we may optionally suppress.
|
|
29
|
+
* to the expected time.
|
|
42
30
|
*
|
|
43
31
|
* @property {!Array.<TimeRange>} buffered
|
|
44
32
|
* The buffered ranges for the test.
|
|
@@ -48,12 +36,6 @@ let TimeRange;
|
|
|
48
36
|
* The time to pause at and fire a 'waiting' event.
|
|
49
37
|
* @property {number} expectedEndTime
|
|
50
38
|
* The expected time at the end of the test.
|
|
51
|
-
* @property {boolean} expectEvent
|
|
52
|
-
* If true, expect the 'largegap' event to be fired.
|
|
53
|
-
* @property {(boolean|undefined)} jumpLargeGaps
|
|
54
|
-
* If given, set this field of the Playhead configuration.
|
|
55
|
-
* @property {(boolean|undefined)} preventDefault
|
|
56
|
-
* If true, call preventDefault() on the 'largegap' event.
|
|
57
39
|
*/
|
|
58
40
|
let PlayingTestInfo;
|
|
59
41
|
|
|
@@ -65,17 +47,12 @@ let PlayingTestInfo;
|
|
|
65
47
|
* start: number,
|
|
66
48
|
* seekTo: number,
|
|
67
49
|
* expectedEndTime: number,
|
|
68
|
-
* expectEvent: boolean,
|
|
69
|
-
* jumpLargeGaps: (boolean|undefined),
|
|
70
|
-
* preventDefault: (boolean|undefined)
|
|
71
50
|
* }}
|
|
72
51
|
*
|
|
73
52
|
* @description
|
|
74
53
|
* Parameters for a test where we start playing inside a buffered range and seek
|
|
75
54
|
* to a given time, which may have different buffered ranges. If we are in a
|
|
76
|
-
* gap, Playhead should jump the gap to the expected time.
|
|
77
|
-
* large, we should get a 'largegap' event from the Playhead, which we may
|
|
78
|
-
* optionally suppress.
|
|
55
|
+
* gap, Playhead should jump the gap to the expected time.
|
|
79
56
|
*
|
|
80
57
|
* @property {!Array.<TimeRange>} buffered
|
|
81
58
|
* The buffered ranges for the test.
|
|
@@ -88,12 +65,6 @@ let PlayingTestInfo;
|
|
|
88
65
|
* The time to seek to.
|
|
89
66
|
* @property {number} expectedEndTime
|
|
90
67
|
* The expected time at the end of the test.
|
|
91
|
-
* @property {boolean} expectEvent
|
|
92
|
-
* If true, expect the 'largegap' event to be fired.
|
|
93
|
-
* @property {(boolean|undefined)} jumpLargeGaps
|
|
94
|
-
* If given, set this field of the Playhead configuration.
|
|
95
|
-
* @property {(boolean|undefined)} preventDefault
|
|
96
|
-
* If true, call preventDefault() on the 'largegap' event.
|
|
97
68
|
*/
|
|
98
69
|
let SeekTestInfo;
|
|
99
70
|
|
|
@@ -116,10 +87,6 @@ describe('Playhead', () => {
|
|
|
116
87
|
/** @type {!jasmine.Spy} */
|
|
117
88
|
let onSeek;
|
|
118
89
|
|
|
119
|
-
// Callback to us from Playhead when an event should be sent to the app.
|
|
120
|
-
/** @type {!jasmine.Spy} */
|
|
121
|
-
let onEvent;
|
|
122
|
-
|
|
123
90
|
beforeAll(() => {
|
|
124
91
|
jasmine.clock().install();
|
|
125
92
|
});
|
|
@@ -133,7 +100,6 @@ describe('Playhead', () => {
|
|
|
133
100
|
timeline = new shaka.test.FakePresentationTimeline();
|
|
134
101
|
|
|
135
102
|
onSeek = jasmine.createSpy('onSeek');
|
|
136
|
-
onEvent = jasmine.createSpy('onEvent');
|
|
137
103
|
|
|
138
104
|
timeline.isLive.and.returnValue(false);
|
|
139
105
|
timeline.getSeekRangeStart.and.returnValue(5);
|
|
@@ -152,6 +118,7 @@ describe('Playhead', () => {
|
|
|
152
118
|
presentationTimeline: timeline,
|
|
153
119
|
minBufferTime: 10,
|
|
154
120
|
offlineSessionIds: [],
|
|
121
|
+
sequenceMode: false,
|
|
155
122
|
};
|
|
156
123
|
|
|
157
124
|
config = shaka.util.PlayerConfiguration.createDefault().streaming;
|
|
@@ -176,8 +143,7 @@ describe('Playhead', () => {
|
|
|
176
143
|
manifest,
|
|
177
144
|
config,
|
|
178
145
|
/* startTime= */ 5,
|
|
179
|
-
Util.spyFunc(onSeek)
|
|
180
|
-
Util.spyFunc(onEvent));
|
|
146
|
+
Util.spyFunc(onSeek));
|
|
181
147
|
|
|
182
148
|
expect(video.currentTime).toBe(5);
|
|
183
149
|
expect(playhead.getTime()).toBe(5);
|
|
@@ -197,8 +163,7 @@ describe('Playhead', () => {
|
|
|
197
163
|
manifest,
|
|
198
164
|
config,
|
|
199
165
|
/* startTime= */ 5,
|
|
200
|
-
Util.spyFunc(onSeek)
|
|
201
|
-
Util.spyFunc(onEvent));
|
|
166
|
+
Util.spyFunc(onSeek));
|
|
202
167
|
|
|
203
168
|
expect(video.addEventListener).toHaveBeenCalledWith(
|
|
204
169
|
'loadedmetadata', jasmine.any(Function), jasmine.anything());
|
|
@@ -238,8 +203,7 @@ describe('Playhead', () => {
|
|
|
238
203
|
manifest,
|
|
239
204
|
config,
|
|
240
205
|
/* startTime= */ 5,
|
|
241
|
-
Util.spyFunc(onSeek)
|
|
242
|
-
Util.spyFunc(onEvent));
|
|
206
|
+
Util.spyFunc(onSeek));
|
|
243
207
|
|
|
244
208
|
video.on['seeking']();
|
|
245
209
|
expect(playhead.getTime()).toBe(5);
|
|
@@ -257,8 +221,7 @@ describe('Playhead', () => {
|
|
|
257
221
|
timeline.getSeekRangeEnd.and.returnValue(60);
|
|
258
222
|
|
|
259
223
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
260
|
-
video, manifest, config, /* startTime= */ 0, Util.spyFunc(onSeek)
|
|
261
|
-
Util.spyFunc(onEvent));
|
|
224
|
+
video, manifest, config, /* startTime= */ 0, Util.spyFunc(onSeek));
|
|
262
225
|
|
|
263
226
|
expect(playhead.getTime()).toBe(0);
|
|
264
227
|
});
|
|
@@ -271,8 +234,7 @@ describe('Playhead', () => {
|
|
|
271
234
|
timeline.getDuration.and.returnValue(60);
|
|
272
235
|
|
|
273
236
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
274
|
-
video, manifest, config, /* startTime= */ 60, Util.spyFunc(onSeek)
|
|
275
|
-
Util.spyFunc(onEvent));
|
|
237
|
+
video, manifest, config, /* startTime= */ 60, Util.spyFunc(onSeek));
|
|
276
238
|
|
|
277
239
|
expect(playhead.getTime()).toBe(59); // duration - durationBackoff
|
|
278
240
|
expect(video.currentTime).toBe(59); // duration - durationBackoff
|
|
@@ -286,8 +248,7 @@ describe('Playhead', () => {
|
|
|
286
248
|
timeline.getSeekRangeEnd.and.returnValue(60);
|
|
287
249
|
|
|
288
250
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
289
|
-
video, manifest, config, /* startTime= */ -15, Util.spyFunc(onSeek)
|
|
290
|
-
Util.spyFunc(onEvent));
|
|
251
|
+
video, manifest, config, /* startTime= */ -15, Util.spyFunc(onSeek));
|
|
291
252
|
|
|
292
253
|
expect(playhead.getTime()).toBe(45);
|
|
293
254
|
});
|
|
@@ -301,8 +262,7 @@ describe('Playhead', () => {
|
|
|
301
262
|
// If the live stream's playback offset time is not available, start
|
|
302
263
|
// playing from the seek range start time.
|
|
303
264
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
304
|
-
video, manifest, config, /* startTime= */ -40, Util.spyFunc(onSeek)
|
|
305
|
-
Util.spyFunc(onEvent));
|
|
265
|
+
video, manifest, config, /* startTime= */ -40, Util.spyFunc(onSeek));
|
|
306
266
|
|
|
307
267
|
expect(playhead.getTime()).toBe(30);
|
|
308
268
|
});
|
|
@@ -313,8 +273,7 @@ describe('Playhead', () => {
|
|
|
313
273
|
manifest,
|
|
314
274
|
config,
|
|
315
275
|
/* startTime= */ 5,
|
|
316
|
-
Util.spyFunc(onSeek)
|
|
317
|
-
Util.spyFunc(onEvent));
|
|
276
|
+
Util.spyFunc(onSeek));
|
|
318
277
|
|
|
319
278
|
expect(video.addEventListener).toHaveBeenCalledWith(
|
|
320
279
|
'loadedmetadata', jasmine.any(Function), jasmine.anything());
|
|
@@ -332,8 +291,8 @@ describe('Playhead', () => {
|
|
|
332
291
|
});
|
|
333
292
|
|
|
334
293
|
// This is important for recovering from drift.
|
|
335
|
-
// See: https://github.com/
|
|
336
|
-
// TODO: Re-evaluate after https://github.com/
|
|
294
|
+
// See: https://github.com/shaka-project/shaka-player/issues/1105
|
|
295
|
+
// TODO: Re-evaluate after https://github.com/shaka-project/shaka-player/issues/999
|
|
337
296
|
it('does not change once the initial position is set', () => {
|
|
338
297
|
timeline.isLive.and.returnValue(true);
|
|
339
298
|
timeline.getDuration.and.returnValue(Infinity);
|
|
@@ -346,8 +305,7 @@ describe('Playhead', () => {
|
|
|
346
305
|
manifest,
|
|
347
306
|
config,
|
|
348
307
|
/* startTime= */ null,
|
|
349
|
-
Util.spyFunc(onSeek)
|
|
350
|
-
Util.spyFunc(onEvent));
|
|
308
|
+
Util.spyFunc(onSeek));
|
|
351
309
|
|
|
352
310
|
expect(video.addEventListener).toHaveBeenCalledWith(
|
|
353
311
|
'loadedmetadata', jasmine.any(Function), jasmine.anything());
|
|
@@ -379,8 +337,7 @@ describe('Playhead', () => {
|
|
|
379
337
|
manifest,
|
|
380
338
|
config,
|
|
381
339
|
/* startTime= */ 5,
|
|
382
|
-
Util.spyFunc(onSeek)
|
|
383
|
-
Util.spyFunc(onEvent));
|
|
340
|
+
Util.spyFunc(onSeek));
|
|
384
341
|
|
|
385
342
|
// This has to periodically increment the mock date to allow the onSeeking_
|
|
386
343
|
// handler to seek, if appropriate.
|
|
@@ -539,8 +496,7 @@ describe('Playhead', () => {
|
|
|
539
496
|
manifest,
|
|
540
497
|
config,
|
|
541
498
|
/* startTime= */ 5,
|
|
542
|
-
Util.spyFunc(onSeek)
|
|
543
|
-
Util.spyFunc(onEvent));
|
|
499
|
+
Util.spyFunc(onSeek));
|
|
544
500
|
|
|
545
501
|
setMockDate(0);
|
|
546
502
|
video.on['seeking']();
|
|
@@ -588,8 +544,7 @@ describe('Playhead', () => {
|
|
|
588
544
|
manifest,
|
|
589
545
|
config,
|
|
590
546
|
/* startTime= */ 5,
|
|
591
|
-
Util.spyFunc(onSeek)
|
|
592
|
-
Util.spyFunc(onEvent));
|
|
547
|
+
Util.spyFunc(onSeek));
|
|
593
548
|
|
|
594
549
|
// First, seek to start time.
|
|
595
550
|
video.currentTime = 0;
|
|
@@ -649,8 +604,7 @@ describe('Playhead', () => {
|
|
|
649
604
|
manifest,
|
|
650
605
|
config,
|
|
651
606
|
/* startTime= */ 5,
|
|
652
|
-
Util.spyFunc(onSeek)
|
|
653
|
-
Util.spyFunc(onEvent));
|
|
607
|
+
Util.spyFunc(onSeek));
|
|
654
608
|
expect(currentTime).toBe(1000);
|
|
655
609
|
seekCount = 0;
|
|
656
610
|
|
|
@@ -695,8 +649,7 @@ describe('Playhead', () => {
|
|
|
695
649
|
manifest,
|
|
696
650
|
config,
|
|
697
651
|
/* startTime= */ 5,
|
|
698
|
-
Util.spyFunc(onSeek)
|
|
699
|
-
Util.spyFunc(onEvent));
|
|
652
|
+
Util.spyFunc(onSeek));
|
|
700
653
|
|
|
701
654
|
video.on['seeking']();
|
|
702
655
|
expect(video.currentTime).toBe(5);
|
|
@@ -727,8 +680,7 @@ describe('Playhead', () => {
|
|
|
727
680
|
manifest,
|
|
728
681
|
config,
|
|
729
682
|
/* startTime= */ 5,
|
|
730
|
-
Util.spyFunc(onSeek)
|
|
731
|
-
Util.spyFunc(onEvent));
|
|
683
|
+
Util.spyFunc(onSeek));
|
|
732
684
|
|
|
733
685
|
video.on['seeking']();
|
|
734
686
|
expect(video.currentTime).toBe(5);
|
|
@@ -762,8 +714,7 @@ describe('Playhead', () => {
|
|
|
762
714
|
manifest,
|
|
763
715
|
config,
|
|
764
716
|
/* startTime= */ 30,
|
|
765
|
-
Util.spyFunc(onSeek)
|
|
766
|
-
Util.spyFunc(onEvent));
|
|
717
|
+
Util.spyFunc(onSeek));
|
|
767
718
|
|
|
768
719
|
video.currentTime = 0;
|
|
769
720
|
video.seeking = true;
|
|
@@ -781,9 +732,9 @@ describe('Playhead', () => {
|
|
|
781
732
|
}); // clamps playhead even before seeking completes
|
|
782
733
|
|
|
783
734
|
// Regression test for:
|
|
784
|
-
// - https://github.com/
|
|
785
|
-
// - https://github.com/
|
|
786
|
-
// - https://github.com/
|
|
735
|
+
// - https://github.com/shaka-project/shaka-player/pull/2849
|
|
736
|
+
// - https://github.com/shaka-project/shaka-player/issues/2748
|
|
737
|
+
// - https://github.com/shaka-project/shaka-player/issues/2848
|
|
787
738
|
it('does not apply seek range before initial seek has completed', () => {
|
|
788
739
|
// These attributes allow the seek range callback to do its thing.
|
|
789
740
|
video.readyState = HTMLMediaElement.HAVE_METADATA;
|
|
@@ -808,8 +759,7 @@ describe('Playhead', () => {
|
|
|
808
759
|
manifest,
|
|
809
760
|
config,
|
|
810
761
|
/* startTime= */ 30,
|
|
811
|
-
Util.spyFunc(onSeek)
|
|
812
|
-
Util.spyFunc(onEvent));
|
|
762
|
+
Util.spyFunc(onSeek));
|
|
813
763
|
|
|
814
764
|
/**
|
|
815
765
|
* Prevent retries on the initial start time seek. This will ensure that
|
|
@@ -840,8 +790,6 @@ describe('Playhead', () => {
|
|
|
840
790
|
timeline.getSeekRangeStart.and.returnValue(0);
|
|
841
791
|
timeline.getSeekRangeEnd.and.returnValue(60);
|
|
842
792
|
timeline.getDuration.and.returnValue(60);
|
|
843
|
-
|
|
844
|
-
config.smallGapLimit = 1;
|
|
845
793
|
});
|
|
846
794
|
|
|
847
795
|
describe('when playing', () => {
|
|
@@ -850,7 +798,6 @@ describe('Playhead', () => {
|
|
|
850
798
|
buffered: [{start: 0, end: 10}],
|
|
851
799
|
start: 3,
|
|
852
800
|
waitingAt: 10,
|
|
853
|
-
expectEvent: false,
|
|
854
801
|
expectedEndTime: 10,
|
|
855
802
|
});
|
|
856
803
|
|
|
@@ -858,7 +805,6 @@ describe('Playhead', () => {
|
|
|
858
805
|
buffered: [{start: 0, end: 10}, {start: 20, end: 30}],
|
|
859
806
|
start: 24,
|
|
860
807
|
waitingAt: 30,
|
|
861
|
-
expectEvent: false,
|
|
862
808
|
expectedEndTime: 30,
|
|
863
809
|
});
|
|
864
810
|
|
|
@@ -866,7 +812,6 @@ describe('Playhead', () => {
|
|
|
866
812
|
buffered: [{start: 0, end: 10}, {start: 11, end: 20}],
|
|
867
813
|
start: 5,
|
|
868
814
|
waitingAt: 10,
|
|
869
|
-
expectEvent: false,
|
|
870
815
|
expectedEndTime: 11,
|
|
871
816
|
});
|
|
872
817
|
|
|
@@ -875,7 +820,6 @@ describe('Playhead', () => {
|
|
|
875
820
|
[{start: 0, end: 10}, {start: 11, end: 20}, {start: 21, end: 30}],
|
|
876
821
|
start: 5,
|
|
877
822
|
waitingAt: 10,
|
|
878
|
-
expectEvent: false,
|
|
879
823
|
expectedEndTime: 11,
|
|
880
824
|
});
|
|
881
825
|
|
|
@@ -884,26 +828,15 @@ describe('Playhead', () => {
|
|
|
884
828
|
[{start: 0, end: 10}, {start: 11, end: 20}, {start: 21, end: 30}],
|
|
885
829
|
start: 15,
|
|
886
830
|
waitingAt: 20,
|
|
887
|
-
expectEvent: false,
|
|
888
831
|
expectedEndTime: 21,
|
|
889
832
|
});
|
|
890
833
|
}); // with small gaps
|
|
891
834
|
|
|
892
835
|
describe('with large gaps', () => {
|
|
893
|
-
playingTest('will fire an event', {
|
|
894
|
-
buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
|
|
895
|
-
start: 5,
|
|
896
|
-
waitingAt: 10,
|
|
897
|
-
expectEvent: true,
|
|
898
|
-
expectedEndTime: 10,
|
|
899
|
-
});
|
|
900
|
-
|
|
901
836
|
playingTest('will jump large gaps if set', {
|
|
902
837
|
buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
|
|
903
838
|
start: 5,
|
|
904
839
|
waitingAt: 10,
|
|
905
|
-
jumpLargeGaps: true,
|
|
906
|
-
expectEvent: true,
|
|
907
840
|
expectedEndTime: 30,
|
|
908
841
|
});
|
|
909
842
|
|
|
@@ -912,8 +845,6 @@ describe('Playhead', () => {
|
|
|
912
845
|
[{start: 0, end: 10}, {start: 30, end: 40}, {start: 50, end: 60}],
|
|
913
846
|
start: 5,
|
|
914
847
|
waitingAt: 10,
|
|
915
|
-
jumpLargeGaps: true,
|
|
916
|
-
expectEvent: true,
|
|
917
848
|
expectedEndTime: 30,
|
|
918
849
|
});
|
|
919
850
|
|
|
@@ -922,20 +853,8 @@ describe('Playhead', () => {
|
|
|
922
853
|
[{start: 0, end: 10}, {start: 20, end: 30}, {start: 50, end: 60}],
|
|
923
854
|
start: 24,
|
|
924
855
|
waitingAt: 30,
|
|
925
|
-
jumpLargeGaps: true,
|
|
926
|
-
expectEvent: true,
|
|
927
856
|
expectedEndTime: 50,
|
|
928
857
|
});
|
|
929
|
-
|
|
930
|
-
playingTest('won\'t jump gaps when preventDefault() is called', {
|
|
931
|
-
buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
|
|
932
|
-
start: 5,
|
|
933
|
-
waitingAt: 10,
|
|
934
|
-
jumpLargeGaps: true,
|
|
935
|
-
preventDefault: true,
|
|
936
|
-
expectEvent: true,
|
|
937
|
-
expectedEndTime: 10,
|
|
938
|
-
});
|
|
939
858
|
}); // with large gaps
|
|
940
859
|
|
|
941
860
|
/**
|
|
@@ -948,20 +867,12 @@ describe('Playhead', () => {
|
|
|
948
867
|
video.currentTime = data.start;
|
|
949
868
|
video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
|
|
950
869
|
|
|
951
|
-
onEvent.and.callFake((event) => {
|
|
952
|
-
if (data.preventDefault) {
|
|
953
|
-
event.preventDefault();
|
|
954
|
-
}
|
|
955
|
-
});
|
|
956
|
-
|
|
957
|
-
config.jumpLargeGaps = !!data.jumpLargeGaps;
|
|
958
870
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
959
871
|
video,
|
|
960
872
|
manifest,
|
|
961
873
|
config,
|
|
962
874
|
/* startTime= */ data.start,
|
|
963
|
-
Util.spyFunc(onSeek)
|
|
964
|
-
Util.spyFunc(onEvent));
|
|
875
|
+
Util.spyFunc(onSeek));
|
|
965
876
|
|
|
966
877
|
jasmine.clock().tick(500);
|
|
967
878
|
for (let time = data.start; time < data.waitingAt; time++) {
|
|
@@ -982,14 +893,11 @@ describe('Playhead', () => {
|
|
|
982
893
|
expect(video.currentTime).toBe(time + 0.4);
|
|
983
894
|
}
|
|
984
895
|
|
|
985
|
-
expect(onEvent).not.toHaveBeenCalled();
|
|
986
|
-
|
|
987
896
|
video.currentTime = data.waitingAt;
|
|
988
897
|
video.readyState = HTMLMediaElement.HAVE_CURRENT_DATA;
|
|
989
898
|
video.on['waiting']();
|
|
990
899
|
jasmine.clock().tick(500);
|
|
991
900
|
|
|
992
|
-
expect(onEvent).toHaveBeenCalledTimes(data.expectEvent ? 1 : 0);
|
|
993
901
|
expect(video.currentTime).toBe(data.expectedEndTime);
|
|
994
902
|
});
|
|
995
903
|
}
|
|
@@ -1002,7 +910,6 @@ describe('Playhead', () => {
|
|
|
1002
910
|
start: 4,
|
|
1003
911
|
seekTo: 14,
|
|
1004
912
|
expectedEndTime: 14,
|
|
1005
|
-
expectEvent: false,
|
|
1006
913
|
});
|
|
1007
914
|
|
|
1008
915
|
seekTest('will jump when seeking into gap', {
|
|
@@ -1010,7 +917,6 @@ describe('Playhead', () => {
|
|
|
1010
917
|
start: 3,
|
|
1011
918
|
seekTo: 10.4,
|
|
1012
919
|
expectedEndTime: 11,
|
|
1013
|
-
expectEvent: false,
|
|
1014
920
|
});
|
|
1015
921
|
|
|
1016
922
|
seekTest('won\'t jump multiple buffers', {
|
|
@@ -1019,7 +925,6 @@ describe('Playhead', () => {
|
|
|
1019
925
|
start: 3,
|
|
1020
926
|
seekTo: 10.4,
|
|
1021
927
|
expectedEndTime: 11,
|
|
1022
|
-
expectEvent: false,
|
|
1023
928
|
});
|
|
1024
929
|
|
|
1025
930
|
seekTest('will jump into last range with seeking', {
|
|
@@ -1028,7 +933,6 @@ describe('Playhead', () => {
|
|
|
1028
933
|
start: 3,
|
|
1029
934
|
seekTo: 20.5,
|
|
1030
935
|
expectedEndTime: 21,
|
|
1031
|
-
expectEvent: false,
|
|
1032
936
|
});
|
|
1033
937
|
|
|
1034
938
|
seekTest('treats large gaps as small if playhead near end', {
|
|
@@ -1036,36 +940,15 @@ describe('Playhead', () => {
|
|
|
1036
940
|
start: 3,
|
|
1037
941
|
seekTo: 29.2,
|
|
1038
942
|
expectedEndTime: 30,
|
|
1039
|
-
expectEvent: false,
|
|
1040
943
|
});
|
|
1041
944
|
}); // with small gaps
|
|
1042
945
|
|
|
1043
946
|
describe('with large gaps', () => {
|
|
1044
|
-
seekTest('will raise event', {
|
|
1045
|
-
buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
|
|
1046
|
-
start: 5,
|
|
1047
|
-
seekTo: 12,
|
|
1048
|
-
expectedEndTime: 12,
|
|
1049
|
-
expectEvent: true,
|
|
1050
|
-
});
|
|
1051
|
-
|
|
1052
947
|
seekTest('will jump large gaps', {
|
|
1053
948
|
buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
|
|
1054
949
|
start: 5,
|
|
1055
950
|
seekTo: 12,
|
|
1056
|
-
jumpLargeGaps: true,
|
|
1057
951
|
expectedEndTime: 30,
|
|
1058
|
-
expectEvent: true,
|
|
1059
|
-
});
|
|
1060
|
-
|
|
1061
|
-
seekTest('won\'t jump if preventDefault() is called', {
|
|
1062
|
-
buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
|
|
1063
|
-
start: 5,
|
|
1064
|
-
seekTo: 12,
|
|
1065
|
-
jumpLargeGaps: true,
|
|
1066
|
-
preventDefault: true,
|
|
1067
|
-
expectedEndTime: 12,
|
|
1068
|
-
expectEvent: true,
|
|
1069
952
|
});
|
|
1070
953
|
}); // with large gaps
|
|
1071
954
|
}); // with buffered seeks
|
|
@@ -1079,7 +962,6 @@ describe('Playhead', () => {
|
|
|
1079
962
|
start: 3,
|
|
1080
963
|
seekTo: 22,
|
|
1081
964
|
expectedEndTime: 22,
|
|
1082
|
-
expectEvent: false,
|
|
1083
965
|
});
|
|
1084
966
|
|
|
1085
967
|
// Seeking to the beginning is considered an unbuffered seek even if
|
|
@@ -1090,7 +972,6 @@ describe('Playhead', () => {
|
|
|
1090
972
|
start: 4,
|
|
1091
973
|
seekTo: 0,
|
|
1092
974
|
expectedEndTime: 0.2,
|
|
1093
|
-
expectEvent: false,
|
|
1094
975
|
});
|
|
1095
976
|
|
|
1096
977
|
seekTest('will jump when seeking into gap', {
|
|
@@ -1100,7 +981,6 @@ describe('Playhead', () => {
|
|
|
1100
981
|
start: 3,
|
|
1101
982
|
seekTo: 30.2,
|
|
1102
983
|
expectedEndTime: 31,
|
|
1103
|
-
expectEvent: false,
|
|
1104
984
|
});
|
|
1105
985
|
|
|
1106
986
|
seekTest('will jump when seeking to the end of a range', {
|
|
@@ -1110,7 +990,6 @@ describe('Playhead', () => {
|
|
|
1110
990
|
start: 3,
|
|
1111
991
|
seekTo: 30,
|
|
1112
992
|
expectedEndTime: 31,
|
|
1113
|
-
expectEvent: false,
|
|
1114
993
|
});
|
|
1115
994
|
|
|
1116
995
|
seekTest('won\'t jump when past end', {
|
|
@@ -1120,7 +999,6 @@ describe('Playhead', () => {
|
|
|
1120
999
|
start: 3,
|
|
1121
1000
|
seekTo: 34,
|
|
1122
1001
|
expectedEndTime: 34,
|
|
1123
|
-
expectEvent: false,
|
|
1124
1002
|
});
|
|
1125
1003
|
|
|
1126
1004
|
seekTest('won\'t jump when seeking backwards into buffered range', {
|
|
@@ -1130,7 +1008,6 @@ describe('Playhead', () => {
|
|
|
1130
1008
|
start: 24,
|
|
1131
1009
|
seekTo: 4,
|
|
1132
1010
|
expectedEndTime: 4,
|
|
1133
|
-
expectEvent: false,
|
|
1134
1011
|
});
|
|
1135
1012
|
|
|
1136
1013
|
seekTest('will wait to jump when seeking backwards', {
|
|
@@ -1141,7 +1018,6 @@ describe('Playhead', () => {
|
|
|
1141
1018
|
start: 24,
|
|
1142
1019
|
seekTo: 4,
|
|
1143
1020
|
expectedEndTime: 4,
|
|
1144
|
-
expectEvent: false,
|
|
1145
1021
|
});
|
|
1146
1022
|
|
|
1147
1023
|
seekTest('will jump when seeking backwards into gap', {
|
|
@@ -1151,7 +1027,6 @@ describe('Playhead', () => {
|
|
|
1151
1027
|
start: 24,
|
|
1152
1028
|
seekTo: 1.6,
|
|
1153
1029
|
expectedEndTime: 2,
|
|
1154
|
-
expectEvent: false,
|
|
1155
1030
|
});
|
|
1156
1031
|
}); // with small gaps
|
|
1157
1032
|
|
|
@@ -1161,19 +1036,7 @@ describe('Playhead', () => {
|
|
|
1161
1036
|
newBuffered: [{start: 20, end: 30}],
|
|
1162
1037
|
start: 25,
|
|
1163
1038
|
seekTo: 0,
|
|
1164
|
-
jumpLargeGaps: true,
|
|
1165
1039
|
expectedEndTime: 20,
|
|
1166
|
-
expectEvent: true,
|
|
1167
|
-
});
|
|
1168
|
-
|
|
1169
|
-
seekTest('will raise event', {
|
|
1170
|
-
// [0-10], [20-30], [40-50]
|
|
1171
|
-
buffered: [{start: 0, end: 10}],
|
|
1172
|
-
newBuffered: [{start: 20, end: 30}, {start: 40, end: 50}],
|
|
1173
|
-
start: 3,
|
|
1174
|
-
seekTo: 32,
|
|
1175
|
-
expectedEndTime: 32,
|
|
1176
|
-
expectEvent: true,
|
|
1177
1040
|
});
|
|
1178
1041
|
|
|
1179
1042
|
seekTest('will jump large gaps', {
|
|
@@ -1183,20 +1046,6 @@ describe('Playhead', () => {
|
|
|
1183
1046
|
start: 3,
|
|
1184
1047
|
seekTo: 32,
|
|
1185
1048
|
expectedEndTime: 40,
|
|
1186
|
-
jumpLargeGaps: true,
|
|
1187
|
-
expectEvent: true,
|
|
1188
|
-
});
|
|
1189
|
-
|
|
1190
|
-
seekTest('will jump large gaps', {
|
|
1191
|
-
// [0-10], [20-30], [40-50]
|
|
1192
|
-
buffered: [{start: 0, end: 10}],
|
|
1193
|
-
newBuffered: [{start: 20, end: 30}, {start: 40, end: 50}],
|
|
1194
|
-
start: 3,
|
|
1195
|
-
seekTo: 32,
|
|
1196
|
-
expectedEndTime: 32,
|
|
1197
|
-
jumpLargeGaps: true,
|
|
1198
|
-
preventDefault: true,
|
|
1199
|
-
expectEvent: true,
|
|
1200
1049
|
});
|
|
1201
1050
|
}); // with large gaps
|
|
1202
1051
|
}); // with unbuffered seeks
|
|
@@ -1207,17 +1056,14 @@ describe('Playhead', () => {
|
|
|
1207
1056
|
video.currentTime = 12;
|
|
1208
1057
|
video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
|
|
1209
1058
|
|
|
1210
|
-
config.jumpLargeGaps = true;
|
|
1211
1059
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
1212
1060
|
video,
|
|
1213
1061
|
manifest,
|
|
1214
1062
|
config,
|
|
1215
1063
|
/* startTime= */ 12,
|
|
1216
|
-
Util.spyFunc(onSeek)
|
|
1217
|
-
Util.spyFunc(onEvent));
|
|
1064
|
+
Util.spyFunc(onSeek));
|
|
1218
1065
|
|
|
1219
1066
|
jasmine.clock().tick(500);
|
|
1220
|
-
expect(onEvent).not.toHaveBeenCalled();
|
|
1221
1067
|
|
|
1222
1068
|
// Append a segment before seeking.
|
|
1223
1069
|
playhead.notifyOfBufferingChange();
|
|
@@ -1236,7 +1082,7 @@ describe('Playhead', () => {
|
|
|
1236
1082
|
it('works with rounding errors when seeking', () => {
|
|
1237
1083
|
// If the browser sets the time to slightly before where we seek to, we
|
|
1238
1084
|
// shouldn't get stuck in an infinite loop trying to jump the tiny gap.
|
|
1239
|
-
// https://github.com/
|
|
1085
|
+
// https://github.com/shaka-project/shaka-player/issues/1309
|
|
1240
1086
|
const buffered = [{start: 10, end: 20}];
|
|
1241
1087
|
video.buffered = createFakeBuffered(buffered);
|
|
1242
1088
|
video.readyState = HTMLMediaElement.HAVE_METADATA;
|
|
@@ -1256,14 +1102,12 @@ describe('Playhead', () => {
|
|
|
1256
1102
|
},
|
|
1257
1103
|
});
|
|
1258
1104
|
|
|
1259
|
-
config.jumpLargeGaps = true;
|
|
1260
1105
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
1261
1106
|
video,
|
|
1262
1107
|
manifest,
|
|
1263
1108
|
config,
|
|
1264
1109
|
/* startTime= */ 0,
|
|
1265
|
-
Util.spyFunc(onSeek)
|
|
1266
|
-
Util.spyFunc(onEvent));
|
|
1110
|
+
Util.spyFunc(onSeek));
|
|
1267
1111
|
|
|
1268
1112
|
playhead.notifyOfBufferingChange();
|
|
1269
1113
|
jasmine.clock().tick(500);
|
|
@@ -1279,14 +1123,12 @@ describe('Playhead', () => {
|
|
|
1279
1123
|
video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
|
|
1280
1124
|
video.paused = true;
|
|
1281
1125
|
|
|
1282
|
-
config.jumpLargeGaps = true;
|
|
1283
1126
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
1284
1127
|
video,
|
|
1285
1128
|
manifest,
|
|
1286
1129
|
config,
|
|
1287
1130
|
/* startTime= */ 5,
|
|
1288
|
-
Util.spyFunc(onSeek)
|
|
1289
|
-
Util.spyFunc(onEvent));
|
|
1131
|
+
Util.spyFunc(onSeek));
|
|
1290
1132
|
|
|
1291
1133
|
playhead.notifyOfBufferingChange();
|
|
1292
1134
|
jasmine.clock().tick(500);
|
|
@@ -1295,7 +1137,7 @@ describe('Playhead', () => {
|
|
|
1295
1137
|
expect(video.currentTime).toBe(5);
|
|
1296
1138
|
});
|
|
1297
1139
|
|
|
1298
|
-
// Regression test for https://github.com/
|
|
1140
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/2987
|
|
1299
1141
|
it('does gap jump if paused at 0 and has autoplay', () => {
|
|
1300
1142
|
const buffered = [{start: 10, end: 20}];
|
|
1301
1143
|
video.buffered = createFakeBuffered(buffered);
|
|
@@ -1304,14 +1146,12 @@ describe('Playhead', () => {
|
|
|
1304
1146
|
video.paused = true;
|
|
1305
1147
|
video.autoplay = true;
|
|
1306
1148
|
|
|
1307
|
-
config.jumpLargeGaps = true;
|
|
1308
1149
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
1309
1150
|
video,
|
|
1310
1151
|
manifest,
|
|
1311
1152
|
config,
|
|
1312
1153
|
/* startTime= */ 0,
|
|
1313
|
-
Util.spyFunc(onSeek)
|
|
1314
|
-
Util.spyFunc(onEvent));
|
|
1154
|
+
Util.spyFunc(onSeek));
|
|
1315
1155
|
|
|
1316
1156
|
playhead.notifyOfBufferingChange();
|
|
1317
1157
|
jasmine.clock().tick(500);
|
|
@@ -1320,7 +1160,7 @@ describe('Playhead', () => {
|
|
|
1320
1160
|
expect(video.currentTime).toBe(10);
|
|
1321
1161
|
});
|
|
1322
1162
|
|
|
1323
|
-
// Regression test for https://github.com/
|
|
1163
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/3451
|
|
1324
1164
|
it('doesn\'t gap jump if paused at 0 and hasn\'t autoplay', () => {
|
|
1325
1165
|
const buffered = [{start: 10, end: 20}];
|
|
1326
1166
|
video.buffered = createFakeBuffered(buffered);
|
|
@@ -1329,14 +1169,12 @@ describe('Playhead', () => {
|
|
|
1329
1169
|
video.paused = true;
|
|
1330
1170
|
video.autoplay = false;
|
|
1331
1171
|
|
|
1332
|
-
config.jumpLargeGaps = true;
|
|
1333
1172
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
1334
1173
|
video,
|
|
1335
1174
|
manifest,
|
|
1336
1175
|
config,
|
|
1337
1176
|
/* startTime= */ 0,
|
|
1338
|
-
Util.spyFunc(onSeek)
|
|
1339
|
-
Util.spyFunc(onEvent));
|
|
1177
|
+
Util.spyFunc(onSeek));
|
|
1340
1178
|
|
|
1341
1179
|
playhead.notifyOfBufferingChange();
|
|
1342
1180
|
jasmine.clock().tick(500);
|
|
@@ -1355,23 +1193,14 @@ describe('Playhead', () => {
|
|
|
1355
1193
|
video.currentTime = data.start;
|
|
1356
1194
|
video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
|
|
1357
1195
|
|
|
1358
|
-
onEvent.and.callFake((event) => {
|
|
1359
|
-
if (data.preventDefault) {
|
|
1360
|
-
event.preventDefault();
|
|
1361
|
-
}
|
|
1362
|
-
});
|
|
1363
|
-
|
|
1364
|
-
config.jumpLargeGaps = !!data.jumpLargeGaps;
|
|
1365
1196
|
playhead = new shaka.media.MediaSourcePlayhead(
|
|
1366
1197
|
video,
|
|
1367
1198
|
manifest,
|
|
1368
1199
|
config,
|
|
1369
1200
|
/* startTime= */ data.start,
|
|
1370
|
-
Util.spyFunc(onSeek)
|
|
1371
|
-
Util.spyFunc(onEvent));
|
|
1201
|
+
Util.spyFunc(onSeek));
|
|
1372
1202
|
|
|
1373
1203
|
jasmine.clock().tick(500);
|
|
1374
|
-
expect(onEvent).not.toHaveBeenCalled();
|
|
1375
1204
|
|
|
1376
1205
|
// Seek to the given position and update ready state.
|
|
1377
1206
|
video.currentTime = data.seekTo;
|
|
@@ -1403,7 +1232,6 @@ describe('Playhead', () => {
|
|
|
1403
1232
|
jasmine.clock().tick(250);
|
|
1404
1233
|
}
|
|
1405
1234
|
|
|
1406
|
-
expect(onEvent).toHaveBeenCalledTimes(data.expectEvent ? 1 : 0);
|
|
1407
1235
|
expect(video.currentTime).toBe(data.expectedEndTime);
|
|
1408
1236
|
});
|
|
1409
1237
|
}
|