shaka-player 4.6.2 → 4.6.4

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 (56) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/CONTRIBUTORS +1 -0
  3. package/demo/common/asset.js +0 -1
  4. package/demo/common/assets.js +0 -1
  5. package/demo/custom.js +2 -0
  6. package/dist/demo.compiled.debug.js +3 -3
  7. package/dist/demo.compiled.debug.map +1 -1
  8. package/dist/demo.compiled.js +3 -3
  9. package/dist/demo.compiled.map +1 -1
  10. package/dist/deps.js +4 -4
  11. package/dist/locales.js +32 -32
  12. package/dist/receiver.compiled.debug.map +1 -1
  13. package/dist/receiver.compiled.map +1 -1
  14. package/dist/shaka-player.compiled.d.ts +1 -1
  15. package/dist/shaka-player.compiled.debug.d.ts +1 -1
  16. package/dist/shaka-player.compiled.debug.externs.js +5 -2
  17. package/dist/shaka-player.compiled.debug.js +286 -282
  18. package/dist/shaka-player.compiled.debug.map +3 -3
  19. package/dist/shaka-player.compiled.externs.js +5 -2
  20. package/dist/shaka-player.compiled.js +423 -419
  21. package/dist/shaka-player.compiled.map +3 -3
  22. package/dist/shaka-player.ui.d.ts +1 -1
  23. package/dist/shaka-player.ui.debug.d.ts +1 -1
  24. package/dist/shaka-player.ui.debug.externs.js +5 -2
  25. package/dist/shaka-player.ui.debug.js +237 -234
  26. package/dist/shaka-player.ui.debug.map +3 -3
  27. package/dist/shaka-player.ui.externs.js +5 -2
  28. package/dist/shaka-player.ui.js +517 -512
  29. package/dist/shaka-player.ui.map +3 -3
  30. package/docs/tutorials/ui.md +3 -1
  31. package/externs/lcevc.js +6 -0
  32. package/externs/shaka/codecs.js +6 -0
  33. package/externs/shaka/transmuxer.js +6 -0
  34. package/lib/ads/client_side_ad_manager.js +4 -0
  35. package/lib/ads/media_tailor_ad_manager.js +5 -0
  36. package/lib/ads/server_side_ad_manager.js +4 -0
  37. package/lib/dash/dash_parser.js +2 -2
  38. package/lib/hls/hls_parser.js +19 -6
  39. package/lib/media/drm_engine.js +0 -3
  40. package/lib/media/media_source_engine.js +11 -5
  41. package/lib/media/streaming_engine.js +3 -2
  42. package/lib/media/video_wrapper.js +4 -3
  43. package/lib/player.js +4 -6
  44. package/lib/text/simple_text_displayer.js +8 -7
  45. package/lib/text/text_utils.js +39 -13
  46. package/lib/text/ui_text_displayer.js +70 -15
  47. package/lib/text/web_vtt_generator.js +1 -1
  48. package/lib/util/mp4_box_parsers.js +39 -5
  49. package/package.json +1 -1
  50. package/test/media/drm_engine_unit.js +27 -0
  51. package/test/test/assets/audio-xhe-aac.mp4 +0 -0
  52. package/test/test/util/layout_tests.js +2 -1
  53. package/test/text/simple_text_displayer_unit.js +1 -1
  54. package/test/text/web_vtt_generator_unit.js +3 -3
  55. package/test/transmuxer/transmuxer_integration.js +3 -3
  56. package/test/util/mp4_box_parsers_unit.js +36 -0
@@ -2390,6 +2390,33 @@ describe('DrmEngine', () => {
2390
2390
  [drmInfoAudio]);
2391
2391
  expect(returned).toEqual([drmInfoDesired]);
2392
2392
  });
