shaka-player 4.7.13 → 4.8.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 (114) hide show
  1. package/AUTHORS +1 -0
  2. package/CONTRIBUTORS +1 -0
  3. package/LICENSE +54 -0
  4. package/README.md +22 -1
  5. package/dist/controls.css +1 -1
  6. package/dist/controls.css.map +1 -1
  7. package/dist/deps.js +34 -23
  8. package/dist/locales.js +44 -34
  9. package/dist/shaka-player.compiled.d.ts +194 -44
  10. package/dist/shaka-player.compiled.debug.d.ts +194 -44
  11. package/dist/shaka-player.compiled.debug.externs.js +474 -337
  12. package/dist/shaka-player.compiled.debug.js +949 -832
  13. package/dist/shaka-player.compiled.debug.map +4 -4
  14. package/dist/shaka-player.compiled.externs.js +474 -337
  15. package/dist/shaka-player.compiled.js +1237 -1171
  16. package/dist/shaka-player.compiled.map +4 -4
  17. package/dist/shaka-player.ui.d.ts +257 -47
  18. package/dist/shaka-player.ui.debug.d.ts +257 -47
  19. package/dist/shaka-player.ui.debug.externs.js +591 -376
  20. package/dist/shaka-player.ui.debug.js +1165 -965
  21. package/dist/shaka-player.ui.debug.map +4 -4
  22. package/dist/shaka-player.ui.externs.js +591 -376
  23. package/dist/shaka-player.ui.js +1521 -1404
  24. package/dist/shaka-player.ui.map +4 -4
  25. package/externs/device_sensor_event.js +18 -0
  26. package/externs/hisense.js +16 -0
  27. package/externs/playstation.js +31 -0
  28. package/externs/shaka/abr_manager.js +3 -1
  29. package/externs/shaka/ads.js +5 -0
  30. package/externs/shaka/codecs.js +13 -0
  31. package/externs/shaka/manifest.js +58 -6
  32. package/externs/shaka/net.js +13 -1
  33. package/externs/shaka/player.js +184 -13
  34. package/externs/shaka/text.js +19 -0
  35. package/externs/tizen.js +41 -0
  36. package/externs/webos.js +19 -0
  37. package/externs/xbox.js +43 -0
  38. package/lib/abr/simple_abr_manager.js +9 -1
  39. package/lib/ads/ad_manager.js +19 -2
  40. package/lib/ads/client_side_ad_manager.js +5 -3
  41. package/lib/ads/media_tailor_ad_manager.js +9 -0
  42. package/lib/cast/cast_receiver.js +0 -14
  43. package/lib/cast/cast_utils.js +1 -0
  44. package/lib/cea/mp4_cea_parser.js +6 -1
  45. package/lib/dash/content_protection.js +97 -53
  46. package/lib/dash/dash_parser.js +230 -176
  47. package/lib/dash/mpd_utils.js +72 -65
  48. package/lib/dash/segment_base.js +27 -21
  49. package/lib/dash/segment_list.js +18 -16
  50. package/lib/dash/segment_template.js +26 -21
  51. package/lib/hls/hls_parser.js +358 -164
  52. package/lib/media/buffering_observer.js +25 -1
  53. package/lib/media/drm_engine.js +91 -71
  54. package/lib/media/manifest_filterer.js +220 -0
  55. package/lib/media/media_source_engine.js +34 -5
  56. package/lib/media/preload_manager.js +827 -0
  57. package/lib/media/presentation_timeline.js +11 -0
  58. package/lib/media/segment_index.js +40 -30
  59. package/lib/media/segment_prefetch.js +140 -43
  60. package/lib/media/segment_reference.js +31 -8
  61. package/lib/media/segment_utils.js +208 -25
  62. package/lib/media/streaming_engine.js +319 -63
  63. package/lib/mss/content_protection.js +31 -25
  64. package/lib/mss/mss_parser.js +74 -55
  65. package/lib/net/networking_engine.js +49 -4
  66. package/lib/offline/storage.js +3 -3
  67. package/lib/player.js +882 -673
  68. package/lib/polyfill/media_capabilities.js +16 -1
  69. package/lib/text/simple_text_displayer.js +9 -0
  70. package/lib/text/stub_text_displayer.js +7 -0
  71. package/lib/text/text_engine.js +16 -3
  72. package/lib/text/ttml_text_parser.js +116 -114
  73. package/lib/text/ui_text_displayer.js +28 -11
  74. package/lib/text/vtt_text_parser.js +54 -115
  75. package/lib/transmuxer/opus.js +91 -0
  76. package/lib/transmuxer/ts_transmuxer.js +115 -0
  77. package/lib/util/cmcd_manager.js +152 -3
  78. package/lib/util/dom_utils.js +11 -0
  79. package/lib/util/error.js +5 -0
  80. package/lib/util/fake_event.js +2 -0
  81. package/lib/util/manifest_parser_utils.js +97 -3
  82. package/lib/util/mp4_box_parsers.js +346 -17
  83. package/lib/util/mp4_generator.js +23 -0
  84. package/lib/util/periods.js +19 -0
  85. package/lib/util/platform.js +161 -9
  86. package/lib/util/player_configuration.js +61 -3
  87. package/lib/util/stats.js +16 -0
  88. package/lib/util/stream_utils.js +16 -6
  89. package/lib/util/string_utils.js +36 -0
  90. package/lib/util/tXml.js +814 -0
  91. package/lib/util/ts_parser.js +50 -0
  92. package/lib/util/xml_utils.js +10 -338
  93. package/package.json +2 -2
  94. package/shaka-player.uncompiled.js +8 -0
  95. package/ui/controls.js +187 -5
  96. package/ui/enums.js +2 -0
  97. package/ui/externs/ui.js +30 -3
  98. package/ui/gl_matrix/matrix_4x4.js +568 -0
  99. package/ui/gl_matrix/matrix_quaternion.js +45 -0
  100. package/ui/less/containers.less +11 -0
  101. package/ui/locales/en-GB.json +2 -0
  102. package/ui/locales/en.json +2 -0
  103. package/ui/locales/es-419.json +2 -0
  104. package/ui/locales/es.json +2 -0
  105. package/ui/locales/source.json +8 -0
  106. package/ui/recenter_vr.js +126 -0
  107. package/ui/resolution_selection.js +25 -5
  108. package/ui/statistics_button.js +12 -0
  109. package/ui/text_selection.js +1 -1
  110. package/ui/toggle_stereoscopic.js +127 -0
  111. package/ui/ui.js +74 -38
  112. package/ui/vr_manager.js +557 -0
  113. package/ui/vr_utils.js +232 -0
  114. package/ui/vr_webgl.js +697 -0
