shaka-player 3.3.0 → 3.3.3
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 +130 -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 +29 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +145 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +93 -0
- package/AUTHORS +2 -0
- package/CHANGELOG.md +1722 -1640
- package/CONTRIBUTING.md +2 -2
- package/CONTRIBUTORS +2 -0
- package/README.md +7 -7
- 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 +2 -0
- package/app-engine/demo-version-index/main.py +162 -0
- package/app-engine/demo-version-index/requirements.txt +6 -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 +1 -1
- package/build/checkversion.py +1 -1
- package/build/conformance.textproto +196 -169
- 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 +163 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +93 -28
- package/build/types/polyfill +1 -0
- 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/assets.js +2 -0
- package/demo/config.js +0 -1
- package/demo/custom.js +0 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/index.html +1 -1
- package/demo/main.js +3 -3
- package/dist/controls.css +3 -3
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +191 -194
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +191 -194
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +233 -226
- package/dist/locales.js +30 -30
- package/dist/receiver.compiled.debug.js +43 -45
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +43 -45
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +272 -238
- package/dist/shaka-player.compiled.debug.d.ts +272 -238
- package/dist/shaka-player.compiled.debug.externs.js +53 -16
- package/dist/shaka-player.compiled.debug.js +393 -394
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +53 -16
- package/dist/shaka-player.compiled.js +840 -843
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +318 -293
- package/dist/shaka-player.ui.debug.d.ts +318 -293
- package/dist/shaka-player.ui.debug.externs.js +55 -27
- package/dist/shaka-player.ui.debug.js +415 -417
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +55 -27
- package/dist/shaka-player.ui.js +997 -1000
- 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/faq.md +8 -8
- package/docs/tutorials/index.json +1 -0
- package/docs/tutorials/plugins.md +3 -3
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/welcome.md +10 -2
- package/externs/cmcd.js +186 -0
- package/externs/shaka/player.js +8 -0
- package/externs/shaka/text.js +10 -0
- package/karma.conf.js +156 -45
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/ads/ad_manager.js +1 -0
- package/lib/cast/cast_proxy.js +6 -4
- package/lib/cast/cast_receiver.js +3 -0
- 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/dash_parser.js +40 -30
- 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 +41 -9
- package/lib/hls/manifest_text_parser.js +4 -3
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/content_workarounds.js +2 -2
- package/lib/media/drm_engine.js +3 -2
- package/lib/media/media_source_engine.js +3 -2
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +2 -2
- package/lib/media/presentation_timeline.js +18 -8
- package/lib/media/quality_observer.js +17 -34
- package/lib/media/region_observer.js +39 -33
- package/lib/media/region_timeline.js +17 -19
- package/lib/media/segment_index.js +2 -1
- package/lib/media/segment_reference.js +19 -1
- package/lib/media/streaming_engine.js +12 -9
- package/lib/media/time_ranges_utils.js +1 -3
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +5 -1
- package/lib/offline/storage.js +12 -13
- package/lib/player.js +87 -41
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +32 -17
- package/lib/polyfill/mediasource.js +1 -1
- package/lib/polyfill/symbol.js +46 -0
- package/lib/text/cue.js +7 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/ttml_text_parser.js +92 -63
- package/lib/text/ui_text_displayer.js +18 -12
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/cmcd_manager.js +47 -201
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +1 -1
- package/lib/util/fake_event_target.js +21 -1
- package/lib/util/iterables.js +0 -46
- 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 +3 -3
- package/lib/util/pssh.js +1 -4
- package/lib/util/stream_utils.js +88 -11
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -5
- package/lib/util/xml_utils.js +34 -7
- package/package.json +62 -40
- package/roadmap.md +17 -17
- package/shaka-player.uncompiled.js +1 -0
- 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 +0 -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 +1 -10
- package/test/dash/dash_parser_live_unit.js +45 -15
- package/test/dash/dash_parser_manifest_unit.js +4 -17
- 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 +0 -9
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +0 -5
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +2 -14
- package/test/hls/hls_parser_unit.js +76 -15
- 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 +7 -27
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +0 -7
- package/test/media/media_source_engine_unit.js +1 -14
- 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 +8 -16
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/quality_observer_unit.js +4 -5
- package/test/media/region_observer_unit.js +40 -10
- package/test/media/region_timeline_unit.js +40 -25
- package/test/media/segment_index_unit.js +0 -6
- 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 +11 -37
- package/test/media/streaming_engine_unit.js +155 -34
- package/test/media/time_ranges_utils_unit.js +0 -2
- 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 +0 -8
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +0 -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 +1 -27
- package/test/player_external.js +2 -10
- package/test/player_integration.js +63 -36
- 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 +41 -15
- package/test/player_unit.js +71 -46
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/chapters.vtt +2 -2
- package/test/test/assets/chapters2.vtt +10 -0
- 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 +0 -7
- 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 +9 -14
- package/test/test/util/manifest_parser_util.js +0 -6
- package/test/test/util/offline_utils.js +0 -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 +0 -15
- package/test/test/util/test_scheme.js +1 -19
- package/test/test/util/ttml_utils.js +79 -0
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +15 -26
- package/test/test/util/waiter.js +84 -43
- package/test/text/cue_integration.js +0 -4
- package/test/text/lrc_text_parser_unit.js +0 -4
- package/test/text/mp4_ttml_parser_unit.js +10 -23
- package/test/text/mp4_vtt_parser_unit.js +1 -7
- package/test/text/sbv_text_parser_unit.js +0 -4
- package/test/text/simple_text_displayer_unit.js +1 -8
- package/test/text/srt_text_parser_unit.js +0 -4
- package/test/text/ssa_text_parser_unit.js +0 -5
- package/test/text/text_engine_unit.js +2 -7
- package/test/text/text_track_integration.js +0 -2
- package/test/text/ttml_text_parser_unit.js +499 -239
- package/test/text/ui_text_displayer_unit.js +44 -41
- package/test/text/vtt_text_parser_unit.js +0 -9
- 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 +9 -19
- package/test/ui/ui_customization_unit.js +0 -6
- package/test/ui/ui_integration.js +0 -16
- package/test/ui/ui_unit.js +1 -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 +29 -18
- 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/functional_unit.js +1 -1
- 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 +39 -38
- 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/third_party/closure-uri/uri.js +21 -0
- package/ui/controls.js +3 -0
- package/ui/less/ad_controls.less +4 -4
- package/ui/less/buttons.less +5 -5
- package/ui/less/containers.less +9 -11
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +5 -0
- package/ui/less/tooltip.less +1 -1
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/ui/localization.js +12 -36
- package/ui/text_selection.js +1 -0
- package/externs/media_capabilities.js +0 -16
- package/externs/svgelement.js +0 -18
- package/externs/webcrypto.js +0 -18
|
@@ -4,22 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.Uri');
|
|
8
|
-
goog.require('shaka.Player');
|
|
9
|
-
goog.require('shaka.log');
|
|
10
|
-
goog.require('shaka.media.DrmEngine');
|
|
11
|
-
goog.require('shaka.media.TimeRangesUtils');
|
|
12
|
-
goog.require('shaka.test.FakeAbrManager');
|
|
13
|
-
goog.require('shaka.test.FakeTextDisplayer');
|
|
14
|
-
goog.require('shaka.test.Loader');
|
|
15
|
-
goog.require('shaka.test.TestScheme');
|
|
16
|
-
goog.require('shaka.test.UiUtils');
|
|
17
|
-
goog.require('shaka.test.Util');
|
|
18
|
-
goog.require('shaka.test.Waiter');
|
|
19
|
-
goog.require('shaka.util.EventManager');
|
|
20
|
-
goog.require('shaka.util.Functional');
|
|
21
|
-
goog.require('shaka.util.Iterables');
|
|
22
|
-
|
|
23
7
|
describe('Player', () => {
|
|
24
8
|
/** @type {!jasmine.Spy} */
|
|
25
9
|
let onErrorSpy;
|
|
@@ -53,6 +37,7 @@ describe('Player', () => {
|
|
|
53
37
|
// Grab event manager from the uncompiled library:
|
|
54
38
|
eventManager = new shaka.util.EventManager();
|
|
55
39
|
waiter = new shaka.test.Waiter(eventManager);
|
|
40
|
+
waiter.setPlayer(player);
|
|
56
41
|
|
|
57
42
|
onErrorSpy = jasmine.createSpy('onError');
|
|
58
43
|
onErrorSpy.and.callFake((event) => {
|
|
@@ -299,7 +284,7 @@ describe('Player', () => {
|
|
|
299
284
|
expect(variantTrack.language).toBe(textTrack.language);
|
|
300
285
|
});
|
|
301
286
|
|
|
302
|
-
// Repro for https://github.com/
|
|
287
|
+
// Repro for https://github.com/shaka-project/shaka-player/issues/1879.
|
|
303
288
|
it('appends cues when enabled initially', async () => {
|
|
304
289
|
let cues = [];
|
|
305
290
|
/** @const {!shaka.test.FakeTextDisplayer} */
|
|
@@ -356,7 +341,7 @@ describe('Player', () => {
|
|
|
356
341
|
expect(cues.length).toBeGreaterThan(0);
|
|
357
342
|
});
|
|
358
343
|
|
|
359
|
-
// https://github.com/
|
|
344
|
+
// https://github.com/shaka-project/shaka-player/issues/2553
|
|
360
345
|
it('does not change the selected track', async () => {
|
|
361
346
|
player.configure('streaming.alwaysStreamText', false);
|
|
362
347
|
await player.load('test:forced_subs_simulation_compiled');
|
|
@@ -482,7 +467,7 @@ describe('Player', () => {
|
|
|
482
467
|
expect(configuredTextDisplayer).toBe(textDisplayer);
|
|
483
468
|
});
|
|
484
469
|
|
|
485
|
-
// Regression test for https://github.com/
|
|
470
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/1187
|
|
486
471
|
it('does not throw on destroy', async () => {
|
|
487
472
|
await player.load('test:sintel_compiled');
|
|
488
473
|
video.play();
|
|
@@ -513,7 +498,7 @@ describe('Player', () => {
|
|
|
513
498
|
// and the track selection was ignored. Because this bug involved
|
|
514
499
|
// interactions between Player and StreamingEngine, it is an integration
|
|
515
500
|
// test and not a unit test.
|
|
516
|
-
// https://github.com/
|
|
501
|
+
// https://github.com/shaka-project/shaka-player/issues/1119
|
|
517
502
|
it('allows early selection of specific tracks', async () => {
|
|
518
503
|
/** @type {!jasmine.Spy} */
|
|
519
504
|
const streamingListener = jasmine.createSpy('listener');
|
|
@@ -548,7 +533,7 @@ describe('Player', () => {
|
|
|
548
533
|
// switchingPeriods_ in Player. Because this bug involved interactions
|
|
549
534
|
// between Player and StreamingEngine, it is an integration test and not a
|
|
550
535
|
// unit test.
|
|
551
|
-
// https://github.com/
|
|
536
|
+
// https://github.com/shaka-project/shaka-player/issues/1119
|
|
552
537
|
it('allows selection of tracks in subsequent loads', async () => {
|
|
553
538
|
/** @type {!jasmine.Spy} */
|
|
554
539
|
const streamingListener = jasmine.createSpy('listener');
|
|
@@ -646,7 +631,9 @@ describe('Player', () => {
|
|
|
646
631
|
eventManager.listen(video, 'waiting', checkOnEvent);
|
|
647
632
|
eventManager.listen(player, 'trackschanged', checkOnEvent);
|
|
648
633
|
|
|
649
|
-
const waiter =
|
|
634
|
+
const waiter = new shaka.test.Waiter(eventManager)
|
|
635
|
+
.setPlayer(player)
|
|
636
|
+
.timeoutAfter(10);
|
|
650
637
|
const canPlayThrough = waiter.waitForEvent(video, 'canplaythrough');
|
|
651
638
|
|
|
652
639
|
await player.load('test:sintel_compiled', 5);
|
|
@@ -720,6 +707,7 @@ describe('Player', () => {
|
|
|
720
707
|
player.addEventListener('mediaqualitychanged',
|
|
721
708
|
Util.spyFunc(onQualityChange));
|
|
722
709
|
waiter = new shaka.test.Waiter(eventManager)
|
|
710
|
+
.setPlayer(player)
|
|
723
711
|
.timeoutAfter(10)
|
|
724
712
|
.failOnTimeout(true);
|
|
725
713
|
});
|
|
@@ -777,7 +765,9 @@ describe('Player', () => {
|
|
|
777
765
|
eventManager.listen(player, 'error', Util.spyFunc(onErrorSpy));
|
|
778
766
|
/** @type {shaka.test.Waiter} */
|
|
779
767
|
const waiter = new shaka.test.Waiter(eventManager)
|
|
780
|
-
.
|
|
768
|
+
.setPlayer(player)
|
|
769
|
+
.timeoutAfter(20)
|
|
770
|
+
.failOnTimeout(true);
|
|
781
771
|
await waiter.waitForEnd(video);
|
|
782
772
|
|
|
783
773
|
// The stream should have transitioned to VOD by now.
|
|
@@ -785,7 +775,7 @@ describe('Player', () => {
|
|
|
785
775
|
|
|
786
776
|
// Check that the final seek range is as expected.
|
|
787
777
|
const seekRange = player.seekRange();
|
|
788
|
-
expect(seekRange.end).
|
|
778
|
+
expect(seekRange.end).toBeCloseTo(14);
|
|
789
779
|
});
|
|
790
780
|
});
|
|
791
781
|
|
|
@@ -802,6 +792,7 @@ describe('Player', () => {
|
|
|
802
792
|
player.addEventListener('buffering', Util.spyFunc(onBuffering));
|
|
803
793
|
|
|
804
794
|
waiter = new shaka.test.Waiter(eventManager)
|
|
795
|
+
.setPlayer(player)
|
|
805
796
|
.timeoutAfter(10)
|
|
806
797
|
.failOnTimeout(true);
|
|
807
798
|
});
|
|
@@ -915,8 +906,7 @@ describe('Player', () => {
|
|
|
915
906
|
}
|
|
916
907
|
|
|
917
908
|
async function waitUntilBuffered(amount) {
|
|
918
|
-
for (
|
|
919
|
-
shaka.util.Functional.ignored(_);
|
|
909
|
+
for (let i = 0; i < 25; i++) {
|
|
920
910
|
// We buffer from an internal segment, so this shouldn't take long to
|
|
921
911
|
// buffer.
|
|
922
912
|
await Util.delay(0.1); // eslint-disable-line no-await-in-loop
|
|
@@ -993,7 +983,9 @@ describe('Player', () => {
|
|
|
993
983
|
|
|
994
984
|
/** @type {shaka.test.Waiter} */
|
|
995
985
|
const waiter = new shaka.test.Waiter(eventManager)
|
|
996
|
-
.
|
|
986
|
+
.setPlayer(player)
|
|
987
|
+
.timeoutAfter(1)
|
|
988
|
+
.failOnTimeout(true);
|
|
997
989
|
|
|
998
990
|
await waiter.waitForPromise(abrEnabled, 'AbrManager enabled');
|
|
999
991
|
|
|
@@ -1013,7 +1005,9 @@ describe('Player', () => {
|
|
|
1013
1005
|
|
|
1014
1006
|
/** @type {shaka.test.Waiter} */
|
|
1015
1007
|
const waiter = new shaka.test.Waiter(eventManager)
|
|
1016
|
-
.
|
|
1008
|
+
.setPlayer(player)
|
|
1009
|
+
.timeoutAfter(1)
|
|
1010
|
+
.failOnTimeout(true);
|
|
1017
1011
|
|
|
1018
1012
|
await waiter.waitForPromise(abrEnabled, 'AbrManager enabled');
|
|
1019
1013
|
|
|
@@ -1063,9 +1057,9 @@ describe('Player', () => {
|
|
|
1063
1057
|
it('add external chapters in vtt format', async () => {
|
|
1064
1058
|
await player.load('test:sintel_no_text_compiled');
|
|
1065
1059
|
const locationUri = new goog.Uri(location.href);
|
|
1066
|
-
const
|
|
1067
|
-
const
|
|
1068
|
-
await player.addChaptersTrack(
|
|
1060
|
+
const partialUri1 = new goog.Uri('/base/test/test/assets/chapters.vtt');
|
|
1061
|
+
const absoluteUri1 = locationUri.resolve(partialUri1);
|
|
1062
|
+
await player.addChaptersTrack(absoluteUri1.toString(), 'en');
|
|
1069
1063
|
|
|
1070
1064
|
await shaka.test.Util.delay(1.5);
|
|
1071
1065
|
|
|
@@ -1078,11 +1072,44 @@ describe('Player', () => {
|
|
|
1078
1072
|
const chapter2 = chapters[1];
|
|
1079
1073
|
expect(chapter2.title).toBe('Chapter 2');
|
|
1080
1074
|
expect(chapter2.startTime).toBe(5);
|
|
1081
|
-
expect(chapter2.endTime).toBe(
|
|
1075
|
+
expect(chapter2.endTime).toBe(10);
|
|
1082
1076
|
const chapter3 = chapters[2];
|
|
1083
1077
|
expect(chapter3.title).toBe('Chapter 3');
|
|
1084
|
-
expect(chapter3.startTime).toBe(
|
|
1085
|
-
expect(chapter3.endTime).toBe(
|
|
1078
|
+
expect(chapter3.startTime).toBe(10);
|
|
1079
|
+
expect(chapter3.endTime).toBe(20);
|
|
1080
|
+
|
|
1081
|
+
const partialUri2 = new goog.Uri('/base/test/test/assets/chapters2.vtt');
|
|
1082
|
+
const absoluteUri2 = locationUri.resolve(partialUri2);
|
|
1083
|
+
await player.addChaptersTrack(absoluteUri2.toString(), 'en');
|
|
1084
|
+
|
|
1085
|
+
await shaka.test.Util.delay(1.5);
|
|
1086
|
+
|
|
1087
|
+
const chaptersUpdated = player.getChapters('en');
|
|
1088
|
+
expect(chaptersUpdated.length).toBe(6);
|
|
1089
|
+
const chapterUpdated1 = chaptersUpdated[0];
|
|
1090
|
+
expect(chapterUpdated1.title).toBe('Chapter 1');
|
|
1091
|
+
expect(chapterUpdated1.startTime).toBe(0);
|
|
1092
|
+
expect(chapterUpdated1.endTime).toBe(5);
|
|
1093
|
+
const chapterUpdated2 = chaptersUpdated[1];
|
|
1094
|
+
expect(chapterUpdated2.title).toBe('Chapter 2');
|
|
1095
|
+
expect(chapterUpdated2.startTime).toBe(5);
|
|
1096
|
+
expect(chapterUpdated2.endTime).toBe(10);
|
|
1097
|
+
const chapterUpdated3 = chaptersUpdated[2];
|
|
1098
|
+
expect(chapterUpdated3.title).toBe('Chapter 3');
|
|
1099
|
+
expect(chapterUpdated3.startTime).toBe(10);
|
|
1100
|
+
expect(chapterUpdated3.endTime).toBe(20);
|
|
1101
|
+
const chapterUpdated4 = chaptersUpdated[3];
|
|
1102
|
+
expect(chapterUpdated4.title).toBe('Chapter 4');
|
|
1103
|
+
expect(chapterUpdated4.startTime).toBe(20);
|
|
1104
|
+
expect(chapterUpdated4.endTime).toBe(30);
|
|
1105
|
+
const chapterUpdated5 = chaptersUpdated[4];
|
|
1106
|
+
expect(chapterUpdated5.title).toBe('Chapter 5');
|
|
1107
|
+
expect(chapterUpdated5.startTime).toBe(30);
|
|
1108
|
+
expect(chapterUpdated5.endTime).toBe(40);
|
|
1109
|
+
const chapterUpdated6 = chaptersUpdated[5];
|
|
1110
|
+
expect(chapterUpdated6.title).toBe('Chapter 6');
|
|
1111
|
+
expect(chapterUpdated6.startTime).toBe(40);
|
|
1112
|
+
expect(chapterUpdated6.endTime).toBe(61.349);
|
|
1086
1113
|
});
|
|
1087
1114
|
|
|
1088
1115
|
it('add external chapters in srt format', async () => {
|
|
@@ -1090,11 +1117,11 @@ describe('Player', () => {
|
|
|
1090
1117
|
const locationUri = new goog.Uri(location.href);
|
|
1091
1118
|
const partialUri = new goog.Uri('/base/test/test/assets/chapters.srt');
|
|
1092
1119
|
const absoluteUri = locationUri.resolve(partialUri);
|
|
1093
|
-
await player.addChaptersTrack(absoluteUri.toString(), '
|
|
1120
|
+
await player.addChaptersTrack(absoluteUri.toString(), 'es');
|
|
1094
1121
|
|
|
1095
1122
|
await shaka.test.Util.delay(1.5);
|
|
1096
1123
|
|
|
1097
|
-
const chapters = player.getChapters('
|
|
1124
|
+
const chapters = player.getChapters('es');
|
|
1098
1125
|
expect(chapters.length).toBe(3);
|
|
1099
1126
|
const chapter1 = chapters[0];
|
|
1100
1127
|
expect(chapter1.title).toBe('Chapter 1');
|
|
@@ -4,11 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.Player');
|
|
8
|
-
goog.require('shaka.test.UiUtils');
|
|
9
|
-
goog.require('shaka.test.Util');
|
|
10
|
-
goog.require('shaka.util.Error');
|
|
11
|
-
|
|
12
7
|
describe('Player Load Graph', () => {
|
|
13
8
|
const SMALL_MP4_CONTENT_URI = '/base/test/test/assets/small.mp4';
|
|
14
9
|
|
|
@@ -124,7 +119,7 @@ describe('Player Load Graph', () => {
|
|
|
124
119
|
|
|
125
120
|
// There was a bug when calling unload before calling load would cause
|
|
126
121
|
// the load to continue before the (first) unload was complete.
|
|
127
|
-
// https://github.com/
|
|
122
|
+
// https://github.com/shaka-project/shaka-player/issues/612
|
|
128
123
|
it('load will wait for unload to finish', async () => {
|
|
129
124
|
createPlayer(/* attachedTo= */ null);
|
|
130
125
|
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.Player');
|
|
8
|
-
goog.require('shaka.test.UiUtils');
|
|
9
|
-
goog.require('shaka.test.Util');
|
|
10
|
-
goog.require('shaka.test.Waiter');
|
|
11
|
-
goog.require('shaka.util.EventManager');
|
|
12
|
-
|
|
13
7
|
describe('Player Src Equals', () => {
|
|
14
8
|
// This asset needs to be (1) long and (2) high bitrate so that we can
|
|
15
9
|
// invoke unbuffered seeks.
|
|
@@ -88,7 +82,7 @@ describe('Player Src Equals', () => {
|
|
|
88
82
|
expect(player.isBuffering()).toBeTruthy();
|
|
89
83
|
});
|
|
90
84
|
|
|
91
|
-
// A regression test for https://github.com/
|
|
85
|
+
// A regression test for https://github.com/shaka-project/shaka-player/issues/2523
|
|
92
86
|
it('detects subtitles in native HLS', async () => {
|
|
93
87
|
const supportsNativeHls =
|
|
94
88
|
video.canPlayType('application/vnd.apple.mpegurl') != '';
|
|
@@ -103,8 +97,8 @@ describe('Player Src Equals', () => {
|
|
|
103
97
|
});
|
|
104
98
|
|
|
105
99
|
// A regression test for
|
|
106
|
-
// https://github.com/
|
|
107
|
-
// and https://github.com/
|
|
100
|
+
// https://github.com/shaka-project/shaka-player/issues/2483#issuecomment-633412527
|
|
101
|
+
// and https://github.com/shaka-project/shaka-player/issues/2593
|
|
108
102
|
it('honors preferred audio and text languages', async () => {
|
|
109
103
|
const supportsNativeHls =
|
|
110
104
|
video.canPlayType('application/vnd.apple.mpegurl') != '';
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.Uri');
|
|
8
|
-
goog.require('shaka.Player');
|
|
9
|
-
goog.require('shaka.test.UiUtils');
|
|
10
|
-
goog.require('shaka.test.Util');
|
|
11
|
-
goog.require('shaka.test.Waiter');
|
|
12
|
-
goog.require('shaka.util.EventManager');
|
|
13
|
-
|
|
14
7
|
// These tests are for testing Shaka Player's integration with
|
|
15
8
|
// |HTMLMediaElement.src=|. These tests are to verify that all |shaka.Player|
|
|
16
9
|
// public methods behaviour correctly when playing content video |src=|.
|
|
@@ -330,9 +323,9 @@ describe('Player Src Equals', () => {
|
|
|
330
323
|
await loadWithSrcEquals(SMALL_MP4_CONTENT_URI, /* startTime= */ null);
|
|
331
324
|
|
|
332
325
|
const locationUri = new goog.Uri(location.href);
|
|
333
|
-
const
|
|
334
|
-
const
|
|
335
|
-
await player.addChaptersTrack(
|
|
326
|
+
const partialUri1 = new goog.Uri('/base/test/test/assets/chapters.vtt');
|
|
327
|
+
const absoluteUri1 = locationUri.resolve(partialUri1);
|
|
328
|
+
await player.addChaptersTrack(absoluteUri1.toString(), 'en');
|
|
336
329
|
|
|
337
330
|
await shaka.test.Util.delay(1.5);
|
|
338
331
|
|
|
@@ -345,11 +338,44 @@ describe('Player Src Equals', () => {
|
|
|
345
338
|
const chapter2 = chapters[1];
|
|
346
339
|
expect(chapter2.title).toBe('Chapter 2');
|
|
347
340
|
expect(chapter2.startTime).toBe(5);
|
|
348
|
-
expect(chapter2.endTime).toBe(
|
|
341
|
+
expect(chapter2.endTime).toBe(10);
|
|
349
342
|
const chapter3 = chapters[2];
|
|
350
343
|
expect(chapter3.title).toBe('Chapter 3');
|
|
351
|
-
expect(chapter3.startTime).toBe(
|
|
352
|
-
expect(chapter3.endTime).toBe(
|
|
344
|
+
expect(chapter3.startTime).toBe(10);
|
|
345
|
+
expect(chapter3.endTime).toBe(20);
|
|
346
|
+
|
|
347
|
+
const partialUri2 = new goog.Uri('/base/test/test/assets/chapters2.vtt');
|
|
348
|
+
const absoluteUri2 = locationUri.resolve(partialUri2);
|
|
349
|
+
await player.addChaptersTrack(absoluteUri2.toString(), 'en');
|
|
350
|
+
|
|
351
|
+
await shaka.test.Util.delay(1.5);
|
|
352
|
+
|
|
353
|
+
const chaptersUpdated = player.getChapters('en');
|
|
354
|
+
expect(chaptersUpdated.length).toBe(6);
|
|
355
|
+
const chapterUpdated1 = chaptersUpdated[0];
|
|
356
|
+
expect(chapterUpdated1.title).toBe('Chapter 1');
|
|
357
|
+
expect(chapterUpdated1.startTime).toBe(0);
|
|
358
|
+
expect(chapterUpdated1.endTime).toBe(5);
|
|
359
|
+
const chapterUpdated2 = chaptersUpdated[1];
|
|
360
|
+
expect(chapterUpdated2.title).toBe('Chapter 2');
|
|
361
|
+
expect(chapterUpdated2.startTime).toBe(5);
|
|
362
|
+
expect(chapterUpdated2.endTime).toBe(10);
|
|
363
|
+
const chapterUpdated3 = chaptersUpdated[2];
|
|
364
|
+
expect(chapterUpdated3.title).toBe('Chapter 3');
|
|
365
|
+
expect(chapterUpdated3.startTime).toBe(10);
|
|
366
|
+
expect(chapterUpdated3.endTime).toBe(20);
|
|
367
|
+
const chapterUpdated4 = chaptersUpdated[3];
|
|
368
|
+
expect(chapterUpdated4.title).toBe('Chapter 4');
|
|
369
|
+
expect(chapterUpdated4.startTime).toBe(20);
|
|
370
|
+
expect(chapterUpdated4.endTime).toBe(30);
|
|
371
|
+
const chapterUpdated5 = chaptersUpdated[4];
|
|
372
|
+
expect(chapterUpdated5.title).toBe('Chapter 5');
|
|
373
|
+
expect(chapterUpdated5.startTime).toBe(30);
|
|
374
|
+
expect(chapterUpdated5.endTime).toBe(40);
|
|
375
|
+
const chapterUpdated6 = chaptersUpdated[5];
|
|
376
|
+
expect(chapterUpdated6.title).toBe('Chapter 6');
|
|
377
|
+
expect(chapterUpdated6.startTime).toBe(40);
|
|
378
|
+
expect(chapterUpdated6.endTime).toBe(61.349);
|
|
353
379
|
});
|
|
354
380
|
|
|
355
381
|
it('add external chapters in srt format', async () => {
|
|
@@ -358,11 +384,11 @@ describe('Player Src Equals', () => {
|
|
|
358
384
|
const locationUri = new goog.Uri(location.href);
|
|
359
385
|
const partialUri = new goog.Uri('/base/test/test/assets/chapters.srt');
|
|
360
386
|
const absoluteUri = locationUri.resolve(partialUri);
|
|
361
|
-
await player.addChaptersTrack(absoluteUri.toString(), '
|
|
387
|
+
await player.addChaptersTrack(absoluteUri.toString(), 'es');
|
|
362
388
|
|
|
363
389
|
await shaka.test.Util.delay(1.5);
|
|
364
390
|
|
|
365
|
-
const chapters = player.getChapters('
|
|
391
|
+
const chapters = player.getChapters('es');
|
|
366
392
|
expect(chapters.length).toBe(3);
|
|
367
393
|
const chapter1 = chapters[0];
|
|
368
394
|
expect(chapter1.title).toBe('Chapter 1');
|
package/test/player_unit.js
CHANGED
|
@@ -4,30 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.asserts');
|
|
8
|
-
goog.require('shaka.Player');
|
|
9
|
-
goog.require('shaka.log');
|
|
10
|
-
goog.require('shaka.media.BufferingObserver');
|
|
11
|
-
goog.require('shaka.media.ManifestParser');
|
|
12
|
-
goog.require('shaka.media.PresentationTimeline');
|
|
13
|
-
goog.require('shaka.media.SegmentReference');
|
|
14
|
-
goog.require('shaka.media.SegmentIndex');
|
|
15
|
-
goog.require('shaka.test.FakeAbrManager');
|
|
16
|
-
goog.require('shaka.test.FakeDrmEngine');
|
|
17
|
-
goog.require('shaka.test.FakeManifestParser');
|
|
18
|
-
goog.require('shaka.test.FakeNetworkingEngine');
|
|
19
|
-
goog.require('shaka.test.FakePlayhead');
|
|
20
|
-
goog.require('shaka.test.FakeStreamingEngine');
|
|
21
|
-
goog.require('shaka.test.FakeTextDisplayer');
|
|
22
|
-
goog.require('shaka.test.FakeVideo');
|
|
23
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
24
|
-
goog.require('shaka.test.Util');
|
|
25
|
-
goog.require('shaka.util.ConfigUtils');
|
|
26
|
-
goog.require('shaka.util.Error');
|
|
27
|
-
goog.require('shaka.util.Iterables');
|
|
28
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
29
|
-
goog.requireType('shaka.media.Playhead');
|
|
30
|
-
|
|
31
7
|
describe('Player', () => {
|
|
32
8
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
33
9
|
const Util = shaka.test.Util;
|
|
@@ -36,7 +12,7 @@ describe('Player', () => {
|
|
|
36
12
|
const originalLogWarn = shaka.log.warning;
|
|
37
13
|
const originalLogAlwaysWarn = shaka.log.alwaysWarn;
|
|
38
14
|
const originalIsTypeSupported = window.MediaSource.isTypeSupported;
|
|
39
|
-
const originalDecodingInfo =
|
|
15
|
+
const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
|
|
40
16
|
|
|
41
17
|
const fakeManifestUri = 'fake-manifest-uri';
|
|
42
18
|
const fakeMimeType = 'application/test';
|
|
@@ -93,7 +69,7 @@ describe('Player', () => {
|
|
|
93
69
|
// Since this is not an integration test, we don't want MediaCapabilities to
|
|
94
70
|
// fail assertions based on browser support for types. Pretend that all
|
|
95
71
|
// video and audio types are supported.
|
|
96
|
-
|
|
72
|
+
navigator.mediaCapabilities.decodingInfo = async (config) => {
|
|
97
73
|
await Promise.resolve();
|
|
98
74
|
const videoType = config['video'] ?
|
|
99
75
|
config['video'].contentType.split('/')[0] : null;
|
|
@@ -177,7 +153,7 @@ describe('Player', () => {
|
|
|
177
153
|
shaka.log.alwaysWarn = originalLogAlwaysWarn;
|
|
178
154
|
window.MediaSource.isTypeSupported = originalIsTypeSupported;
|
|
179
155
|
shaka.media.ManifestParser.unregisterParserByMime(fakeMimeType);
|
|
180
|
-
|
|
156
|
+
navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
|
|
181
157
|
}
|
|
182
158
|
});
|
|
183
159
|
|
|
@@ -325,7 +301,7 @@ describe('Player', () => {
|
|
|
325
301
|
// We used to fire the event /before/ filtering, which meant that for
|
|
326
302
|
// multi-codec content, the application might select something which will
|
|
327
303
|
// later be removed during filtering.
|
|
328
|
-
// https://github.com/
|
|
304
|
+
// https://github.com/shaka-project/shaka-player/issues/1119
|
|
329
305
|
it('fires after tracks have been filtered', async () => {
|
|
330
306
|
streamingListener.and.callFake(() => {
|
|
331
307
|
const tracks = player.getVariantTracks();
|
|
@@ -621,7 +597,7 @@ describe('Player', () => {
|
|
|
621
597
|
expect(logWarnSpy).not.toHaveBeenCalled();
|
|
622
598
|
});
|
|
623
599
|
|
|
624
|
-
// Regression test for https://github.com/
|
|
600
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/784
|
|
625
601
|
it('does not throw when overwriting serverCertificate', () => {
|
|
626
602
|
player.configure({
|
|
627
603
|
drm: {
|
|
@@ -687,9 +663,9 @@ describe('Player', () => {
|
|
|
687
663
|
});
|
|
688
664
|
|
|
689
665
|
it('configures play and seek range for VOD', async () => {
|
|
690
|
-
player.configure({playRangeStart: 5, playRangeEnd: 10});
|
|
691
666
|
const timeline = new shaka.media.PresentationTimeline(300, 0);
|
|
692
667
|
timeline.setStatic(true);
|
|
668
|
+
timeline.setDuration(300);
|
|
693
669
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
694
670
|
manifest.presentationTimeline = timeline;
|
|
695
671
|
manifest.addVariant(0, (variant) => {
|
|
@@ -697,7 +673,46 @@ describe('Player', () => {
|
|
|
697
673
|
});
|
|
698
674
|
});
|
|
699
675
|
goog.asserts.assert(manifest, 'manifest must be non-null');
|
|
676
|
+
|
|
677
|
+
player.configure({playRangeStart: 5, playRangeEnd: 10});
|
|
700
678
|
await player.load(fakeManifestUri, 0, fakeMimeType);
|
|
679
|
+
|
|
680
|
+
const seekRange = player.seekRange();
|
|
681
|
+
expect(seekRange.start).toBe(5);
|
|
682
|
+
expect(seekRange.end).toBe(10);
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
// Test for https://github.com/shaka-project/shaka-player/issues/4026
|
|
686
|
+
it('configures play and seek range with notifySegments', async () => {
|
|
687
|
+
const timeline = new shaka.media.PresentationTimeline(300, 0);
|
|
688
|
+
timeline.setStatic(true);
|
|
689
|
+
// This duration is used by useSegmentTemplate below to decide how many
|
|
690
|
+
// references to generate.
|
|
691
|
+
timeline.setDuration(300);
|
|
692
|
+
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
693
|
+
manifest.presentationTimeline = timeline;
|
|
694
|
+
manifest.addVariant(0, (variant) => {
|
|
695
|
+
variant.addVideo(1, (stream) => {
|
|
696
|
+
stream.useSegmentTemplate(
|
|
697
|
+
'$Number$.mp4', /* segmentDuration= */ 10);
|
|
698
|
+
});
|
|
699
|
+
});
|
|
700
|
+
});
|
|
701
|
+
goog.asserts.assert(manifest, 'manifest must be non-null');
|
|
702
|
+
|
|
703
|
+
// Explicitly notify the timeline of the segment references.
|
|
704
|
+
const videoStream = manifest.variants[0].video;
|
|
705
|
+
await videoStream.createSegmentIndex();
|
|
706
|
+
goog.asserts.assert(videoStream.segmentIndex,
|
|
707
|
+
'SegmentIndex must be non-null');
|
|
708
|
+
const references = Array.from(videoStream.segmentIndex);
|
|
709
|
+
goog.asserts.assert(references.length != 0,
|
|
710
|
+
'Must have references for this test!');
|
|
711
|
+
timeline.notifySegments(references);
|
|
712
|
+
|
|
713
|
+
player.configure({playRangeStart: 5, playRangeEnd: 10});
|
|
714
|
+
await player.load(fakeManifestUri, 0, fakeMimeType);
|
|
715
|
+
|
|
701
716
|
const seekRange = player.seekRange();
|
|
702
717
|
expect(seekRange.start).toBe(5);
|
|
703
718
|
expect(seekRange.end).toBe(10);
|
|
@@ -798,7 +813,7 @@ describe('Player', () => {
|
|
|
798
813
|
expect(newConfig.streaming.bufferBehind).toBe(77);
|
|
799
814
|
});
|
|
800
815
|
|
|
801
|
-
// https://github.com/
|
|
816
|
+
// https://github.com/shaka-project/shaka-player/issues/1524
|
|
802
817
|
it('does not pollute other advanced DRM configs', () => {
|
|
803
818
|
player.configure('drm.advanced.foo', {});
|
|
804
819
|
player.configure('drm.advanced.bar', {});
|
|
@@ -1092,8 +1107,8 @@ describe('Player', () => {
|
|
|
1092
1107
|
// Image tracks
|
|
1093
1108
|
manifest.addImageStream(53, (stream) => {
|
|
1094
1109
|
stream.originalId = 'thumbnail';
|
|
1095
|
-
stream.width =
|
|
1096
|
-
stream.height =
|
|
1110
|
+
stream.width = 200;
|
|
1111
|
+
stream.height = 400;
|
|
1097
1112
|
stream.bandwidth = 10;
|
|
1098
1113
|
stream.mimeType = 'image/jpeg';
|
|
1099
1114
|
stream.tilesLayout = '1x1';
|
|
@@ -1503,8 +1518,8 @@ describe('Player', () => {
|
|
|
1503
1518
|
audioBandwidth: null,
|
|
1504
1519
|
videoBandwidth: null,
|
|
1505
1520
|
bandwidth: 10,
|
|
1506
|
-
width:
|
|
1507
|
-
height:
|
|
1521
|
+
width: 200,
|
|
1522
|
+
height: 400,
|
|
1508
1523
|
frameRate: null,
|
|
1509
1524
|
pixelAspectRatio: null,
|
|
1510
1525
|
hdr: null,
|
|
@@ -1668,8 +1683,8 @@ describe('Player', () => {
|
|
|
1668
1683
|
expect(getActiveTextTrack().id).toBe(spanishTextTrack.id);
|
|
1669
1684
|
});
|
|
1670
1685
|
|
|
1671
|
-
// Regression test for https://github.com/
|
|
1672
|
-
// and https://github.com/
|
|
1686
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/2906
|
|
1687
|
+
// and https://github.com/shaka-project/shaka-player/issues/2909.
|
|
1673
1688
|
it('selectAudioLanguage() can choose role-less tracks', async () => {
|
|
1674
1689
|
// For this test, we use a different (and simpler) manifest.
|
|
1675
1690
|
// Both audio tracks are English; one has a role, and one has no roles.
|
|
@@ -1729,7 +1744,7 @@ describe('Player', () => {
|
|
|
1729
1744
|
expect(getActiveVariantTrack().audioRoles).toEqual([]);
|
|
1730
1745
|
});
|
|
1731
1746
|
|
|
1732
|
-
// https://github.com/
|
|
1747
|
+
// https://github.com/shaka-project/shaka-player/issues/3262
|
|
1733
1748
|
it('selectAudioLanguage() doesn\'t change resolution', () => {
|
|
1734
1749
|
player.configure('abr.enabled', false);
|
|
1735
1750
|
abrManager.chooseIndex = 1;
|
|
@@ -1807,7 +1822,7 @@ describe('Player', () => {
|
|
|
1807
1822
|
expect(getActiveTextTrack().language).toBe('en');
|
|
1808
1823
|
});
|
|
1809
1824
|
|
|
1810
|
-
// https://github.com/
|
|
1825
|
+
// https://github.com/shaka-project/shaka-player/issues/2010
|
|
1811
1826
|
it('changing text lang changes active stream when not streaming', () => {
|
|
1812
1827
|
player.setTextTrackVisibility(false);
|
|
1813
1828
|
|
|
@@ -2112,8 +2127,8 @@ describe('Player', () => {
|
|
|
2112
2127
|
async function runTest(languages, preference, expectedIndex) {
|
|
2113
2128
|
// A manifest we can use to test language selection.
|
|
2114
2129
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
2115
|
-
|
|
2116
|
-
|
|
2130
|
+
for (let i = 0; i < languages.length; i++) {
|
|
2131
|
+
const lang = languages[i];
|
|
2117
2132
|
if (lang.charAt(0) == '*') {
|
|
2118
2133
|
manifest.addVariant(i, (variant) => {
|
|
2119
2134
|
variant.primary = true;
|
|
@@ -2463,7 +2478,7 @@ describe('Player', () => {
|
|
|
2463
2478
|
it('throws CONTENT_UNSUPPORTED_BY_BROWSER', async () => {
|
|
2464
2479
|
window.MediaSource.isTypeSupported = (mimeType) => false;
|
|
2465
2480
|
|
|
2466
|
-
|
|
2481
|
+
navigator.mediaCapabilities.decodingInfo = async (config) => {
|
|
2467
2482
|
await Promise.resolve();
|
|
2468
2483
|
return {supported: false};
|
|
2469
2484
|
};
|
|
@@ -2548,7 +2563,7 @@ describe('Player', () => {
|
|
|
2548
2563
|
expect(variants[0].id).toBe(2);
|
|
2549
2564
|
|
|
2550
2565
|
// Now increase the restriction, AbrManager should still be updated.
|
|
2551
|
-
// https://github.com/
|
|
2566
|
+
// https://github.com/shaka-project/shaka-player/issues/1533
|
|
2552
2567
|
abrManager.setVariants.calls.reset();
|
|
2553
2568
|
player.configure({restrictions: {maxBandwidth: Infinity}});
|
|
2554
2569
|
expect(abrManager.setVariants).toHaveBeenCalledTimes(1);
|
|
@@ -2827,7 +2842,7 @@ describe('Player', () => {
|
|
|
2827
2842
|
});
|
|
2828
2843
|
});
|
|
2829
2844
|
|
|
2830
|
-
|
|
2845
|
+
navigator.mediaCapabilities.decodingInfo = async (config) => {
|
|
2831
2846
|
await Promise.resolve();
|
|
2832
2847
|
const videoType = config['video'] ? config['video'].contentType : '';
|
|
2833
2848
|
if (videoType.includes('video') &&
|
|
@@ -3186,7 +3201,7 @@ describe('Player', () => {
|
|
|
3186
3201
|
// Most of our Player unit tests never adapt. This allowed some assertions
|
|
3187
3202
|
// to creep in that went uncaught until they happened during manual testing.
|
|
3188
3203
|
// Repro only happens with audio+video variants in which we only adapt one
|
|
3189
|
-
// type. This test covers https://github.com/
|
|
3204
|
+
// type. This test covers https://github.com/shaka-project/shaka-player/issues/954
|
|
3190
3205
|
|
|
3191
3206
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
3192
3207
|
manifest.addVariant(0, (variant) => {
|
|
@@ -3268,7 +3283,7 @@ describe('Player', () => {
|
|
|
3268
3283
|
|
|
3269
3284
|
describe('load', () => {
|
|
3270
3285
|
it('tolerates bandwidth of NaN, undefined, or 0', async () => {
|
|
3271
|
-
// Regression test for https://github.com/
|
|
3286
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/938
|
|
3272
3287
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
3273
3288
|
manifest.addVariant(0, (variant) => {
|
|
3274
3289
|
variant.bandwidth = /** @type {?} */(undefined);
|
|
@@ -3537,29 +3552,39 @@ describe('Player', () => {
|
|
|
3537
3552
|
|
|
3538
3553
|
await player.load(fakeManifestUri, 0, fakeMimeType);
|
|
3539
3554
|
|
|
3555
|
+
expect(player.getImageTracks()[0].width).toBe(100);
|
|
3556
|
+
expect(player.getImageTracks()[0].height).toBe(50);
|
|
3540
3557
|
const thumbnail0 = await player.getThumbnails(5, 0);
|
|
3541
3558
|
const thumbnail1 = await player.getThumbnails(5, 11);
|
|
3542
3559
|
const thumbnail2 = await player.getThumbnails(5, 21);
|
|
3543
3560
|
const thumbnail5 = await player.getThumbnails(5, 51);
|
|
3544
3561
|
expect(thumbnail0).toEqual(jasmine.objectContaining({
|
|
3562
|
+
imageHeight: 150,
|
|
3563
|
+
imageWidth: 200,
|
|
3545
3564
|
positionX: 0,
|
|
3546
3565
|
positionY: 0,
|
|
3547
3566
|
width: 100,
|
|
3548
3567
|
height: 50,
|
|
3549
3568
|
}));
|
|
3550
3569
|
expect(thumbnail1).toEqual(jasmine.objectContaining({
|
|
3570
|
+
imageHeight: 150,
|
|
3571
|
+
imageWidth: 200,
|
|
3551
3572
|
positionX: 100,
|
|
3552
3573
|
positionY: 0,
|
|
3553
3574
|
width: 100,
|
|
3554
3575
|
height: 50,
|
|
3555
3576
|
}));
|
|
3556
3577
|
expect(thumbnail2).toEqual(jasmine.objectContaining({
|
|
3578
|
+
imageHeight: 150,
|
|
3579
|
+
imageWidth: 200,
|
|
3557
3580
|
positionX: 0,
|
|
3558
3581
|
positionY: 50,
|
|
3559
3582
|
width: 100,
|
|
3560
3583
|
height: 50,
|
|
3561
3584
|
}));
|
|
3562
3585
|
expect(thumbnail5).toEqual(jasmine.objectContaining({
|
|
3586
|
+
imageHeight: 150,
|
|
3587
|
+
imageWidth: 200,
|
|
3563
3588
|
positionX: 100,
|
|
3564
3589
|
positionY: 100,
|
|
3565
3590
|
width: 100,
|
|
@@ -4,14 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.asserts');
|
|
8
|
-
goog.require('shaka.routing.Walker');
|
|
9
|
-
goog.require('shaka.test.Util');
|
|
10
|
-
goog.require('shaka.util.AbortableOperation');
|
|
11
|
-
goog.require('shaka.util.Error');
|
|
12
|
-
goog.require('shaka.util.PublicPromise');
|
|
13
|
-
goog.requireType('shaka.routing.Node');
|
|
14
|
-
|
|
15
7
|
describe('Walker', () => {
|
|
16
8
|
const AbortableOperation = shaka.util.AbortableOperation;
|
|
17
9
|
|