2393
+
2394
+ it('does not match incompatible drmInfos', () => {
2395
+ // Different key systems do not match.
2396
+ const drmInfo1 = {
2397
+ keySystem: 'drm.abc',
2398
+ licenseServerUri: undefined,
2399
+ distinctiveIdentifierRequired: false,
2400
+ persistentStateRequired: false,
2401
+ serverCertificate: undefined,
2402
+ serverCertificateUri: '',
2403
+ initData: [],
2404
+ keyIds: new Set(),
2405
+ };
2406
+ const drmInfo2 = {
2407
+ keySystem: 'drm.foobar',
2408
+ licenseServerUri: undefined,
2409
+ distinctiveIdentifierRequired: false,
2410
+ persistentStateRequired: false,
2411
+ serverCertificate: undefined,
2412
+ serverCertificateUri: '',
2413
+ initData: [],
2414
+ keyIds: new Set(),
2415
+ };
2416
+ const returned1 = shaka.media.DrmEngine.getCommonDrmInfos(
2417
+ [drmInfo1], [drmInfo2]);
2418
+ expect(returned1).toEqual([]);
2419
+ });
2393
2420
  }); // describe('getCommonDrmInfos')
2394
2421
 
2395
2422
  describe('configure', () => {
@@ -377,7 +377,8 @@ shaka.test.NativeTextLayoutTests = class extends shaka.test.TextLayoutTests {
377
377
 
378
378
  /** @override */
379
379
  recreateTextDisplayer() {
380
- this.textDisplayer = new shaka.text.SimpleTextDisplayer(this.video);
380
+ this.textDisplayer = new shaka.text.SimpleTextDisplayer(
381
+ this.video, shaka.Player.TextTrackLabel);
381
382
  this.textDisplayer.setTextVisibility(true);
382
383
  }
383
384
 
@@ -18,7 +18,7 @@ describe('SimpleTextDisplayer', () => {
18
18
 
19
19
  beforeEach(() => {
20
20
  video = new shaka.test.FakeVideo();
21
- displayer = new SimpleTextDisplayer(video);
21
+ displayer = new SimpleTextDisplayer(video, shaka.Player.TextTrackLabel);
22
22
 
23
23
  expect(video.textTracks.length).toBe(1);
24
24
  mockTrack = /** @type {!shaka.test.FakeTextTrack} */ (video.textTracks[0]);
@@ -18,11 +18,11 @@ describe('WebVttGenerator', () => {
18
18
  const shakaCue2 = new shaka.text.Cue(40, 50, 'Test2');
19
19
  shakaCue2.textAlign = shaka.text.Cue.textAlign.RIGHT;
20
20
  shakaCue2.writingMode = shaka.text.Cue.writingMode.VERTICAL_RIGHT_TO_LEFT;
21
- shakaCue2.color = '#0f0';
22
- shakaCue2.backgroundColor = 'lime';
21
+ shakaCue2.color = '#00ff00ff';
22
+ shakaCue2.backgroundColor = 'rgba(0,255,0,1)';
23
23
  const shakaCue3 = new shaka.text.Cue(50, 51, 'Test3');
24
24
  shakaCue3.textAlign = shaka.text.Cue.textAlign.CENTER;
25
- shakaCue3.color = '#ffff00';
25
+ shakaCue3.color = 'rgb(255,255,0)';
26
26
  shakaCue3.backgroundColor = '#00ffff';
27
27
  const shakaCue4 = new shaka.text.Cue(52, 53, 'Test4');
28
28
  shakaCue4.textAlign = shaka.text.Cue.textAlign.START;
@@ -15,7 +15,7 @@
15
15
  function checkNoBrokenEdge() {
16
16
  const chromeVersion = shaka.util.Platform.chromeVersion();
17
17
  if (shaka.util.Platform.isWindows() && shaka.util.Platform.isEdge() &&
18
- chromeVersion && chromeVersion <= 118) {
18
+ chromeVersion && chromeVersion <= 122) {
19
19
  // When the tests fail, it's due to the manifest parser failing to find a
20
20
  // factory. Attempt to find a factory first, to avoid filtering the tests
21
21
  // when running in a non-broken Edge environment.
@@ -66,7 +66,7 @@ filterDescribe('Transmuxer Player', checkNoBrokenEdge, () => {
66
66
  // https://bugs.chromium.org/p/chromium/issues/detail?id=1450313
67
67
  const chromeVersion = shaka.util.Platform.chromeVersion();
68
68
  if (shaka.util.Platform.isWindows() && shaka.util.Platform.isEdge() &&
69
- chromeVersion && chromeVersion <= 118) {
69
+ chromeVersion && chromeVersion <= 122) {
70
70
  return false;
71
71
  }
72
72
  return true;
@@ -87,7 +87,7 @@ filterDescribe('Transmuxer Player', checkNoBrokenEdge, () => {
87
87
  // https://bugs.chromium.org/p/chromium/issues/detail?id=1450313
88
88
  const chromeVersion = shaka.util.Platform.chromeVersion();
89
89
  if (shaka.util.Platform.isWindows() && shaka.util.Platform.isEdge() &&
90
- chromeVersion && chromeVersion <= 118) {
90
+ chromeVersion && chromeVersion <= 122) {
91
91
  return false;
92
92
  }
93
93
  return true;
@@ -8,18 +8,24 @@ describe('Mp4BoxParsers', () => {
8
8
  const videoInitSegmentUri = '/base/test/test/assets/sintel-video-init.mp4';
9
9
  const videoSegmentUri = '/base/test/test/assets/sintel-video-segment.mp4';
10
10
 
11
+ const audioInitSegmentXheAacUri = '/base/test/test/assets/audio-xhe-aac.mp4';
12
+
11
13
  /** @type {!ArrayBuffer} */
12
14
  let videoInitSegment;
13
15
  /** @type {!ArrayBuffer} */
14
16
  let videoSegment;
17
+ /** @type {!ArrayBuffer} */
18
+ let audioInitSegmentXheAac;
15
19
 
16
20
  beforeAll(async () => {
17
21
  const responses = await Promise.all([
18
22
  shaka.test.Util.fetch(videoInitSegmentUri),
19
23
  shaka.test.Util.fetch(videoSegmentUri),
24
+ shaka.test.Util.fetch(audioInitSegmentXheAacUri),
20
25
  ]);
21
26
  videoInitSegment = responses[0];
22
27
  videoSegment = responses[1];
28
+ audioInitSegmentXheAac = responses[2];
23
29
  });
24
30
 
25
31
  it('parses init segment', () => {
@@ -157,6 +163,36 @@ describe('Mp4BoxParsers', () => {
157
163
  expect(baseMediaDecodeTime).toBe(expectedBaseMediaDecodeTime);
158
164
  });
159
165
 
166
+ it('parses ESDS box for xHE-AAC segment', () => {
167
+ let channelCount;
168
+ let sampleRate;
169
+ let codec;
170
+
171
+ const Mp4Parser = shaka.util.Mp4Parser;
172
+ new Mp4Parser()
173
+ .box('moov', Mp4Parser.children)
174
+ .box('trak', Mp4Parser.children)
175
+ .box('mdia', Mp4Parser.children)
176
+ .box('minf', Mp4Parser.children)
177
+ .box('stbl', Mp4Parser.children)
178
+ .fullBox('stsd', Mp4Parser.sampleDescription)
179
+ .box('mp4a', (box) => {
180
+ const parsedMP4ABox = shaka.util.Mp4BoxParsers.parseMP4A(box.reader);
181
+ channelCount = parsedMP4ABox.channelCount;
182
+ sampleRate = parsedMP4ABox.sampleRate;
183
+ if (box.reader.hasMoreData()) {
184
+ Mp4Parser.children(box);
185
+ }
186
+ })
187
+ .box('esds', (box) => {
188
+ const parsedESDSBox = shaka.util.Mp4BoxParsers.parseESDS(box.reader);
189
+ codec = parsedESDSBox.codec;
190
+ }).parse(audioInitSegmentXheAac, /* partialOkay= */ false);
191
+ expect(channelCount).toBe(2);
192
+ expect(sampleRate).toBe(48000);
193
+ expect(codec).toBe('mp4a.40.42');
194
+ });
195
+
160
196
  /**
161
197
  *
162
198
  * Explanation on the Uint8Array: