shaka-player 4.4.3 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/workflows/release-please.yaml +2 -27
- package/AUTHORS +2 -0
- package/CHANGELOG.md +156 -39
- package/CODE_OF_CONDUCT.md +1 -1
- package/CONTRIBUTORS +2 -0
- package/README.md +54 -42
- package/demo/asset_card.js +18 -21
- package/demo/cast_receiver/index.html +0 -1
- package/demo/close_button.js +0 -3
- package/demo/common/asset.js +33 -22
- package/demo/common/assets.js +249 -60
- package/demo/config.js +219 -253
- package/demo/custom.js +88 -133
- package/demo/front.js +7 -10
- package/demo/index.html +19 -22
- package/demo/input.js +6 -11
- package/demo/input_container.js +8 -9
- package/demo/main.js +62 -126
- package/demo/search.js +29 -34
- package/demo/service_worker.js +0 -3
- package/demo/tooltip.js +3 -5
- package/demo/visualizer.js +3 -5
- package/demo/visualizer_button.js +1 -20
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +211 -228
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +211 -228
- package/dist/demo.compiled.map +4 -4
- package/dist/deps.js +42 -37
- package/dist/locales.js +34 -30
- package/dist/receiver.compiled.debug.js +64 -77
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +64 -77
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +343 -151
- package/dist/shaka-player.compiled.debug.d.ts +343 -151
- package/dist/shaka-player.compiled.debug.externs.js +356 -117
- package/dist/shaka-player.compiled.debug.js +952 -811
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +356 -117
- package/dist/shaka-player.compiled.js +1165 -1078
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +359 -153
- package/dist/shaka-player.ui.debug.d.ts +359 -153
- package/dist/shaka-player.ui.debug.externs.js +382 -117
- package/dist/shaka-player.ui.debug.js +1084 -918
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +382 -117
- package/dist/shaka-player.ui.js +1377 -1274
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/lcevc-integration.md +14 -14
- package/docs/tutorials/ad_monetization.md +54 -0
- package/docs/tutorials/basic-usage.md +2 -1
- package/docs/tutorials/errors.md +2 -1
- package/docs/tutorials/faq.md +27 -55
- package/docs/tutorials/index.json +2 -1
- package/docs/tutorials/lcevc.md +118 -0
- package/docs/tutorials/offline.md +10 -8
- package/docs/tutorials/plugins.md +5 -0
- package/docs/tutorials/ui-customization.md +17 -0
- package/docs/tutorials/ui.md +2 -1
- package/docs/tutorials/upgrade.md +3 -0
- package/externs/css_style_declaration.js +19 -0
- package/externs/lcevc.js +37 -13
- package/externs/managedmediasource.js +24 -0
- package/externs/media_remote.js +68 -0
- package/externs/mediatailor.js +193 -0
- package/externs/pictureinpicture.js +11 -0
- package/externs/shaka/abr_manager.js +6 -2
- package/externs/shaka/ads.js +27 -0
- package/externs/shaka/cea.js +7 -0
- package/externs/shaka/codecs.js +5 -3
- package/externs/shaka/manifest.js +31 -10
- package/externs/shaka/manifest_parser.js +24 -1
- package/externs/shaka/net.js +2 -2
- package/externs/shaka/offline.js +13 -2
- package/externs/shaka/player.js +65 -8
- package/externs/shaka/text.js +3 -1
- package/externs/shaka/transmuxer.js +1 -1
- package/karma.conf.js +7 -3
- package/lib/abr/simple_abr_manager.js +66 -9
- package/lib/ads/ad_manager.js +104 -50
- package/lib/ads/media_tailor_ad.js +297 -0
- package/lib/ads/media_tailor_ad_manager.js +839 -0
- package/lib/cast/cast_receiver.js +1 -1
- package/lib/cea/cea_decoder.js +28 -0
- package/lib/cea/dummy_caption_decoder.js +5 -0
- package/lib/cea/ts_cea_parser.js +15 -2
- package/lib/config/codec_switching_strategy.js +24 -0
- package/lib/dash/content_protection.js +120 -2
- package/lib/dash/dash_parser.js +322 -93
- package/lib/dash/mpd_utils.js +62 -37
- package/lib/dash/segment_base.js +17 -10
- package/lib/dash/segment_list.js +18 -9
- package/lib/dash/segment_template.js +122 -107
- package/lib/dependencies/all.js +8 -7
- package/lib/hls/hls_classes.js +28 -43
- package/lib/hls/hls_parser.js +798 -658
- package/lib/hls/hls_utils.js +64 -5
- package/lib/hls/manifest_text_parser.js +7 -11
- package/lib/lcevc/lcevc_dec.js +220 -0
- package/lib/media/adaptation_set.js +32 -14
- package/lib/media/adaptation_set_criteria.js +86 -16
- package/lib/media/closed_caption_parser.js +13 -0
- package/lib/media/content_workarounds.js +6 -0
- package/lib/media/drm_engine.js +8 -13
- package/lib/media/manifest_parser.js +8 -113
- package/lib/media/media_source_capabilities.js +10 -3
- package/lib/media/media_source_engine.js +286 -44
- package/lib/media/play_rate_controller.js +8 -38
- package/lib/media/presentation_timeline.js +7 -1
- package/lib/media/quality_observer.js +1 -1
- package/lib/media/segment_index.js +6 -6
- package/lib/media/segment_prefetch.js +92 -24
- package/lib/media/segment_reference.js +73 -7
- package/lib/media/segment_utils.js +343 -0
- package/lib/media/stall_detector.js +0 -3
- package/lib/media/streaming_engine.js +73 -38
- package/lib/mss/mss_parser.js +19 -2
- package/lib/net/networking_engine.js +67 -12
- package/lib/net/networking_utils.js +95 -0
- package/lib/offline/indexeddb/v1_storage_cell.js +3 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +3 -0
- package/lib/offline/manifest_converter.js +3 -0
- package/lib/offline/offline_manifest_parser.js +10 -0
- package/lib/offline/storage.js +14 -7
- package/lib/player.js +1098 -1537
- package/lib/polyfill/mediasource.js +22 -1
- package/lib/text/cue.js +15 -0
- package/lib/text/mp4_ttml_parser.js +2 -2
- package/lib/text/srt_text_parser.js +2 -2
- package/lib/text/stub_text_displayer.js +51 -0
- package/lib/text/text_engine.js +3 -2
- package/lib/text/ttml_text_parser.js +45 -5
- package/lib/text/ui_text_displayer.js +8 -0
- package/lib/text/vtt_text_parser.js +40 -22
- package/lib/transmuxer/aac_transmuxer.js +1 -1
- package/lib/transmuxer/ac3_transmuxer.js +1 -1
- package/lib/transmuxer/ec3_transmuxer.js +1 -1
- package/lib/transmuxer/h264.js +5 -4
- package/lib/transmuxer/h265.js +863 -0
- package/lib/transmuxer/mp3_transmuxer.js +1 -1
- package/lib/transmuxer/mpeg_ts_transmuxer.js +4 -3
- package/lib/transmuxer/mss_transmuxer.js +1 -1
- package/lib/transmuxer/ts_transmuxer.js +187 -22
- package/lib/util/buffer_utils.js +26 -4
- package/lib/util/content_steering_manager.js +358 -0
- package/lib/util/error.js +30 -15
- package/lib/util/exp_golomb.js +30 -2
- package/lib/util/fairplay_utils.js +1 -1
- package/lib/util/fake_event.js +8 -1
- package/lib/util/id3_utils.js +50 -1
- package/lib/util/manifest_parser_utils.js +12 -8
- package/lib/util/mp4_generator.js +6 -8
- package/lib/util/mutex.js +59 -0
- package/lib/util/object_utils.js +1 -1
- package/lib/util/periods.js +156 -179
- package/lib/util/platform.js +44 -3
- package/lib/util/player_configuration.js +43 -6
- package/lib/util/state_history.js +6 -2
- package/lib/util/stream_utils.js +206 -283
- package/lib/util/ts_parser.js +335 -98
- package/lib/util/uint8array_utils.js +5 -1
- package/lib/util/xml_utils.js +5 -0
- package/maintained-branches.md +3 -2
- package/package.json +4 -6
- package/roadmap.md +25 -5
- package/shaka-player.uncompiled.js +2 -2
- package/support.html +0 -1
- package/test/abr/simple_abr_manager_unit.js +33 -33
- package/test/ads/ad_manager_unit.js +3 -2
- package/test/cast/cast_receiver_integration.js +50 -4
- package/test/cast/cast_utils_unit.js +2 -0
- package/test/cea/cea_decoder_unit.js +7 -0
- package/test/codec_switching/codec_switching_integration.js +182 -0
- package/test/dash/dash_parser_content_protection_unit.js +2 -0
- package/test/dash/dash_parser_integration.js +74 -0
- package/test/dash/dash_parser_live_unit.js +2 -19
- package/test/dash/dash_parser_manifest_unit.js +536 -2
- package/test/dash/dash_parser_segment_base_unit.js +2 -0
- package/test/dash/dash_parser_segment_list_unit.js +2 -0
- package/test/dash/dash_parser_segment_template_unit.js +2 -0
- package/test/dash/mpd_utils_unit.js +61 -30
- package/test/demo/demo_unit.js +0 -16
- package/test/hls/hls_live_unit.js +14 -3
- package/test/hls/hls_parser_unit.js +385 -33
- package/test/hls/manifest_text_parser_unit.js +32 -99
- package/test/media/adaptation_set_criteria_unit.js +284 -15
- package/test/media/adaptation_set_unit.js +2 -0
- package/test/media/content_workarounds_unit.js +1 -1
- package/test/media/drm_engine_unit.js +3 -3
- package/test/media/media_source_engine_unit.js +166 -2
- package/test/media/play_rate_controller_unit.js +0 -48
- package/test/media/segment_index_unit.js +5 -4
- package/test/media/segment_prefetch_unit.js +1 -1
- package/test/media/streaming_engine_unit.js +17 -17
- package/test/mss/mss_parser_unit.js +2 -0
- package/test/mss/mss_player_integration.js +3 -2
- package/test/net/networking_engine_unit.js +3 -3
- package/test/{media/manifest_parser_unit.js → net/networking_utils_unit.js} +2 -2
- package/test/offline/manifest_convert_unit.js +14 -0
- package/test/offline/offline_integration.js +2 -1
- package/test/offline/storage_integration.js +22 -13
- package/test/player_external.js +4 -2
- package/test/player_integration.js +15 -4
- package/test/player_load_graph_integration.js +47 -151
- package/test/player_src_equals_external.js +1 -0
- package/test/player_src_equals_integration.js +71 -4
- package/test/player_unit.js +182 -158
- package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/dash.mpd +18 -0
- package/test/test/assets/dash-aes-128/license +1 -0
- package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
- package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
- package/test/test/assets/dash-multi-codec/dash.mpd +32 -0
- package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
- package/test/test/assets/hls-ts-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-h265/hevc.m3u8 +6 -0
- package/test/test/assets/hls-ts-h265/index.m3u8 +7 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +9 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +24 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +14 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +23 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
- package/test/test/util/dash_parser_util.js +4 -0
- package/test/test/util/fake_ad_manager.js +20 -0
- package/test/test/util/fake_media_source_engine.js +13 -2
- package/test/test/util/fake_networking_engine.js +9 -1
- package/test/test/util/fake_segment_prefetch.js +3 -0
- package/test/test/util/manifest_generator.js +11 -3
- package/test/test/util/manifest_parser_util.js +14 -2
- package/test/test/util/mss_parser_util.js +4 -0
- package/test/test/util/offline_utils.js +2 -0
- package/test/test/util/simple_fakes.js +2 -2
- package/test/test/util/streaming_engine_util.js +10 -4
- package/test/test/util/test_scheme.js +6 -0
- package/test/test/util/ui_utils.js +4 -3
- package/test/text/mp4_ttml_parser_unit.js +4 -4
- package/test/text/srt_text_parser_unit.js +1 -1
- package/test/text/text_displayer_layout_unit.js +1 -1
- package/test/text/text_engine_unit.js +6 -0
- package/test/text/ttml_text_parser_unit.js +85 -2
- package/test/text/vtt_text_parser_unit.js +103 -31
- package/test/transmuxer/transmuxer_engine_integration.js +9 -0
- package/test/transmuxer/transmuxer_integration.js +150 -3
- package/test/ui/ad_ui_unit.js +2 -2
- package/test/ui/ui_customization_unit.js +17 -16
- package/test/ui/ui_integration.js +30 -20
- package/test/ui/ui_unit.js +28 -29
- package/test/util/buffer_utils_unit.js +1 -1
- package/test/util/content_steering_manager_unit.js +427 -0
- package/test/util/id3_utils_unit.js +52 -0
- package/test/util/stream_utils_unit.js +207 -169
- package/test/util/ts_parser_unit.js +3 -3
- package/third_party/closure-uri/uri.js +13 -1
- package/ui/audio_language_selection.js +9 -2
- package/ui/controls.js +125 -0
- package/ui/externs/ui.js +24 -2
- package/ui/language_utils.js +43 -8
- package/ui/less/range_elements.less +33 -0
- package/ui/locales/en.json +1 -0
- package/ui/locales/es-419.json +1 -0
- package/ui/locales/es.json +1 -0
- package/ui/locales/source.json +4 -0
- package/ui/localization.js +10 -0
- package/ui/pip_button.js +22 -120
- package/ui/remote_button.js +203 -0
- package/ui/resolution_selection.js +47 -10
- package/ui/seek_bar.js +296 -3
- package/ui/text_selection.js +2 -1
- package/ui/ui.js +11 -4
- package/demo/common/message_ids.js +0 -309
- package/demo/locales/en.json +0 -288
- package/demo/locales/source.json +0 -1146
- package/externs/mux.js +0 -69
- package/lib/lcevc/lcevc_dil.js +0 -152
- package/lib/routing/node.js +0 -23
- package/lib/routing/payload.js +0 -43
- package/lib/routing/walker.js +0 -587
- package/lib/transmuxer/muxjs_transmuxer.js +0 -242
- package/test/routing/walker_unit.js +0 -504
- package/test/transmuxer/muxjs_transmuxer_integration.js +0 -177
|
@@ -57,54 +57,6 @@ describe('PlayRateController', () => {
|
|
|
57
57
|
expect(setPlayRateSpy).toHaveBeenCalledWith(0);
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
it('buffering state sets rate to zero', () => {
|
|
61
|
-
controller.setBuffering(true);
|
|
62
|
-
expect(setPlayRateSpy).toHaveBeenCalledWith(0);
|
|
63
|
-
|
|
64
|
-
setPlayRateSpy.calls.reset();
|
|
65
|
-
|
|
66
|
-
controller.setBuffering(false);
|
|
67
|
-
expect(setPlayRateSpy).toHaveBeenCalledWith(1);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('entering buffering state twice has no effect', () => {
|
|
71
|
-
controller.setBuffering(true);
|
|
72
|
-
expect(setPlayRateSpy).toHaveBeenCalledWith(0);
|
|
73
|
-
|
|
74
|
-
// Reset the calls so that we can make sure it was not called again.
|
|
75
|
-
setPlayRateSpy.calls.reset();
|
|
76
|
-
|
|
77
|
-
controller.setBuffering(true);
|
|
78
|
-
expect(setPlayRateSpy).not.toHaveBeenCalled();
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('leaving buffering state twice has no effect', () => {
|
|
82
|
-
controller.setBuffering(true);
|
|
83
|
-
controller.setBuffering(false);
|
|
84
|
-
|
|
85
|
-
// Reset the calls so that we can make sure it was not called again.
|
|
86
|
-
setPlayRateSpy.calls.reset();
|
|
87
|
-
|
|
88
|
-
controller.setBuffering(false);
|
|
89
|
-
expect(setPlayRateSpy).not.toHaveBeenCalled();
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// When we set the rate while in a buffering state, we should see the new
|
|
93
|
-
// rate be used once we leave the buffering state.
|
|
94
|
-
it('set takes effect after buffering state ends', () => {
|
|
95
|
-
controller.setBuffering(true);
|
|
96
|
-
expect(setPlayRateSpy).toHaveBeenCalledWith(0);
|
|
97
|
-
|
|
98
|
-
// Reset so that we can make sure it was not called after we call |set(4)|.
|
|
99
|
-
setPlayRateSpy.calls.reset();
|
|
100
|
-
|
|
101
|
-
controller.set(4);
|
|
102
|
-
expect(setPlayRateSpy).not.toHaveBeenCalled();
|
|
103
|
-
|
|
104
|
-
controller.setBuffering(false);
|
|
105
|
-
expect(setPlayRateSpy).toHaveBeenCalledWith(4);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
60
|
// Make sure that when the playback rate set, if the new rate matches the
|
|
109
61
|
// current rate, the controller will not set the rate on the media element.
|
|
110
62
|
it('does not redundently set the playrate', () => {
|
|
@@ -223,7 +223,7 @@ describe('SegmentIndex', /** @suppress {accessControls} */ () => {
|
|
|
223
223
|
|
|
224
224
|
index.fit(/* windowStart= */ 0, /* windowEnd= */ 10);
|
|
225
225
|
expect(
|
|
226
|
-
index.references[index.references.length - 1].
|
|
226
|
+
index.references[index.references.length - 1].aes128Key,
|
|
227
227
|
).toEqual({method: 'AES-128', firstMediaSequenceNumber: 0});
|
|
228
228
|
});
|
|
229
229
|
});
|
|
@@ -1054,11 +1054,11 @@ describe('SegmentIndex', /** @suppress {accessControls} */ () => {
|
|
|
1054
1054
|
* @param {number} startTime
|
|
1055
1055
|
* @param {number} endTime
|
|
1056
1056
|
* @param {!Array.<!shaka.media.SegmentReference>=} partialReferences
|
|
1057
|
-
* @param {?shaka.extern.
|
|
1057
|
+
* @param {?shaka.extern.aes128Key=} aes128Key
|
|
1058
1058
|
* @return {shaka.media.SegmentReference}
|
|
1059
1059
|
*/
|
|
1060
1060
|
function makeReference(uri, startTime, endTime, partialReferences = [],
|
|
1061
|
-
|
|
1061
|
+
aes128Key = null) {
|
|
1062
1062
|
return new shaka.media.SegmentReference(
|
|
1063
1063
|
startTime,
|
|
1064
1064
|
endTime,
|
|
@@ -1074,6 +1074,7 @@ describe('SegmentIndex', /** @suppress {accessControls} */ () => {
|
|
|
1074
1074
|
/* tileDuration= */ undefined,
|
|
1075
1075
|
/* syncTime= */ undefined,
|
|
1076
1076
|
/* status= */ undefined,
|
|
1077
|
-
/*
|
|
1077
|
+
/* aes128Key= */ aes128Key,
|
|
1078
|
+
/* allPartialSegments= */ partialReferences.length > 0);
|
|
1078
1079
|
}
|
|
1079
1080
|
});
|
|
@@ -109,10 +109,10 @@ describe('StreamingEngine', () => {
|
|
|
109
109
|
/**
|
|
110
110
|
* @param {boolean=} trickMode
|
|
111
111
|
* @param {number=} mediaOffset The offset from 0 for the segment start times
|
|
112
|
-
* @param {shaka.extern.
|
|
112
|
+
* @param {shaka.extern.aes128Key=} aes128Key The AES-128 key to put in
|
|
113
113
|
* the manifest, if one should exist
|
|
114
114
|
*/
|
|
115
|
-
function setupVod(trickMode, mediaOffset,
|
|
115
|
+
function setupVod(trickMode, mediaOffset, aes128Key) {
|
|
116
116
|
// For VOD, we fake a presentation that has 2 Periods of equal duration
|
|
117
117
|
// (20 seconds), where each Period has 1 Variant and 1 text stream.
|
|
118
118
|
//
|
|
@@ -219,7 +219,7 @@ describe('StreamingEngine', () => {
|
|
|
219
219
|
/* firstPeriodStartTime= */ 0,
|
|
220
220
|
/* secondPeriodStartTime= */ 20,
|
|
221
221
|
/* presentationDuration= */ 40,
|
|
222
|
-
|
|
222
|
+
aes128Key);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
function setupLive() {
|
|
@@ -370,11 +370,11 @@ describe('StreamingEngine', () => {
|
|
|
370
370
|
* @param {number} firstPeriodStartTime
|
|
371
371
|
* @param {number} secondPeriodStartTime
|
|
372
372
|
* @param {number} presentationDuration
|
|
373
|
-
* @param {shaka.extern.
|
|
373
|
+
* @param {shaka.extern.aes128Key=} aes128Key
|
|
374
374
|
*/
|
|
375
375
|
function setupManifest(
|
|
376
376
|
firstPeriodStartTime, secondPeriodStartTime, presentationDuration,
|
|
377
|
-
|
|
377
|
+
aes128Key) {
|
|
378
378
|
const segmentDurations = {
|
|
379
379
|
audio: segmentData[ContentType.AUDIO].segmentDuration,
|
|
380
380
|
video: segmentData[ContentType.VIDEO].segmentDuration,
|
|
@@ -397,7 +397,7 @@ describe('StreamingEngine', () => {
|
|
|
397
397
|
/** @type {!shaka.media.PresentationTimeline} */(timeline),
|
|
398
398
|
[firstPeriodStartTime, secondPeriodStartTime],
|
|
399
399
|
presentationDuration, segmentDurations, initSegmentRanges,
|
|
400
|
-
timestampOffsets,
|
|
400
|
+
timestampOffsets, aes128Key);
|
|
401
401
|
|
|
402
402
|
audioStream = manifest.variants[0].audio;
|
|
403
403
|
videoStream = manifest.variants[0].video;
|
|
@@ -3809,8 +3809,8 @@ describe('StreamingEngine', () => {
|
|
|
3809
3809
|
|
|
3810
3810
|
describe('AES-128', () => {
|
|
3811
3811
|
let key;
|
|
3812
|
-
/** @type {!shaka.extern.
|
|
3813
|
-
let
|
|
3812
|
+
/** @type {!shaka.extern.aes128Key} */
|
|
3813
|
+
let aes128Key;
|
|
3814
3814
|
|
|
3815
3815
|
beforeEach(async () => {
|
|
3816
3816
|
// Get a key.
|
|
@@ -3823,10 +3823,10 @@ describe('StreamingEngine', () => {
|
|
|
3823
3823
|
// Set up a manifest with AES-128 key info.
|
|
3824
3824
|
// We don't actually provide the imported key OR the key fetching function
|
|
3825
3825
|
// here, though, so that the individual tests can choose what the starting
|
|
3826
|
-
// state of the
|
|
3827
|
-
|
|
3826
|
+
// state of the aes128Key object is.
|
|
3827
|
+
aes128Key = {method: 'AES-128', firstMediaSequenceNumber: 0};
|
|
3828
3828
|
|
|
3829
|
-
setupVod(false, 0,
|
|
3829
|
+
setupVod(false, 0, aes128Key);
|
|
3830
3830
|
mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
|
|
3831
3831
|
presentationTimeInSeconds = 0;
|
|
3832
3832
|
createStreamingEngine();
|
|
@@ -3851,22 +3851,22 @@ describe('StreamingEngine', () => {
|
|
|
3851
3851
|
}
|
|
3852
3852
|
|
|
3853
3853
|
it('decrypts segments', async () => {
|
|
3854
|
-
|
|
3854
|
+
aes128Key.cryptoKey = key;
|
|
3855
3855
|
await runTest();
|
|
3856
3856
|
});
|
|
3857
3857
|
|
|
3858
3858
|
it('downloads key if not pre-filled', async () => {
|
|
3859
|
-
|
|
3860
|
-
|
|
3861
|
-
|
|
3859
|
+
aes128Key.fetchKey = () => {
|
|
3860
|
+
aes128Key.cryptoKey = key;
|
|
3861
|
+
aes128Key.fetchKey = undefined;
|
|
3862
3862
|
return Promise.resolve();
|
|
3863
3863
|
};
|
|
3864
3864
|
|
|
3865
3865
|
await runTest();
|
|
3866
3866
|
|
|
3867
3867
|
// The key should have been fetched.
|
|
3868
|
-
expect(
|
|
3869
|
-
expect(
|
|
3868
|
+
expect(aes128Key.cryptoKey).not.toBeUndefined();
|
|
3869
|
+
expect(aes128Key.fetchKey).toBeUndefined();
|
|
3870
3870
|
});
|
|
3871
3871
|
});
|
|
3872
3872
|
|
|
@@ -38,8 +38,9 @@ describe('MSS Player', () => {
|
|
|
38
38
|
await shaka.test.Loader.loadShaka(getClientArg('uncompiled'));
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
beforeEach(() => {
|
|
42
|
-
player = new compiledShaka.Player(
|
|
41
|
+
beforeEach(async () => {
|
|
42
|
+
player = new compiledShaka.Player();
|
|
43
|
+
await player.attach(video);
|
|
43
44
|
|
|
44
45
|
// Make sure we are playing the lowest res available to avoid test flake
|
|
45
46
|
// based on network issues. Note that disabling ABR and setting a low
|
|
@@ -1166,14 +1166,14 @@ describe('NetworkingEngine', /** @suppress {accessControls} */ () => {
|
|
|
1166
1166
|
requestType, createRequest('resolve://'));
|
|
1167
1167
|
await Util.shortDelay(); // Allow Promises to resolve.
|
|
1168
1168
|
expect(onProgress).toHaveBeenCalledTimes(2);
|
|
1169
|
-
expect(onProgress).toHaveBeenCalledWith(1, 2);
|
|
1170
|
-
expect(onProgress).toHaveBeenCalledWith(4, 5);
|
|
1169
|
+
expect(onProgress).toHaveBeenCalledWith(1, 2, true);
|
|
1170
|
+
expect(onProgress).toHaveBeenCalledWith(4, 5, true);
|
|
1171
1171
|
onProgress.calls.reset();
|
|
1172
1172
|
|
|
1173
1173
|
delay.resolve();
|
|
1174
1174
|
await resp.promise;
|
|
1175
1175
|
expect(onProgress).toHaveBeenCalledTimes(1);
|
|
1176
|
-
expect(onProgress).toHaveBeenCalledWith(7, 8);
|
|
1176
|
+
expect(onProgress).toHaveBeenCalledWith(7, 8, true);
|
|
1177
1177
|
});
|
|
1178
1178
|
|
|
1179
1179
|
it('doesn\'t forward progress events for non-SEGMENT', async () => {
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
const testGetMimeType = async (expertedMimeType, contentType) => {
|
|
8
8
|
const netEngine = new shaka.test.FakeNetworkingEngine()
|
|
9
9
|
.setHeaders('dummy://foo', {'content-type': contentType});
|
|
10
|
-
const mimeType = await shaka.
|
|
10
|
+
const mimeType = await shaka.net.NetworkingUtils
|
|
11
11
|
.getMimeType('dummy://foo', netEngine,
|
|
12
12
|
shaka.net.NetworkingEngine.defaultRetryParameters());
|
|
13
13
|
expect(mimeType).toBe(expertedMimeType);
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
describe('
|
|
16
|
+
describe('NetworkingUtils', () => {
|
|
17
17
|
describe('getMimeType', () => {
|
|
18
18
|
it('test correct mimeType', () => {
|
|
19
19
|
testGetMimeType('application/dash+xml', 'application/dash+xml');
|
|
@@ -298,6 +298,7 @@ describe('ManifestConverter', () => {
|
|
|
298
298
|
const streamDB = {
|
|
299
299
|
id,
|
|
300
300
|
originalId: id.toString(),
|
|
301
|
+
groupId: null,
|
|
301
302
|
primary: false,
|
|
302
303
|
type,
|
|
303
304
|
mimeType: '',
|
|
@@ -318,6 +319,7 @@ describe('ManifestConverter', () => {
|
|
|
318
319
|
spatialAudio: false,
|
|
319
320
|
closedCaptions: null,
|
|
320
321
|
external: false,
|
|
322
|
+
fastSwitching: false,
|
|
321
323
|
};
|
|
322
324
|
|
|
323
325
|
return streamDB;
|
|
@@ -355,6 +357,7 @@ describe('ManifestConverter', () => {
|
|
|
355
357
|
return {
|
|
356
358
|
id,
|
|
357
359
|
originalId: id.toString(),
|
|
360
|
+
groupId: null,
|
|
358
361
|
primary: false,
|
|
359
362
|
type: ContentType.VIDEO,
|
|
360
363
|
mimeType: 'video/mp4',
|
|
@@ -362,6 +365,7 @@ describe('ManifestConverter', () => {
|
|
|
362
365
|
frameRate: 22,
|
|
363
366
|
pixelAspectRatio: '59:54',
|
|
364
367
|
hdr: undefined,
|
|
368
|
+
videoLayout: undefined,
|
|
365
369
|
kind: undefined,
|
|
366
370
|
language: '',
|
|
367
371
|
originalLanguage: null,
|
|
@@ -394,6 +398,7 @@ describe('ManifestConverter', () => {
|
|
|
394
398
|
tilesLayout: undefined,
|
|
395
399
|
accessibilityPurpose: null,
|
|
396
400
|
external: false,
|
|
401
|
+
fastSwitching: false,
|
|
397
402
|
};
|
|
398
403
|
}
|
|
399
404
|
|
|
@@ -407,6 +412,7 @@ describe('ManifestConverter', () => {
|
|
|
407
412
|
return {
|
|
408
413
|
id,
|
|
409
414
|
originalId: id.toString(),
|
|
415
|
+
groupId: null,
|
|
410
416
|
primary: false,
|
|
411
417
|
type: ContentType.AUDIO,
|
|
412
418
|
mimeType: 'audio/mp4',
|
|
@@ -414,6 +420,7 @@ describe('ManifestConverter', () => {
|
|
|
414
420
|
frameRate: undefined,
|
|
415
421
|
pixelAspectRatio: undefined,
|
|
416
422
|
hdr: undefined,
|
|
423
|
+
videoLayout: undefined,
|
|
417
424
|
kind: undefined,
|
|
418
425
|
language: 'en',
|
|
419
426
|
originalLanguage: 'en',
|
|
@@ -446,6 +453,7 @@ describe('ManifestConverter', () => {
|
|
|
446
453
|
tilesLayout: undefined,
|
|
447
454
|
accessibilityPurpose: null,
|
|
448
455
|
external: false,
|
|
456
|
+
fastSwitching: false,
|
|
449
457
|
};
|
|
450
458
|
}
|
|
451
459
|
|
|
@@ -458,6 +466,7 @@ describe('ManifestConverter', () => {
|
|
|
458
466
|
return {
|
|
459
467
|
id,
|
|
460
468
|
originalId: id.toString(),
|
|
469
|
+
groupId: null,
|
|
461
470
|
primary: false,
|
|
462
471
|
type: ContentType.TEXT,
|
|
463
472
|
mimeType: 'text/vtt',
|
|
@@ -465,6 +474,7 @@ describe('ManifestConverter', () => {
|
|
|
465
474
|
frameRate: undefined,
|
|
466
475
|
pixelAspectRatio: undefined,
|
|
467
476
|
hdr: undefined,
|
|
477
|
+
videoLayout: undefined,
|
|
468
478
|
kind: undefined,
|
|
469
479
|
language: 'en',
|
|
470
480
|
originalLanguage: 'en',
|
|
@@ -497,6 +507,7 @@ describe('ManifestConverter', () => {
|
|
|
497
507
|
tilesLayout: undefined,
|
|
498
508
|
accessibilityPurpose: null,
|
|
499
509
|
external: false,
|
|
510
|
+
fastSwitching: false,
|
|
500
511
|
};
|
|
501
512
|
}
|
|
502
513
|
|
|
@@ -516,6 +527,7 @@ describe('ManifestConverter', () => {
|
|
|
516
527
|
const expectedStream = {
|
|
517
528
|
id: jasmine.any(Number),
|
|
518
529
|
originalId: jasmine.any(String),
|
|
530
|
+
groupId: streamDb.groupId,
|
|
519
531
|
createSegmentIndex: jasmine.any(Function),
|
|
520
532
|
segmentIndex: jasmine.any(shaka.media.SegmentIndex),
|
|
521
533
|
mimeType: streamDb.mimeType,
|
|
@@ -523,6 +535,7 @@ describe('ManifestConverter', () => {
|
|
|
523
535
|
frameRate: streamDb.frameRate,
|
|
524
536
|
pixelAspectRatio: streamDb.pixelAspectRatio,
|
|
525
537
|
hdr: streamDb.hdr,
|
|
538
|
+
videoLayout: streamDb.videoLayout,
|
|
526
539
|
width: streamDb.width || undefined,
|
|
527
540
|
height: streamDb.height || undefined,
|
|
528
541
|
kind: streamDb.kind,
|
|
@@ -545,6 +558,7 @@ describe('ManifestConverter', () => {
|
|
|
545
558
|
tilesLayout: streamDb.tilesLayout,
|
|
546
559
|
accessibilityPurpose: null,
|
|
547
560
|
external: streamDb.external,
|
|
561
|
+
fastSwitching: streamDb.fastSwitching,
|
|
548
562
|
};
|
|
549
563
|
|
|
550
564
|
expect(stream).toEqual(expectedStream);
|
|
@@ -30,7 +30,8 @@ filterDescribe('Offline', supportsStorage, () => {
|
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
beforeEach(async () => {
|
|
33
|
-
player = new shaka.Player(
|
|
33
|
+
player = new shaka.Player();
|
|
34
|
+
await player.attach(video);
|
|
34
35
|
player.addEventListener('error', fail);
|
|
35
36
|
|
|
36
37
|
// Disable stall detection, which can interfere with playback tests.
|
|
@@ -269,7 +269,7 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
269
269
|
];
|
|
270
270
|
|
|
271
271
|
const selected =
|
|
272
|
-
PlayerConfiguration.defaultTrackSelect(tracks, englishUS);
|
|
272
|
+
PlayerConfiguration.defaultTrackSelect(tracks, englishUS, 'SDR');
|
|
273
273
|
expect(selected).toBeTruthy();
|
|
274
274
|
expect(selected.length).toBe(1);
|
|
275
275
|
expect(selected[0]).toBeTruthy();
|
|
@@ -285,7 +285,7 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
285
285
|
];
|
|
286
286
|
|
|
287
287
|
const selected =
|
|
288
|
-
PlayerConfiguration.defaultTrackSelect(tracks, englishUS);
|
|
288
|
+
PlayerConfiguration.defaultTrackSelect(tracks, englishUS, 'SDR');
|
|
289
289
|
expect(selected).toBeTruthy();
|
|
290
290
|
expect(selected.length).toBe(2);
|
|
291
291
|
for (const track of tracks) {
|
|
@@ -302,7 +302,7 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
302
302
|
];
|
|
303
303
|
|
|
304
304
|
const selected =
|
|
305
|
-
PlayerConfiguration.defaultTrackSelect(tracks, 'eng-us');
|
|
305
|
+
PlayerConfiguration.defaultTrackSelect(tracks, 'eng-us', 'SDR');
|
|
306
306
|
expect(selected).toBeTruthy();
|
|
307
307
|
expect(selected.length).toBe(1);
|
|
308
308
|
expect(selected[0]).toBeTruthy();
|
|
@@ -317,7 +317,8 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
317
317
|
variantTrack(3, 480, 'eng', kbps(1)),
|
|
318
318
|
];
|
|
319
319
|
|
|
320
|
-
const selected =
|
|
320
|
+
const selected =
|
|
321
|
+
PlayerConfiguration.defaultTrackSelect(tracks, 'eng', 'SDR');
|
|
321
322
|
expect(selected).toBeTruthy();
|
|
322
323
|
expect(selected.length).toBe(1);
|
|
323
324
|
expect(selected[0]).toBeTruthy();
|
|
@@ -331,7 +332,8 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
331
332
|
variantTrack(2, 480, 'eng-ca', kbps(1)),
|
|
332
333
|
];
|
|
333
334
|
|
|
334
|
-
const selected =
|
|
335
|
+
const selected =
|
|
336
|
+
PlayerConfiguration.defaultTrackSelect(tracks, 'fr', 'SDR');
|
|
335
337
|
expect(selected).toBeTruthy();
|
|
336
338
|
expect(selected.length).toBe(1);
|
|
337
339
|
expect(selected[0]).toBeTruthy();
|
|
@@ -346,7 +348,7 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
346
348
|
];
|
|
347
349
|
|
|
348
350
|
const selected =
|
|
349
|
-
PlayerConfiguration.defaultTrackSelect(tracks, 'fr-uk');
|
|
351
|
+
PlayerConfiguration.defaultTrackSelect(tracks, 'fr-uk', 'SDR');
|
|
350
352
|
expect(selected).toBeTruthy();
|
|
351
353
|
expect(selected.length).toBe(1);
|
|
352
354
|
expect(selected[0]).toBeTruthy();
|
|
@@ -362,7 +364,8 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
362
364
|
|
|
363
365
|
tracks[0].primary = true;
|
|
364
366
|
|
|
365
|
-
const selected =
|
|
367
|
+
const selected =
|
|
368
|
+
PlayerConfiguration.defaultTrackSelect(tracks, 'de', 'SDR');
|
|
366
369
|
expect(selected).toBeTruthy();
|
|
367
370
|
expect(selected.length).toBe(1);
|
|
368
371
|
expect(selected[0]).toBeTruthy();
|
|
@@ -736,15 +739,16 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
736
739
|
const videoElement = /** @type {!HTMLVideoElement} */(
|
|
737
740
|
document.createElement('video'));
|
|
738
741
|
|
|
739
|
-
beforeEach(() => {
|
|
742
|
+
beforeEach(async () => {
|
|
740
743
|
netEngine = makeNetworkEngine();
|
|
741
744
|
|
|
742
745
|
// Use a real Player since Storage only uses the configuration and
|
|
743
746
|
// networking engine. This allows us to use Player.configure in these
|
|
744
747
|
// tests.
|
|
745
|
-
player = new shaka.Player(
|
|
748
|
+
player = new shaka.Player(null, ((player) => {
|
|
746
749
|
player.createNetworkingEngine = () => netEngine;
|
|
747
750
|
}));
|
|
751
|
+
await player.attach(videoElement);
|
|
748
752
|
|
|
749
753
|
storage = new shaka.offline.Storage(player);
|
|
750
754
|
|
|
@@ -1382,6 +1386,7 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
1382
1386
|
frameRate: 30,
|
|
1383
1387
|
pixelAspectRatio: '59:54',
|
|
1384
1388
|
hdr: null,
|
|
1389
|
+
videoLayout: null,
|
|
1385
1390
|
mimeType: 'video/mp4,audio/mp4',
|
|
1386
1391
|
audioMimeType: 'audio/mp4',
|
|
1387
1392
|
videoMimeType: 'video/mp4',
|
|
@@ -1428,6 +1433,7 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
1428
1433
|
frameRate: null,
|
|
1429
1434
|
pixelAspectRatio: null,
|
|
1430
1435
|
hdr: null,
|
|
1436
|
+
videoLayout: null,
|
|
1431
1437
|
mimeType: 'text/vtt',
|
|
1432
1438
|
audioMimeType: null,
|
|
1433
1439
|
videoMimeType: null,
|
|
@@ -1530,10 +1536,7 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
1530
1536
|
manifest.addVariant(3, (variant) => {
|
|
1531
1537
|
variant.language = frenchCanadian;
|
|
1532
1538
|
variant.bandwidth = kbps(13);
|
|
1533
|
-
variant.
|
|
1534
|
-
stream.bandwidth = kbps(10);
|
|
1535
|
-
stream.size(100, 200);
|
|
1536
|
-
});
|
|
1539
|
+
variant.addExistingStream(1);
|
|
1537
1540
|
variant.addAudio(5, (stream) => {
|
|
1538
1541
|
stream.language = frenchCanadian;
|
|
1539
1542
|
stream.bandwidth = kbps(3);
|
|
@@ -1745,6 +1748,12 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
1745
1748
|
|
|
1746
1749
|
/** @override */
|
|
1747
1750
|
onExpirationUpdated(session, number) {}
|
|
1751
|
+
|
|
1752
|
+
/** @override */
|
|
1753
|
+
onInitialVariantChosen(variant) {}
|
|
1754
|
+
|
|
1755
|
+
/** @override */
|
|
1756
|
+
banLocation(uri) {}
|
|
1748
1757
|
};
|
|
1749
1758
|
|
|
1750
1759
|
/**
|
package/test/player_external.js
CHANGED
|
@@ -33,8 +33,9 @@ describe('Player', () => {
|
|
|
33
33
|
support = await compiledShaka.Player.probeSupport();
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
beforeEach(() => {
|
|
37
|
-
player = new compiledShaka.Player(
|
|
36
|
+
beforeEach(async () => {
|
|
37
|
+
player = new compiledShaka.Player();
|
|
38
|
+
await player.attach(video);
|
|
38
39
|
|
|
39
40
|
// Make sure we are playing the lowest res available to avoid test flake
|
|
40
41
|
// based on network issues. Note that disabling ABR and setting a low
|
|
@@ -68,6 +69,7 @@ describe('Player', () => {
|
|
|
68
69
|
eventManager.release();
|
|
69
70
|
|
|
70
71
|
await player.destroy();
|
|
72
|
+
player.releaseAllMutexes();
|
|
71
73
|
});
|
|
72
74
|
|
|
73
75
|
afterAll(() => {
|
|
@@ -32,7 +32,8 @@ describe('Player', () => {
|
|
|
32
32
|
|
|
33
33
|
beforeEach(async () => {
|
|
34
34
|
await shaka.test.TestScheme.createManifests(compiledShaka, '_compiled');
|
|
35
|
-
player = new compiledShaka.Player(
|
|
35
|
+
player = new compiledShaka.Player();
|
|
36
|
+
await player.attach(video);
|
|
36
37
|
|
|
37
38
|
// Disable stall detection, which can interfere with playback tests.
|
|
38
39
|
player.configure('streaming.stallEnabled', false);
|
|
@@ -53,6 +54,7 @@ describe('Player', () => {
|
|
|
53
54
|
eventManager.release();
|
|
54
55
|
|
|
55
56
|
await player.destroy();
|
|
57
|
+
player.releaseAllMutexes();
|
|
56
58
|
});
|
|
57
59
|
|
|
58
60
|
afterAll(() => {
|
|
@@ -83,7 +85,8 @@ describe('Player', () => {
|
|
|
83
85
|
|
|
84
86
|
// Unlike the other tests in this file, this uses an uncompiled build of
|
|
85
87
|
// Shaka, so that we don't need to expose shaka.util.Timer.activeTimers.
|
|
86
|
-
player = new shaka.Player(
|
|
88
|
+
player = new shaka.Player();
|
|
89
|
+
await player.attach(video);
|
|
87
90
|
|
|
88
91
|
// Disable stall detection, which can interfere with playback tests.
|
|
89
92
|
player.configure('streaming.stallEnabled', false);
|
|
@@ -672,7 +675,8 @@ describe('Player', () => {
|
|
|
672
675
|
// uncompiled version. Then we will get assertions.
|
|
673
676
|
eventManager.unlisten(player, 'error');
|
|
674
677
|
await player.destroy();
|
|
675
|
-
player = new shaka.Player(
|
|
678
|
+
player = new shaka.Player(); // NOTE: MUST BE UNCOMPILED
|
|
679
|
+
await player.attach(video);
|
|
676
680
|
player.configure({abr: {enabled: false}});
|
|
677
681
|
eventManager.listen(player, 'error', Util.spyFunc(onErrorSpy));
|
|
678
682
|
|
|
@@ -707,7 +711,8 @@ describe('Player', () => {
|
|
|
707
711
|
// uncompiled version. Then we will get assertions.
|
|
708
712
|
eventManager.unlisten(player, 'error');
|
|
709
713
|
await player.destroy();
|
|
710
|
-
player = new shaka.Player(
|
|
714
|
+
player = new shaka.Player(); // NOTE: MUST BE UNCOMPILED
|
|
715
|
+
await player.attach(video);
|
|
711
716
|
player.configure({abr: {enabled: false}});
|
|
712
717
|
eventManager.listen(player, 'error', Util.spyFunc(onErrorSpy));
|
|
713
718
|
|
|
@@ -1332,6 +1337,9 @@ describe('Player', () => {
|
|
|
1332
1337
|
expect(thumbnail3.positionX).toBe(160);
|
|
1333
1338
|
expect(thumbnail3.positionY).toBe(90);
|
|
1334
1339
|
expect(thumbnail3.width).toBe(160);
|
|
1340
|
+
|
|
1341
|
+
const thumbnails = await player.getAllThumbnails(newTrack.id);
|
|
1342
|
+
expect(thumbnails.length).toBe(3);
|
|
1335
1343
|
});
|
|
1336
1344
|
|
|
1337
1345
|
it('appends thumbnails for external thumbnails without sprites',
|
|
@@ -1355,6 +1363,9 @@ describe('Player', () => {
|
|
|
1355
1363
|
const thumbnail3 = await player.getThumbnails(newTrack.id, 40);
|
|
1356
1364
|
expect(thumbnail3.startTime).toBe(30);
|
|
1357
1365
|
expect(thumbnail3.duration).toBe(30);
|
|
1366
|
+
|
|
1367
|
+
const thumbnails = await player.getAllThumbnails(newTrack.id);
|
|
1368
|
+
expect(thumbnails.length).toBe(3);
|
|
1358
1369
|
});
|
|
1359
1370
|
}); // describe('addThumbnailsTrack')
|
|
1360
1371
|
});
|