shaka-player 4.2.4 → 4.3.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 (137) hide show
  1. package/.github/workflows/sync-labels.yaml +1 -1
  2. package/.github/workflows/update-issues.yaml +1 -1
  3. package/AUTHORS +4 -0
  4. package/CHANGELOG.md +85 -54
  5. package/CONTRIBUTORS +4 -0
  6. package/README.md +14 -0
  7. package/demo/common/assets.js +58 -0
  8. package/demo/common/message_ids.js +22 -1
  9. package/demo/config.js +89 -5
  10. package/demo/demo.less +7 -1
  11. package/demo/index.html +8 -1
  12. package/demo/locales/en.json +21 -1
  13. package/demo/locales/source.json +82 -2
  14. package/demo/main.js +57 -1
  15. package/demo/search.js +2 -0
  16. package/demo/visualizer.js +337 -0
  17. package/demo/visualizer_button.js +103 -0
  18. package/dist/controls.css +1 -1
  19. package/dist/controls.css.map +1 -1
  20. package/dist/demo.compiled.debug.js +83 -58
  21. package/dist/demo.compiled.debug.map +4 -4
  22. package/dist/demo.compiled.js +83 -58
  23. package/dist/demo.compiled.map +4 -4
  24. package/dist/demo.css +1 -1
  25. package/dist/demo.css.map +1 -1
  26. package/dist/deps.js +16 -9
  27. package/dist/locales.js +32 -32
  28. package/dist/receiver.compiled.debug.js +23 -19
  29. package/dist/receiver.compiled.debug.map +3 -3
  30. package/dist/receiver.compiled.js +23 -19
  31. package/dist/receiver.compiled.map +3 -3
  32. package/dist/shaka-player.compiled.d.ts +173 -26
  33. package/dist/shaka-player.compiled.debug.d.ts +173 -26
  34. package/dist/shaka-player.compiled.debug.externs.js +161 -31
  35. package/dist/shaka-player.compiled.debug.js +464 -401
  36. package/dist/shaka-player.compiled.debug.map +4 -4
  37. package/dist/shaka-player.compiled.externs.js +161 -31
  38. package/dist/shaka-player.compiled.js +897 -862
  39. package/dist/shaka-player.compiled.map +4 -4
  40. package/dist/shaka-player.ui.d.ts +173 -26
  41. package/dist/shaka-player.ui.debug.d.ts +173 -26
  42. package/dist/shaka-player.ui.debug.externs.js +161 -31
  43. package/dist/shaka-player.ui.debug.js +488 -422
  44. package/dist/shaka-player.ui.debug.map +4 -4
  45. package/dist/shaka-player.ui.externs.js +161 -31
  46. package/dist/shaka-player.ui.js +1053 -1018
  47. package/dist/shaka-player.ui.map +4 -4
  48. package/docs/design/lcevc-architecture.png +0 -0
  49. package/docs/design/lcevc-demo.png +0 -0
  50. package/docs/design/lcevc-integration.md +72 -0
  51. package/docs/tutorials/fairplay.md +7 -0
  52. package/docs/tutorials/faq.md +1 -1
  53. package/docs/tutorials/ui.md +7 -7
  54. package/docs/tutorials/upgrade.md +6 -0
  55. package/externs/ima.js +13 -1
  56. package/externs/lcevc.js +81 -0
  57. package/externs/mux.js +1 -42
  58. package/externs/shaka/ads.js +11 -1
  59. package/externs/shaka/manifest_parser.js +5 -1
  60. package/externs/shaka/player.js +178 -15
  61. package/lib/abr/simple_abr_manager.js +7 -0
  62. package/lib/ads/ad_manager.js +0 -8
  63. package/lib/ads/client_side_ad.js +15 -0
  64. package/lib/ads/client_side_ad_manager.js +21 -8
  65. package/lib/ads/server_side_ad.js +15 -0
  66. package/lib/ads/server_side_ad_manager.js +3 -3
  67. package/lib/cast/cast_utils.js +2 -0
  68. package/lib/cea/dummy_cea_parser.js +28 -0
  69. package/lib/cea/i_cea_parser.js +14 -2
  70. package/lib/cea/mp4_cea_parser.js +87 -5
  71. package/lib/config/auto_show_text.js +33 -0
  72. package/lib/dash/dash_parser.js +1 -1
  73. package/lib/hls/hls_parser.js +790 -374
  74. package/lib/lcevc/lcevc_dil.js +152 -0
  75. package/lib/media/closed_caption_parser.js +9 -6
  76. package/lib/media/drm_engine.js +14 -6
  77. package/lib/media/media_source_engine.js +106 -26
  78. package/lib/media/presentation_timeline.js +26 -11
  79. package/lib/media/segment_reference.js +49 -1
  80. package/lib/media/streaming_engine.js +142 -12
  81. package/lib/media/transmuxer.js +73 -18
  82. package/lib/offline/storage.js +1 -0
  83. package/lib/player.js +454 -75
  84. package/lib/polyfill/patchedmediakeys_apple.js +55 -1
  85. package/lib/text/ui_text_displayer.js +5 -5
  86. package/lib/text/vtt_text_parser.js +35 -1
  87. package/lib/util/dom_utils.js +0 -1
  88. package/lib/util/error.js +17 -0
  89. package/lib/util/fake_event.js +2 -0
  90. package/lib/util/id3_utils.js +300 -0
  91. package/lib/util/mime_utils.js +3 -6
  92. package/lib/util/mp4_box_parsers.js +15 -5
  93. package/lib/util/platform.js +9 -1
  94. package/lib/util/player_configuration.js +23 -1
  95. package/lib/util/ts_parser.js +499 -0
  96. package/maintained-branches.md +2 -2
  97. package/package.json +4 -1
  98. package/roadmap.md +5 -3
  99. package/test/ads/ad_manager_unit.js +180 -29
  100. package/test/cast/cast_utils_unit.js +3 -1
  101. package/test/dash/dash_parser_content_protection_unit.js +1 -0
  102. package/test/dash/dash_parser_live_unit.js +1 -0
  103. package/test/dash/dash_parser_manifest_unit.js +93 -1
  104. package/test/dash/dash_parser_segment_base_unit.js +1 -0
  105. package/test/dash/dash_parser_segment_list_unit.js +1 -0
  106. package/test/dash/dash_parser_segment_template_unit.js +1 -0
  107. package/test/demo/demo_unit.js +2 -1
  108. package/test/hls/hls_live_unit.js +253 -19
  109. package/test/hls/hls_parser_unit.js +500 -12
  110. package/test/media/closed_caption_parser_unit.js +2 -1
  111. package/test/media/drm_engine_integration.js +3 -1
  112. package/test/media/media_source_engine_integration.js +71 -6
  113. package/test/media/media_source_engine_unit.js +10 -5
  114. package/test/media/streaming_engine_integration.js +4 -1
  115. package/test/media/streaming_engine_unit.js +144 -1
  116. package/test/media/transmuxer_integration.js +21 -10
  117. package/test/player_integration.js +224 -82
  118. package/test/player_unit.js +5 -2
  119. package/test/polyfill/patchedmediakeys_apple_unit.js +124 -0
  120. package/test/test/assets/id3-metadata.aac +0 -0
  121. package/test/test/assets/id3-metadata.ts +0 -0
  122. package/test/test/assets/thumbnails-sprites.vtt +10 -0
  123. package/test/test/assets/thumbnails.vtt +10 -0
  124. package/test/test/util/dash_parser_util.js +2 -0
  125. package/test/test/util/fake_ad.js +21 -0
  126. package/test/test/util/fake_media_source_engine.js +7 -0
  127. package/test/test/util/id3_generator.js +100 -0
  128. package/test/test/util/manifest_generator.js +3 -6
  129. package/test/test/util/simple_fakes.js +4 -0
  130. package/test/test/util/stream_generator.js +38 -0
  131. package/test/test/util/test_scheme.js +43 -14
  132. package/test/text/vtt_text_parser_unit.js +11 -0
  133. package/test/ui/text_displayer_layout_unit.js +14 -0
  134. package/test/util/id3_utils_unit.js +116 -0
  135. package/test/util/ts_parser_unit.js +77 -0
  136. package/ui/less/containers.less +7 -0
  137. package/ui/ui.js +43 -4
