shaka-player 4.5.0 → 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/AUTHORS +2 -0
- package/CHANGELOG.md +98 -0
- package/CODE_OF_CONDUCT.md +1 -1
- package/CONTRIBUTORS +2 -0
- package/README.md +38 -32
- package/demo/common/asset.js +11 -17
- package/demo/common/assets.js +117 -11
- package/demo/config.js +28 -1
- package/demo/custom.js +52 -38
- package/demo/main.js +11 -3
- package/demo/search.js +7 -0
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +133 -124
- package/dist/demo.compiled.debug.map +3 -3
- package/dist/demo.compiled.js +133 -124
- package/dist/demo.compiled.map +3 -3
- package/dist/deps.js +20 -18
- package/dist/locales.js +35 -31
- package/dist/receiver.compiled.debug.js +58 -50
- package/dist/receiver.compiled.debug.map +3 -3
- package/dist/receiver.compiled.js +58 -50
- package/dist/receiver.compiled.map +3 -3
- package/dist/shaka-player.compiled.d.ts +440 -390
- package/dist/shaka-player.compiled.debug.d.ts +440 -390
- package/dist/shaka-player.compiled.debug.externs.js +162 -77
- package/dist/shaka-player.compiled.debug.js +786 -736
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +162 -77
- package/dist/shaka-player.compiled.js +1154 -1121
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +491 -437
- package/dist/shaka-player.ui.debug.d.ts +491 -437
- package/dist/shaka-player.ui.debug.externs.js +167 -77
- package/dist/shaka-player.ui.debug.js +877 -811
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +167 -77
- package/dist/shaka-player.ui.js +1362 -1318
- package/dist/shaka-player.ui.map +4 -4
- 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/offline.md +10 -8
- package/docs/tutorials/plugins.md +5 -0
- package/docs/tutorials/ui-customization.md +13 -0
- package/docs/tutorials/ui.md +2 -1
- package/docs/tutorials/upgrade.md +3 -0
- package/externs/managedmediasource.js +24 -0
- package/externs/shaka/abr_manager.js +6 -2
- package/externs/shaka/cea.js +7 -0
- package/externs/shaka/codecs.js +5 -3
- package/externs/shaka/manifest.js +21 -5
- package/externs/shaka/manifest_parser.js +17 -0
- package/externs/shaka/net.js +2 -2
- package/externs/shaka/offline.js +9 -2
- package/externs/shaka/player.js +53 -7
- package/externs/shaka/text.js +3 -1
- package/externs/shaka/transmuxer.js +1 -1
- package/lib/abr/simple_abr_manager.js +25 -8
- package/lib/ads/media_tailor_ad_manager.js +14 -3
- 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/dash/dash_parser.js +249 -83
- package/lib/dash/mpd_utils.js +52 -31
- package/lib/dash/segment_base.js +4 -5
- package/lib/dash/segment_list.js +5 -4
- package/lib/dash/segment_template.js +83 -26
- package/lib/hls/hls_classes.js +28 -43
- package/lib/hls/hls_parser.js +761 -649
- package/lib/hls/hls_utils.js +64 -5
- package/lib/hls/manifest_text_parser.js +7 -11
- package/lib/media/adaptation_set.js +20 -13
- package/lib/media/adaptation_set_criteria.js +70 -18
- 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 +75 -21
- 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 +5 -5
- package/lib/media/segment_prefetch.js +92 -24
- package/lib/media/segment_reference.js +67 -1
- package/lib/media/segment_utils.js +343 -0
- package/lib/media/stall_detector.js +0 -3
- package/lib/media/streaming_engine.js +41 -21
- package/lib/mss/mss_parser.js +18 -2
- package/lib/net/networking_engine.js +66 -12
- package/lib/net/networking_utils.js +95 -0
- package/lib/offline/indexeddb/v1_storage_cell.js +2 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +2 -0
- package/lib/offline/manifest_converter.js +2 -0
- package/lib/offline/offline_manifest_parser.js +10 -0
- package/lib/offline/storage.js +11 -7
- package/lib/player.js +993 -1502
- package/lib/polyfill/mediasource.js +22 -1
- 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 +28 -5
- package/lib/text/ui_text_displayer.js +4 -0
- package/lib/text/vtt_text_parser.js +7 -2
- 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 +5 -4
- package/lib/transmuxer/mp3_transmuxer.js +1 -1
- package/lib/transmuxer/mpeg_ts_transmuxer.js +1 -1
- package/lib/transmuxer/mss_transmuxer.js +1 -1
- package/lib/transmuxer/ts_transmuxer.js +33 -13
- package/lib/util/buffer_utils.js +26 -4
- package/lib/util/content_steering_manager.js +358 -0
- package/lib/util/error.js +2 -6
- package/lib/util/fairplay_utils.js +1 -1
- package/lib/util/fake_event.js +5 -1
- package/lib/util/id3_utils.js +50 -1
- package/lib/util/manifest_parser_utils.js +12 -8
- package/lib/util/mp4_generator.js +2 -4
- package/lib/util/mutex.js +59 -0
- package/lib/util/object_utils.js +1 -1
- package/lib/util/periods.js +154 -179
- package/lib/util/platform.js +4 -3
- package/lib/util/player_configuration.js +35 -6
- package/lib/util/stream_utils.js +105 -98
- package/lib/util/ts_parser.js +124 -73
- package/lib/util/uint8array_utils.js +5 -1
- package/lib/util/xml_utils.js +5 -0
- package/maintained-branches.md +2 -2
- package/package.json +1 -1
- package/roadmap.md +15 -5
- package/shaka-player.uncompiled.js +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 +3 -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 +2 -1
- package/test/dash/dash_parser_integration.js +2 -1
- package/test/dash/dash_parser_live_unit.js +0 -19
- package/test/dash/dash_parser_manifest_unit.js +494 -2
- package/test/dash/mpd_utils_unit.js +61 -30
- package/test/hls/hls_live_unit.js +12 -3
- package/test/hls/hls_parser_unit.js +377 -27
- package/test/hls/manifest_text_parser_unit.js +32 -99
- package/test/media/adaptation_set_criteria_unit.js +172 -21
- package/test/media/adaptation_set_unit.js +1 -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 +1 -1
- package/test/media/play_rate_controller_unit.js +0 -48
- package/test/media/segment_index_unit.js +2 -1
- 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 +9 -0
- package/test/offline/offline_integration.js +2 -1
- package/test/offline/storage_integration.js +21 -9
- 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 +80 -27
- package/test/test/util/fake_media_source_engine.js +5 -0
- 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 +4 -0
- package/test/test/util/manifest_parser_util.js +14 -2
- package/test/test/util/offline_utils.js +1 -0
- package/test/test/util/simple_fakes.js +2 -2
- package/test/test/util/streaming_engine_util.js +3 -0
- 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 +33 -2
- package/test/transmuxer/transmuxer_engine_integration.js +9 -0
- package/test/transmuxer/transmuxer_integration.js +33 -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 +25 -19
- 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 +17 -113
- 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/externs/ui.js +17 -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/remote_button.js +3 -1
- 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 +6 -2
- package/lib/routing/node.js +0 -23
- package/lib/routing/payload.js +0 -47
- package/lib/routing/walker.js +0 -587
- package/test/routing/walker_unit.js +0 -505
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
describe('ContentWorkarounds', () => {
|
|
8
8
|
const encryptionBoxes = {
|
|
9
9
|
'encv': ['hev1', 'hvc1', 'avc1', 'avc3'],
|
|
10
|
-
'enca': ['ac-3', 'ec-3', 'mp4a'],
|
|
10
|
+
'enca': ['ac-3', 'ec-3', 'ac-4', 'mp4a'],
|
|
11
11
|
};
|
|
12
12
|
for (const encryptionBox of Object.keys(encryptionBoxes)) {
|
|
13
13
|
for (const box of encryptionBoxes[encryptionBox]) {
|
|
@@ -2313,7 +2313,7 @@ describe('DrmEngine', () => {
|
|
|
2313
2313
|
videoRobustness: 'really_really_ridiculously_good',
|
|
2314
2314
|
serverCertificate: serverCert,
|
|
2315
2315
|
serverCertificateUri: '',
|
|
2316
|
-
initData: ['
|
|
2316
|
+
initData: [{keyId: 'a'}],
|
|
2317
2317
|
keyIds: new Set(['deadbeefdeadbeefdeadbeefdeadbeef']),
|
|
2318
2318
|
};
|
|
2319
2319
|
const drmInfoAudio = {
|
|
@@ -2324,7 +2324,7 @@ describe('DrmEngine', () => {
|
|
|
2324
2324
|
audioRobustness: 'good',
|
|
2325
2325
|
serverCertificate: undefined,
|
|
2326
2326
|
serverCertificateUri: '',
|
|
2327
|
-
initData: [
|
|
2327
|
+
initData: [{keyId: 'b'}],
|
|
2328
2328
|
keyIds: new Set(['eadbeefdeadbeefdeadbeefdeadbeefd']),
|
|
2329
2329
|
};
|
|
2330
2330
|
const drmInfoDesired = {
|
|
@@ -2336,7 +2336,7 @@ describe('DrmEngine', () => {
|
|
|
2336
2336
|
videoRobustness: 'really_really_ridiculously_good',
|
|
2337
2337
|
serverCertificate: serverCert,
|
|
2338
2338
|
serverCertificateUri: '',
|
|
2339
|
-
initData: ['
|
|
2339
|
+
initData: [{keyId: 'a'}, {keyId: 'b'}],
|
|
2340
2340
|
keyIds: new Set([
|
|
2341
2341
|
'deadbeefdeadbeefdeadbeefdeadbeef',
|
|
2342
2342
|
'eadbeefdeadbeefdeadbeefdeadbeefd',
|
|
@@ -631,7 +631,7 @@ describe('MediaSourceEngine', () => {
|
|
|
631
631
|
ContentType.TEXT, data, reference, fakeStream,
|
|
632
632
|
/* hasClosedCaptions= */ false);
|
|
633
633
|
expect(mockTextEngine.appendBuffer).toHaveBeenCalledWith(
|
|
634
|
-
data, 0, 10);
|
|
634
|
+
data, 0, 10, 'foo://bar');
|
|
635
635
|
});
|
|
636
636
|
|
|
637
637
|
it('appends transmuxed data', async () => {
|
|
@@ -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', () => {
|
|
@@ -1074,6 +1074,7 @@ describe('SegmentIndex', /** @suppress {accessControls} */ () => {
|
|
|
1074
1074
|
/* tileDuration= */ undefined,
|
|
1075
1075
|
/* syncTime= */ undefined,
|
|
1076
1076
|
/* status= */ undefined,
|
|
1077
|
-
/* aes128Key= */ aes128Key
|
|
1077
|
+
/* aes128Key= */ aes128Key,
|
|
1078
|
+
/* allPartialSegments= */ partialReferences.length > 0);
|
|
1078
1079
|
}
|
|
1079
1080
|
});
|
|
@@ -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');
|
|
@@ -319,6 +319,7 @@ describe('ManifestConverter', () => {
|
|
|
319
319
|
spatialAudio: false,
|
|
320
320
|
closedCaptions: null,
|
|
321
321
|
external: false,
|
|
322
|
+
fastSwitching: false,
|
|
322
323
|
};
|
|
323
324
|
|
|
324
325
|
return streamDB;
|
|
@@ -364,6 +365,7 @@ describe('ManifestConverter', () => {
|
|
|
364
365
|
frameRate: 22,
|
|
365
366
|
pixelAspectRatio: '59:54',
|
|
366
367
|
hdr: undefined,
|
|
368
|
+
videoLayout: undefined,
|
|
367
369
|
kind: undefined,
|
|
368
370
|
language: '',
|
|
369
371
|
originalLanguage: null,
|
|
@@ -396,6 +398,7 @@ describe('ManifestConverter', () => {
|
|
|
396
398
|
tilesLayout: undefined,
|
|
397
399
|
accessibilityPurpose: null,
|
|
398
400
|
external: false,
|
|
401
|
+
fastSwitching: false,
|
|
399
402
|
};
|
|
400
403
|
}
|
|
401
404
|
|
|
@@ -417,6 +420,7 @@ describe('ManifestConverter', () => {
|
|
|
417
420
|
frameRate: undefined,
|
|
418
421
|
pixelAspectRatio: undefined,
|
|
419
422
|
hdr: undefined,
|
|
423
|
+
videoLayout: undefined,
|
|
420
424
|
kind: undefined,
|
|
421
425
|
language: 'en',
|
|
422
426
|
originalLanguage: 'en',
|
|
@@ -449,6 +453,7 @@ describe('ManifestConverter', () => {
|
|
|
449
453
|
tilesLayout: undefined,
|
|
450
454
|
accessibilityPurpose: null,
|
|
451
455
|
external: false,
|
|
456
|
+
fastSwitching: false,
|
|
452
457
|
};
|
|
453
458
|
}
|
|
454
459
|
|
|
@@ -469,6 +474,7 @@ describe('ManifestConverter', () => {
|
|
|
469
474
|
frameRate: undefined,
|
|
470
475
|
pixelAspectRatio: undefined,
|
|
471
476
|
hdr: undefined,
|
|
477
|
+
videoLayout: undefined,
|
|
472
478
|
kind: undefined,
|
|
473
479
|
language: 'en',
|
|
474
480
|
originalLanguage: 'en',
|
|
@@ -501,6 +507,7 @@ describe('ManifestConverter', () => {
|
|
|
501
507
|
tilesLayout: undefined,
|
|
502
508
|
accessibilityPurpose: null,
|
|
503
509
|
external: false,
|
|
510
|
+
fastSwitching: false,
|
|
504
511
|
};
|
|
505
512
|
}
|
|
506
513
|
|
|
@@ -528,6 +535,7 @@ describe('ManifestConverter', () => {
|
|
|
528
535
|
frameRate: streamDb.frameRate,
|
|
529
536
|
pixelAspectRatio: streamDb.pixelAspectRatio,
|
|
530
537
|
hdr: streamDb.hdr,
|
|
538
|
+
videoLayout: streamDb.videoLayout,
|
|
531
539
|
width: streamDb.width || undefined,
|
|
532
540
|
height: streamDb.height || undefined,
|
|
533
541
|
kind: streamDb.kind,
|
|
@@ -550,6 +558,7 @@ describe('ManifestConverter', () => {
|
|
|
550
558
|
tilesLayout: streamDb.tilesLayout,
|
|
551
559
|
accessibilityPurpose: null,
|
|
552
560
|
external: streamDb.external,
|
|
561
|
+
fastSwitching: streamDb.fastSwitching,
|
|
553
562
|
};
|
|
554
563
|
|
|
555
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,
|
|
@@ -1742,6 +1748,12 @@ filterDescribe('Storage', storageSupport, () => {
|
|
|
1742
1748
|
|
|
1743
1749
|
/** @override */
|
|
1744
1750
|
onExpirationUpdated(session, number) {}
|
|
1751
|
+
|
|
1752
|
+
/** @override */
|
|
1753
|
+
onInitialVariantChosen(variant) {}
|
|
1754
|
+
|
|
1755
|
+
/** @override */
|
|
1756
|
+
banLocation(uri) {}
|
|
1745
1757
|
};
|
|
1746
1758
|
|
|
1747
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
|
});
|