shaka-player 4.6.1 → 4.6.2

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 (35) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/demo/config.js +5 -0
  3. package/dist/demo.compiled.debug.js +26 -25
  4. package/dist/demo.compiled.debug.map +2 -2
  5. package/dist/demo.compiled.js +26 -25
  6. package/dist/demo.compiled.map +2 -2
  7. package/dist/locales.js +32 -32
  8. package/dist/shaka-player.compiled.d.ts +1 -0
  9. package/dist/shaka-player.compiled.debug.d.ts +1 -0
  10. package/dist/shaka-player.compiled.debug.externs.js +1 -0
  11. package/dist/shaka-player.compiled.debug.js +24 -23
  12. package/dist/shaka-player.compiled.debug.map +3 -3
  13. package/dist/shaka-player.compiled.externs.js +1 -0
  14. package/dist/shaka-player.compiled.js +694 -694
  15. package/dist/shaka-player.compiled.map +2 -2
  16. package/dist/shaka-player.ui.d.ts +1 -0
  17. package/dist/shaka-player.ui.debug.d.ts +1 -0
  18. package/dist/shaka-player.ui.debug.externs.js +1 -0
  19. package/dist/shaka-player.ui.debug.js +29 -27
  20. package/dist/shaka-player.ui.debug.map +3 -3
  21. package/dist/shaka-player.ui.externs.js +1 -0
  22. package/dist/shaka-player.ui.js +794 -794
  23. package/dist/shaka-player.ui.map +2 -2
  24. package/docs/tutorials/lcevc.md +2 -2
  25. package/lib/cea/cea608_memory.js +13 -2
  26. package/lib/media/segment_reference.js +2 -1
  27. package/lib/media/streaming_engine.js +1 -1
  28. package/lib/player.js +1 -1
  29. package/lib/transmuxer/ts_transmuxer.js +15 -0
  30. package/lib/util/error.js +6 -0
  31. package/package.json +2 -2
  32. package/test/cea/cea608_memory_unit.js +8 -8
  33. package/test/cea/cea_decoder_unit.js +11 -11
  34. package/test/demo/demo_unit.js +0 -3
  35. package/ui/presentation_time.js +5 -5
@@ -24,7 +24,7 @@ LCEVC Decoder library needs to be included in the HTML page:
24
24
  ```
25
25
  - Or use `unpkg.com` for latest LCEVC Decoder libraries.
26
26
  ```html