Binary file
@@ -0,0 +1,72 @@
1
+
2
+ # Shaka Player LCEVC integration
3
+
4
+ # Introduction
5
+
6
+ This article describes the V-Nova LCEVC Shaka Player integration.
7
+
8
+ # LCEVC Integration
9
+
10
+ ## Adding V-Nova required files
11
+ ### Importing DIL - Decoder Integration Layer
12
+
13
+ V-Nova LCEVC DIL Libraries are included using the same approach that the other external libraries are currently using. The necessary V-Nova LCEVC DIL files need to be imported in the HTML page that is going to be used by Shaka Player to decode LCEVC. Checks are inplace that make sure the necessary objects are available.
14
+
15
+ Npm package : <https://www.npmjs.com/package/lcevc_dil.js>
16
+
17
+ ```javascript
18
+ <!-- MPEG-5 Part2 LCEVC support is enabled by including this: -->
19
+ <script defer src="../node_modules/lcevc_dil.js/dist/lcevc_dil.min.js"></script>
20
+ ```
21
+
22
+ To allow the Closure compiler to use the objects and methods that are exported by the DIL.js a new `extern` is created.
23
+
24
+ ### Defining an Extern for LCEVC
25
+
26
+ `externs/lcevc.js` exposes the functions from the LCEVC DIL library required for LCEVC Decoding.
27
+
28
+ ## Integration point
29
+
30
+ ### The shaka.lcevc.Dil class - (DIL : Decoder Integration Layer)
31
+
32
+ The main logic of the LCEVC integration is located in the `lib/lcevc_dil.min.js` file. In this file the shaka.lcevc.Dil is exported to be used in the project. This class is in charge of creating the Dil object using the mentioned externs, checking if LCEVC DIL library is available, etc.
33
+
34
+ ### Modifications in the player
35
+
36
+ The shaka.Player class, defined in the `lib/player.js` file, is the main player object for Shaka Player. There is a setter function for setting up a `canvas` element that is received from the user.
37
+ If shaka.ui is used the `canvas` is created in line with the video element in the same container overlaying the video element. If user provides a custom canvas using the setter function, The user is responsible for placing the canvas element in the desired position and resizing it.
38
+
39
+ `shaka.externs.LcevcConfiguration` is added to the `playerConfiguration` that is used as configuration for the LCEVC DIL Library.
40
+
41
+ The Dil object is created in the `onLoad_()` event that is triggered when a new video is loaded in Shaka Player. Attaching to a media element is defined as:
42
+
43
+ - Registering error listeners to the media element.
44
+ - Catching the video element for use outside of the load graph.
45
+
46
+ The Dil object is created only if LCEVC is supported (LCEVC libs are loaded on the page) and also when it was not already created in another `onLoad_()` event execution.
47
+
48
+
49
+ ### Feeding the Dil
50
+
51
+ The logic that Shaka Player uses to communicate with the Media Source Extensions (MSE) is located in the `media/media_source_engine.js` file.
52
+
53
+ ![image.png](lcevc-architecture.png)
54
+
55
+ `append_()` function that is used to feed the MSE Source Buffer is intercepted and modified to pass the video buffers to the LCEVC DIL Libraries before appending to the MSE Source Buffers.
56
+
57
+ ## Demo page
58
+
59
+ The relevant libraries are added in the Demo Page like so:
60
+
61
+ ```javascript
62
+ <!-- MPEG-5 Part2 LCEVC support is enabled by including this: -->
63
+ <script defer src="../node_modules/lcevc_dil.js/dist/lcevc_dil.min.js"></script>
64
+ ```
65
+
66
+ And a new video sample with enhancement data is added to the `demo/common/assets.js` file under a new source `MPEG-5 Part 2 LCEVC`.
67
+
68
+ After these changes the demo page looks like :
69
+
70
+ ![image.png](lcevc-demo.png)
71
+
72
+
@@ -8,6 +8,13 @@ Modern EME yet, you can use legacy Apple Media Keys with:
8
8
  shaka.polyfill.PatchedMediaKeysApple.install();
