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
package/test/player_unit.js
CHANGED
|
@@ -48,7 +48,7 @@ describe('Player', () => {
|
|
|
48
48
|
/** @type {!shaka.test.FakeVideo} */
|
|
49
49
|
let video;
|
|
50
50
|
|
|
51
|
-
beforeEach(() => {
|
|
51
|
+
beforeEach(async () => {
|
|
52
52
|
// By default, errors are a failure.
|
|
53
53
|
logErrorSpy = jasmine.createSpy('shaka.log.error');
|
|
54
54
|
logErrorSpy.calls.reset();
|
|
@@ -92,7 +92,7 @@ describe('Player', () => {
|
|
|
92
92
|
variant.addVideo(2);
|
|
93
93
|
});
|
|
94
94
|
manifest.addVariant(1, (variant) => {
|
|
95
|
-
variant.addAudio(
|
|
95
|
+
variant.addAudio(1);
|
|
96
96
|
variant.addVideo(4);
|
|
97
97
|
});
|
|
98
98
|
});
|
|
@@ -124,12 +124,13 @@ describe('Player', () => {
|
|
|
124
124
|
open: jasmine.createSpy('open').and.returnValue(Promise.resolve()),
|
|
125
125
|
destroy:
|
|
126
126
|
jasmine.createSpy('destroy').and.returnValue(Promise.resolve()),
|
|
127
|
+
setTextDisplayer: jasmine.createSpy('setTextDisplayer'),
|
|
127
128
|
setUseEmbeddedText: jasmine.createSpy('setUseEmbeddedText'),
|
|
128
129
|
getUseEmbeddedText: jasmine.createSpy('getUseEmbeddedText'),
|
|
129
130
|
setSegmentRelativeVttTiming:
|
|
130
131
|
jasmine.createSpy('setSegmentRelativeVttTiming'),
|
|
131
|
-
|
|
132
|
-
jasmine.createSpy('
|
|
132
|
+
updateLcevcDec:
|
|
133
|
+
jasmine.createSpy('updateLcevcDec'),
|
|
133
134
|
getTextDisplayer: () => textDisplayer,
|
|
134
135
|
getBufferedInfo: () => bufferedInfo,
|
|
135
136
|
ended: jasmine.createSpy('ended').and.returnValue(false),
|
|
@@ -151,7 +152,8 @@ describe('Player', () => {
|
|
|
151
152
|
}
|
|
152
153
|
|
|
153
154
|
video = new shaka.test.FakeVideo(20);
|
|
154
|
-
player = new shaka.Player(
|
|
155
|
+
player = new shaka.Player(null, dependencyInjector);
|
|
156
|
+
await player.attach(video);
|
|
155
157
|
player.configure({
|
|
156
158
|
// Ensures we don't get a warning about missing preference.
|
|
157
159
|
preferredAudioLanguage: 'en',
|
|
@@ -170,6 +172,7 @@ describe('Player', () => {
|
|
|
170
172
|
try {
|
|
171
173
|
await player.destroy();
|
|
172
174
|
} finally {
|
|
175
|
+
player.releaseAllMutexes();
|
|
173
176
|
shaka.log.error = originalLogError;
|
|
174
177
|
shaka.log.alwaysError = originalLogError;
|
|
175
178
|
shaka.log.warning = originalLogWarn;
|
|
@@ -184,6 +187,7 @@ describe('Player', () => {
|
|
|
184
187
|
describe('destroy', () => {
|
|
185
188
|
it('cleans up all dependencies', async () => {
|
|
186
189
|
goog.asserts.assert(manifest, 'Manifest should be non-null');
|
|
190
|
+
await player.load(fakeManifestUri, 0, fakeMimeType);
|
|
187
191
|
const segmentIndexes = [];
|
|
188
192
|
for (const variant of manifest.variants) {
|
|
189
193
|
if (variant.audio) {
|
|
@@ -233,31 +237,6 @@ describe('Player', () => {
|
|
|
233
237
|
expect(mediaSourceEngine.destroy).toHaveBeenCalled();
|
|
234
238
|
expect(drmEngine.destroy).toHaveBeenCalled();
|
|
235
239
|
});
|
|
236
|
-
|
|
237
|
-
// TODO(vaage): Re-enable once the parser is integrated into the load graph
|
|
238
|
-
// better.
|
|
239
|
-
xit('destroys parser first when interrupting load', async () => {
|
|
240
|
-
const p = shaka.test.Util.shortDelay();
|
|
241
|
-
/** @type {!shaka.test.FakeManifestParser} */
|
|
242
|
-
const parser = new shaka.test.FakeManifestParser(manifest);
|
|
243
|
-
parser.start.and.returnValue(p);
|
|
244
|
-
parser.stop.and.callFake(() => {
|
|
245
|
-
expect(abrManager.stop).not.toHaveBeenCalled();
|
|
246
|
-
expect(abrManager.release).not.toHaveBeenCalled();
|
|
247
|
-
expect(networkingEngine.destroy).not.toHaveBeenCalled();
|
|
248
|
-
});
|
|
249
|
-
shaka.media.ManifestParser.registerParserByMime(
|
|
250
|
-
fakeMimeType, () => parser);
|
|
251
|
-
|
|
252
|
-
const load = player.load(fakeManifestUri, 0, fakeMimeType);
|
|
253
|
-
await shaka.test.Util.shortDelay();
|
|
254
|
-
await player.destroy();
|
|
255
|
-
expect(abrManager.stop).toHaveBeenCalled();
|
|
256
|
-
expect(abrManager.release).toHaveBeenCalled();
|
|
257
|
-
expect(networkingEngine.destroy).toHaveBeenCalled();
|
|
258
|
-
expect(parser.stop).toHaveBeenCalled();
|
|
259
|
-
await expectAsync(load).toBeRejected();
|
|
260
|
-
});
|
|
261
240
|
});
|
|
262
241
|
|
|
263
242
|
describe('load/unload', () => {
|
|
@@ -340,15 +319,12 @@ describe('Player', () => {
|
|
|
340
319
|
});
|
|
341
320
|
|
|
342
321
|
describe('disableStream', () => {
|
|
343
|
-
/** @type {function(function(), number)} */
|
|
344
|
-
let realSetTimeout;
|
|
345
322
|
/** @type {number} */
|
|
346
323
|
let disableTimeInSeconds;
|
|
347
324
|
/** @type {?jasmine.Spy} */
|
|
348
325
|
let getBufferedInfoSpy;
|
|
349
326
|
|
|
350
327
|
beforeAll(() => {
|
|
351
|
-
realSetTimeout = window.setTimeout;
|
|
352
328
|
jasmine.clock().install();
|
|
353
329
|
jasmine.clock().mockDate();
|
|
354
330
|
});
|
|
@@ -381,15 +357,21 @@ describe('Player', () => {
|
|
|
381
357
|
stream.mime('audio/mp4', 'mp4a.40.2');
|
|
382
358
|
stream.language = 'en';
|
|
383
359
|
});
|
|
384
|
-
variant.addVideo(2)
|
|
360
|
+
variant.addVideo(2, (stream) => {
|
|
361
|
+
stream.size(10, 10);
|
|
362
|
+
});
|
|
385
363
|
});
|
|
386
364
|
manifest.addVariant(1, (variant) => {
|
|
387
365
|
variant.addExistingStream(1);
|
|
388
|
-
variant.addVideo(3)
|
|
366
|
+
variant.addVideo(3, (stream) => {
|
|
367
|
+
stream.size(20, 20);
|
|
368
|
+
});
|
|
389
369
|
});
|
|
390
370
|
manifest.addVariant(2, (variant) => {
|
|
391
371
|
variant.addExistingStream(1);
|
|
392
|
-
variant.addVideo(4)
|
|
372
|
+
variant.addVideo(4, (stream) => {
|
|
373
|
+
stream.size(30, 30);
|
|
374
|
+
});
|
|
393
375
|
});
|
|
394
376
|
});
|
|
395
377
|
}
|
|
@@ -498,102 +480,6 @@ describe('Player', () => {
|
|
|
498
480
|
expect(fromAdaptation).toBeFalsy();
|
|
499
481
|
});
|
|
500
482
|
|
|
501
|
-
it('disables all variants containing stream', async () => {
|
|
502
|
-
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
503
|
-
manifest.addVariant(0, (variant) => {
|
|
504
|
-
variant.addAudio(1, (stream) => {
|
|
505
|
-
stream.mime('audio/mp4', 'mp4a.40.2');
|
|
506
|
-
stream.language = 'en';
|
|
507
|
-
stream.bandwidth = 100;
|
|
508
|
-
});
|
|
509
|
-
variant.addVideo(2);
|
|
510
|
-
});
|
|
511
|
-
manifest.addVariant(1, (variant) => {
|
|
512
|
-
variant.addExistingStream(1);
|
|
513
|
-
variant.addVideo(3);
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
manifest.addVariant(2, (variant) => {
|
|
517
|
-
variant.addAudio(4, (stream) => {
|
|
518
|
-
stream.mime('audio/mp4', 'mp4a.40.2');
|
|
519
|
-
stream.language = 'en';
|
|
520
|
-
stream.bandwidth = 200;
|
|
521
|
-
});
|
|
522
|
-
variant.addExistingStream(2);
|
|
523
|
-
});
|
|
524
|
-
manifest.addVariant(3, (variant) => {
|
|
525
|
-
variant.addExistingStream(4);
|
|
526
|
-
variant.addExistingStream(3);
|
|
527
|
-
});
|
|
528
|
-
});
|
|
529
|
-
|
|
530
|
-
await player.load(fakeManifestUri, 0, fakeMimeType);
|
|
531
|
-
|
|
532
|
-
const variantCount = manifest.variants.length;
|
|
533
|
-
const variantAffected = 2;
|
|
534
|
-
const audioStream =
|
|
535
|
-
/** @type {shaka.extern.Stream} */ (manifest.variants[0].audio);
|
|
536
|
-
|
|
537
|
-
player.disableStream(audioStream, disableTimeInSeconds);
|
|
538
|
-
|
|
539
|
-
await shaka.test.Util.shortDelay(realSetTimeout);
|
|
540
|
-
|
|
541
|
-
expect(abrManager.setVariants).toHaveBeenCalled();
|
|
542
|
-
|
|
543
|
-
const updatedVariants =
|
|
544
|
-
abrManager.setVariants.calls.mostRecent().args[0];
|
|
545
|
-
|
|
546
|
-
expect(updatedVariants.length).toBe(variantCount - variantAffected);
|
|
547
|
-
|
|
548
|
-
for (const variant of updatedVariants) {
|
|
549
|
-
expect(variant.audio).not.toEqual(audioStream);
|
|
550
|
-
}
|
|
551
|
-
});
|
|
552
|
-
|
|
553
|
-
it('does not disable streams if abr is disabled', async () => {
|
|
554
|
-
await player.load(fakeManifestUri, 0, fakeMimeType);
|
|
555
|
-
|
|
556
|
-
player.configure({abr: {enabled: true}});
|
|
557
|
-
|
|
558
|
-
const videoStream =
|
|
559
|
-
/** @type {shaka.extern.Stream} */ (manifest.variants[0].video);
|
|
560
|
-
let status = player.disableStream(videoStream, 10);
|
|
561
|
-
expect(status).toBe(true);
|
|
562
|
-
|
|
563
|
-
player.configure({abr: {enabled: false}});
|
|
564
|
-
|
|
565
|
-
status = player.disableStream(videoStream, 10);
|
|
566
|
-
expect(status).toBe(false);
|
|
567
|
-
});
|
|
568
|
-
|
|
569
|
-
it('disables stream if have alternate stream', async () => {
|
|
570
|
-
// Run test with the default manifest
|
|
571
|
-
await runTest(0, 'video', true);
|
|
572
|
-
|
|
573
|
-
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
574
|
-
manifest.addVariant(0, (variant) => {
|
|
575
|
-
variant.addAudio(1, (stream) => {
|
|
576
|
-
stream.mime('audio/mp4', 'mp4a.40.2');
|
|
577
|
-
stream.language = 'en';
|
|
578
|
-
stream.bandwidth = 10;
|
|
579
|
-
});
|
|
580
|
-
variant.addVideo(2);
|
|
581
|
-
});
|
|
582
|
-
manifest.addVariant(1, (variant) => {
|
|
583
|
-
variant.addAudio(3, (stream) => {
|
|
584
|
-
stream.mime('audio/mp4', 'mp4a.40.2');
|
|
585
|
-
stream.language = 'en';
|
|
586
|
-
stream.bandwidth = 20;
|
|
587
|
-
});
|
|
588
|
-
variant.addExistingStream(2);
|
|
589
|
-
});
|
|
590
|
-
});
|
|
591
|
-
|
|
592
|
-
player.configure({abr: {enabled: true}});
|
|
593
|
-
|
|
594
|
-
await runTest(0, 'audio', true);
|
|
595
|
-
});
|
|
596
|
-
|
|
597
483
|
describe('does not disable stream if there not alternate stream', () => {
|
|
598
484
|
it('single audio multiple videos', async () => {
|
|
599
485
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
@@ -1595,6 +1481,7 @@ describe('Player', () => {
|
|
|
1595
1481
|
frameRate: 1000000 / 42000,
|
|
1596
1482
|
pixelAspectRatio: '59:54',
|
|
1597
1483
|
hdr: null,
|
|
1484
|
+
videoLayout: null,
|
|
1598
1485
|
mimeType: 'video/mp4',
|
|
1599
1486
|
audioMimeType: 'audio/mp4',
|
|
1600
1487
|
videoMimeType: 'video/mp4',
|
|
@@ -1633,6 +1520,7 @@ describe('Player', () => {
|
|
|
1633
1520
|
frameRate: 24,
|
|
1634
1521
|
pixelAspectRatio: '59:54',
|
|
1635
1522
|
hdr: null,
|
|
1523
|
+
videoLayout: null,
|
|
1636
1524
|
mimeType: 'video/mp4',
|
|
1637
1525
|
audioMimeType: 'audio/mp4',
|
|
1638
1526
|
videoMimeType: 'video/mp4',
|
|
@@ -1671,6 +1559,7 @@ describe('Player', () => {
|
|
|
1671
1559
|
frameRate: 1000000 / 42000,
|
|
1672
1560
|
pixelAspectRatio: '59:54',
|
|
1673
1561
|
hdr: null,
|
|
1562
|
+
videoLayout: null,
|
|
1674
1563
|
mimeType: 'video/mp4',
|
|
1675
1564
|
audioMimeType: 'audio/mp4',
|
|
1676
1565
|
videoMimeType: 'video/mp4',
|
|
@@ -1709,6 +1598,7 @@ describe('Player', () => {
|
|
|
1709
1598
|
frameRate: 24,
|
|
1710
1599
|
pixelAspectRatio: '59:54',
|
|
1711
1600
|
hdr: null,
|
|
1601
|
+
videoLayout: null,
|
|
1712
1602
|
mimeType: 'video/mp4',
|
|
1713
1603
|
audioMimeType: 'audio/mp4',
|
|
1714
1604
|
videoMimeType: 'video/mp4',
|
|
@@ -1747,6 +1637,7 @@ describe('Player', () => {
|
|
|
1747
1637
|
frameRate: 1000000 / 42000,
|
|
1748
1638
|
pixelAspectRatio: '59:54',
|
|
1749
1639
|
hdr: null,
|
|
1640
|
+
videoLayout: null,
|
|
1750
1641
|
mimeType: 'video/mp4',
|
|
1751
1642
|
audioMimeType: 'audio/mp4',
|
|
1752
1643
|
videoMimeType: 'video/mp4',
|
|
@@ -1785,6 +1676,7 @@ describe('Player', () => {
|
|
|
1785
1676
|
frameRate: 24,
|
|
1786
1677
|
pixelAspectRatio: '59:54',
|
|
1787
1678
|
hdr: null,
|
|
1679
|
+
videoLayout: null,
|
|
1788
1680
|
mimeType: 'video/mp4',
|
|
1789
1681
|
audioMimeType: 'audio/mp4',
|
|
1790
1682
|
videoMimeType: 'video/mp4',
|
|
@@ -1823,6 +1715,7 @@ describe('Player', () => {
|
|
|
1823
1715
|
frameRate: 1000000 / 42000,
|
|
1824
1716
|
pixelAspectRatio: '59:54',
|
|
1825
1717
|
hdr: null,
|
|
1718
|
+
videoLayout: null,
|
|
1826
1719
|
mimeType: 'video/mp4',
|
|
1827
1720
|
audioMimeType: 'audio/mp4',
|
|
1828
1721
|
videoMimeType: 'video/mp4',
|
|
@@ -1861,6 +1754,7 @@ describe('Player', () => {
|
|
|
1861
1754
|
frameRate: 24,
|
|
1862
1755
|
pixelAspectRatio: '59:54',
|
|
1863
1756
|
hdr: null,
|
|
1757
|
+
videoLayout: null,
|
|
1864
1758
|
mimeType: 'video/mp4',
|
|
1865
1759
|
audioMimeType: 'audio/mp4',
|
|
1866
1760
|
videoMimeType: 'video/mp4',
|
|
@@ -1918,6 +1812,7 @@ describe('Player', () => {
|
|
|
1918
1812
|
frameRate: null,
|
|
1919
1813
|
pixelAspectRatio: null,
|
|
1920
1814
|
hdr: null,
|
|
1815
|
+
videoLayout: null,
|
|
1921
1816
|
videoId: null,
|
|
1922
1817
|
audioId: null,
|
|
1923
1818
|
originalAudioId: null,
|
|
@@ -1956,6 +1851,7 @@ describe('Player', () => {
|
|
|
1956
1851
|
frameRate: null,
|
|
1957
1852
|
pixelAspectRatio: null,
|
|
1958
1853
|
hdr: null,
|
|
1854
|
+
videoLayout: null,
|
|
1959
1855
|
videoId: null,
|
|
1960
1856
|
audioId: null,
|
|
1961
1857
|
originalAudioId: null,
|
|
@@ -1994,6 +1890,7 @@ describe('Player', () => {
|
|
|
1994
1890
|
frameRate: null,
|
|
1995
1891
|
pixelAspectRatio: null,
|
|
1996
1892
|
hdr: null,
|
|
1893
|
+
videoLayout: null,
|
|
1997
1894
|
videoId: null,
|
|
1998
1895
|
audioId: null,
|
|
1999
1896
|
originalAudioId: null,
|
|
@@ -2035,6 +1932,7 @@ describe('Player', () => {
|
|
|
2035
1932
|
frameRate: null,
|
|
2036
1933
|
pixelAspectRatio: null,
|
|
2037
1934
|
hdr: null,
|
|
1935
|
+
videoLayout: null,
|
|
2038
1936
|
videoId: null,
|
|
2039
1937
|
audioId: null,
|
|
2040
1938
|
originalAudioId: null,
|
|
@@ -2711,15 +2609,15 @@ describe('Player', () => {
|
|
|
2711
2609
|
});
|
|
2712
2610
|
manifest.addVariant(2, (variant) => {
|
|
2713
2611
|
variant.bandwidth = 300;
|
|
2714
|
-
variant.addAudio(
|
|
2612
|
+
variant.addAudio(1, (stream) => {
|
|
2715
2613
|
stream.bandwidth = 200;
|
|
2716
2614
|
});
|
|
2717
2615
|
variant.addExistingStream(2); // video
|
|
2718
2616
|
});
|
|
2719
2617
|
manifest.addVariant(3, (variant) => {
|
|
2720
2618
|
variant.bandwidth = 400;
|
|
2721
|
-
variant.addExistingStream(
|
|
2722
|
-
variant.addExistingStream(
|
|
2619
|
+
variant.addExistingStream(1); // audio
|
|
2620
|
+
variant.addExistingStream(2); // video
|
|
2723
2621
|
});
|
|
2724
2622
|
});
|
|
2725
2623
|
|
|
@@ -3028,11 +2926,15 @@ describe('Player', () => {
|
|
|
3028
2926
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
3029
2927
|
manifest.addVariant(0, (variant) => {
|
|
3030
2928
|
variant.bandwidth = 500;
|
|
3031
|
-
variant.addVideo(1)
|
|
2929
|
+
variant.addVideo(1, (stream) => {
|
|
2930
|
+
stream.size(10, 10);
|
|
2931
|
+
});
|
|
3032
2932
|
});
|
|
3033
2933
|
manifest.addVariant(1, (variant) => {
|
|
3034
2934
|
variant.bandwidth = 100;
|
|
3035
|
-
variant.addVideo(2)
|
|
2935
|
+
variant.addVideo(2, (stream) => {
|
|
2936
|
+
stream.size(30, 30);
|
|
2937
|
+
});
|
|
3036
2938
|
});
|
|
3037
2939
|
});
|
|
3038
2940
|
|
|
@@ -3067,11 +2969,15 @@ describe('Player', () => {
|
|
|
3067
2969
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
3068
2970
|
manifest.addVariant(1, (variant) => {
|
|
3069
2971
|
variant.bandwidth = 500;
|
|
3070
|
-
variant.addVideo(10)
|
|
2972
|
+
variant.addVideo(10, (stream) => {
|
|
2973
|
+
stream.size(10, 10);
|
|
2974
|
+
});
|
|
3071
2975
|
});
|
|
3072
2976
|
manifest.addVariant(2, (variant) => {
|
|
3073
2977
|
variant.bandwidth = 100;
|
|
3074
|
-
variant.addVideo(20)
|
|
2978
|
+
variant.addVideo(20, (stream) => {
|
|
2979
|
+
stream.size(30, 30);
|
|
2980
|
+
});
|
|
3075
2981
|
});
|
|
3076
2982
|
});
|
|
3077
2983
|
|
|
@@ -3101,10 +3007,13 @@ describe('Player', () => {
|
|
|
3101
3007
|
manifest.addVariant(0, (variant) => {
|
|
3102
3008
|
variant.addVideo(1, (stream) => {
|
|
3103
3009
|
stream.keyIds = new Set(['abc']);
|
|
3010
|
+
stream.size(10, 10);
|
|
3104
3011
|
});
|
|
3105
3012
|
});
|
|
3106
3013
|
manifest.addVariant(1, (variant) => {
|
|
3107
|
-
variant.addVideo(2)
|
|
3014
|
+
variant.addVideo(2, (stream) => {
|
|
3015
|
+
stream.size(20, 20);
|
|
3016
|
+
});
|
|
3108
3017
|
});
|
|
3109
3018
|
});
|
|
3110
3019
|
|
|
@@ -3133,10 +3042,13 @@ describe('Player', () => {
|
|
|
3133
3042
|
manifest.addVariant(0, (variant) => {
|
|
3134
3043
|
variant.addVideo(1, (stream) => {
|
|
3135
3044
|
stream.keyIds = new Set(['abc']);
|
|
3045
|
+
stream.size(10, 10);
|
|
3136
3046
|
});
|
|
3137
3047
|
});
|
|
3138
3048
|
manifest.addVariant(1, (variant) => {
|
|
3139
|
-
variant.addVideo(2)
|
|
3049
|
+
variant.addVideo(2, (stream) => {
|
|
3050
|
+
stream.size(20, 20);
|
|
3051
|
+
});
|
|
3140
3052
|
});
|
|
3141
3053
|
});
|
|
3142
3054
|
|
|
@@ -3232,10 +3144,13 @@ describe('Player', () => {
|
|
|
3232
3144
|
manifest.addVariant(0, (variant) => {
|
|
3233
3145
|
variant.addVideo(1, (stream) => {
|
|
3234
3146
|
stream.keyIds = new Set(['abc']);
|
|
3147
|
+
stream.size(10, 10);
|
|
3235
3148
|
});
|
|
3236
3149
|
});
|
|
3237
3150
|
manifest.addVariant(1, (variant) => {
|
|
3238
|
-
variant.addVideo(2)
|
|
3151
|
+
variant.addVideo(2, (stream) => {
|
|
3152
|
+
stream.size(20, 20);
|
|
3153
|
+
});
|
|
3239
3154
|
});
|
|
3240
3155
|
});
|
|
3241
3156
|
|
|
@@ -3254,10 +3169,13 @@ describe('Player', () => {
|
|
|
3254
3169
|
manifest.addVariant(0, (variant) => {
|
|
3255
3170
|
variant.addVideo(1, (stream) => {
|
|
3256
3171
|
stream.keyIds = new Set(['abc']);
|
|
3172
|
+
stream.size(10, 10);
|
|
3257
3173
|
});
|
|
3258
3174
|
});
|
|
3259
3175
|
manifest.addVariant(1, (variant) => {
|
|
3260
|
-
variant.addVideo(2)
|
|
3176
|
+
variant.addVideo(2, (stream) => {
|
|
3177
|
+
stream.size(20, 20);
|
|
3178
|
+
});
|
|
3261
3179
|
});
|
|
3262
3180
|
});
|
|
3263
3181
|
|
|
@@ -3276,10 +3194,13 @@ describe('Player', () => {
|
|
|
3276
3194
|
manifest.addVariant(0, (variant) => {
|
|
3277
3195
|
variant.addVideo(1, (stream) => {
|
|
3278
3196
|
stream.keyIds = new Set(['abc']);
|
|
3197
|
+
stream.size(10, 10);
|
|
3279
3198
|
});
|
|
3280
3199
|
});
|
|
3281
3200
|
manifest.addVariant(2, (variant) => {
|
|
3282
|
-
variant.addVideo(3)
|
|
3201
|
+
variant.addVideo(3, (stream) => {
|
|
3202
|
+
stream.size(20, 20);
|
|
3203
|
+
});
|
|
3283
3204
|
});
|
|
3284
3205
|
});
|
|
3285
3206
|
|
|
@@ -3299,16 +3220,19 @@ describe('Player', () => {
|
|
|
3299
3220
|
manifest.addVariant(0, (variant) => {
|
|
3300
3221
|
variant.addVideo(1, (stream) => {
|
|
3301
3222
|
stream.keyIds = new Set(['abc']);
|
|
3223
|
+
stream.size(10, 10);
|
|
3302
3224
|
});
|
|
3303
3225
|
});
|
|
3304
3226
|
manifest.addVariant(2, (variant) => {
|
|
3305
3227
|
variant.addVideo(3, (stream) => {
|
|
3306
3228
|
stream.keyIds = new Set(['def']);
|
|
3229
|
+
stream.size(20, 20);
|
|
3307
3230
|
});
|
|
3308
3231
|
});
|
|
3309
3232
|
manifest.addVariant(4, (variant) => {
|
|
3310
3233
|
variant.addVideo(5, (stream) => {
|
|
3311
3234
|
stream.keyIds = new Set(['abc', 'def']);
|
|
3235
|
+
stream.size(30, 30);
|
|
3312
3236
|
});
|
|
3313
3237
|
});
|
|
3314
3238
|
});
|
|
@@ -3326,10 +3250,13 @@ describe('Player', () => {
|
|
|
3326
3250
|
manifest.addVariant(0, (variant) => {
|
|
3327
3251
|
variant.addVideo(1, (stream) => {
|
|
3328
3252
|
stream.keyIds = new Set(['abc']);
|
|
3253
|
+
stream.size(10, 10);
|
|
3329
3254
|
});
|
|
3330
3255
|
});
|
|
3331
3256
|
manifest.addVariant(2, (variant) => {
|
|
3332
|
-
variant.addVideo(3)
|
|
3257
|
+
variant.addVideo(3, (stream) => {
|
|
3258
|
+
stream.size(20, 20);
|
|
3259
|
+
});
|
|
3333
3260
|
});
|
|
3334
3261
|
});
|
|
3335
3262
|
|
|
@@ -3349,10 +3276,13 @@ describe('Player', () => {
|
|
|
3349
3276
|
manifest.addVariant(0, (variant) => {
|
|
3350
3277
|
variant.addVideo(1, (stream) => {
|
|
3351
3278
|
stream.keyIds = new Set(['abc']);
|
|
3279
|
+
stream.size(10, 10);
|
|
3352
3280
|
});
|
|
3353
3281
|
});
|
|
3354
3282
|
manifest.addVariant(2, (variant) => {
|
|
3355
|
-
variant.addVideo(3)
|
|
3283
|
+
variant.addVideo(3, (stream) => {
|
|
3284
|
+
stream.size(20, 20);
|
|
3285
|
+
});
|
|
3356
3286
|
});
|
|
3357
3287
|
});
|
|
3358
3288
|
|
|
@@ -3371,15 +3301,19 @@ describe('Player', () => {
|
|
|
3371
3301
|
manifest.addVariant(0, (variant) => {
|
|
3372
3302
|
variant.addVideo(1, (stream) => {
|
|
3373
3303
|
stream.keyIds = new Set(['abc']);
|
|
3304
|
+
stream.size(10, 10);
|
|
3374
3305
|
});
|
|
3375
3306
|
});
|
|
3376
3307
|
manifest.addVariant(2, (variant) => {
|
|
3377
3308
|
variant.addVideo(3, (stream) => {
|
|
3378
3309
|
stream.keyIds = new Set(['xyz']);
|
|
3310
|
+
stream.size(20, 20);
|
|
3379
3311
|
});
|
|
3380
3312
|
});
|
|
3381
3313
|
manifest.addVariant(4, (variant) => {
|
|
3382
|
-
variant.addVideo(5)
|
|
3314
|
+
variant.addVideo(5, (stream) => {
|
|
3315
|
+
stream.size(30, 30);
|
|
3316
|
+
});
|
|
3383
3317
|
});
|
|
3384
3318
|
});
|
|
3385
3319
|
|
|
@@ -3433,15 +3367,21 @@ describe('Player', () => {
|
|
|
3433
3367
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
3434
3368
|
manifest.addVariant(0, (variant) => {
|
|
3435
3369
|
variant.bandwidth = 10;
|
|
3436
|
-
variant.addVideo(1)
|
|
3370
|
+
variant.addVideo(1, (stream) => {
|
|
3371
|
+
stream.size(10, 10);
|
|
3372
|
+
});
|
|
3437
3373
|
});
|
|
3438
3374
|
manifest.addVariant(1, (variant) => {
|
|
3439
3375
|
variant.bandwidth = 1500;
|
|
3440
|
-
variant.addVideo(2)
|
|
3376
|
+
variant.addVideo(2, (stream) => {
|
|
3377
|
+
stream.size(20, 20);
|
|
3378
|
+
});
|
|
3441
3379
|
});
|
|
3442
3380
|
manifest.addVariant(2, (variant) => {
|
|
3443
3381
|
variant.bandwidth = 500;
|
|
3444
|
-
variant.addVideo(3)
|
|
3382
|
+
variant.addVideo(3, (stream) => {
|
|
3383
|
+
stream.size(30, 30);
|
|
3384
|
+
});
|
|
3445
3385
|
});
|
|
3446
3386
|
});
|
|
3447
3387
|
|
|
@@ -3557,7 +3497,7 @@ describe('Player', () => {
|
|
|
3557
3497
|
variant.addVideo(3, (stream) => {
|
|
3558
3498
|
stream.size(190, 190);
|
|
3559
3499
|
});
|
|
3560
|
-
variant.addAudio(
|
|
3500
|
+
variant.addAudio(2);
|
|
3561
3501
|
});
|
|
3562
3502
|
});
|
|
3563
3503
|
|
|
@@ -3620,18 +3560,21 @@ describe('Player', () => {
|
|
|
3620
3560
|
variant.bandwidth = 100;
|
|
3621
3561
|
variant.addVideo(0, (stream) => {
|
|
3622
3562
|
stream.codecs = 'good';
|
|
3563
|
+
stream.size(10, 10);
|
|
3623
3564
|
});
|
|
3624
3565
|
});
|
|
3625
3566
|
manifest.addVariant(1, (variant) => {
|
|
3626
3567
|
variant.bandwidth = 200;
|
|
3627
3568
|
variant.addVideo(1, (stream) => {
|
|
3628
3569
|
stream.codecs = 'good';
|
|
3570
|
+
stream.size(20, 20);
|
|
3629
3571
|
});
|
|
3630
3572
|
});
|
|
3631
3573
|
manifest.addVariant(2, (variant) => {
|
|
3632
3574
|
variant.bandwidth = 300;
|
|
3633
3575
|
variant.addVideo(2, (stream) => {
|
|
3634
3576
|
stream.codecs = 'good';
|
|
3577
|
+
stream.size(30, 30);
|
|
3635
3578
|
});
|
|
3636
3579
|
});
|
|
3637
3580
|
|
|
@@ -3640,18 +3583,21 @@ describe('Player', () => {
|
|
|
3640
3583
|
variant.bandwidth = 10000;
|
|
3641
3584
|
variant.addVideo(3, (stream) => {
|
|
3642
3585
|
stream.codecs = 'bad';
|
|
3586
|
+
stream.size(10, 10);
|
|
3643
3587
|
});
|
|
3644
3588
|
});
|
|
3645
3589
|
manifest.addVariant(4, (variant) => {
|
|
3646
3590
|
variant.bandwidth = 20000;
|
|
3647
3591
|
variant.addVideo(4, (stream) => {
|
|
3648
3592
|
stream.codecs = 'bad';
|
|
3593
|
+
stream.size(20, 20);
|
|
3649
3594
|
});
|
|
3650
3595
|
});
|
|
3651
3596
|
manifest.addVariant(5, (variant) => {
|
|
3652
3597
|
variant.bandwidth = 30000;
|
|
3653
3598
|
variant.addVideo(5, (stream) => {
|
|
3654
3599
|
stream.codecs = 'bad';
|
|
3600
|
+
stream.size(30, 30);
|
|
3655
3601
|
});
|
|
3656
3602
|
});
|
|
3657
3603
|
});
|
|
@@ -3672,10 +3618,13 @@ describe('Player', () => {
|
|
|
3672
3618
|
manifest.addVariant(0, (variant) => {
|
|
3673
3619
|
variant.addVideo(1, (stream) => {
|
|
3674
3620
|
stream.keyIds = new Set(['abc']);
|
|
3621
|
+
stream.size(10, 10);
|
|
3675
3622
|
});
|
|
3676
3623
|
});
|
|
3677
3624
|
manifest.addVariant(2, (variant) => {
|
|
3678
|
-
variant.addVideo(3)
|
|
3625
|
+
variant.addVideo(3, (stream) => {
|
|
3626
|
+
stream.size(20, 20);
|
|
3627
|
+
});
|
|
3679
3628
|
});
|
|
3680
3629
|
});
|
|
3681
3630
|
|
|
@@ -3778,19 +3727,25 @@ describe('Player', () => {
|
|
|
3778
3727
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
3779
3728
|
manifest.addVariant(0, (variant) => {
|
|
3780
3729
|
variant.bandwidth = 100;
|
|
3781
|
-
variant.addVideo(0)
|
|
3730
|
+
variant.addVideo(0, (stream) => {
|
|
3731
|
+
stream.size(10, 10);
|
|
3732
|
+
});
|
|
3782
3733
|
variant.addAudio(9);
|
|
3783
3734
|
});
|
|
3784
3735
|
|
|
3785
3736
|
manifest.addVariant(1, (variant) => {
|
|
3786
3737
|
variant.bandwidth = 200;
|
|
3787
|
-
variant.addVideo(1)
|
|
3738
|
+
variant.addVideo(1, (stream) => {
|
|
3739
|
+
stream.size(20, 20);
|
|
3740
|
+
});
|
|
3788
3741
|
variant.addExistingStream(9); // audio
|
|
3789
3742
|
});
|
|
3790
3743
|
|
|
3791
3744
|
manifest.addVariant(2, (variant) => {
|
|
3792
3745
|
variant.bandwidth = 300;
|
|
3793
|
-
variant.addVideo(2)
|
|
3746
|
+
variant.addVideo(2, (stream) => {
|
|
3747
|
+
stream.size(30, 30);
|
|
3748
|
+
});
|
|
3794
3749
|
variant.addExistingStream(9); // audio
|
|
3795
3750
|
});
|
|
3796
3751
|
});
|
|
@@ -3859,15 +3814,21 @@ describe('Player', () => {
|
|
|
3859
3814
|
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
3860
3815
|
manifest.addVariant(0, (variant) => {
|
|
3861
3816
|
variant.bandwidth = /** @type {?} */(undefined);
|
|
3862
|
-
variant.addVideo(0)
|
|
3817
|
+
variant.addVideo(0, (stream) => {
|
|
3818
|
+
stream.size(10, 10);
|
|
3819
|
+
});
|
|
3863
3820
|
});
|
|
3864
3821
|
manifest.addVariant(1, (variant) => {
|
|
3865
3822
|
variant.bandwidth = NaN;
|
|
3866
|
-
variant.addVideo(1)
|
|
3823
|
+
variant.addVideo(1, (stream) => {
|
|
3824
|
+
stream.size(20, 20);
|
|
3825
|
+
});
|
|
3867
3826
|
});
|
|
3868
3827
|
manifest.addVariant(2, (variant) => {
|
|
3869
3828
|
variant.bandwidth = 0;
|
|
3870
|
-
variant.addVideo(2)
|
|
3829
|
+
variant.addVideo(2, (stream) => {
|
|
3830
|
+
stream.size(30, 30);
|
|
3831
|
+
});
|
|
3871
3832
|
});
|
|
3872
3833
|
});
|
|
3873
3834
|
|
|
@@ -4208,6 +4169,69 @@ describe('Player', () => {
|
|
|
4208
4169
|
expect(thumbnail8.duration).toBe(10);
|
|
4209
4170
|
});
|
|
4210
4171
|
});
|
|
4172
|
+
|
|
4173
|
+
describe('getAllThumbnails', () => {
|
|
4174
|
+
it('returns all thumbnails', async () => {
|
|
4175
|
+
const uris = () => ['thumbnail'];
|
|
4176
|
+
const ref = new shaka.media.SegmentReference(
|
|
4177
|
+
0, 60, uris, 0, null, null, 0, 0, Infinity, [],
|
|
4178
|
+
);
|
|
4179
|
+
const index = new shaka.media.SegmentIndex([ref]);
|
|
4180
|
+
|
|
4181
|
+
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
4182
|
+
manifest.addVariant(0, (variant) => {
|
|
4183
|
+
variant.addVideo(1);
|
|
4184
|
+
});
|
|
4185
|
+
manifest.addImageStream(5, (stream) => {
|
|
4186
|
+
stream.originalId = 'thumbnail';
|
|
4187
|
+
stream.width = 200;
|
|
4188
|
+
stream.height = 150;
|
|
4189
|
+
stream.mimeType = 'image/jpeg';
|
|
4190
|
+
stream.tilesLayout = '2x3';
|
|
4191
|
+
stream.segmentIndex = index;
|
|
4192
|
+
});
|
|
4193
|
+
});
|
|
4194
|
+
|
|
4195
|
+
await player.load(fakeManifestUri, 0, fakeMimeType);
|
|
4196
|
+
|
|
4197
|
+
expect(player.getImageTracks()[0].width).toBe(100);
|
|
4198
|
+
expect(player.getImageTracks()[0].height).toBe(50);
|
|
4199
|
+
const thumbnails = await player.getAllThumbnails(5);
|
|
4200
|
+
expect(thumbnails.length).toBe(6);
|
|
4201
|
+
expect(thumbnails[0]).toEqual(jasmine.objectContaining({
|
|
4202
|
+
imageHeight: 150,
|
|
4203
|
+
imageWidth: 200,
|
|
4204
|
+
positionX: 0,
|
|
4205
|
+
positionY: 0,
|
|
4206
|
+
width: 100,
|
|
4207
|
+
height: 50,
|
|
4208
|
+
}));
|
|
4209
|
+
expect(thumbnails[1]).toEqual(jasmine.objectContaining({
|
|
4210
|
+
imageHeight: 150,
|
|
4211
|
+
imageWidth: 200,
|
|
4212
|
+
positionX: 100,
|
|
4213
|
+
positionY: 0,
|
|
4214
|
+
width: 100,
|
|
4215
|
+
height: 50,
|
|
4216
|
+
}));
|
|
4217
|
+
expect(thumbnails[2]).toEqual(jasmine.objectContaining({
|
|
4218
|
+
imageHeight: 150,
|
|
4219
|
+
imageWidth: 200,
|
|
4220
|
+
positionX: 0,
|
|
4221
|
+
positionY: 50,
|
|
4222
|
+
width: 100,
|
|
4223
|
+
height: 50,
|
|
4224
|
+
}));
|
|
4225
|
+
expect(thumbnails[5]).toEqual(jasmine.objectContaining({
|
|
4226
|
+
imageHeight: 150,
|
|
4227
|
+
imageWidth: 200,
|
|
4228
|
+
positionX: 100,
|
|
4229
|
+
positionY: 100,
|
|
4230
|
+
width: 100,
|
|
4231
|
+
height: 50,
|
|
4232
|
+
}));
|
|
4233
|
+
});
|
|
4234
|
+
});
|
|
4211
4235
|
});
|
|
4212
4236
|
|
|
4213
4237
|
describe('config streaming.startAtSegmentBoundary', () => {
|