shaka-player 4.4.2 → 4.5.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.
Files changed (202) hide show
  1. package/.github/workflows/release-please.yaml +2 -27
  2. package/CHANGELOG.md +67 -25
  3. package/README.md +16 -10
  4. package/demo/asset_card.js +18 -21
  5. package/demo/cast_receiver/index.html +0 -1
  6. package/demo/close_button.js +0 -3
  7. package/demo/common/asset.js +27 -5
  8. package/demo/common/assets.js +150 -52
  9. package/demo/config.js +192 -253
  10. package/demo/custom.js +39 -98
  11. package/demo/front.js +7 -10
  12. package/demo/index.html +19 -22
  13. package/demo/input.js +6 -11
  14. package/demo/input_container.js +8 -9
  15. package/demo/main.js +52 -124
  16. package/demo/search.js +23 -35
  17. package/demo/service_worker.js +0 -3
  18. package/demo/tooltip.js +3 -5
  19. package/demo/visualizer.js +3 -5
  20. package/demo/visualizer_button.js +1 -20
  21. package/dist/demo.compiled.debug.js +187 -211
  22. package/dist/demo.compiled.debug.map +4 -4
  23. package/dist/demo.compiled.js +187 -211
  24. package/dist/demo.compiled.map +4 -4
  25. package/dist/deps.js +27 -24
  26. package/dist/locales.js +31 -31
  27. package/dist/receiver.compiled.debug.js +42 -61
  28. package/dist/receiver.compiled.debug.map +4 -4
  29. package/dist/receiver.compiled.js +42 -61
  30. package/dist/receiver.compiled.map +4 -4
  31. package/dist/shaka-player.compiled.d.ts +728 -365
  32. package/dist/shaka-player.compiled.debug.d.ts +728 -365
  33. package/dist/shaka-player.compiled.debug.externs.js +475 -51
  34. package/dist/shaka-player.compiled.debug.js +576 -480
  35. package/dist/shaka-player.compiled.debug.map +4 -4
  36. package/dist/shaka-player.compiled.externs.js +475 -51
  37. package/dist/shaka-player.compiled.js +1117 -1056
  38. package/dist/shaka-player.compiled.map +4 -4
  39. package/dist/shaka-player.ui.d.ts +783 -410
  40. package/dist/shaka-player.ui.debug.d.ts +783 -410
  41. package/dist/shaka-player.ui.debug.externs.js +496 -51
  42. package/dist/shaka-player.ui.debug.js +647 -542
  43. package/dist/shaka-player.ui.debug.map +4 -4
  44. package/dist/shaka-player.ui.externs.js +496 -51
  45. package/dist/shaka-player.ui.js +1260 -1194
  46. package/dist/shaka-player.ui.map +4 -4
  47. package/docs/design/lcevc-integration.md +14 -14
  48. package/docs/tutorials/faq.md +27 -55
  49. package/docs/tutorials/index.json +2 -1
  50. package/docs/tutorials/lcevc.md +118 -0
  51. package/docs/tutorials/offline.md +1 -1
  52. package/docs/tutorials/ui-customization.md +4 -0
  53. package/externs/css_style_declaration.js +19 -0
  54. package/externs/lcevc.js +37 -13
  55. package/externs/media_remote.js +68 -0
  56. package/externs/mediatailor.js +193 -0
  57. package/externs/pictureinpicture.js +11 -0
  58. package/externs/shaka/ads.js +27 -0
  59. package/externs/shaka/manifest.js +10 -5
  60. package/externs/shaka/manifest_parser.js +7 -1
  61. package/externs/shaka/offline.js +4 -0
  62. package/externs/shaka/player.js +12 -1
  63. package/karma.conf.js +7 -3
  64. package/lib/abr/simple_abr_manager.js +43 -3
  65. package/lib/ads/ad_manager.js +104 -50
  66. package/lib/ads/media_tailor_ad.js +297 -0
  67. package/lib/ads/media_tailor_ad_manager.js +828 -0
  68. package/lib/cea/ts_cea_parser.js +15 -2
  69. package/lib/config/codec_switching_strategy.js +24 -0
  70. package/lib/dash/content_protection.js +120 -2
  71. package/lib/dash/dash_parser.js +79 -13
  72. package/lib/dash/mpd_utils.js +10 -6
  73. package/lib/dash/segment_base.js +13 -5
  74. package/lib/dash/segment_list.js +13 -5
  75. package/lib/dash/segment_template.js +43 -85
  76. package/lib/dependencies/all.js +8 -7
  77. package/lib/hls/hls_parser.js +101 -37
  78. package/lib/lcevc/lcevc_dec.js +220 -0
  79. package/lib/media/adaptation_set.js +22 -11
  80. package/lib/media/adaptation_set_criteria.js +25 -7
  81. package/lib/media/media_source_engine.js +215 -27
  82. package/lib/media/segment_index.js +5 -5
  83. package/lib/media/segment_reference.js +10 -5
  84. package/lib/media/streaming_engine.js +44 -39
  85. package/lib/mss/mss_parser.js +1 -0
  86. package/lib/net/networking_engine.js +1 -0
  87. package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
  88. package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
  89. package/lib/offline/manifest_converter.js +1 -0
  90. package/lib/offline/storage.js +3 -0
  91. package/lib/player.js +142 -72
  92. package/lib/routing/payload.js +5 -1
  93. package/lib/text/cue.js +62 -47
  94. package/lib/text/ttml_text_parser.js +17 -0
  95. package/lib/text/ui_text_displayer.js +4 -0
  96. package/lib/text/vtt_text_parser.js +35 -22
  97. package/lib/transmuxer/h265.js +862 -0
  98. package/lib/transmuxer/mpeg_ts_transmuxer.js +3 -2
  99. package/lib/transmuxer/ts_transmuxer.js +160 -15
  100. package/lib/util/cmcd_manager.js +6 -1
  101. package/lib/util/error.js +28 -9
  102. package/lib/util/exp_golomb.js +30 -2
  103. package/lib/util/fake_event.js +3 -0
  104. package/lib/util/manifest_parser_utils.js +10 -4
  105. package/lib/util/mp4_generator.js +4 -4
  106. package/lib/util/periods.js +2 -0
  107. package/lib/util/platform.js +54 -0
  108. package/lib/util/player_configuration.js +8 -0
  109. package/lib/util/state_history.js +6 -2
  110. package/lib/util/stream_utils.js +133 -217
  111. package/lib/util/ts_parser.js +229 -43
  112. package/maintained-branches.md +3 -2
  113. package/package.json +4 -6
  114. package/roadmap.md +15 -5
  115. package/shaka-player.uncompiled.js +2 -1
  116. package/support.html +0 -1
  117. package/test/cast/cast_receiver_integration.js +47 -0
  118. package/test/codec_switching/codec_switching_integration.js +181 -0
  119. package/test/dash/dash_parser_content_protection_unit.js +2 -0
  120. package/test/dash/dash_parser_integration.js +73 -0
  121. package/test/dash/dash_parser_live_unit.js +2 -0
  122. package/test/dash/dash_parser_manifest_unit.js +47 -0
  123. package/test/dash/dash_parser_segment_base_unit.js +7 -0
  124. package/test/dash/dash_parser_segment_list_unit.js +23 -17
  125. package/test/dash/dash_parser_segment_template_unit.js +49 -0
  126. package/test/demo/demo_unit.js +0 -16
  127. package/test/hls/hls_live_unit.js +35 -0
  128. package/test/hls/hls_parser_unit.js +8 -61
  129. package/test/media/adaptation_set_criteria_unit.js +118 -0
  130. package/test/media/adaptation_set_unit.js +1 -0
  131. package/test/media/media_source_engine_unit.js +165 -1
  132. package/test/media/segment_index_unit.js +4 -4
  133. package/test/media/segment_prefetch_unit.js +1 -1
  134. package/test/media/streaming_engine_unit.js +17 -17
  135. package/test/mss/mss_parser_unit.js +2 -0
  136. package/test/offline/manifest_convert_unit.js +5 -0
  137. package/test/offline/storage_integration.js +1 -4
  138. package/test/player_unit.js +102 -131
  139. package/test/routing/walker_unit.js +1 -0
  140. package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
  141. package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
  142. package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
  143. package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
  144. package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
  145. package/test/test/assets/dash-aes-128/dash.mpd +18 -0
  146. package/test/test/assets/dash-aes-128/license +1 -0
  147. package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
  148. package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
  149. package/test/test/assets/dash-multi-codec/dash.mpd +32 -0
  150. package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
  151. package/test/test/assets/hls-ts-h265/0.ts +0 -0
  152. package/test/test/assets/hls-ts-h265/hevc.m3u8 +6 -0
  153. package/test/test/assets/hls-ts-h265/index.m3u8 +7 -0
  154. package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
  155. package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
  156. package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +9 -0
  157. package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +24 -0
  158. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
  159. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
  160. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
  161. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
  162. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
  163. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
  164. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
  165. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
  166. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
  167. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
  168. package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +14 -0
  169. package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +23 -0
  170. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
  171. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
  172. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
  173. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
  174. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
  175. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
  176. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
  177. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
  178. package/test/test/util/dash_parser_util.js +20 -7
  179. package/test/test/util/fake_ad_manager.js +20 -0
  180. package/test/test/util/fake_media_source_engine.js +8 -2
  181. package/test/test/util/manifest_generator.js +7 -3
  182. package/test/test/util/mss_parser_util.js +4 -0
  183. package/test/test/util/offline_utils.js +1 -0
  184. package/test/test/util/streaming_engine_util.js +7 -4
  185. package/test/text/ttml_text_parser_unit.js +52 -0
  186. package/test/text/vtt_text_parser_unit.js +105 -48
  187. package/test/transmuxer/transmuxer_integration.js +121 -4
  188. package/test/ui/ui_unit.js +3 -10
  189. package/test/util/stream_utils_unit.js +208 -74
  190. package/test/util/ts_parser_unit.js +1 -1
  191. package/ui/controls.js +125 -0
  192. package/ui/externs/ui.js +8 -1
  193. package/ui/pip_button.js +22 -120
  194. package/ui/remote_button.js +201 -0
  195. package/ui/ui.js +5 -2
  196. package/demo/common/message_ids.js +0 -309
  197. package/demo/locales/en.json +0 -287
  198. package/demo/locales/source.json +0 -1142
  199. package/externs/mux.js +0 -69
  200. package/lib/lcevc/lcevc_dil.js +0 -152
  201. package/lib/transmuxer/muxjs_transmuxer.js +0 -242
  202. package/test/transmuxer/muxjs_transmuxer_integration.js +0 -177