9
9
  ```
10
10
 
11
+ If you need to use both legacy and Modern EME, for example if you have to support
12
+ multiple DRM providers, it is possible to enable uninstalling the polyfill:
13
+ ```js
14
+ shaka.polyfill.PatchedMediaKeysApple.install(/* enableUninstall= */ true);
15
+ shaka.polyfill.PatchedMediaKeysApple.uninstall();
16
+ ```
17
+
11
18
  The support in each case would be the following:
12
19
 
13
20
  | |Modern EME |legacy Apple Media Keys|
@@ -164,7 +164,7 @@ shaka.net.NetworkingEngine.registerScheme('file', shaka.net.HttpXHRPlugin);
164
164
  contain said captions. Edge and Chromecast, however, have native TS support and
165
165
  thus are not required to transmux.
166
166
  In order to force those platforms to transmux, set the
167
- {@link shaka.extern.StreamingConfiguration|`.streaming.forceTransmuxTS`}
167
+ {@link shaka.extern.StreamingConfiguration|`.streaming.forceTransmux`}
168
168
  configuration to true.
169
169
 
170
170
  <hr>
@@ -30,7 +30,7 @@ Set up controls with HTML data attributes:
30
30
  The data-shaka-player-cast-receiver-id tag allows you to provide a Cast Application ID that
31
31
  the cast button will cast to; the value provided here is the sample cast receiver. -->
32
32
  <div data-shaka-player-container style="max-width:40em"
33
- data-shaka-player-cast-receiver-id="07AEE832">
33
+ data-shaka-player-cast-receiver-id="8D8C71A7">
34
34
  <!-- The data-shaka-player tag will make the UI library use this video element.
35
35
  If no video is provided, the UI will automatically make one inside the container div. -->
36
36
  <video autoplay data-shaka-player id="video" style="width:100%;height:100%"></video>
@@ -111,7 +111,7 @@ set up a listener for the 'caststatuschanged' events.
111
111
  <!-- Add a data-shaka-player-cast-receiver-id tag to provide a Cast Application ID that
112
112
  the cast button will cast to; the value provided here is the sample cast receiver. -->
113
113
  <div data-shaka-player-container style="max-width:40em"
114
- data-shaka-player-cast-receiver-id="07AEE832">
114
+ data-shaka-player-cast-receiver-id="8D8C71A7">
115
115
  </div>
116
116
  ```
