shaka-player 4.3.5 → 4.3.7
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.
- package/.github/workflows/demo-version-index.yaml +3 -3
- package/.github/workflows/selenium-lab-tests.yaml +23 -1
- package/AUTHORS +2 -1
- package/CHANGELOG.md +53 -0
- package/CONTRIBUTORS +4 -1
- package/README.md +3 -0
- package/demo/demo.less +1 -0
- package/dist/controls.css +2 -2
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +167 -296
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +167 -296
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +1 -1
- package/dist/locales.js +32 -32
- package/dist/receiver.compiled.debug.js +34 -63
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +34 -63
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +20 -3
- package/dist/shaka-player.compiled.debug.d.ts +20 -3
- package/dist/shaka-player.compiled.debug.externs.js +29 -14
- package/dist/shaka-player.compiled.debug.js +303 -292
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +29 -14
- package/dist/shaka-player.compiled.js +886 -879
- package/dist/shaka-player.compiled.map +3 -3
- package/dist/shaka-player.ui.d.ts +20 -3
- package/dist/shaka-player.ui.debug.d.ts +20 -3
- package/dist/shaka-player.ui.debug.externs.js +17 -2
- package/dist/shaka-player.ui.debug.js +321 -309
- package/dist/shaka-player.ui.debug.map +3 -3
- package/dist/shaka-player.ui.externs.js +17 -2
- package/dist/shaka-player.ui.js +1027 -1021
- package/dist/shaka-player.ui.map +3 -3
- package/docs/tutorials/a11y.md +0 -4
- package/docs/tutorials/ad_monetization.md +0 -4
- package/docs/tutorials/basic-usage.md +0 -5
- package/docs/tutorials/config.md +0 -5
- package/docs/tutorials/debugging.md +0 -5
- package/docs/tutorials/drm-config.md +0 -5
- package/docs/tutorials/fairplay.md +2 -2
- package/docs/tutorials/license-server-auth.md +0 -5
- package/docs/tutorials/license-wrapping.md +0 -5
- package/docs/tutorials/network-and-buffering-config.md +0 -5
- package/docs/tutorials/ui-customization.md +0 -5
- package/docs/tutorials/ui.md +0 -7
- package/docs/tutorials/welcome.md +1 -6
- package/externs/network_information.js +7 -2
- package/externs/shaka/abr_manager.js +6 -0
- package/externs/shaka/net.js +1 -0
- package/externs/shaka/player.js +13 -7
- package/lib/abr/simple_abr_manager.js +27 -3
- package/lib/ads/client_side_ad_manager.js +6 -3
- package/lib/cea/mp4_cea_parser.js +5 -2
- package/lib/dash/dash_parser.js +49 -48
- package/lib/debug/log.js +9 -13
- package/lib/hls/hls_parser.js +60 -7
- package/lib/hls/manifest_text_parser.js +10 -1
- package/lib/media/drm_engine.js +9 -6
- package/lib/media/media_source_engine.js +33 -13
- package/lib/media/presentation_timeline.js +9 -2
- package/lib/media/segment_index.js +2 -0
- package/lib/media/segment_reference.js +25 -2
- package/lib/media/streaming_engine.js +40 -11
- package/lib/net/http_fetch_plugin.js +79 -57
- package/lib/net/networking_engine.js +1 -0
- package/lib/player.js +26 -3
- package/lib/polyfill/media_capabilities.js +13 -0
- package/lib/text/mp4_vtt_parser.js +4 -0
- package/lib/text/text_engine.js +1 -0
- package/lib/util/manifest_parser_utils.js +1 -2
- package/lib/util/mime_utils.js +11 -0
- package/lib/util/periods.js +5 -5
- package/lib/util/stream_utils.js +2 -2
- package/maintained-branches.md +2 -3
- package/package.json +8 -3
- package/test/cea/mp4_cea_parser_unit.js +19 -0
- package/test/dash/dash_parser_live_unit.js +3 -2
- package/test/hls/hls_live_unit.js +3 -1
- package/test/hls/hls_parser_unit.js +156 -0
- package/test/media/content_workarounds_unit.js +43 -0
- package/test/media/drm_engine_integration.js +4 -17
- package/test/media/media_source_engine_unit.js +30 -0
- package/test/media/streaming_engine_unit.js +6 -1
- package/test/net/networking_engine_unit.js +6 -1
- package/test/player_integration.js +39 -0
- package/test/player_unit.js +57 -0
- package/test/polyfill/media_capabilities_unit.js +1 -0
- package/test/test/assets/h265-cea-init.mp4 +0 -0
- package/test/test/assets/h265-cea-segment.mp4 +0 -0
- package/test/test/assets/text-clip-alt.vtt +63 -0
- package/test/test/util/fake_drm_engine.js +3 -0
- package/test/test/util/fake_media_source_engine.js +4 -0
- package/test/test/util/layout_tests.js +4 -3
- package/test/test/util/simple_fakes.js +6 -0
- package/test/test/util/test_scheme.js +9 -14
- package/test/text/mp4_vtt_parser_unit.js +8 -0
- package/test/util/mime_utils_unit.js +10 -0
- package/ui/less/containers.less +4 -0
package/docs/tutorials/a11y.md
CHANGED
|
@@ -222,7 +222,3 @@ before instantiating the player.
|
|
|
222
222
|
// myapp.CustomAdManager is a placeholder name for your ad manager implementation.
|
|
223
223
|
shaka.Player.setAdManagerFactory(() => new myapp.CustomAdManager());
|
|
224
224
|
```
|
|
225
|
-
|
|
226
|
-
#### Continue the Tutorials
|
|
227
|
-
|
|
228
|
-
Next, check out {@tutorial plugins}.
|
package/docs/tutorials/config.md
CHANGED
|
@@ -142,8 +142,3 @@ player.configure({
|
|
|
142
142
|
|
|
143
143
|
For more detail on individual configuration options, please see the API docs for
|
|
144
144
|
{@link shaka.extern.PlayerConfiguration} and {@link shaka.Player#configure}.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
#### Continue the Tutorials
|
|
148
|
-
|
|
149
|
-
Next, check out {@tutorial network-and-buffering-config}.
|
|
@@ -187,8 +187,3 @@ To sum up, remember these points when debugging your application:
|
|
|
187
187
|
- Use the debug version of Shaka Player for debugging and integration work
|
|
188
188
|
- Refer to the docs for error codes
|
|
189
189
|
- Increase the log level when you need more detail
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
#### Continue the Tutorials
|
|
193
|
-
|
|
194
|
-
Next, check out {@tutorial config}.
|
|
@@ -208,8 +208,3 @@ you should provide an empty string as robustness
|
|
|
208
208
|
##### Other key-systems
|
|
209
209
|
|
|
210
210
|
Values for other key systems are not known to us at this time.
|
|
211
|
-
|
|
212
|
-
#### Continue the Tutorials
|
|
213
|
-
|
|
214
|
-
Next, check out {@tutorial license-server-auth}.
|
|
215
|
-
Or check out {@tutorial fairplay}.
|
|
@@ -72,13 +72,13 @@ is used by the browser to generate the license request. If you don't use the
|
|
|
72
72
|
default content ID derivation, you need to specify a custom init data transform:
|
|
73
73
|
|
|
74
74
|
```js
|
|
75
|
-
player.configure('drm.initDataTransform', (initData, initDataType) => {
|
|
75
|
+
player.configure('drm.initDataTransform', (initData, initDataType, drmInfo) => {
|
|
76
76
|
if (initDataType != 'skd')
|
|
77
77
|
return initData;
|
|
78
78
|
// 'initData' is a buffer containing an 'skd://' URL as a UTF-8 string.
|
|
79
79
|
const skdUri = shaka.util.StringUtils.fromBytesAutoDetect(initData);
|
|
80
80
|
const contentId = getMyContentId(skdUri);
|
|
81
|
-
const cert =
|
|
81
|
+
const cert = drmInfo.serverCertificate;
|
|
82
82
|
return shaka.util.FairPlayUtils.initDataTransform(initData, contentId, cert);
|
|
83
83
|
});
|
|
84
84
|
```
|
|
@@ -166,8 +166,3 @@ using a request filter:
|
|
|
166
166
|
|
|
167
167
|
Load the page again, and the license response will be accepted by the Widevine
|
|
168
168
|
CDM. Open the JavaScript console to see what the server sent back.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
#### Continue the Tutorials
|
|
172
|
-
|
|
173
|
-
Next, check out {@tutorial ui}.
|
|
@@ -117,8 +117,3 @@ URLs in your manifests always use `https:`, or by having it not include the
|
|
|
117
117
|
scheme (e.g., `//example.com/file.mp4`).
|
|
118
118
|
|
|
119
119
|
[CORS]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
#### Continue the Tutorials
|
|
123
|
-
|
|
124
|
-
Next, check out {@tutorial drm-config}.
|
|
@@ -265,8 +265,3 @@ PR contributions to [the gallery repo][] are welcome.
|
|
|
265
265
|
[@lucksy]: https://github.com/lucksy
|
|
266
266
|
[pre-packaged Shaka UI themes]: https://lucksy.github.io/shaka-player-themes/
|
|
267
267
|
[the gallery repo]: https://github.com/lucksy/shaka-player-themes
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
#### Continue the Tutorials
|
|
271
|
-
|
|
272
|
-
Next, check out {@tutorial a11y} to make your custom buttons accessible to screen readers.
|
package/docs/tutorials/ui.md
CHANGED
|
@@ -29,7 +29,7 @@ You can build Shaka on Linux, Windows, or Mac.
|
|
|
29
29
|
To get the sources and compile the library, you will need:
|
|
30
30
|
* {@link https://git-scm.com/downloads Git v1.9+}
|
|
31
31
|
* {@link https://www.python.org/downloads/ Python v2.7 or v3.5+}
|
|
32
|
-
* {@link https://
|
|
32
|
+
* {@link https://learn.microsoft.com/en-us/java/openjdk/download Java Runtime Environment v14+}
|
|
33
33
|
* {@link https://nodejs.org/en/download/ NodeJS v14+}
|
|
34
34
|
* A local web server, such as {@link https://httpd.apache.org/ Apache}
|
|
35
35
|
* _NOTE: A local web server is required because browsers place restrictions
|
|
@@ -106,8 +106,3 @@ To subscribe to new releases on GitHub, you can follow
|
|
|
106
106
|
To receive infrequent announcements and surveys from us, you can join our
|
|
107
107
|
[mailing list](https://groups.google.com/forum/#!forum/shaka-player-users).
|
|
108
108
|
The list is very low volume, and can only be written to by us.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
#### Continue the Tutorials
|
|
112
|
-
|
|
113
|
-
Next, check out {@tutorial basic-usage}.
|
|
@@ -19,5 +19,10 @@ NetworkInformation.prototype.saveData;
|
|
|
19
19
|
* @param {string} type
|
|
20
20
|
* @param {Function} listener
|
|
21
21
|
*/
|
|
22
|
-
NetworkInformation.prototype.addEventListener =
|
|
23
|
-
|
|
22
|
+
NetworkInformation.prototype.addEventListener = function(type, listener) {};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @param {string} type
|
|
26
|
+
* @param {Function} listener
|
|
27
|
+
*/
|
|
28
|
+
NetworkInformation.prototype.removeEventListener = function(type, listener) {};
|
package/externs/shaka/net.js
CHANGED
package/externs/shaka/player.js
CHANGED
|
@@ -688,9 +688,7 @@ shaka.extern.AdvancedDrmConfiguration;
|
|
|
688
688
|
* clearKeys: !Object.<string, string>,
|
|
689
689
|
* delayLicenseRequestUntilPlayed: boolean,
|
|
690
690
|
* advanced: Object.<string, shaka.extern.AdvancedDrmConfiguration>,
|
|
691
|
-
* initDataTransform:
|
|
692
|
-
* ((function(!Uint8Array, string, ?shaka.extern.DrmInfo):!Uint8Array)|
|
|
693
|
-
* undefined),
|
|
691
|
+
* initDataTransform:(shaka.extern.InitDataTransform|undefined),
|
|
694
692
|
* logLicenseExchange: boolean,
|
|
695
693
|
* updateExpirationTime: number,
|
|
696
694
|
* preferredKeySystems: !Array.<string>,
|
|
@@ -716,10 +714,7 @@ shaka.extern.AdvancedDrmConfiguration;
|
|
|
716
714
|
* <i>Optional.</i> <br>
|
|
717
715
|
* A dictionary which maps key system IDs to advanced DRM configuration for
|
|
718
716
|
* those key systems.
|
|
719
|
-
* @property
|
|
720
|
-
* {((function(!Uint8Array, string, ?shaka.extern.DrmInfo):!Uint8Array)|
|
|
721
|
-
* undefined)}
|
|
722
|
-
* initDataTransform
|
|
717
|
+
* @property {shaka.extern.InitDataTransform|undefined} initDataTransform
|
|
723
718
|
* <i>Optional.</i><br>
|
|
724
719
|
* If given, this function is called with the init data from the
|
|
725
720
|
* manifest/media and should return the (possibly transformed) init data to
|
|
@@ -748,6 +743,17 @@ shaka.extern.AdvancedDrmConfiguration;
|
|
|
748
743
|
*/
|
|
749
744
|
shaka.extern.DrmConfiguration;
|
|
750
745
|
|
|
746
|
+
/**
|
|
747
|
+
* @typedef {function(!Uint8Array, string, ?shaka.extern.DrmInfo):!Uint8Array}
|
|
748
|
+
*
|
|
749
|
+
* @description
|
|
750
|
+
* A callback function to handle custom content ID signaling for FairPlay
|
|
751
|
+
* content.
|
|
752
|
+
*
|
|
753
|
+
* @exportDoc
|
|
754
|
+
*/
|
|
755
|
+
shaka.extern.InitDataTransform;
|
|
756
|
+
|
|
751
757
|
|
|
752
758
|
/**
|
|
753
759
|
* @typedef {{
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
goog.provide('shaka.abr.SimpleAbrManager');
|
|
8
8
|
|
|
9
|
+
goog.require('shaka.util.IReleasable');
|
|
9
10
|
goog.require('goog.asserts');
|
|
10
11
|
goog.require('shaka.abr.EwmaBandwidthEstimator');
|
|
11
12
|
goog.require('shaka.log');
|
|
@@ -32,6 +33,7 @@ goog.require('shaka.util.Timer');
|
|
|
32
33
|
* </p>
|
|
33
34
|
*
|
|
34
35
|
* @implements {shaka.extern.AbrManager}
|
|
36
|
+
* @implements {shaka.util.IReleasable}
|
|
35
37
|
* @export
|
|
36
38
|
*/
|
|
37
39
|
shaka.abr.SimpleAbrManager = class {
|
|
@@ -50,8 +52,8 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
50
52
|
// retrieving information about a user's network connection. We listen
|
|
51
53
|
// to the change event to be able to make quick changes in case the type
|
|
52
54
|
// of connectivity changes.
|
|
53
|
-
if (navigator.connection) {
|
|
54
|
-
|
|
55
|
+
if (navigator.connection && navigator.connection.addEventListener) {
|
|
56
|
+
this.onNetworkInformationChange_ = () => {
|
|
55
57
|
if (this.config_.useNetworkInformation && this.enabled_) {
|
|
56
58
|
this.bandwidthEstimator_ = new shaka.abr.EwmaBandwidthEstimator();
|
|
57
59
|
if (this.config_) {
|
|
@@ -62,7 +64,10 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
62
64
|
this.switch_(chosenVariant);
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
|
-
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
navigator.connection.addEventListener(
|
|
70
|
+
'change', this.onNetworkInformationChange_);
|
|
66
71
|
}
|
|
67
72
|
|
|
68
73
|
/**
|
|
@@ -93,6 +98,9 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
93
98
|
/** @private {ResizeObserver} */
|
|
94
99
|
this.resizeObserver_ = null;
|
|
95
100
|
|
|
101
|
+
/** @private {?function():void} */
|
|
102
|
+
this.onNetworkInformationChange_ = null;
|
|
103
|
+
|
|
96
104
|
/** @private {shaka.util.Timer} */
|
|
97
105
|
this.resizeObserverTimer_ = new shaka.util.Timer(() => {
|
|
98
106
|
if (this.config_.restrictToElementSize) {
|
|
@@ -128,6 +136,22 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
128
136
|
// can start using bandwidth estimates right away after init() is called.
|
|
129
137
|
}
|
|
130
138
|
|
|
139
|
+
/**
|
|
140
|
+
* @override
|
|
141
|
+
* @export
|
|
142
|
+
*/
|
|
143
|
+
release() {
|
|
144
|
+
// stop() should already have been called for unload
|
|
145
|
+
|
|
146
|
+
if (navigator.connection && navigator.connection.removeEventListener) {
|
|
147
|
+
navigator.connection.removeEventListener(
|
|
148
|
+
'change', this.onNetworkInformationChange_);
|
|
149
|
+
this.onNetworkInformationChange_ = null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
this.resizeObserverTimer_ = null;
|
|
153
|
+
}
|
|
154
|
+
|
|
131
155
|
|
|
132
156
|
/**
|
|
133
157
|
* @override
|
|
@@ -219,9 +219,9 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
219
219
|
// seen the ads actually play until requestAds() is called.
|
|
220
220
|
// Note: We listen for a play event to avoid autoplay issues that might
|
|
221
221
|
// crash IMA.
|
|
222
|
-
this.
|
|
222
|
+
this.eventManager_.listenOnce(this.video_, 'play', () => {
|
|
223
223
|
this.imaAdsManager_.start();
|
|
224
|
-
}
|
|
224
|
+
});
|
|
225
225
|
} catch (adError) {
|
|
226
226
|
// If there was a problem with the VAST response,
|
|
227
227
|
// we we won't be getting an ad. Hide ad UI if we showed it already
|
|
@@ -440,7 +440,10 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
440
440
|
if (this.ad_.isLinear()) {
|
|
441
441
|
this.adContainer_.setAttribute('ad-active', 'true');
|
|
442
442
|
this.video_.pause();
|
|
443
|
-
this.ad_.setVolume(this.video_.
|
|
443
|
+
this.ad_.setVolume(this.video_.volume);
|
|
444
|
+
if (this.video_.muted) {
|
|
445
|
+
this.ad_.setMuted(true);
|
|
446
|
+
}
|
|
444
447
|
}
|
|
445
448
|
}
|
|
446
449
|
|
|
@@ -275,6 +275,7 @@ shaka.cea.Mp4CeaParser = class {
|
|
|
275
275
|
const naluHeader = reader.readUint8();
|
|
276
276
|
let naluType = null;
|
|
277
277
|
let isSeiMessage = false;
|
|
278
|
+
let naluHeaderSize = 1;
|
|
278
279
|
|
|
279
280
|
goog.asserts.assert(this.bitstreamFormat_ != BitstreamFormat.UNKNOWN,
|
|
280
281
|
'Bitstream format should have been checked before now!');
|
|
@@ -285,6 +286,8 @@ shaka.cea.Mp4CeaParser = class {
|
|
|
285
286
|
break;
|
|
286
287
|
|
|
287
288
|
case BitstreamFormat.H265:
|
|
289
|
+
naluHeaderSize = 2;
|
|
290
|
+
reader.skip(1);
|
|
288
291
|
naluType = (naluHeader >> 1) & 0x3f;
|
|
289
292
|
isSeiMessage =
|
|
290
293
|
naluType == ICeaParser.H265_PREFIX_NALU_TYPE_SEI ||
|
|
@@ -304,7 +307,7 @@ shaka.cea.Mp4CeaParser = class {
|
|
|
304
307
|
|
|
305
308
|
const pts = (time + timeOffset)/timescale;
|
|
306
309
|
for (const packet of this.seiProcessor_
|
|
307
|
-
.process(reader.readBytes(naluSize -
|
|
310
|
+
.process(reader.readBytes(naluSize - naluHeaderSize))) {
|
|
308
311
|
captionPackets.push({
|
|
309
312
|
packet,
|
|
310
313
|
pts,
|
|
@@ -312,7 +315,7 @@ shaka.cea.Mp4CeaParser = class {
|
|
|
312
315
|
}
|
|
313
316
|
} else {
|
|
314
317
|
try {
|
|
315
|
-
reader.skip(naluSize -
|
|
318
|
+
reader.skip(naluSize - naluHeaderSize);
|
|
316
319
|
} catch (e) {
|
|
317
320
|
// It is necessary to ignore this error because it can break the start
|
|
318
321
|
// of playback even if the user does not want to see the subtitles.
|
package/lib/dash/dash_parser.js
CHANGED
|
@@ -1279,55 +1279,56 @@ shaka.dash.DashParser = class {
|
|
|
1279
1279
|
context.period.id + ',' + context.representation.id : '';
|
|
1280
1280
|
|
|
1281
1281
|
/** @type {shaka.extern.Stream} */
|
|
1282
|
-
|
|
1283
|
-
id: this.globalId_++,
|
|
1284
|
-
originalId: context.representation.id,
|
|
1285
|
-
createSegmentIndex: async () => {
|
|
1286
|
-
// If we have a stream with the same context id stored in the map
|
|
1287
|
-
// that has no segmentIndex, we should set the segmentIndex for it.
|
|
1288
|
-
const storedInMap = contextId && context.dynamic &&
|
|
1289
|
-
this.streamMap_[contextId];
|
|
1290
|
-
|
|
1291
|
-
const currentStream = storedInMap ? this.streamMap_[contextId] : stream;
|
|
1292
|
-
if (!currentStream.segmentIndex) {
|
|
1293
|
-
currentStream.segmentIndex = await streamInfo.generateSegmentIndex();
|
|
1294
|
-
}
|
|
1295
|
-
},
|
|
1282
|
+
let stream;
|
|
1296
1283
|
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1284
|
+
if (contextId && this.streamMap_[contextId]) {
|
|
1285
|
+
stream = this.streamMap_[contextId];
|
|
1286
|
+
} else {
|
|
1287
|
+
stream = {
|
|
1288
|
+
id: this.globalId_++,
|
|
1289
|
+
originalId: context.representation.id,
|
|
1290
|
+
createSegmentIndex: () => Promise.resolve(),
|
|
1291
|
+
closeSegmentIndex: () => {
|
|
1292
|
+
if (stream.segmentIndex) {
|
|
1293
|
+
stream.segmentIndex.release();
|
|
1294
|
+
stream.segmentIndex = null;
|
|
1295
|
+
}
|
|
1296
|
+
},
|
|
1297
|
+
segmentIndex: null,
|
|
1298
|
+
mimeType: context.representation.mimeType,
|
|
1299
|
+
codecs: context.representation.codecs,
|
|
1300
|
+
frameRate: context.representation.frameRate,
|
|
1301
|
+
pixelAspectRatio: context.representation.pixelAspectRatio,
|
|
1302
|
+
bandwidth: context.bandwidth,
|
|
1303
|
+
width: context.representation.width,
|
|
1304
|
+
height: context.representation.height,
|
|
1305
|
+
kind,
|
|
1306
|
+
encrypted: contentProtection.drmInfos.length > 0,
|
|
1307
|
+
drmInfos: contentProtection.drmInfos,
|
|
1308
|
+
keyIds,
|
|
1309
|
+
language,
|
|
1310
|
+
label,
|
|
1311
|
+
type: context.adaptationSet.contentType,
|
|
1312
|
+
primary: isPrimary,
|
|
1313
|
+
trickModeVideo: null,
|
|
1314
|
+
emsgSchemeIdUris:
|
|
1315
|
+
context.representation.emsgSchemeIdUris,
|
|
1316
|
+
roles,
|
|
1317
|
+
forced,
|
|
1318
|
+
channelsCount: context.representation.numChannels,
|
|
1319
|
+
audioSamplingRate: context.representation.audioSamplingRate,
|
|
1320
|
+
spatialAudio,
|
|
1321
|
+
closedCaptions,
|
|
1322
|
+
hdr,
|
|
1323
|
+
tilesLayout,
|
|
1324
|
+
matchedStreams: [],
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
stream.createSegmentIndex = async () => {
|
|
1329
|
+
if (!stream.segmentIndex) {
|
|
1330
|
+
stream.segmentIndex = await streamInfo.generateSegmentIndex();
|
|
1331
|
+
}
|
|
1331
1332
|
};
|
|
1332
1333
|
|
|
1333
1334
|
if (contextId && context.dynamic && !this.streamMap_[contextId]) {
|
package/lib/debug/log.js
CHANGED
|
@@ -134,23 +134,19 @@ shaka.log.MAX_LOG_LEVEL = 3;
|
|
|
134
134
|
shaka.log.oneTimeWarningIssued_ = new Set();
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
// IE9 console methods are not Functions and have no bind.
|
|
139
|
-
if (window.console && window.console.log.bind) {
|
|
137
|
+
if (window.console) {
|
|
140
138
|
/** @private {!Object.<shaka.log.Level, function(...*)>} */
|
|
141
139
|
shaka.log.logMap_ = {
|
|
142
|
-
|
|
143
|
-
[shaka.log.Level.
|
|
144
|
-
[shaka.log.Level.
|
|
145
|
-
[shaka.log.Level.
|
|
146
|
-
[shaka.log.Level.
|
|
147
|
-
[shaka.log.Level.
|
|
148
|
-
[shaka.log.Level.V2]: console.debug.bind(console),
|
|
149
|
-
/* eslint-enable no-restricted-syntax */
|
|
140
|
+
[shaka.log.Level.ERROR]: (...args) => console.error(...args),
|
|
141
|
+
[shaka.log.Level.WARNING]: (...args) => console.warn(...args),
|
|
142
|
+
[shaka.log.Level.INFO]: (...args) => console.info(...args),
|
|
143
|
+
[shaka.log.Level.DEBUG]: (...args) => console.log(...args),
|
|
144
|
+
[shaka.log.Level.V1]: (...args) => console.debug(...args),
|
|
145
|
+
[shaka.log.Level.V2]: (...args) => console.debug(...args),
|
|
150
146
|
};
|
|
151
147
|
|
|
152
|
-
shaka.log.alwaysWarn =
|
|
153
|
-
shaka.log.alwaysError =
|
|
148
|
+
shaka.log.alwaysWarn = (...args) => console.warn(...args);
|
|
149
|
+
shaka.log.alwaysError = (...args) => console.error(...args);
|
|
154
150
|
|
|
155
151
|
if (goog.DEBUG) {
|
|
156
152
|
// Since we don't want to export shaka.log in production builds, we don't
|