@@ -92,7 +92,7 @@ describe('Player', () => {
92
92
  variant.addVideo(2);
93
93
  });
94
94
  manifest.addVariant(1, (variant) => {
95
- variant.addAudio(3);
95
+ variant.addAudio(1);
96
96
  variant.addVideo(4);
97
97
  });
98
98
  });
@@ -128,8 +128,8 @@ describe('Player', () => {
128
128
  getUseEmbeddedText: jasmine.createSpy('getUseEmbeddedText'),
129
129
  setSegmentRelativeVttTiming:
130
130
  jasmine.createSpy('setSegmentRelativeVttTiming'),
131
- updateLcevcDil:
132
- jasmine.createSpy('updateLcevcDil'),
131
+ updateLcevcDec:
132
+ jasmine.createSpy('updateLcevcDec'),
133
133
  getTextDisplayer: () => textDisplayer,
134
134
  getBufferedInfo: () => bufferedInfo,
135
135
  ended: jasmine.createSpy('ended').and.returnValue(false),
@@ -184,6 +184,7 @@ describe('Player', () => {
184
184
  describe('destroy', () => {
185
185
  it('cleans up all dependencies', async () => {
186
186
  goog.asserts.assert(manifest, 'Manifest should be non-null');
187
+ await player.load(fakeManifestUri, 0, fakeMimeType);
187
188
  const segmentIndexes = [];
188
189
  for (const variant of manifest.variants) {
189
190
  if (variant.audio) {
@@ -340,15 +341,12 @@ describe('Player', () => {
340
341
  });
341
342
 
342
343
  describe('disableStream', () => {
343
- /** @type {function(function(), number)} */
344
- let realSetTimeout;
345
344
  /** @type {number} */
346
345
  let disableTimeInSeconds;
347
346
  /** @type {?jasmine.Spy} */
348
347
  let getBufferedInfoSpy;
349
348
 
350
349
  beforeAll(() => {
351
- realSetTimeout = window.setTimeout;
352
350
  jasmine.clock().install();
353
351
  jasmine.clock().mockDate();
354
352
  });
@@ -381,15 +379,21 @@ describe('Player', () => {
381
379
  stream.mime('audio/mp4', 'mp4a.40.2');
382
380
  stream.language = 'en';
383
381
  });
384
- variant.addVideo(2);
382
+ variant.addVideo(2, (stream) => {
383
+ stream.size(10, 10);
384
+ });
385
385
  });
386
386
  manifest.addVariant(1, (variant) => {
387
387
  variant.addExistingStream(1);
388
- variant.addVideo(3);
388
+ variant.addVideo(3, (stream) => {
389
+ stream.size(20, 20);
390
+ });
389
391
  });
390
392
  manifest.addVariant(2, (variant) => {
391
393
  variant.addExistingStream(1);
392
- variant.addVideo(4);
394
+ variant.addVideo(4, (stream) => {
395
+ stream.size(30, 30);
396
+ });
393
397
  });
394
398
  });
395
399
  }
@@ -498,102 +502,6 @@ describe('Player', () => {
498
502
  expect(fromAdaptation).toBeFalsy();
499
503
  });
500
504
 
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
505
  describe('does not disable stream if there not alternate stream', () => {
598
506
  it('single audio multiple videos', async () => {
599
507
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
@@ -2711,15 +2619,15 @@ describe('Player', () => {
2711
2619
  });
2712
2620
  manifest.addVariant(2, (variant) => {
2713
2621
  variant.bandwidth = 300;
2714
- variant.addAudio(4, (stream) => {
2622
+ variant.addAudio(1, (stream) => {
2715
2623
  stream.bandwidth = 200;
2716
2624
  });
2717
2625
  variant.addExistingStream(2); // video
2718
2626
  });
2719
2627
  manifest.addVariant(3, (variant) => {
2720
2628
  variant.bandwidth = 400;
2721
- variant.addExistingStream(4); // audio
2722
- variant.addExistingStream(3); // video
2629
+ variant.addExistingStream(1); // audio
2630
+ variant.addExistingStream(2); // video
2723
2631
  });
2724
2632
  });
2725
2633
 
@@ -3028,11 +2936,15 @@ describe('Player', () => {
3028
2936
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3029
2937
  manifest.addVariant(0, (variant) => {
3030
2938
  variant.bandwidth = 500;
3031
- variant.addVideo(1);
2939
+ variant.addVideo(1, (stream) => {
2940
+ stream.size(10, 10);
2941
+ });
3032
2942
  });
3033
2943
  manifest.addVariant(1, (variant) => {
3034
2944
  variant.bandwidth = 100;
3035
- variant.addVideo(2);
2945
+ variant.addVideo(2, (stream) => {
2946
+ stream.size(30, 30);
2947
+ });
3036
2948
  });
3037
2949
  });
3038
2950
 
@@ -3067,11 +2979,15 @@ describe('Player', () => {
3067
2979
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3068
2980
  manifest.addVariant(1, (variant) => {
3069
2981
  variant.bandwidth = 500;
3070
- variant.addVideo(10);
2982
+ variant.addVideo(10, (stream) => {
2983
+ stream.size(10, 10);
2984
+ });
3071
2985
  });
3072
2986
  manifest.addVariant(2, (variant) => {
3073
2987
  variant.bandwidth = 100;
3074
- variant.addVideo(20);
2988
+ variant.addVideo(20, (stream) => {
2989
+ stream.size(30, 30);
2990
+ });
3075
2991
  });
3076
2992
  });
3077
2993
 
@@ -3101,10 +3017,13 @@ describe('Player', () => {
3101
3017
  manifest.addVariant(0, (variant) => {
3102
3018
  variant.addVideo(1, (stream) => {
3103
3019
  stream.keyIds = new Set(['abc']);
3020
+ stream.size(10, 10);
3104
3021
  });
3105
3022
  });
3106
3023
  manifest.addVariant(1, (variant) => {
3107
- variant.addVideo(2);
3024
+ variant.addVideo(2, (stream) => {
3025
+ stream.size(20, 20);
3026
+ });
3108
3027
  });
3109
3028
  });
3110
3029
 
@@ -3133,10 +3052,13 @@ describe('Player', () => {
3133
3052
  manifest.addVariant(0, (variant) => {
3134
3053
  variant.addVideo(1, (stream) => {
3135
3054
  stream.keyIds = new Set(['abc']);
3055
+ stream.size(10, 10);
3136
3056
  });
3137
3057
  });
3138
3058
  manifest.addVariant(1, (variant) => {
3139
- variant.addVideo(2);
3059
+ variant.addVideo(2, (stream) => {
3060
+ stream.size(20, 20);
3061
+ });
3140
3062
  });
3141
3063
  });
3142
3064
 
@@ -3232,10 +3154,13 @@ describe('Player', () => {
3232
3154
  manifest.addVariant(0, (variant) => {
3233
3155
  variant.addVideo(1, (stream) => {
3234
3156
  stream.keyIds = new Set(['abc']);
3157
+ stream.size(10, 10);
3235
3158
  });
3236
3159
  });
3237
3160
  manifest.addVariant(1, (variant) => {
3238
- variant.addVideo(2);
3161
+ variant.addVideo(2, (stream) => {
3162
+ stream.size(20, 20);
3163
+ });
3239
3164
  });
3240
3165
  });
3241
3166
 
@@ -3254,10 +3179,13 @@ describe('Player', () => {
3254
3179
  manifest.addVariant(0, (variant) => {
3255
3180
  variant.addVideo(1, (stream) => {
3256
3181
  stream.keyIds = new Set(['abc']);
3182
+ stream.size(10, 10);
3257
3183
  });
3258
3184
  });
3259
3185
  manifest.addVariant(1, (variant) => {
3260
- variant.addVideo(2);
3186
+ variant.addVideo(2, (stream) => {
3187
+ stream.size(20, 20);
3188
+ });
3261
3189
  });
3262
3190
  });
3263
3191
 
@@ -3276,10 +3204,13 @@ describe('Player', () => {
3276
3204
  manifest.addVariant(0, (variant) => {
3277
3205
  variant.addVideo(1, (stream) => {
3278
3206
  stream.keyIds = new Set(['abc']);
3207
+ stream.size(10, 10);
3279
3208
  });
3280
3209
  });
3281
3210
  manifest.addVariant(2, (variant) => {
3282
- variant.addVideo(3);
3211
+ variant.addVideo(3, (stream) => {
3212
+ stream.size(20, 20);
3213
+ });
3283
3214
  });
3284
3215
  });
3285
3216
 
@@ -3299,16 +3230,19 @@ describe('Player', () => {
3299
3230
  manifest.addVariant(0, (variant) => {
3300
3231
  variant.addVideo(1, (stream) => {
3301
3232
  stream.keyIds = new Set(['abc']);
3233
+ stream.size(10, 10);
3302
3234
  });
3303
3235
  });
3304
3236
  manifest.addVariant(2, (variant) => {
3305
3237
  variant.addVideo(3, (stream) => {
3306
3238
  stream.keyIds = new Set(['def']);
3239
+ stream.size(20, 20);
3307
3240
  });
3308
3241
  });
3309
3242
  manifest.addVariant(4, (variant) => {
3310
3243
  variant.addVideo(5, (stream) => {
3311
3244
  stream.keyIds = new Set(['abc', 'def']);
3245
+ stream.size(30, 30);
3312
3246
  });
3313
3247
  });
3314
3248
  });
@@ -3326,10 +3260,13 @@ describe('Player', () => {
3326
3260
  manifest.addVariant(0, (variant) => {
3327
3261
  variant.addVideo(1, (stream) => {
3328
3262
  stream.keyIds = new Set(['abc']);
3263
+ stream.size(10, 10);
3329
3264
  });
3330
3265
  });
3331
3266
  manifest.addVariant(2, (variant) => {
3332
- variant.addVideo(3);
3267
+ variant.addVideo(3, (stream) => {
3268
+ stream.size(20, 20);
3269
+ });
3333
3270
  });
3334
3271
  });
3335
3272
 
@@ -3349,10 +3286,13 @@ describe('Player', () => {
3349
3286
  manifest.addVariant(0, (variant) => {
3350
3287
  variant.addVideo(1, (stream) => {
3351
3288
  stream.keyIds = new Set(['abc']);
3289
+ stream.size(10, 10);
3352
3290
  });
3353
3291
  });
3354
3292
  manifest.addVariant(2, (variant) => {
3355
- variant.addVideo(3);
3293
+ variant.addVideo(3, (stream) => {
3294
+ stream.size(20, 20);
3295
+ });
3356
3296
  });
3357
3297
  });
3358
3298
 
@@ -3371,15 +3311,19 @@ describe('Player', () => {
3371
3311
  manifest.addVariant(0, (variant) => {
3372
3312
  variant.addVideo(1, (stream) => {
3373
3313
  stream.keyIds = new Set(['abc']);
3314
+ stream.size(10, 10);
3374
3315
  });
3375
3316
  });
3376
3317
  manifest.addVariant(2, (variant) => {
3377
3318
  variant.addVideo(3, (stream) => {
3378
3319
  stream.keyIds = new Set(['xyz']);
3320
+ stream.size(20, 20);
3379
3321
  });
3380
3322
  });
3381
3323
  manifest.addVariant(4, (variant) => {
3382
- variant.addVideo(5);
3324
+ variant.addVideo(5, (stream) => {
3325
+ stream.size(30, 30);
3326
+ });
3383
3327
  });
3384
3328
  });
3385
3329
 
@@ -3433,15 +3377,21 @@ describe('Player', () => {
3433
3377
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3434
3378
  manifest.addVariant(0, (variant) => {
3435
3379
  variant.bandwidth = 10;
3436
- variant.addVideo(1);
3380
+ variant.addVideo(1, (stream) => {
3381
+ stream.size(10, 10);
3382
+ });
3437
3383
  });
3438
3384
  manifest.addVariant(1, (variant) => {
3439
3385
  variant.bandwidth = 1500;
3440
- variant.addVideo(2);
3386
+ variant.addVideo(2, (stream) => {
3387
+ stream.size(20, 20);
3388
+ });
3441
3389
  });
3442
3390
  manifest.addVariant(2, (variant) => {
3443
3391
  variant.bandwidth = 500;
3444
- variant.addVideo(3);
3392
+ variant.addVideo(3, (stream) => {
3393
+ stream.size(30, 30);
3394
+ });
3445
3395
  });
3446
3396
  });
3447
3397
 
@@ -3557,7 +3507,7 @@ describe('Player', () => {
3557
3507
  variant.addVideo(3, (stream) => {
3558
3508
  stream.size(190, 190);
3559
3509
  });
3560
- variant.addAudio(4);
3510
+ variant.addAudio(2);
3561
3511
  });
3562
3512
  });
3563
3513
 
@@ -3620,18 +3570,21 @@ describe('Player', () => {
3620
3570
  variant.bandwidth = 100;
3621
3571
  variant.addVideo(0, (stream) => {
3622
3572
  stream.codecs = 'good';
3573
+ stream.size(10, 10);
3623
3574
  });
3624
3575
  });
3625
3576
  manifest.addVariant(1, (variant) => {
3626
3577
  variant.bandwidth = 200;
3627
3578
  variant.addVideo(1, (stream) => {
3628
3579
  stream.codecs = 'good';
3580
+ stream.size(20, 20);
3629
3581
  });
3630
3582
  });
3631
3583
  manifest.addVariant(2, (variant) => {
3632
3584
  variant.bandwidth = 300;
3633
3585
  variant.addVideo(2, (stream) => {
3634
3586
  stream.codecs = 'good';
3587
+ stream.size(30, 30);
3635
3588
  });
3636
3589
  });
3637
3590
 
@@ -3640,18 +3593,21 @@ describe('Player', () => {
3640
3593
  variant.bandwidth = 10000;
3641
3594
  variant.addVideo(3, (stream) => {
3642
3595
  stream.codecs = 'bad';
3596
+ stream.size(10, 10);
3643
3597
  });
3644
3598
  });
3645
3599
  manifest.addVariant(4, (variant) => {
3646
3600
  variant.bandwidth = 20000;
3647
3601
  variant.addVideo(4, (stream) => {
3648
3602
  stream.codecs = 'bad';
3603
+ stream.size(20, 20);
3649
3604
  });
3650
3605
  });
3651
3606
  manifest.addVariant(5, (variant) => {
3652
3607
  variant.bandwidth = 30000;
3653
3608
  variant.addVideo(5, (stream) => {
3654
3609
  stream.codecs = 'bad';
3610
+ stream.size(30, 30);
3655
3611
  });
3656
3612
  });
3657
3613
  });
@@ -3672,10 +3628,13 @@ describe('Player', () => {
3672
3628
  manifest.addVariant(0, (variant) => {
3673
3629
  variant.addVideo(1, (stream) => {
3674
3630
  stream.keyIds = new Set(['abc']);
3631
+ stream.size(10, 10);
3675
3632
  });
3676
3633
  });
3677
3634
  manifest.addVariant(2, (variant) => {
3678
- variant.addVideo(3);
3635
+ variant.addVideo(3, (stream) => {
3636
+ stream.size(20, 20);
3637
+ });
3679
3638
  });
3680
3639
  });
3681
3640
 
@@ -3778,19 +3737,25 @@ describe('Player', () => {
3778
3737
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3779
3738
  manifest.addVariant(0, (variant) => {
3780
3739
  variant.bandwidth = 100;
3781
- variant.addVideo(0);
3740
+ variant.addVideo(0, (stream) => {
3741
+ stream.size(10, 10);
3742
+ });
3782
3743
  variant.addAudio(9);
3783
3744
  });
3784
3745
 
3785
3746
  manifest.addVariant(1, (variant) => {
3786
3747
  variant.bandwidth = 200;
3787
- variant.addVideo(1);
3748
+ variant.addVideo(1, (stream) => {
3749
+ stream.size(20, 20);
3750
+ });
3788
3751
  variant.addExistingStream(9); // audio
3789
3752
  });
3790
3753
 
3791
3754
  manifest.addVariant(2, (variant) => {
3792
3755
  variant.bandwidth = 300;
3793
- variant.addVideo(2);
3756
+ variant.addVideo(2, (stream) => {
3757
+ stream.size(30, 30);
3758
+ });
3794
3759
  variant.addExistingStream(9); // audio
3795
3760
  });
3796
3761
  });
@@ -3859,15 +3824,21 @@ describe('Player', () => {
3859
3824
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3860
3825
  manifest.addVariant(0, (variant) => {
3861
3826
  variant.bandwidth = /** @type {?} */(undefined);
3862
- variant.addVideo(0);
3827
+ variant.addVideo(0, (stream) => {
3828
+ stream.size(10, 10);
3829
+ });
3863
3830
  });
3864
3831
  manifest.addVariant(1, (variant) => {
3865
3832
  variant.bandwidth = NaN;
3866
- variant.addVideo(1);
3833
+ variant.addVideo(1, (stream) => {
3834
+ stream.size(20, 20);
3835
+ });
3867
3836
  });
3868
3837
  manifest.addVariant(2, (variant) => {
3869
3838
  variant.bandwidth = 0;
3870
- variant.addVideo(2);
3839
+ variant.addVideo(2, (stream) => {
3840
+ stream.size(30, 30);
3841
+ });
3871
3842
  });
3872
3843
  });
3873
3844
 
@@ -16,6 +16,7 @@ describe('Walker', () => {
16
16
  startTime: null,
17
17
  startTimeOfLoad: NaN,
18
18
  uri: null,
19
+ keepAdManager: false,
19
20
  };
20
21
 
21
22
  // The graph topology that we will be using for our tests.
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <MPD mediaPresentationDuration="PT0M8.000S" minBufferTime="PT1S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:sea="urn:mpeg:dash:schema:sea:2012" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
+ <Period>
4
+ <AdaptationSet bitstreamSwitching="false" codecs="avc1.64000D" contentType="video" group="1" id="1" maxHeight="136" maxWidth="320" mimeType="video/mp4" profiles="ccff" segmentAlignment="true" startWithSAP="1">
5
+ <ContentProtection schemeIdUri="urn:mpeg:dash:sea:2012">
6
+ <sea:SegmentEncryption schemeIdUri="urn:mpeg:dash:sea:aes128-cbc:2013"/>
7
+ <sea:KeySystem keySystemUri="urn:mpeg:dash:sea:keysys:http:2013"/>
8
+ <sea:CryptoPeriod IV="0x3782A2D74219AE78CFADF642ABC5E68D" keyUriTemplate="license"/>
9
+ </ContentProtection>
10
+ <SegmentTemplate initialization="Fragments(video=i,format=mpd-time-csf)" media="Fragments(video=$Time$,format=mpd-time-csf)" timescale="10000000">
11
+ <SegmentTimeline>
12
+ <S d="20000000" r="4"/>
13
+ </SegmentTimeline>
14
+ </SegmentTemplate>
15
+ <Representation bandwidth="395367" codecs="avc1.64000D" height="136" id="1_V_video_8" width="320"/>
16
+ </AdaptationSet>
17
+ </Period>
18
+ </MPD>
@@ -0,0 +1 @@
1
+ �W祽Vv՛���:$�
@@ -0,0 +1,32 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--Generated with https://github.com/google/shaka-packager version v2.4.1-c731217-release-->
3
+ <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT60S">
4
+ <Period id="0">
5
+ <AdaptationSet id="6" contentType="video" maxWidth="180" maxHeight="144" frameRate="12800/512" par="5:4">
6
+ <Representation id="12" bandwidth="162364" codecs="avc1.4d400c" mimeType="video/mp4" sar="1:1" width="180" height="144">
7
+ <BaseURL>video_144p_108k_h264.mp4</BaseURL>
8
+ <SegmentBase indexRange="860-1071" timescale="12800">
9
+ <Initialization range="0-859"/>
10
+ </SegmentBase>
11
+ </Representation>
12
+ </AdaptationSet>
13
+ <AdaptationSet id="8" contentType="audio" lang="en" subsegmentAlignment="true">
14
+ <Representation id="13" bandwidth="130803" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="48000">
15
+ <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
16
+ <BaseURL>audio_en_2c_128k_aac.mp4</BaseURL>
17
+ <SegmentBase indexRange="786-1009" timescale="48000">
18
+ <Initialization range="0-785"/>
19
+ </SegmentBase>
20
+ </Representation>
21
+ </AdaptationSet>
22
+ <AdaptationSet id="10" contentType="audio" lang="es" subsegmentAlignment="true">
23
+ <Representation id="17" bandwidth="75654" codecs="opus" mimeType="audio/webm" audioSamplingRate="48000">
24
+ <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
25
+ <BaseURL>audio_es_2c_64k_opus.webm</BaseURL>
26
+ <SegmentBase indexRange="326-584" timescale="48000">
27
+ <Initialization range="0-325"/>
28
+ </SegmentBase>
29
+ </Representation>
30
+ </AdaptationSet>
31
+ </Period>
32
+ </MPD>
@@ -0,0 +1,6 @@
1
+ #EXTM3U
2
+ #EXT-X-VERSION:6
3
+ #EXT-X-INDEPENDENT-SEGMENTS
4
+
5
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=829339,BANDWIDTH=901770,CODECS="hvc1.2.4.L123.B0",RESOLUTION=640x360,FRAME-RATE=30.000
6
+ index.m3u8
@@ -0,0 +1,7 @@
1
+ #EXTM3U
2
+ #EXT-X-VERSION:3
3
+ #EXT-X-TARGETDURATION:12
4
+ #EXT-X-MEDIA-SEQUENCE:0
5
+ #EXTINF:12.000000,
6
+ 0.ts
7
+ #EXT-X-ENDLIST
@@ -0,0 +1,9 @@
1
+ #EXTM3U
2
+ #EXT-X-VERSION:3
3
+ #EXT-X-TARGETDURATION:5
4
+ #EXT-X-MEDIA-SEQUENCE:0
5
+ #EXTINF:5.000000,
6
+ 0.ts
7
+ #EXTINF:5.000000,
8
+ 1.ts
9
+ #EXT-X-ENDLIST
@@ -0,0 +1,24 @@
1
+ #EXTM3U
2
+ #EXT-X-VERSION:3
3
+ #EXT-X-INDEPENDENT-SEGMENTS
4
+ #EXT-X-TARGETDURATION:4
5
+ #EXT-X-MEDIA-SEQUENCE:0
6
+ #EXTINF:3.000000,
7
+ s_00000.ts
8
+
9
+ #EXTINF:3.000000,
10
+ s_00001.ts
11
+
12
+ #EXTINF:3.000000,
13
+ s_00002.ts
14
+
15
+ #EXTINF:3.000000,
16
+ s_00003.ts
17
+
18
+ #EXTINF:3.000000,
19
+ s_00004.ts
20
+
21
+ #EXTINF:3.000000,
22
+ s_00005.ts
23
+
24
+ #EXT-X-ENDLIST