27
- <script src="https://unpkg.com/lcevc_dec.js@1.0.0/dist/lcevc_dec.min.js"></script>
27
+ <script src="https://unpkg.com/lcevc_dec.js@1.0.1/dist/lcevc_dec.min.js"></script>
28
28
  ```
29
29
 
30
30
  Configuration to enable LCEVC enhancement:
@@ -45,7 +45,7 @@ Sample setup using the Shaka Player UI library:
45
45
  <link rel="stylesheet" href="dist/controls.css" />
46
46
 
47
47
  <!-- LCEVC decoder compiled library -->
48
- <script src="https://unpkg.com/lcevc_dec.js@1.0.0/dist/lcevc_dec.min.js"></script>
48
+ <script src="https://unpkg.com/lcevc_dec.js@1.0.1/dist/lcevc_dec.min.js"></script>
49
49
 
50
50
  <!-- Application source: -->
51
51
  <script src="app.js"></script>
@@ -84,8 +84,10 @@ shaka.cea.Cea608Memory = class {
84
84
  startTime, endTime, /* payload= */ '');
85
85
  topLevelCue.lineInterpretation =
86
86
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
87
- const maxRows = shaka.cea.Cea608Memory.CC_ROWS + 1;
88
- topLevelCue.line = this.row_ / maxRows * 100;
87
+ const line = shaka.cea.Cea608Memory.ROW_TO_LINE_CONVERSION_.get(this.row_);
88
+ if (line) {
89
+ topLevelCue.line = line;
90
+ }
89
91
  return shaka.cea.CeaUtils.getParsedCaption(
90
92
  topLevelCue, stream, this.rows_, startTime, endTime);
91
93
  }
@@ -320,3 +322,12 @@ shaka.cea.Cea608Memory.CharSet.ExtendedPortugueseGerman = new Map([
320
322
  [0x38, 'Å'], [0x39, 'å'], [0x3a, 'Ø'], [0x3b, 'ø'], [0x3c, '┌'], [0x3d, '┐'],
321
323
  [0x3e, '└'], [0x3f, '┘'],
322
324
  ]);
325
+
326
+ /**
327
+ * @private @const {!Map<number, number>}
328
+ */
329
+ shaka.cea.Cea608Memory.ROW_TO_LINE_CONVERSION_ = new Map([
330
+ [1, 10], [2, 15.33], [3, 20.66], [4, 26], [5, 31.33], [6, 36.66], [7, 42],
331
+ [8, 47.33], [9, 52.66], [10, 58], [11, 63.33], [12, 68.66], [13, 74],
332
+ [14, 79.33], [15, 84.66],
333
+ ]);
@@ -128,7 +128,8 @@ shaka.media.InitSegmentReference = class {
128
128
  } else {
129
129
  return reference1.getStartByte() == reference2.getStartByte() &&
130
130
  reference1.getEndByte() == reference2.getEndByte() &&
131
- ArrayUtils.equal(reference1.getUris(), reference2.getUris()) &&
131
+ ArrayUtils.equal(
132
+ reference1.getUris().sort(), reference2.getUris().sort()) &&
132
133
  BufferUtils.equal(reference1.getSegmentData(),
133
134
  reference2.getSegmentData());
134
135
  }
@@ -1792,7 +1792,7 @@ shaka.media.StreamingEngine = class {
1792
1792
  reference.initSegmentReference, mediaState.lastInitSegmentReference)) {
1793
1793
  mediaState.lastInitSegmentReference = reference.initSegmentReference;
1794
1794
 
1795
- if (reference.initSegmentReference) {
1795
+ if (reference.isIndependent() && reference.initSegmentReference) {
1796
1796
  shaka.log.v1(logPrefix, 'fetching init segment');
1797
1797
 
1798
1798
  const fetchInit =
package/lib/player.js CHANGED
@@ -6781,7 +6781,7 @@ shaka.Player.TYPICAL_BUFFERING_THRESHOLD_ = 0.5;
6781
6781
  * @export
6782
6782
  */
6783
6783
  // eslint-disable-next-line no-useless-concat
6784
- shaka.Player.version = 'v4.6.1' + '-uncompiled'; // x-release-please-version
6784
+ shaka.Player.version = 'v4.6.2' + '-uncompiled'; // x-release-please-version
6785
6785
 
6786
6786
  // Initialize the deprecation system using the version string we just set
6787
6787
  // on the player.
@@ -242,6 +242,9 @@ shaka.transmuxer.TsTransmuxer = class {
242
242
  }
243
243
  }
244
244
  } catch (e) {
245
+ if (e && e.code == shaka.util.Error.Code.TRANSMUXING_NO_VIDEO_DATA) {
246
+ return Promise.resolve(new Uint8Array([]));
247
+ }
245
248
  return Promise.reject(e);
246
249
  }
247
250
 
@@ -704,6 +707,12 @@ shaka.transmuxer.TsTransmuxer = class {
704
707
 
705
708
  let nalus = [];
706
709
  const videoData = tsParser.getVideoData();
710
+ if (!videoData.length) {
711
+ throw new shaka.util.Error(
712
+ shaka.util.Error.Severity.CRITICAL,
713
+ shaka.util.Error.Category.MEDIA,
714
+ shaka.util.Error.Code.TRANSMUXING_NO_VIDEO_DATA);
715
+ }
707
716
  for (let i = 0; i < videoData.length; i++) {
708
717
  const pes = videoData[i];
709
718
  const dataNalus = pes.nalus;
@@ -790,6 +799,12 @@ shaka.transmuxer.TsTransmuxer = class {
790
799
 
791
800
  let nalus = [];
792
801
  const videoData = tsParser.getVideoData();
802
+ if (!videoData.length) {
803
+ throw new shaka.util.Error(
804
+ shaka.util.Error.Severity.CRITICAL,
805
+ shaka.util.Error.Category.MEDIA,
806
+ shaka.util.Error.Code.TRANSMUXING_NO_VIDEO_DATA);
807
+ }
793
808
  for (let i = 0; i < videoData.length; i++) {
794
809
  const pes = videoData[i];
795
810
  const dataNalus = pes.nalus;
package/lib/util/error.js CHANGED
@@ -511,6 +511,12 @@ shaka.util.Error.Code = {
511
511
  */
512
512
  'MSS_TRANSMUXING_FAILED': 3022,
513
513
 
514
+ /**
515
+ * An internal error which indicates that transmuxing operation has no video
516
+ * data. This should not be seen by applications.
517
+ */
518
+ 'TRANSMUXING_NO_VIDEO_DATA': 3023,
519
+
514
520
 
515
521
  /**
516
522
  * The Player was unable to guess the manifest type based on file extension
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shaka-player",
3
3
  "description": "DASH/EME video player library",
4
- "version": "4.6.1",
4
+ "version": "4.6.2",
5
5
  "homepage": "https://github.com/shaka-project/shaka-player",
6
6
  "author": "Google",
7
7
  "maintainers": [
@@ -48,7 +48,7 @@
48
48
  "karma-sourcemap-loader": "^0.3.8",
49
49
  "karma-spec-reporter": "^0.0.34",
50
50
  "karma-webdriver-launcher": "^1.0.8",
51
- "lcevc_dec.js": "^1.0.0",
51
+ "lcevc_dec.js": "^1.0.1",
52
52
  "less": "https://gitpkg.now.sh/joeyparrish/less.js/packages/less?28c63a43",
53
53
  "less-plugin-clean-css": "github:austingardner/less-plugin-clean-css#4e9e77bf",
54
54
  "material-design-lite": "^1.3.0",
@@ -31,7 +31,7 @@ describe('Cea608Memory', () => {
31
31
  const caption = memory.forceEmit(startTime, endTime);
32
32
 
33
33
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
34
- topLevelCue.line = 6.25;
34
+ topLevelCue.line = 10;
35
35
  topLevelCue.lineInterpretation =
36
36
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
37
37
  topLevelCue.nestedCues = [
@@ -82,7 +82,7 @@ describe('Cea608Memory', () => {
82
82
  }
83
83
 
84
84
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
85
- topLevelCue.line = 6.25;
85
+ topLevelCue.line = 10;
86
86
  topLevelCue.lineInterpretation =
87
87
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
88
88
  topLevelCue.nestedCues = [
@@ -119,7 +119,7 @@ describe('Cea608Memory', () => {
119
119
  }
120
120
 
121
121
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
122
- topLevelCue.line = 6.25;
122
+ topLevelCue.line = 10;
123
123
  topLevelCue.lineInterpretation =
124
124
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
125
125
  topLevelCue.nestedCues = [
@@ -173,7 +173,7 @@ describe('Cea608Memory', () => {
173
173
  // ...
174
174
  // So we expect that test\n\ntest is emitted
175
175
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
176
- topLevelCue.line = 37.5;
176
+ topLevelCue.line = 36.66;
177
177
  topLevelCue.lineInterpretation =
178
178
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
179
179
  topLevelCue.nestedCues = [
@@ -217,7 +217,7 @@ describe('Cea608Memory', () => {
217
217
  memory.eraseChar(); // Erase the last 't' from 'testt'
218
218
 
219
219
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
220
- topLevelCue.line = 6.25;
220
+ topLevelCue.line = 10;
221
221
  topLevelCue.lineInterpretation =
222
222
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
223
223
  topLevelCue.nestedCues = [
@@ -291,7 +291,7 @@ describe('Cea608Memory', () => {
291
291
 
292
292
  // Expected text is 's\nt\nt\ne'
293
293
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
294
- topLevelCue.line = 31.25;
294
+ topLevelCue.line = 31.33;
295
295
  topLevelCue.lineInterpretation =
296
296
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
297
297
  topLevelCue.nestedCues = [
@@ -338,7 +338,7 @@ describe('Cea608Memory', () => {
338
338
 
339
339
  // Expected text is 't\ne\ns\nt'
340
340
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
341
- topLevelCue.line = 31.25;
341
+ topLevelCue.line = 31.33;
342
342
  topLevelCue.lineInterpretation =
343
343
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
344
344
  topLevelCue.nestedCues = [
@@ -385,7 +385,7 @@ describe('Cea608Memory', () => {
385
385
 
386
386
  // Expected text is 't\ne\ns\nt'
387
387
  const topLevelCue = new shaka.text.Cue(startTime, endTime, '');
388
- topLevelCue.line = 31.25;
388
+ topLevelCue.line = 31.33;
389
389
  topLevelCue.lineInterpretation =
390
390
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
391
391
  topLevelCue.nestedCues = [
@@ -65,7 +65,7 @@ describe('CeaDecoder', () => {
65
65
 
66
66
  const topLevelCue = new shaka.text.Cue(
67
67
  startTimeCaption1, startTimeCaption2, '');
68
- topLevelCue.line = 81.25;
68
+ topLevelCue.line = 74;
69
69
  topLevelCue.lineInterpretation =
70
70
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
71
71
  topLevelCue.nestedCues = [
@@ -113,7 +113,7 @@ describe('CeaDecoder', () => {
113
113
  // Since there are three style changes, there should be three nested cues.
114
114
  const topLevelCue = new shaka.text.Cue(
115
115
  startTimeCaption1, startTimeCaption2, '');
116
- topLevelCue.line = 6.25;
116
+ topLevelCue.line = 10;
117
117
  topLevelCue.lineInterpretation =
118
118
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
119
119
 
@@ -166,7 +166,7 @@ describe('CeaDecoder', () => {
166
166
  // A single nested cue containing yellow, italicized text.
167
167
  const topLevelCue = new shaka.text.Cue(startTimeCaption1,
168
168
  startTimeCaption2, '');
169
- topLevelCue.line = 12.5;
169
+ topLevelCue.line = 15.33;
170
170
  topLevelCue.lineInterpretation =
171
171
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
172
172
  topLevelCue.nestedCues = [
@@ -208,7 +208,7 @@ describe('CeaDecoder', () => {
208
208
 
209
209
  const topLevelCue = new shaka.text.Cue(startTimeCaption1,
210
210
  startTimeCaption2, '');
211
- topLevelCue.line = 6.25;
211
+ topLevelCue.line = 10;
212
212
  topLevelCue.lineInterpretation =
213
213
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
214
214
  topLevelCue.nestedCues = [
@@ -243,7 +243,7 @@ describe('CeaDecoder', () => {
243
243
 
244
244
  const topLevelCue = new shaka.text.Cue(startTimeCaption1,
245
245
  startTimeCaption2, '');
246
- topLevelCue.line = 6.25;
246
+ topLevelCue.line = 10;
247
247
  topLevelCue.lineInterpretation =
248
248
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
249
249
  topLevelCue.nestedCues = [
@@ -315,7 +315,7 @@ describe('CeaDecoder', () => {
315
315
  // Top level cue corresponding to the first closed caption.
316
316
  const topLevelCue1 = new shaka.text.Cue(
317
317
  /* startTime= */ time1, /* endTime= */ time2, '');
318
- topLevelCue1.line = 93.75;
318
+ topLevelCue1.line = 84.66;
319
319
  topLevelCue1.lineInterpretation =
320
320
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
321
321
  topLevelCue1.nestedCues = [
@@ -326,7 +326,7 @@ describe('CeaDecoder', () => {
326
326
  // Top level cue corresponding to the second closed caption.
327
327
  const topLevelCue2 = new shaka.text.Cue(
328
328
  /* startTime= */ time2, /* endTime= */ time3, '');
329
- topLevelCue2.line = 93.75;
329
+ topLevelCue2.line = 84.66;
330
330
  topLevelCue2.lineInterpretation =
331
331
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
332
332
  topLevelCue2.nestedCues = [
@@ -343,7 +343,7 @@ describe('CeaDecoder', () => {
343
343
  // Top level cue corresponding to the third closed caption.
344
344
  const topLevelCue3 = new shaka.text.Cue(
345
345
  /* startTime= */ time3, /* endTime= */ time4, '');
346
- topLevelCue3.line = 93.75;
346
+ topLevelCue3.line = 84.66;
347
347
  topLevelCue3.lineInterpretation =
348
348
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
349
349
  topLevelCue3.nestedCues = [
@@ -360,7 +360,7 @@ describe('CeaDecoder', () => {
360
360
  // Top level cue corresponding to the fourth closed caption.
361
361
  const topLevelCue4 = new shaka.text.Cue(
362
362
  /* startTime= */ time4, /* endTime= */ time5, '');
363
- topLevelCue4.line = 93.75;
363
+ topLevelCue4.line = 84.66;
364
364
  topLevelCue4.lineInterpretation =
365
365
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
366
366
  topLevelCue4.nestedCues = [
@@ -433,7 +433,7 @@ describe('CeaDecoder', () => {
433
433
  // Top level cue corresponding to the first closed caption.
434
434
  const topLevelCue1 = new shaka.text.Cue(/* startTime= */ 1,
435
435
  /* endTime= */ 2, '');
436
- topLevelCue1.line = 93.75;
436
+ topLevelCue1.line = 84.66;
437
437
  topLevelCue1.lineInterpretation =
438
438
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
439
439
  topLevelCue1.nestedCues = [
@@ -444,7 +444,7 @@ describe('CeaDecoder', () => {
444
444
  // Top level cue corresponding to the second closed caption.
445
445
  const topLevelCue2 = new shaka.text.Cue(/* startTime= */ 2,
446
446
  /* endTime= */ 3, '');
447
- topLevelCue2.line = 25;
447
+ topLevelCue2.line = 26;
448
448
  topLevelCue2.lineInterpretation =
449
449
  shaka.text.Cue.lineInterpretation.PERCENTAGE;
450
450
  topLevelCue2.nestedCues = [
@@ -74,14 +74,11 @@ describe('Demo', () => {
74
74
  function checkConfig(checkValueNameFn) {
75
75
  const configPrimitives = new Set(['number', 'string', 'boolean']);
76
76
  const exceptions = new Set()
77
- .add('preferredVariantRole')
78
77
  .add('playRangeStart')
79
78
  .add('playRangeEnd')
80
79
  .add('manifest.dash.keySystemsByURI')
81
- .add('manifest.hls.mediaPlaylistFullMimeType')
82
80
  .add('manifest.mss.keySystemsBySystemId')
83
81
  .add('drm.keySystemsMapping')
84
- .add('streaming.parsePrftBox')
85
82
  .add('manifest.raiseFatalErrorOnManifestUpdateRequestFailure')
86
83
  .add('drm.persistentSessionOnlinePlayback')
87
84
  .add('drm.persistentSessionsMetadata');
@@ -64,7 +64,6 @@ shaka.ui.PresentationTimeTracker = class extends shaka.ui.Element {
64
64
  updateTime_() {
65
65
  const isSeeking = this.controls.isSeeking();
66
66
  let displayTime = this.controls.getDisplayTime();
67
- const duration = this.video.duration;
68
67
  const seekRange = this.player.seekRange();
69
68
  const seekRangeSize = seekRange.end - seekRange.start;
70
69
  const Utils = shaka.ui.Utils;
@@ -89,11 +88,12 @@ shaka.ui.PresentationTimeTracker = class extends shaka.ui.Element {
89
88
  this.currentTime_.disabled = true;
90
89
  }
91
90
  } else {
92
- const showHour = duration >= 3600;
91
+ const showHour = seekRangeSize >= 3600;
93
92
 
94
- let value = Utils.buildTimeString(displayTime, showHour);
95
- if (duration) {
96
- value += ' / ' + Utils.buildTimeString(duration, showHour);
93
+ const currentTime = Math.max(0, displayTime - seekRange.start);
94
+ let value = Utils.buildTimeString(currentTime, showHour);
95
+ if (seekRangeSize) {
96
+ value += ' / ' + Utils.buildTimeString(seekRangeSize, showHour);
97
97
  }
98
98
  this.setValue_(value);
99
99
  this.currentTime_.disabled = true;