117
117
 
@@ -139,7 +139,7 @@ casting to an Android receiver app.
139
139
 
140
140
  ```html
141
141
  <div data-shaka-player-container style="max-width:40em"
142
- data-shaka-player-cast-receiver-id="E7271BEC"
142
+ data-shaka-player-cast-receiver-id="8D8C71A7"
143
143
  data-shaka-player-cast-android-receiver-compatible="true">
144
144
  <!-- The manifest url in the src attribute will be automatically loaded -->
145
145
  <video autoplay data-shaka-player id="video" style="width:100%;height:100%"
@@ -154,7 +154,7 @@ or a `<source>` tag inside it to enable auto loading of the specified content.
154
154
 
155
155
  ```html
156
156
  <div data-shaka-player-container style="max-width:40em"
157
- data-shaka-player-cast-receiver-id="07AEE832">
157
+ data-shaka-player-cast-receiver-id="8D8C71A7">
158
158
  <!-- The manifest url in the src attribute will be automatically loaded -->
159
159
  <video autoplay data-shaka-player id="video" style="width:100%;height:100%"
160
160
  src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"></video>
@@ -165,7 +165,7 @@ or
165
165
 
166
166
  ```html
167
167
  <div data-shaka-player-container style="max-width:40em"
168
- data-shaka-player-cast-receiver-id="07AEE832">
168
+ data-shaka-player-cast-receiver-id="8D8C71A7">
169
169
  <video autoplay data-shaka-player id="video" style="width:100%;height:100%">
170
170
  <!-- The manifest url in the src attribute will be auto loaded -->
171
171
  <source src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"/>
@@ -178,7 +178,7 @@ call to the first one fails.
178
178
 
179
179
  ```html
180
180
  <div data-shaka-player-container style="max-width:40em"
181
- data-shaka-player-cast-receiver-id="07AEE832">
181
+ data-shaka-player-cast-receiver-id="8D8C71A7">
182
182
  <video autoplay data-shaka-player id="video" style="width:100%;height:100%">
183
183
  <!-- Try this first -->
184
184
  <source src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"/>
@@ -222,7 +222,7 @@ const video = controls.getVideo();
222
222
  // Receiver Compatability.