@@ -17,6 +17,7 @@ goog.require('shaka.util.Error');
17
17
  goog.require('shaka.util.IReleasable');
18
18
  goog.require('shaka.util.ManifestParserUtils');
19
19
  goog.require('shaka.util.ObjectUtils');
20
+ goog.require('shaka.util.StringUtils');
20
21
  goog.requireType('shaka.dash.DashParser');
21
22
  goog.requireType('shaka.media.PresentationTimeline');
22
23
 
@@ -36,19 +37,20 @@ shaka.dash.SegmentTemplate = class {
36
37
  * @param {number} segmentLimit The maximum number of segments to generate for
37
38
  * a SegmentTemplate with fixed duration.
38
39
  * @param {!Object.<string, number>} periodDurationMap
39
- * @param {shaka.extern.aes128Key|undefined} aes128Key
40
+ * @param {shaka.extern.aesKey|undefined} aesKey
41
+ * @param {?number} lastSegmentNumber
40
42
  * @return {shaka.dash.DashParser.StreamInfo}
41
43
  */
42
44
  static createStreamInfo(
43
45
  context, requestSegment, streamMap, isUpdate, segmentLimit,
44
- periodDurationMap, aes128Key) {
46
+ periodDurationMap, aesKey, lastSegmentNumber) {
45
47
  goog.asserts.assert(context.representation.segmentTemplate,
46
48
  'Should only be called with SegmentTemplate');
47
49
  const SegmentTemplate = shaka.dash.SegmentTemplate;
48
50
  const TimelineSegmentIndex = shaka.dash.TimelineSegmentIndex;
49
51
 
50
52
  const initSegmentReference =
51
- SegmentTemplate.createInitSegment_(context, aes128Key);
53
+ SegmentTemplate.createInitSegment_(context, aesKey);
52
54
 
53
55
  /** @type {shaka.dash.SegmentTemplate.SegmentTemplateInfo} */
54
56
  const info = SegmentTemplate.parseSegmentTemplateInfo_(context);
@@ -84,7 +86,7 @@ shaka.dash.SegmentTemplate = class {
84
86
  generateSegmentIndex: () => {
85
87
  return SegmentTemplate.generateSegmentIndexFromDuration_(
86
88
  shallowCopyOfContext, info, segmentLimit, initSegmentReference,
87
- periodDurationMap, aes128Key);
89
+ periodDurationMap, aesKey, lastSegmentNumber);
88
90
  },
89
91
  };
90
92
  } else {
@@ -136,7 +138,7 @@ shaka.dash.SegmentTemplate = class {
136
138
  periodEnd,
137
139
  initSegmentReference,
138
140
  shouldFit,
139
- aes128Key,
141
+ aesKey,
140
142
  context.representation.segmentSequenceCadence,
141
143
  );
142
144
  } else {
@@ -178,7 +180,7 @@ shaka.dash.SegmentTemplate = class {
178
180
 
179
181
  /**
180
182
  * @param {?shaka.dash.DashParser.InheritanceFrame} frame
181
- * @return {Element}
183
+ * @return {?shaka.extern.xml.Node}
182
184
  * @private
183
185
  */
184
186
  static fromInheritance_(frame) {
@@ -195,6 +197,7 @@ shaka.dash.SegmentTemplate = class {
195
197
  static parseSegmentTemplateInfo_(context) {
196
198
  const SegmentTemplate = shaka.dash.SegmentTemplate;
197
199
  const MpdUtils = shaka.dash.MpdUtils;
200
+ const StringUtils = shaka.util.StringUtils;
198
201
  const segmentInfo =
199
202
  MpdUtils.parseSegmentInfo(context, SegmentTemplate.fromInheritance_);
200
203
 
@@ -211,7 +214,7 @@ shaka.dash.SegmentTemplate = class {
211
214
  unscaledPresentationTimeOffset:
212
215
  segmentInfo.unscaledPresentationTimeOffset,
213
216
  timeline: segmentInfo.timeline,
214
- mediaTemplate: media,
217
+ mediaTemplate: media && StringUtils.htmlUnescape(media),
215
218
  indexTemplate: index,
216
219
  mimeType: context.representation.mimeType,
217
220
  codecs: context.representation.codecs,
@@ -306,13 +309,14 @@ shaka.dash.SegmentTemplate = class {
306
309
  * @param {number} segmentLimit The maximum number of segments to generate.
307
310
  * @param {shaka.media.InitSegmentReference} initSegmentReference
308
311
  * @param {!Object.<string, number>} periodDurationMap
309
- * @param {shaka.extern.aes128Key|undefined} aes128Key
312
+ * @param {shaka.extern.aesKey|undefined} aesKey
313
+ * @param {?number} lastSegmentNumber
310
314
  * @return {!Promise.<shaka.media.SegmentIndex>}
311
315
  * @private
312
316
  */
313
317
  static generateSegmentIndexFromDuration_(
314
318
  context, info, segmentLimit, initSegmentReference, periodDurationMap,
315
- aes128Key) {
319
+ aesKey, lastSegmentNumber) {
316
320
  goog.asserts.assert(info.mediaTemplate,
317
321
  'There should be a media template with duration');
318
322
 
@@ -408,7 +412,7 @@ shaka.dash.SegmentTemplate = class {
408
412
  const minPosition = context.dynamic ?
409
413
  Math.max(range[0], range[1] - segmentLimit + 1) :
410
414
  range[0];
411
- const maxPosition = range[1];
415
+ const maxPosition = lastSegmentNumber || range[1];
412
416
 
413
417
  const references = [];
414
418
  const createReference = (position) => {
@@ -464,7 +468,7 @@ shaka.dash.SegmentTemplate = class {
464
468
  /* tileDuration= */ null,
465
469
  /* syncTime= */ null,
466
470
  shaka.media.SegmentReference.Status.AVAILABLE,
467
- aes128Key);
471
+ aesKey);
468
472
  ref.codecs = context.representation.codecs;
469
473
  ref.mimeType = context.representation.mimeType;
470
474
  // This is necessary information for thumbnail streams:
@@ -529,20 +533,21 @@ shaka.dash.SegmentTemplate = class {
529
533
  * Creates an init segment reference from a context object.
530
534
  *
531
535
  * @param {shaka.dash.DashParser.Context} context
532
- * @param {shaka.extern.aes128Key|undefined} aes128Key
536
+ * @param {shaka.extern.aesKey|undefined} aesKey
533
537
  * @return {shaka.media.InitSegmentReference}
534
538
  * @private
535
539
  */
536
- static createInitSegment_(context, aes128Key) {
540
+ static createInitSegment_(context, aesKey) {
537
541
  const MpdUtils = shaka.dash.MpdUtils;
538
542
  const ManifestParserUtils = shaka.util.ManifestParserUtils;
539
543
  const SegmentTemplate = shaka.dash.SegmentTemplate;
540
544
 
541
- const initialization = MpdUtils.inheritAttribute(
545
+ let initialization = MpdUtils.inheritAttribute(
542
546
  context, SegmentTemplate.fromInheritance_, 'initialization');
543
547
  if (!initialization) {
544
548
  return null;
545
549
  }
550
+ initialization = shaka.util.StringUtils.htmlUnescape(initialization);
546
551
 
547
552
  const repId = context.representation.id;
548
553
  const bandwidth = context.bandwidth || null;
@@ -563,7 +568,7 @@ shaka.dash.SegmentTemplate = class {
563
568
  qualityInfo,
564
569
  /* timescale= */ null,
565
570
  /* segmentData= */ null,
566
- aes128Key);
571
+ aesKey);
567
572
  ref.codecs = context.representation.codecs;
568
573
  ref.mimeType = context.representation.mimeType;
569
574
  return ref;
@@ -593,12 +598,12 @@ shaka.dash.TimelineSegmentIndex = class extends shaka.media.SegmentIndex {
593
598
  * @param {number} periodEnd
594
599
  * @param {shaka.media.InitSegmentReference} initSegmentReference
595
600
  * @param {boolean} shouldFit
596
- * @param {shaka.extern.aes128Key|undefined} aes128Key
601
+ * @param {shaka.extern.aesKey|undefined} aesKey
597
602
  * @param {number} segmentSequenceCadence
598
603
  */
599
604
  constructor(templateInfo, representationId, bandwidth, getBaseUris,
600
605
  periodStart, periodEnd, initSegmentReference, shouldFit,
601
- aes128Key, segmentSequenceCadence) {
606
+ aesKey, segmentSequenceCadence) {
602
607
  super([]);
603
608
 
604
609
  /** @private {?shaka.dash.SegmentTemplate.SegmentTemplateInfo} */
@@ -615,8 +620,8 @@ shaka.dash.TimelineSegmentIndex = class extends shaka.media.SegmentIndex {
615
620
  this.periodEnd_ = periodEnd;
616
621
  /** @private {shaka.media.InitSegmentReference} */
617
622
  this.initSegmentReference_ = initSegmentReference;
618
- /** @private {shaka.extern.aes128Key|undefined} */
619
- this.aes128Key_ = aes128Key;
623
+ /** @private {shaka.extern.aesKey|undefined} */
624
+ this.aesKey_ = aesKey;
620
625
  /** @private {number} */
621
626
  this.segmentSequenceCadence_ = segmentSequenceCadence;
622
627
 
@@ -885,7 +890,7 @@ shaka.dash.TimelineSegmentIndex = class extends shaka.media.SegmentIndex {
885
890
  /* tileDuration= */ null,
886
891
  /* syncTime= */ null,
887
892
  shaka.media.SegmentReference.Status.AVAILABLE,
888
- this.aes128Key_);
893
+ this.aesKey_);
889
894
  partial.codecs = codecs;
890
895
  partial.mimeType = mimeType;
891
896
  if (this.segmentSequenceCadence_ == 0) {
@@ -929,7 +934,7 @@ shaka.dash.TimelineSegmentIndex = class extends shaka.media.SegmentIndex {
929
934
  /* tileDuration= */ null,
930
935
  /* syncTime= */ null,
931
936
  shaka.media.SegmentReference.Status.AVAILABLE,
932
- this.aes128Key_,
937
+ this.aesKey_,
933
938
  /* allPartialSegments= */ range.partialSegments > 0);
934
939
  ref.codecs = codecs;
935
940
  ref.mimeType = mimeType;