shaka-player 3.1.4 → 3.1.7
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/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 +1540 -1474
- 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 +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 +163 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +93 -28
- 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 +2 -2
- 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 +224 -218
- 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 +237 -222
- package/dist/shaka-player.compiled.debug.d.ts +237 -222
- package/dist/shaka-player.compiled.debug.externs.js +20 -3
- package/dist/shaka-player.compiled.debug.js +361 -365
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +20 -3
- package/dist/shaka-player.compiled.js +811 -815
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +281 -275
- package/dist/shaka-player.ui.debug.d.ts +281 -275
- package/dist/shaka-player.ui.debug.externs.js +34 -26
- package/dist/shaka-player.ui.debug.js +384 -389
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +34 -26
- package/dist/shaka-player.ui.js +945 -950
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- 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/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 +3 -3
- package/lib/cea/cea608_memory.js +1 -1
- package/lib/cea/cea708_service.js +6 -5
- package/lib/cea/cea_decoder.js +1 -1
- package/lib/cea/i_caption_decoder.js +2 -3
- package/lib/cea/mp4_cea_parser.js +11 -5
- package/lib/cea/sei_processor.js +6 -3
- package/lib/dash/dash_parser.js +43 -31
- 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 +11 -9
- package/lib/hls/manifest_text_parser.js +4 -3
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/closed_caption_parser.js +0 -1
- 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/region_observer.js +39 -33
- package/lib/media/region_timeline.js +17 -19
- 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 +14 -15
- package/lib/player.js +52 -22
- 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/routing/walker.js +2 -3
- package/lib/text/cue.js +7 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/text_engine.js +1 -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/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 +8 -9
- package/lib/util/platform.js +3 -3
- package/lib/util/pssh.js +1 -4
- package/lib/util/stream_utils.js +60 -8
- 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/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 +37 -18
- 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 +3 -17
- package/test/media/drm_engine_unit.js +7 -26
- 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/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 -25
- package/test/player_external.js +2 -10
- package/test/player_integration.js +21 -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 +57 -42
- 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 +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 +495 -237
- 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/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 +38 -37
- 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 +3 -0
- package/ui/less/ad_controls.less +4 -4
- package/ui/less/buttons.less +5 -9
- package/ui/less/containers.less +5 -7
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +5 -0
- 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
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.RegionTimeline');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
|
|
10
7
|
describe('RegionTimeline', () => {
|
|
11
8
|
/** @type {!shaka.media.RegionTimeline} */
|
|
12
9
|
let timeline;
|
|
@@ -14,18 +11,27 @@ describe('RegionTimeline', () => {
|
|
|
14
11
|
/** @type {!jasmine.Spy} */
|
|
15
12
|
let onNewRegion;
|
|
16
13
|
|
|
14
|
+
/** @type {!jasmine.Spy} */
|
|
15
|
+
let onRemoveRegion;
|
|
16
|
+
|
|
17
17
|
/** @type {!jasmine.Spy} */
|
|
18
18
|
let onSeekRange;
|
|
19
19
|
|
|
20
20
|
beforeEach(() => {
|
|
21
|
-
onNewRegion = jasmine.createSpy('onNewRegion');
|
|
22
|
-
|
|
23
21
|
onSeekRange = jasmine.createSpy('onSeekRange');
|
|
24
22
|
onSeekRange.and.returnValue({start: 0, end: 100});
|
|
25
|
-
|
|
26
23
|
timeline = new shaka.media.RegionTimeline(
|
|
27
24
|
shaka.test.Util.spyFunc(onSeekRange));
|
|
28
|
-
|
|
25
|
+
|
|
26
|
+
onNewRegion = jasmine.createSpy('onNewRegion');
|
|
27
|
+
timeline.addEventListener('regionadd', (event) => {
|
|
28
|
+
shaka.test.Util.spyFunc(onNewRegion)(event['region']);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
onRemoveRegion = jasmine.createSpy('onRemoveRegion');
|
|
32
|
+
timeline.addEventListener('regionremove', (event) => {
|
|
33
|
+
shaka.test.Util.spyFunc(onRemoveRegion)(event['region']);
|
|
34
|
+
});
|
|
29
35
|
});
|
|
30
36
|
|
|
31
37
|
afterEach(() => {
|
|
@@ -85,24 +91,33 @@ describe('RegionTimeline', () => {
|
|
|
85
91
|
]);
|
|
86
92
|
});
|
|
87
93
|
|
|
88
|
-
it('filters
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
94
|
+
it('filters regions that end before the seek range', async () => {
|
|
95
|
+
onSeekRange.and.returnValue({start: 5, end: 100});
|
|
96
|
+
|
|
97
|
+
const region1 = createRegion('urn:foo', 'my-region', 0, 3);
|
|
98
|
+
const region2 = createRegion('urn:foo', 'my-region', 3, 10);
|
|
99
|
+
const region3 = createRegion('urn:foo', 'my-region', 5, 10);
|
|
100
|
+
|
|
101
|
+
timeline.addRegion(region1);
|
|
102
|
+
timeline.addRegion(region2);
|
|
103
|
+
timeline.addRegion(region3);
|
|
104
|
+
expect(onNewRegion).toHaveBeenCalledTimes(3);
|
|
105
|
+
expect(onNewRegion).toHaveBeenCalledWith(region1);
|
|
106
|
+
expect(onNewRegion).toHaveBeenCalledWith(region2);
|
|
107
|
+
expect(onNewRegion).toHaveBeenCalledWith(region3);
|
|
108
|
+
|
|
109
|
+
let regions = Array.from(timeline.regions());
|
|
110
|
+
expect(regions.length).toBe(3);
|
|
111
|
+
|
|
112
|
+
// Give the timeline time to filter regions
|
|
113
|
+
await shaka.test.Util.delay(
|
|
114
|
+
shaka.media.RegionTimeline.REGION_FILTER_INTERVAL * 2);
|
|
115
|
+
|
|
116
|
+
regions = Array.from(timeline.regions());
|
|
117
|
+
expect(regions).toEqual([region2, region3]);
|
|
118
|
+
|
|
119
|
+
expect(onRemoveRegion).toHaveBeenCalledWith(region1);
|
|
120
|
+
});
|
|
106
121
|
|
|
107
122
|
/**
|
|
108
123
|
* @param {string} schemeIdUri
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.asserts');
|
|
8
|
-
goog.require('shaka.media.MetaSegmentIndex');
|
|
9
|
-
goog.require('shaka.media.SegmentIndex');
|
|
10
|
-
goog.require('shaka.media.SegmentReference');
|
|
11
|
-
goog.require('shaka.test.Util');
|
|
12
|
-
|
|
13
7
|
describe('SegmentIndex', /** @suppress {accessControls} */ () => {
|
|
14
8
|
const actual1 = makeReference(uri(0), 0, 10);
|
|
15
9
|
const actual2 = makeReference(uri(20), 10, 20);
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.InitSegmentReference');
|
|
8
|
-
goog.require('shaka.media.SegmentReference');
|
|
9
|
-
|
|
10
7
|
describe('SegmentReference', () => {
|
|
11
8
|
it('returns in getters values from constructor parameters', () => {
|
|
12
9
|
const initSegmentReference = new shaka.media.InitSegmentReference(
|
|
@@ -4,11 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('shaka.media.StallDetector');
|
|
9
|
-
goog.require('shaka.media.StallDetector.Implementation');
|
|
10
|
-
goog.require('shaka.test.Util');
|
|
11
|
-
|
|
12
7
|
describe('StallDetector', () => {
|
|
13
8
|
/**
|
|
14
9
|
* @implements {shaka.media.StallDetector.Implementation}
|
|
@@ -4,31 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.InitSegmentReference');
|
|
8
|
-
goog.require('shaka.media.MediaSourceEngine');
|
|
9
|
-
goog.require('shaka.media.MediaSourcePlayhead');
|
|
10
|
-
goog.require('shaka.media.SegmentIndex');
|
|
11
|
-
goog.require('shaka.media.SegmentReference');
|
|
12
|
-
goog.require('shaka.media.StreamingEngine');
|
|
13
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
14
|
-
goog.require('shaka.test.FakeClosedCaptionParser');
|
|
15
|
-
goog.require('shaka.test.FakeTextDisplayer');
|
|
16
|
-
goog.require('shaka.test.Mp4LiveStreamGenerator');
|
|
17
|
-
goog.require('shaka.test.Mp4VodStreamGenerator');
|
|
18
|
-
goog.require('shaka.test.StreamingEngineUtil');
|
|
19
|
-
goog.require('shaka.test.TestScheme');
|
|
20
|
-
goog.require('shaka.test.UiUtils');
|
|
21
|
-
goog.require('shaka.test.Util');
|
|
22
|
-
goog.require('shaka.test.Waiter');
|
|
23
|
-
goog.require('shaka.util.EventManager');
|
|
24
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
25
|
-
goog.require('shaka.util.Platform');
|
|
26
|
-
goog.require('shaka.util.PlayerConfiguration');
|
|
27
|
-
goog.requireType('shaka.media.Playhead');
|
|
28
|
-
goog.requireType('shaka.media.PresentationTimeline');
|
|
29
|
-
goog.requireType('shaka.test.FakeNetworkingEngine');
|
|
30
|
-
goog.requireType('shaka.test.FakePresentationTimeline');
|
|
31
|
-
|
|
32
7
|
describe('StreamingEngine', () => {
|
|
33
8
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
34
9
|
const Util = shaka.test.Util;
|
|
@@ -94,6 +69,7 @@ describe('StreamingEngine', () => {
|
|
|
94
69
|
video,
|
|
95
70
|
new shaka.test.FakeClosedCaptionParser(),
|
|
96
71
|
new shaka.test.FakeTextDisplayer());
|
|
72
|
+
waiter.setMediaSourceEngine(mediaSourceEngine);
|
|
97
73
|
});
|
|
98
74
|
|
|
99
75
|
afterEach(async () => {
|
|
@@ -286,7 +262,11 @@ describe('StreamingEngine', () => {
|
|
|
286
262
|
streamingEngine.switchVariant(variant);
|
|
287
263
|
await streamingEngine.start();
|
|
288
264
|
video.play();
|
|
289
|
-
|
|
265
|
+
// The overall test timeout is 120 seconds, and the content is 60
|
|
266
|
+
// seconds. It should be possible to complete this test in 100 seconds,
|
|
267
|
+
// and if not, we want the error thrown to be within the overall test's
|
|
268
|
+
// timeout window.
|
|
269
|
+
await waiter.timeoutAfter(100).waitForEnd(video);
|
|
290
270
|
});
|
|
291
271
|
|
|
292
272
|
it('plays at high playback rates', async () => {
|
|
@@ -307,14 +287,7 @@ describe('StreamingEngine', () => {
|
|
|
307
287
|
await waiter.timeoutAfter(10).waitForMovement(video);
|
|
308
288
|
video.playbackRate = 10;
|
|
309
289
|
|
|
310
|
-
|
|
311
|
-
// Edge, and Safari) where the playhead can go past duration.
|
|
312
|
-
// To cope with this, don't fail on timeout. If the video never got
|
|
313
|
-
// flagged as "ended", check for the playhead to be near or past the end.
|
|
314
|
-
await waiter.timeoutAfter(30).failOnTimeout(false).waitForEnd(video);
|
|
315
|
-
if (!video.ended) {
|
|
316
|
-
expect(video.currentTime).toBeGreaterThan(video.duration - 0.1);
|
|
317
|
-
}
|
|
290
|
+
await waiter.timeoutAfter(30).waitForEnd(video);
|
|
318
291
|
});
|
|
319
292
|
|
|
320
293
|
it('can handle buffered seeks', async () => {
|
|
@@ -324,9 +297,9 @@ describe('StreamingEngine', () => {
|
|
|
324
297
|
video.play();
|
|
325
298
|
|
|
326
299
|
// After 35 seconds seek back 10 seconds into the first Period.
|
|
327
|
-
await waiter.timeoutAfter(
|
|
300
|
+
await waiter.timeoutAfter(80).waitUntilPlayheadReaches(video, 35);
|
|
328
301
|
video.currentTime = 25;
|
|
329
|
-
await waiter.timeoutAfter(
|
|
302
|
+
await waiter.timeoutAfter(80).waitForEnd(video);
|
|
330
303
|
});
|
|
331
304
|
|
|
332
305
|
it('can handle unbuffered seeks', async () => {
|
|
@@ -419,8 +392,9 @@ describe('StreamingEngine', () => {
|
|
|
419
392
|
// 3. Playhead seeks to force us back inside the window
|
|
420
393
|
// 4. (maybe) seek if there is a gap at the period boundary
|
|
421
394
|
// 5. (maybe) seek to flush a pipeline stall
|
|
395
|
+
// 6. (maybe) on slower platforms (e.g. GitHub actions)
|
|
422
396
|
expect(seekCount).toBeGreaterThan(2);
|
|
423
|
-
expect(seekCount).toBeLessThan(
|
|
397
|
+
expect(seekCount).toBeLessThan(7);
|
|
424
398
|
});
|
|
425
399
|
});
|
|
426
400
|
|
|
@@ -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.log');
|
|
9
|
-
goog.require('shaka.media.InitSegmentReference');
|
|
10
|
-
goog.require('shaka.media.SegmentReference');
|
|
11
|
-
goog.require('shaka.media.StreamingEngine');
|
|
12
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
13
|
-
goog.require('shaka.net.NetworkingEngine.PendingRequest');
|
|
14
|
-
goog.require('shaka.test.FakeNetworkingEngine');
|
|
15
|
-
goog.require('shaka.test.FakeMediaSourceEngine');
|
|
16
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
17
|
-
goog.require('shaka.test.StreamingEngineUtil');
|
|
18
|
-
goog.require('shaka.test.Util');
|
|
19
|
-
goog.require('shaka.util.AbortableOperation');
|
|
20
|
-
goog.require('shaka.util.Error');
|
|
21
|
-
goog.require('shaka.util.Iterables');
|
|
22
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
23
|
-
goog.require('shaka.util.MimeUtils');
|
|
24
|
-
goog.require('shaka.util.PlayerConfiguration');
|
|
25
|
-
goog.require('shaka.util.PublicPromise');
|
|
26
|
-
goog.require('shaka.util.Uint8ArrayUtils');
|
|
27
|
-
goog.requireType('shaka.media.PresentationTimeline');
|
|
28
|
-
goog.requireType('shaka.test.FakeNetworkingEngine');
|
|
29
|
-
goog.requireType('shaka.test.FakePresentationTimeline');
|
|
30
|
-
|
|
31
7
|
describe('StreamingEngine', () => {
|
|
32
8
|
const Util = shaka.test.Util;
|
|
33
9
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
@@ -97,6 +73,9 @@ describe('StreamingEngine', () => {
|
|
|
97
73
|
/** @type {!shaka.media.StreamingEngine} */
|
|
98
74
|
let streamingEngine;
|
|
99
75
|
|
|
76
|
+
/** @type {function(function(), number)} */
|
|
77
|
+
let realSetTimeout;
|
|
78
|
+
|
|
100
79
|
/**
|
|
101
80
|
* Runs the fake event loop.
|
|
102
81
|
* @param {function()=} callback An optional callback that is executed
|
|
@@ -116,6 +95,7 @@ describe('StreamingEngine', () => {
|
|
|
116
95
|
}
|
|
117
96
|
|
|
118
97
|
beforeAll(() => {
|
|
98
|
+
realSetTimeout = window.setTimeout;
|
|
119
99
|
jasmine.clock().install();
|
|
120
100
|
jasmine.clock().mockDate();
|
|
121
101
|
});
|
|
@@ -280,7 +260,7 @@ describe('StreamingEngine', () => {
|
|
|
280
260
|
};
|
|
281
261
|
|
|
282
262
|
const segmentsInFirstPeriod = 12;
|
|
283
|
-
for (
|
|
263
|
+
for (let i = 0; i < segmentsInFirstPeriod; i++) {
|
|
284
264
|
segmentData[ContentType.AUDIO].segments.push(
|
|
285
265
|
makeBuffer(segmentSizes[ContentType.AUDIO]));
|
|
286
266
|
segmentData[ContentType.VIDEO].segments.push(
|
|
@@ -294,7 +274,7 @@ describe('StreamingEngine', () => {
|
|
|
294
274
|
}
|
|
295
275
|
|
|
296
276
|
const segmentsInSecondPeriod = 2;
|
|
297
|
-
for (
|
|
277
|
+
for (let i = 0; i < segmentsInSecondPeriod; i++) {
|
|
298
278
|
segmentData[ContentType.AUDIO].segments.push(
|
|
299
279
|
makeBuffer(segmentSizes[ContentType.AUDIO]));
|
|
300
280
|
segmentData[ContentType.VIDEO].segments.push(
|
|
@@ -645,7 +625,7 @@ describe('StreamingEngine', () => {
|
|
|
645
625
|
// should be buffered. Those segment numbers are 1-based, and this array
|
|
646
626
|
// is 0-based, so we expect i >= 9 to be downloaded.
|
|
647
627
|
const segments = mediaSourceEngine.segments;
|
|
648
|
-
for (
|
|
628
|
+
for (let i = 0; i < 14; i++) {
|
|
649
629
|
expect(segments[ContentType.AUDIO][i]).withContext(i).toBe(i >= 9);
|
|
650
630
|
expect(segments[ContentType.VIDEO][i]).withContext(i).toBe(i >= 9);
|
|
651
631
|
expect(segments[ContentType.TEXT][i]).withContext(i).toBe(i >= 9);
|
|
@@ -751,7 +731,7 @@ describe('StreamingEngine', () => {
|
|
|
751
731
|
expect(timeline.setDuration).toHaveBeenCalledWith(35);
|
|
752
732
|
});
|
|
753
733
|
|
|
754
|
-
// https://github.com/
|
|
734
|
+
// https://github.com/shaka-project/shaka-player/issues/979
|
|
755
735
|
it('does not expand the timeline duration', async () => {
|
|
756
736
|
setupVod();
|
|
757
737
|
mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
|
|
@@ -777,7 +757,7 @@ describe('StreamingEngine', () => {
|
|
|
777
757
|
expect(timeline.setDuration).not.toHaveBeenCalled();
|
|
778
758
|
});
|
|
779
759
|
|
|
780
|
-
// https://github.com/
|
|
760
|
+
// https://github.com/shaka-project/shaka-player/issues/1967
|
|
781
761
|
it('does not change duration when 0', async () => {
|
|
782
762
|
setupVod();
|
|
783
763
|
mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
|
|
@@ -822,6 +802,53 @@ describe('StreamingEngine', () => {
|
|
|
822
802
|
.toHaveBeenCalledWith('video', 0, lt20, gt40);
|
|
823
803
|
});
|
|
824
804
|
|
|
805
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/3717
|
|
806
|
+
it('applies fudge factors for the duration', async () => {
|
|
807
|
+
setupVod();
|
|
808
|
+
|
|
809
|
+
// In #3717, the duration was just barely large enough to encompass an
|
|
810
|
+
// additional segment, but that segment didn't exist, so playback never
|
|
811
|
+
// completed. Here, we set the duration to just beyond the 3rd segment, and
|
|
812
|
+
// we make the 4th segment fail when requested.
|
|
813
|
+
const duration = 30.000000005;
|
|
814
|
+
timeline.getDuration.and.returnValue(duration);
|
|
815
|
+
|
|
816
|
+
const targetUri = '1_video_3'; // The URI of the 4th video segment.
|
|
817
|
+
failRequestsForTarget(netEngine, targetUri);
|
|
818
|
+
|
|
819
|
+
mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
|
|
820
|
+
createStreamingEngine();
|
|
821
|
+
|
|
822
|
+
// Here we go!
|
|
823
|
+
streamingEngine.switchVariant(variant);
|
|
824
|
+
streamingEngine.switchTextStream(textStream);
|
|
825
|
+
await streamingEngine.start();
|
|
826
|
+
playing = true;
|
|
827
|
+
await runTest();
|
|
828
|
+
|
|
829
|
+
// The end of the stream should have been reached, and the 4th segment from
|
|
830
|
+
// each type should never have been requested.
|
|
831
|
+
expect(mediaSourceEngine.endOfStream).toHaveBeenCalled();
|
|
832
|
+
|
|
833
|
+
const segmentType = shaka.net.NetworkingEngine.RequestType.SEGMENT;
|
|
834
|
+
|
|
835
|
+
netEngine.expectRequest('0_audio_0', segmentType);
|
|
836
|
+
netEngine.expectRequest('0_video_0', segmentType);
|
|
837
|
+
netEngine.expectRequest('0_text_0', segmentType);
|
|
838
|
+
|
|
839
|
+
netEngine.expectRequest('0_audio_1', segmentType);
|
|
840
|
+
netEngine.expectRequest('0_video_1', segmentType);
|
|
841
|
+
netEngine.expectRequest('0_text_1', segmentType);
|
|
842
|
+
|
|
843
|
+
netEngine.expectRequest('1_audio_2', segmentType);
|
|
844
|
+
netEngine.expectRequest('1_video_2', segmentType);
|
|
845
|
+
netEngine.expectRequest('1_text_2', segmentType);
|
|
846
|
+
|
|
847
|
+
netEngine.expectNoRequest('1_audio_3', segmentType);
|
|
848
|
+
netEngine.expectNoRequest('1_video_3', segmentType);
|
|
849
|
+
netEngine.expectNoRequest('1_text_3', segmentType);
|
|
850
|
+
});
|
|
851
|
+
|
|
825
852
|
it('does not buffer one media type ahead of another', async () => {
|
|
826
853
|
setupVod();
|
|
827
854
|
mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
|
|
@@ -878,7 +905,7 @@ describe('StreamingEngine', () => {
|
|
|
878
905
|
expect(mediaSourceEngine.appendBuffer).toHaveBeenCalled();
|
|
879
906
|
});
|
|
880
907
|
|
|
881
|
-
// https://github.com/
|
|
908
|
+
// https://github.com/shaka-project/shaka-player/issues/2957
|
|
882
909
|
it('plays with fewer text segments', async () => {
|
|
883
910
|
setupVod();
|
|
884
911
|
|
|
@@ -1040,7 +1067,7 @@ describe('StreamingEngine', () => {
|
|
|
1040
1067
|
expect(mediaSourceEngine.resetCaptionParser).not.toHaveBeenCalled();
|
|
1041
1068
|
});
|
|
1042
1069
|
|
|
1043
|
-
// See https://github.com/
|
|
1070
|
+
// See https://github.com/shaka-project/shaka-player/issues/2956
|
|
1044
1071
|
it('works with fast variant switches during update', async () => {
|
|
1045
1072
|
// Delay the appendBuffer call until later so we are waiting for this to
|
|
1046
1073
|
// finish when we switch.
|
|
@@ -1389,6 +1416,66 @@ describe('StreamingEngine', () => {
|
|
|
1389
1416
|
});
|
|
1390
1417
|
});
|
|
1391
1418
|
|
|
1419
|
+
it('into unbuffered regions when nothing is buffered ' +
|
|
1420
|
+
'and mediaState is performing an update', async () => {
|
|
1421
|
+
// Here we go!
|
|
1422
|
+
streamingEngine.switchVariant(variant);
|
|
1423
|
+
streamingEngine.switchTextStream(textStream);
|
|
1424
|
+
// ensure init source buffer promise does not resolve before seeked()
|
|
1425
|
+
// so mediaState remains in "performingUpdate" state
|
|
1426
|
+
const initSourceBufferPromise = new shaka.util.PublicPromise();
|
|
1427
|
+
mediaSourceEngine.setStreamProperties.and
|
|
1428
|
+
.returnValue(initSourceBufferPromise);
|
|
1429
|
+
await streamingEngine.start();
|
|
1430
|
+
playing = true;
|
|
1431
|
+
|
|
1432
|
+
// tick to trigger mediaState updates
|
|
1433
|
+
jasmine.clock().tick(1);
|
|
1434
|
+
// give a chance for fetchAndAppend_ to be invoked
|
|
1435
|
+
// by async onUpdate_ callback
|
|
1436
|
+
await Util.shortDelay(realSetTimeout);
|
|
1437
|
+
|
|
1438
|
+
// Nothing is buffered yet.
|
|
1439
|
+
expect(mediaSourceEngine.segments).toEqual({
|
|
1440
|
+
audio: [false, false, false, false],
|
|
1441
|
+
video: [false, false, false, false],
|
|
1442
|
+
text: [false, false, false, false],
|
|
1443
|
+
});
|
|
1444
|
+
|
|
1445
|
+
// Seek forward to an unbuffered region in the first Period.
|
|
1446
|
+
presentationTimeInSeconds = 15;
|
|
1447
|
+
streamingEngine.seeked();
|
|
1448
|
+
|
|
1449
|
+
// resolve initSourceBufferPromise after seeked(), waitingToClearBuffer
|
|
1450
|
+
// should have been set, so this will now trigger the actual flush of
|
|
1451
|
+
// the buffer
|
|
1452
|
+
initSourceBufferPromise.resolve();
|
|
1453
|
+
mediaSourceEngine.setStreamProperties.and
|
|
1454
|
+
.returnValue(Promise.resolve());
|
|
1455
|
+
|
|
1456
|
+
// allow mediaState update to resolve
|
|
1457
|
+
await Util.shortDelay(realSetTimeout);
|
|
1458
|
+
|
|
1459
|
+
onTick.and.callFake(() => {
|
|
1460
|
+
expect(mediaSourceEngine.clear).toHaveBeenCalled();
|
|
1461
|
+
onTick.and.stub();
|
|
1462
|
+
});
|
|
1463
|
+
|
|
1464
|
+
await runTest(Util.spyFunc(onTick));
|
|
1465
|
+
|
|
1466
|
+
// Verify buffers.
|
|
1467
|
+
expect(mediaSourceEngine.initSegments).toEqual({
|
|
1468
|
+
audio: [false, true],
|
|
1469
|
+
video: [false, true],
|
|
1470
|
+
text: [],
|
|
1471
|
+
});
|
|
1472
|
+
expect(mediaSourceEngine.segments).toEqual({
|
|
1473
|
+
audio: [false, true, true, true],
|
|
1474
|
+
video: [false, true, true, true],
|
|
1475
|
+
text: [false, true, true, true],
|
|
1476
|
+
});
|
|
1477
|
+
});
|
|
1478
|
+
|
|
1392
1479
|
it('into unbuffered regions near segment start', async () => {
|
|
1393
1480
|
// Here we go!
|
|
1394
1481
|
streamingEngine.switchVariant(variant);
|
|
@@ -1548,7 +1635,7 @@ describe('StreamingEngine', () => {
|
|
|
1548
1635
|
});
|
|
1549
1636
|
});
|
|
1550
1637
|
|
|
1551
|
-
// https://github.com/
|
|
1638
|
+
// https://github.com/shaka-project/shaka-player/issues/2670
|
|
1552
1639
|
it('rapid unbuffered seeks', async () => {
|
|
1553
1640
|
// This test simulates rapid dragging of the seek bar, as in #2670.
|
|
1554
1641
|
// In that issue, we would buffer the wrong segments due to a race
|
|
@@ -1687,7 +1774,7 @@ describe('StreamingEngine', () => {
|
|
|
1687
1774
|
|
|
1688
1775
|
// Since we performed an unbuffered seek into the second Period, the
|
|
1689
1776
|
// first 12 segments should not be buffered.
|
|
1690
|
-
for (
|
|
1777
|
+
for (let i = 0; i < 14; i++) {
|
|
1691
1778
|
expect(mediaSourceEngine.segments[ContentType.AUDIO][i]).toBe(i >= 12);
|
|
1692
1779
|
expect(mediaSourceEngine.segments[ContentType.VIDEO][i]).toBe(i >= 12);
|
|
1693
1780
|
expect(mediaSourceEngine.segments[ContentType.TEXT][i]).toBe(i >= 12);
|
|
@@ -2489,7 +2576,7 @@ describe('StreamingEngine', () => {
|
|
|
2489
2576
|
// should be buffered. Those segment numbers are 1-based, and this array
|
|
2490
2577
|
// is 0-based, so we expect i >= 9 to be downloaded.
|
|
2491
2578
|
const segments = mediaSourceEngine.segments;
|
|
2492
|
-
for (
|
|
2579
|
+
for (let i = 0; i < 14; i++) {
|
|
2493
2580
|
expect(segments[ContentType.AUDIO][i]).withContext(i).toBe(i >= 9);
|
|
2494
2581
|
expect(segments[ContentType.VIDEO][i]).withContext(i).toBe(i >= 9);
|
|
2495
2582
|
expect(segments[ContentType.TEXT][i]).withContext(i).toBe(i >= 9);
|
|
@@ -3388,6 +3475,40 @@ describe('StreamingEngine', () => {
|
|
|
3388
3475
|
segmentAvailability.end++;
|
|
3389
3476
|
}
|
|
3390
3477
|
|
|
3478
|
+
/**
|
|
3479
|
+
* @param {!shaka.test.FakeNetworkingEngine} netEngine A NetworkingEngine
|
|
3480
|
+
* look-alike.
|
|
3481
|
+
* @param {string} targetUri
|
|
3482
|
+
* @param {shaka.util.Error.Code=} errorCode
|
|
3483
|
+
*/
|
|
3484
|
+
function failRequestsForTarget(
|
|
3485
|
+
netEngine, targetUri, errorCode=shaka.util.Error.Code.BAD_HTTP_STATUS) {
|
|
3486
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
3487
|
+
const originalNetEngineRequest = netEngine.request.bind(netEngine);
|
|
3488
|
+
|
|
3489
|
+
netEngine.request = jasmine.createSpy('request').and.callFake(
|
|
3490
|
+
(requestType, request) => {
|
|
3491
|
+
if (request.uris[0] == targetUri) {
|
|
3492
|
+
const data = [targetUri];
|
|
3493
|
+
|
|
3494
|
+
if (errorCode == shaka.util.Error.Code.BAD_HTTP_STATUS) {
|
|
3495
|
+
data.push(404);
|
|
3496
|
+
data.push('');
|
|
3497
|
+
}
|
|
3498
|
+
|
|
3499
|
+
// The compiler still sees the error code parameter as potentially
|
|
3500
|
+
// undefined, even though we gave it a default value.
|
|
3501
|
+
goog.asserts.assert(errorCode != undefined, 'Undefined error code');
|
|
3502
|
+
|
|
3503
|
+
return shaka.util.AbortableOperation.failed(new shaka.util.Error(
|
|
3504
|
+
shaka.util.Error.Severity.CRITICAL,
|
|
3505
|
+
shaka.util.Error.Category.NETWORK,
|
|
3506
|
+
errorCode, data));
|
|
3507
|
+
}
|
|
3508
|
+
return originalNetEngineRequest(requestType, request);
|
|
3509
|
+
});
|
|
3510
|
+
}
|
|
3511
|
+
|
|
3391
3512
|
/**
|
|
3392
3513
|
* @param {!shaka.test.FakeNetworkingEngine} netEngine A NetworkingEngine
|
|
3393
3514
|
* look-alike.
|
|
@@ -3,12 +3,6 @@
|
|
|
3
3
|
* Copyright 2016 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
goog.require('goog.asserts');
|
|
7
|
-
goog.require('shaka.media.Transmuxer');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
10
|
-
goog.require('shaka.util.Mp4BoxParsers');
|
|
11
|
-
goog.require('shaka.util.Mp4Parser');
|
|
12
6
|
|
|
13
7
|
describe('Transmuxer', () => {
|
|
14
8
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.WebmSegmentIndexParser');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
goog.require('shaka.util.Error');
|
|
10
|
-
|
|
11
7
|
describe('WebmSegmentIndexParser', () => {
|
|
12
8
|
const indexSegmentUri = '/base/test/test/assets/index-segment.webm';
|
|
13
9
|
const initSegmentUri = '/base/test/test/assets/init-segment.webm';
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.net.DataUriPlugin');
|
|
8
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
9
|
-
goog.require('shaka.net.NetworkingEngine.RequestType');
|
|
10
|
-
goog.require('shaka.test.Util');
|
|
11
|
-
goog.require('shaka.util.Error');
|
|
12
|
-
goog.require('shaka.util.StringUtils');
|
|
13
|
-
|
|
14
7
|
describe('DataUriPlugin', () => {
|
|
15
8
|
const retryParameters = shaka.net.NetworkingEngine.defaultRetryParameters();
|
|
16
9
|
|
|
@@ -4,15 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('shaka.net.HttpFetchPlugin');
|
|
9
|
-
goog.require('shaka.net.HttpXHRPlugin');
|
|
10
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
11
|
-
goog.require('shaka.net.NetworkingEngine.RequestType');
|
|
12
|
-
goog.require('shaka.test.Util');
|
|
13
|
-
goog.require('shaka.util.BufferUtils');
|
|
14
|
-
goog.require('shaka.util.Error');
|
|
15
|
-
|
|
16
7
|
/**
|
|
17
8
|
* Add a set of http plugin tests, for the given scheme plugin.
|
|
18
9
|
*
|
|
@@ -4,17 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.net.Backoff');
|
|
8
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
9
|
-
goog.require('shaka.net.NetworkingEngine.RequestType');
|
|
10
|
-
goog.require('shaka.test.StatusPromise');
|
|
11
|
-
goog.require('shaka.test.Util');
|
|
12
|
-
goog.require('shaka.util.AbortableOperation');
|
|
13
|
-
goog.require('shaka.util.Error');
|
|
14
|
-
goog.require('shaka.util.Networking');
|
|
15
|
-
goog.require('shaka.util.PublicPromise');
|
|
16
|
-
goog.requireType('shaka.net.NetworkingEngine.PendingRequest');
|
|
17
|
-
|
|
18
7
|
describe('NetworkingEngine', /** @suppress {accessControls} */ () => {
|
|
19
8
|
const StatusPromise = shaka.test.StatusPromise;
|
|
20
9
|
const Util = shaka.test.Util;
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.offline.indexeddb.V5StorageCell');
|
|
8
|
-
goog.require('shaka.test.IndexedDBUtils');
|
|
9
|
-
goog.require('shaka.test.OfflineUtils');
|
|
10
|
-
goog.require('shaka.test.Util');
|
|
11
|
-
goog.require('shaka.util.Error');
|
|
12
|
-
|
|
13
7
|
filterDescribe('IndexeddbStorageCell', () => window.indexedDB, () => {
|
|
14
8
|
const IndexedDBUtils = shaka.test.IndexedDBUtils;
|
|
15
9
|
const OfflineUtils = shaka.test.OfflineUtils;
|
|
@@ -4,14 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.InitSegmentReference');
|
|
8
|
-
goog.require('shaka.media.PresentationTimeline');
|
|
9
|
-
goog.require('shaka.media.SegmentIndex');
|
|
10
|
-
goog.require('shaka.offline.ManifestConverter');
|
|
11
|
-
goog.require('shaka.offline.OfflineUri');
|
|
12
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
13
|
-
goog.requireType('shaka.media.SegmentReference');
|
|
14
|
-
|
|
15
7
|
describe('ManifestConverter', () => {
|
|
16
8
|
describe('createVariants', () => {
|
|
17
9
|
const audioType = 'audio';
|
|
@@ -4,16 +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.offline.Storage');
|
|
10
|
-
goog.require('shaka.test.TestScheme');
|
|
11
|
-
goog.require('shaka.test.UiUtils');
|
|
12
|
-
goog.require('shaka.test.Util');
|
|
13
|
-
goog.require('shaka.test.Waiter');
|
|
14
|
-
goog.require('shaka.util.EventManager');
|
|
15
|
-
goog.require('shaka.util.Platform');
|
|
16
|
-
|
|
17
7
|
/** @return {boolean} */
|
|
18
8
|
const supportsStorage = () => shaka.offline.Storage.support();
|
|
19
9
|
|
|
@@ -45,6 +35,7 @@ filterDescribe('Offline', supportsStorage, () => {
|
|
|
45
35
|
|
|
46
36
|
eventManager = new shaka.util.EventManager();
|
|
47
37
|
waiter = new shaka.test.Waiter(eventManager);
|
|
38
|
+
waiter.setPlayer(player);
|
|
48
39
|
|
|
49
40
|
// Make sure we are starting with a blank slate.
|
|
50
41
|
await shaka.offline.Storage.deleteAll();
|