223
223
  ui.configure({
224
224
  // Set the castReceiverAppId
225
- 'castReceiverAppId': '07AEE832',
225
+ 'castReceiverAppId': '8D8C71A7',
226
226
  // Enable casting to native Android Apps (e.g. Android TV Apps)
227
227
  'castAndroidReceiverCompatible': true,
228
228
  });
@@ -90,3 +90,9 @@ application:
90
90
  clearly-named `lineBreak` (deprecated in v3.1.0)
91
91
  - `IUIElement` plugins must have a `release()` method (not `destroy()`)
92
92
  (deprecated in v3.0.0)
93
+
94
+ ## v5.0 (unreleased)
95
+
96
+ - Configuration changes:
97
+ - `streaming.forceTransmuxTS` has been renamed to `streaming.forceTransmux`
98
+ (deprecated in v4.3.0)
package/externs/ima.js CHANGED
@@ -143,7 +143,7 @@ google.ima.AdsManagerLoadedEvent.Type = {
143
143
 
144
144
  /** @const */
145
145
  google.ima.AdEvent = class extends Event {
146
- /** @return {!google.ima.Ad } */
146
+ /** @return {?google.ima.Ad} */
147
147
  getAd() {}
148
148
  };
149
149
 
@@ -167,6 +167,12 @@ google.ima.Ad = class {
167
167
 
168
168
  /** @return {boolean} */
169
169
  isLinear() {}
170
+
171
+ /** @return {string} */
172
+ getTitle() {}
173
+
174
+ /** @return {string} */
175
+ getDescription() {}
170
176
  };
171
177
 
172
178
 
@@ -389,6 +395,12 @@ google.ima.dai.api.Ad = class {
389
395
 
390
396
  /** @return {boolean} */
391
397
  isSkippable() {}
398
+
399
+ /** @return {string} */
400
+ getTitle() {}
401
+
402
+ /** @return {string} */
403
+ getDescription() {}
392
404
  };
393
405
 
394
406
 
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @fileoverview Externs for LcevcDil
3
+ * compiler.
4
+ *
5
+ * @externs
6
+ */
7
+
8
+ // This empty namespace is declared to check if LcevcDil libraries are loaded.
9
+ var libDPIModule = {};
10
+ var LcevcDil = {};
11
+
12
+ /**
13
+ * LCEVC DIL constructor
14
+ * @constructor
15
+ */
16
+ LcevcDil.LcevcDIL = class {
17
+ /**
18
+ * @param {HTMLVideoElement} media
19
+ * @param {HTMLCanvasElement} canvas
20
+ * @param {shaka.extern.LcevcConfiguration} dilConfig
21
+ */
22
+ constructor(media, canvas, dilConfig) {
23
+ }
24
+
25
+ /**
26
+ * Append the video buffers before they are appended to
27
+ * Media Source Extensions SourceBuffer. Here the lcevc data
28
+ * will be parsed and managed to enhance frames based on timestamps.
29
+ *
30
+ * @param {!BufferSource} data Video Buffer Data.
31
+ * @param {string} type Type of Video Buffer Data.
32
+ * @param {number} variantId Variant that the fragment belongs to.
33
+ */
34
+ appendBuffer(data, type, variantId) {}
35
+
36
+ /**
37
+ * Set current variant as variantId to the LCEVC decoder
38
+ * @param {!number} variantId
39
+ * @param {!boolean} autoBufferSwitch is lcevcDil mode that switches variant
40
+ * when the downloaded buffer from last variant has finished playing and
41
+ * buffers from the new variant starts to play.
42
+ */
43
+ setLevelSwitching(variantId, autoBufferSwitch) {}
44
+
45
+ /**
46
+ * Set container Format for LCEVC Data Parsing.
47
+ * @param {!number} containerFormat container type of the stream.
48
+ */
49
+ setContainerFormat(containerFormat) {}
50
+
51
+ /**
52
+ * Close LCEVC DIL
53
+ */
54
+ close() {}
55
+ };
56
+
57
+ /**
58
+ * LCEVC Support Check
59
+ */
60
+ LcevcDil.SupportObject = {
61
+
62
+ /**
63
+ * Check if canvas has WebGL support
64
+ * @param {HTMLCanvasElement} canvas
65
+ * @return {boolean} true if requirements are met.
66
+ */
67
+ webGLSupport(canvas) {},
68
+
69
+ };
70
+
71
+ /**
72
+ * LCEVC Support Checklist Result
73
+ * @type {boolean}
74
+ */
75
+ LcevcDil.SupportObject.SupportStatus;
76
+
77
+ /**
78
+ * LCEVC Support CheckList Error if any.
79
+ * @type {string}
80
+ */
81
+ LcevcDil.SupportObject.SupportError;
package/externs/mux.js CHANGED
@@ -84,15 +84,13 @@ muxjs.mp4.Transmuxer = class {
84
84
  * @typedef {{
85
85
  * initSegment: !Uint8Array,
86
86
  * data: !Uint8Array,
87
- * captions: !Array,
88
- * metadata: !Array
87
+ * captions: !Array
89
88
  * }}
90
89
  *
91
90
  * @description Transmuxed data from mux.js.
92
91
  * @property {!Uint8Array} initSegment
93
92
  * @property {!Uint8Array} data
94
93
  * @property {!Array} captions
95
- * @property {!Array} metadata
96
94
  * @exportDoc
97
95
  */
98
96
  muxjs.mp4.Transmuxer.Segment;
@@ -173,42 +171,3 @@ muxjs.mp4.ParsedClosedCaptions;
173
171
  */
174
172
  muxjs.mp4.ClosedCaption;
175
173
 
176
-
177
- /**
178
- * @typedef {{
179
- * cueTime: number,
180
- * data: !Uint8Array,
181
- * dispatchType: string,
182
- * dts: number,
183
- * frames: !Array.<muxjs.mp4.MetadataFrame>,
184
- * pts: number
185
- * }}
186
- *
187
- * @description metadata parsed from mux.js.
188
- * @property {number} cueTime
189
- * @property {number} data
190
- * @property {number} dispatchType
191
- * @property {number} dts
192
- * @property {string} frames
193
- * @property {string} pts
194
- */
195
- muxjs.mp4.Metadata;
196
-
197
-
198
- /**
199
- * @typedef {{
200
- * data: string,
201
- * description: string,
202
- * id: string,
203
- * key: string,
204
- * value: string
205
- * }}
206
- *
207
- * @description metadata parsed from mux.js.
208
- * @property {number} data
209
- * @property {number} description
210
- * @property {number} id
211
- * @property {number} key
212
- * @property {string} value
213
- */
214
- muxjs.mp4.MetadataFrame;
@@ -120,7 +120,7 @@ shaka.extern.IAdManager = class extends EventTarget {
120
120
  onHlsTimedMetadata(metadata, timestampOffset) {}
121
121
 
122
122
  /**
123
- * @param {shaka.extern.ID3Metadata} value
123
+ * @param {shaka.extern.MetadataFrame} value
124
124
  */
125
125
  onCueMetadataChange(value) {}
126
126
  };
@@ -227,4 +227,14 @@ shaka.extern.IAd = class {
227
227
  * @return {number}
228
228
  */
229
229
  getPositionInSequence() {}
230
+
231
+ /**
232
+ * @return {string}
233
+ */
234
+ getTitle() {}
235
+
236
+ /**
237
+ * @return {string}
238
+ */
239
+ getDescription() {}
230
240
  };
@@ -112,7 +112,8 @@ shaka.extern.ManifestParser = class {
112
112
  * isLowLatencyMode: function():boolean,
113
113
  * isAutoLowLatencyMode: function():boolean,
114
114
  * enableLowLatencyMode: function(),
115
- * updateDuration: function()
115
+ * updateDuration: function(),
116
+ * newDrmInfo: function(shaka.extern.Stream)
116
117
  * }}
117
118
  *
118
119
  * @description
@@ -150,6 +151,9 @@ shaka.extern.ManifestParser = class {
150
151
  * Enable low latency streaming mode.
151
152
  * @property {function()} updateDuration
152
153
  * Update the presentation duration based on PresentationTimeline.
154
+ * @property {function(shaka.extern.Stream)} newDrmInfo
155
+ * Inform the player of new DRM info that needs to be processed for the given
156
+ * stream.
153
157
  * @exportDoc
154
158
  */
155
159
  shaka.extern.ManifestParser.PlayerInterface;