rx-player 4.2.0-dev.2024092400 → 4.2.0-dev.2024101500
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/.vscode/settings.json +9 -0
- package/CHANGELOG.md +22 -3
- package/VERSION +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_worker.js +1 -1
- package/dist/commonjs/core/main/worker/worker_main.d.ts.map +1 -1
- package/dist/commonjs/core/main/worker/worker_main.js +3 -0
- package/dist/commonjs/core/segment_sinks/segment_buffers_store.d.ts.map +1 -1
- package/dist/commonjs/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
- package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +15 -0
- package/dist/commonjs/core/stream/representation/representation_stream.d.ts.map +1 -1
- package/dist/commonjs/core/stream/representation/representation_stream.js +2 -0
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.d.ts.map +1 -1
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +85 -8
- package/dist/commonjs/main_thread/api/debug/modules/general_info.js +1 -1
- package/dist/commonjs/main_thread/api/public_api.js +2 -2
- package/dist/commonjs/main_thread/decrypt/find_key_system.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/find_key_system.js +3 -0
- package/dist/commonjs/main_thread/init/directfile_content_initializer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/directfile_content_initializer.js +14 -6
- package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts +11 -1
- package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/media_source_content_initializer.js +23 -11
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts +15 -1
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.js +103 -50
- package/dist/commonjs/main_thread/init/utils/initial_seek_and_play.d.ts +1 -1
- package/dist/commonjs/main_thread/init/utils/initial_seek_and_play.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/utils/initial_seek_and_play.js +21 -5
- package/dist/commonjs/main_thread/text_displayer/native/native_text_displayer.d.ts +1 -0
- package/dist/commonjs/main_thread/text_displayer/native/native_text_displayer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/text_displayer/native/native_text_displayer.js +19 -16
- package/dist/commonjs/mse/main_media_source_interface.d.ts.map +1 -1
- package/dist/commonjs/mse/main_media_source_interface.js +21 -2
- package/dist/commonjs/transports/smooth/pipelines.d.ts.map +1 -1
- package/dist/commonjs/transports/smooth/pipelines.js +1 -0
- package/dist/commonjs/transports/utils/parse_text_track.d.ts.map +1 -1
- package/dist/commonjs/transports/utils/parse_text_track.js +1 -0
- package/dist/commonjs/utils/sync_or_async.d.ts.map +1 -1
- package/dist/commonjs/utils/sync_or_async.js +3 -1
- package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_worker.js +1 -1
- package/dist/es2017/core/main/worker/worker_main.d.ts.map +1 -1
- package/dist/es2017/core/main/worker/worker_main.js +3 -0
- package/dist/es2017/core/segment_sinks/segment_buffers_store.d.ts.map +1 -1
- package/dist/es2017/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
- package/dist/es2017/core/stream/adaptation/adaptation_stream.js +15 -0
- package/dist/es2017/core/stream/representation/representation_stream.d.ts.map +1 -1
- package/dist/es2017/core/stream/representation/representation_stream.js +2 -0
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.d.ts.map +1 -1
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +36 -7
- package/dist/es2017/main_thread/api/debug/modules/general_info.js +1 -1
- package/dist/es2017/main_thread/api/public_api.js +2 -2
- package/dist/es2017/main_thread/decrypt/find_key_system.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/find_key_system.js +3 -0
- package/dist/es2017/main_thread/init/directfile_content_initializer.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/directfile_content_initializer.js +14 -6
- package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts +11 -1
- package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/media_source_content_initializer.js +23 -11
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts +15 -1
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.js +87 -46
- package/dist/es2017/main_thread/init/utils/initial_seek_and_play.d.ts +1 -1
- package/dist/es2017/main_thread/init/utils/initial_seek_and_play.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/utils/initial_seek_and_play.js +19 -3
- package/dist/es2017/main_thread/text_displayer/native/native_text_displayer.d.ts +1 -0
- package/dist/es2017/main_thread/text_displayer/native/native_text_displayer.d.ts.map +1 -1
- package/dist/es2017/main_thread/text_displayer/native/native_text_displayer.js +19 -16
- package/dist/es2017/mse/main_media_source_interface.d.ts.map +1 -1
- package/dist/es2017/mse/main_media_source_interface.js +19 -0
- package/dist/es2017/transports/smooth/pipelines.d.ts.map +1 -1
- package/dist/es2017/transports/smooth/pipelines.js +1 -0
- package/dist/es2017/transports/utils/parse_text_track.d.ts.map +1 -1
- package/dist/es2017/transports/utils/parse_text_track.js +1 -0
- package/dist/es2017/utils/sync_or_async.d.ts.map +1 -1
- package/dist/es2017/utils/sync_or_async.js +3 -1
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +104 -41
- package/dist/rx-player.min.js +17 -17
- package/dist/worker.js +5 -5
- package/package.json +19 -7
- package/src/__GENERATED_CODE/embedded_dash_wasm.ts +1 -1
- package/src/__GENERATED_CODE/embedded_worker.ts +1 -1
- package/src/core/main/worker/worker_main.ts +3 -0
- package/src/core/segment_sinks/segment_buffers_store.ts +6 -2
- package/src/core/stream/adaptation/adaptation_stream.ts +23 -1
- package/src/core/stream/representation/representation_stream.ts +11 -0
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +39 -7
- package/src/main_thread/api/debug/modules/general_info.ts +1 -1
- package/src/main_thread/api/public_api.ts +2 -2
- package/src/main_thread/decrypt/find_key_system.ts +3 -0
- package/src/main_thread/init/directfile_content_initializer.ts +20 -10
- package/src/main_thread/init/media_source_content_initializer.ts +50 -17
- package/src/main_thread/init/multi_thread_content_initializer.ts +109 -50
- package/src/main_thread/init/utils/initial_seek_and_play.ts +24 -5
- package/src/main_thread/text_displayer/native/native_text_displayer.ts +22 -18
- package/src/mse/main_media_source_interface.ts +20 -0
- package/src/transports/smooth/pipelines.ts +1 -0
- package/src/transports/utils/parse_text_track.ts +1 -0
- package/src/utils/sync_or_async.ts +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_main.d.ts","sourceRoot":"","sources":["../../../../../src/core/main/worker/worker_main.ts"],"names":[],"mappings":"AA+CA,MAAM,CAAC,OAAO,UAAU,oBAAoB,
|
|
1
|
+
{"version":3,"file":"worker_main.d.ts","sourceRoot":"","sources":["../../../../../src/core/main/worker/worker_main.ts"],"names":[],"mappings":"AA+CA,MAAM,CAAC,OAAO,UAAU,oBAAoB,SAgX3C"}
|
|
@@ -51,6 +51,9 @@ export default function initializeWorkerMain() {
|
|
|
51
51
|
* When set, emit playback observation made on the main thread.
|
|
52
52
|
*/
|
|
53
53
|
let playbackObservationRef = null;
|
|
54
|
+
onmessageerror = (_msg) => {
|
|
55
|
+
log.error("MTCI: Error when receiving message from main thread.");
|
|
56
|
+
};
|
|
54
57
|
onmessage = function (e) {
|
|
55
58
|
var _a, _b;
|
|
56
59
|
log.debug("Worker: received message", e.data.type);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment_buffers_store.d.ts","sourceRoot":"","sources":["../../../../src/core/segment_sinks/segment_buffers_store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAMvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAiB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI9E,0EAA0E;AAC1E,KAAK,sBAAsB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC3E,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE,yBAAyB,CAAC,CAAC;CAC7E;AAED,UAAU,yBAAyB;IACjC,UAAU,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,IAAI,sBAAsB;IAIzE,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IAErD;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"segment_buffers_store.d.ts","sourceRoot":"","sources":["../../../../src/core/segment_sinks/segment_buffers_store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAMvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAiB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI9E,0EAA0E;AAC1E,KAAK,sBAAsB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC3E,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE,yBAAyB,CAAC,CAAC;CAC7E;AAED,UAAU,yBAAyB;IACjC,UAAU,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,IAAI,sBAAsB;IAIzE,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IAErD;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB,CAI9B;IAEF;;;;OAIG;IACH,OAAO,CAAC,8BAA8B,CAAoB;IAE1D,OAAO,CAAC,cAAc,CAAiC;IAEvD,OAAO,CAAC,SAAS,CAAU;IAE3B;;;OAGG;gBAED,WAAW,EAAE,qBAAqB,EAClC,QAAQ,EAAE,OAAO,EACjB,sBAAsB,EAAE,uBAAuB,GAAG,IAAI;IASxD;;;;OAIG;IACI,cAAc,IAAI,WAAW,EAAE;IAQtC;;;;OAIG;IACI,oBAAoB,IAAI,WAAW,EAAE;IAI5C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,SAAS,CACd,UAAU,EAAE,WAAW,GAErB;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,GAC3C;QAAE,IAAI,EAAE,eAAe,CAAA;KAAE,GACzB;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE;IAWxB;;;;;;;;;;;;;;;OAeG;IACI,oBAAoB,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhF;;;;;;OAMG;IACI,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAgBxD;;;;;;;;;;;OAWG;IACI,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW;IAwD7E;;;OAGG;IACI,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAYxD;;OAEG;IACI,UAAU,IAAI,IAAI;IAQzB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,+BAA+B;IAehC,sBAAsB,IAAI,mBAAmB;CASrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptation_stream.d.ts","sourceRoot":"","sources":["../../../../../src/core/stream/adaptation/adaptation_stream.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AASxE,OAAO,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,EACE,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,EAAE,0BAA0B,EAC7B,SAAS,EAAE,0BAA0B,EACrC,kBAAkB,EAAE,kBAAkB,GACrC,IAAI,
|
|
1
|
+
{"version":3,"file":"adaptation_stream.d.ts","sourceRoot":"","sources":["../../../../../src/core/stream/adaptation/adaptation_stream.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AASxE,OAAO,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,EACE,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,EAAE,0BAA0B,EAC7B,SAAS,EAAE,0BAA0B,EACrC,kBAAkB,EAAE,kBAAkB,GACrC,IAAI,CA6cN"}
|
|
@@ -271,8 +271,11 @@ export default function AdaptationStream({ playbackObserver, content, options, r
|
|
|
271
271
|
* anything this function is doing and free allocated resources.
|
|
272
272
|
*/
|
|
273
273
|
function createRepresentationStream(representation, terminateCurrentStream, representationStreamCallbacks, fnCancelSignal) {
|
|
274
|
+
/** Set to `true` if we've encountered an error with this `RepresentationStream` */
|
|
275
|
+
let hasEncounteredError = false;
|
|
274
276
|
const bufferGoalCanceller = new TaskCanceller();
|
|
275
277
|
bufferGoalCanceller.linkToSignal(fnCancelSignal);
|
|
278
|
+
/** Actually built buffer size, in seconds. */
|
|
276
279
|
const bufferGoal = createMappedReference(wantedBufferAhead, (prev) => {
|
|
277
280
|
return getBufferGoal(representation, prev);
|
|
278
281
|
}, bufferGoalCanceller.signal);
|
|
@@ -281,6 +284,17 @@ export default function AdaptationStream({ playbackObserver, content, options, r
|
|
|
281
284
|
const updatedCallbacks = objectAssign({}, representationStreamCallbacks, {
|
|
282
285
|
error(err) {
|
|
283
286
|
var _a;
|
|
287
|
+
if (hasEncounteredError) {
|
|
288
|
+
// A RepresentationStream might trigger multiple Errors (for example
|
|
289
|
+
// multiple segments it tried to push at once led to errors).
|
|
290
|
+
// In that case, we'll only consider the first Error.
|
|
291
|
+
//
|
|
292
|
+
// That could mean that we're hiding legitimate issues but handling
|
|
293
|
+
// multiple of those errors at once is too hard a task for now.
|
|
294
|
+
log.warn("Stream: Ignoring RepresentationStream error", err);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
hasEncounteredError = true;
|
|
284
298
|
const formattedError = formatError(err, {
|
|
285
299
|
defaultCode: "NONE",
|
|
286
300
|
defaultReason: "Unknown `RepresentationStream` error",
|
|
@@ -289,6 +303,7 @@ export default function AdaptationStream({ playbackObserver, content, options, r
|
|
|
289
303
|
representationStreamCallbacks.error(err);
|
|
290
304
|
}
|
|
291
305
|
else {
|
|
306
|
+
log.warn("Stream: received BUFFER_FULL_ERROR", adaptation.type, representation.bitrate);
|
|
292
307
|
const wba = wantedBufferAhead.getValue();
|
|
293
308
|
const lastBufferGoalRatio = (_a = bufferGoalRatioMap.get(representation.id)) !== null && _a !== void 0 ? _a : 1;
|
|
294
309
|
// 70%, 49%, 34.3%, 24%, 16.81%, 11.76%, 8.24% and 5.76%
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"representation_stream.d.ts","sourceRoot":"","sources":["../../../../../src/core/stream/representation/representation_stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMxE,OAAO,KAAK,EAEV,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,SAAS,CAAC;AAMjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,gBAAgB,EAC3D,EACE,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,8BAA8B,CAAC,gBAAgB,CAAC,EACnD,SAAS,EAAE,8BAA8B,EACzC,kBAAkB,EAAE,kBAAkB,GACrC,IAAI,
|
|
1
|
+
{"version":3,"file":"representation_stream.d.ts","sourceRoot":"","sources":["../../../../../src/core/stream/representation/representation_stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMxE,OAAO,KAAK,EAEV,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,SAAS,CAAC;AAMjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,gBAAgB,EAC3D,EACE,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,8BAA8B,CAAC,gBAAgB,CAAC,EACnD,SAAS,EAAE,8BAA8B,EACzC,kBAAkB,EAAE,kBAAkB,GACrC,IAAI,CA6ZN"}
|
|
@@ -65,6 +65,7 @@ import pushMediaSegment from "./utils/push_media_segment";
|
|
|
65
65
|
* doing.
|
|
66
66
|
*/
|
|
67
67
|
export default function RepresentationStream({ content, options, playbackObserver, segmentSink, segmentQueue, terminate, }, callbacks, parentCancelSignal) {
|
|
68
|
+
log.debug("Stream: Creating RepresentationStream", content.adaptation.type, content.representation.bitrate);
|
|
68
69
|
const { period, adaptation, representation } = content;
|
|
69
70
|
const { bufferGoal, maxBufferSize, drmSystemId, fastSwitchThreshold } = options;
|
|
70
71
|
const bufferType = adaptation.type;
|
|
@@ -383,6 +384,7 @@ export default function RepresentationStream({ content, options, playbackObserve
|
|
|
383
384
|
// We can thus ignore it, it is very unlikely to lead to true buffer issues.
|
|
384
385
|
return;
|
|
385
386
|
}
|
|
387
|
+
log.warn("Stream: Received fatal buffer error", adaptation.type, representation.bitrate, err instanceof Error ? err : null);
|
|
386
388
|
globalCanceller.cancel();
|
|
387
389
|
callbacks.error(err);
|
|
388
390
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DRMInfos.d.ts","sourceRoot":"","sources":["../../../../../../src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"DRMInfos.d.ts","sourceRoot":"","sources":["../../../../../../src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,2BAA2B,EAAE,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAAC,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAgEhD"}
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import { canRelyOnRequestMediaKeySystemAccess } from "../../../../compat/can_rely_on_request_media_key_system_access";
|
|
16
17
|
import eme from "../../../../compat/eme";
|
|
18
|
+
import { DUMMY_PLAY_READY_HEADER, generatePlayReadyInitData, } from "../../../../compat/generate_init_data";
|
|
17
19
|
import isNullOrUndefined from "../../../../utils/is_null_or_undefined";
|
|
18
20
|
import log from "../log";
|
|
19
21
|
import { ProberStatus } from "../types";
|
|
@@ -39,13 +41,40 @@ export default function probeDRMInfos(mediaConfig) {
|
|
|
39
41
|
}
|
|
40
42
|
return eme
|
|
41
43
|
.requestMediaKeySystemAccess(type, [configuration])
|
|
42
|
-
.then((keySystemAccess) => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
.then(async (keySystemAccess) => {
|
|
45
|
+
if (!canRelyOnRequestMediaKeySystemAccess(type)) {
|
|
46
|
+
try {
|
|
47
|
+
const mediaKeys = await keySystemAccess.createMediaKeys();
|
|
48
|
+
const session = mediaKeys.createSession();
|
|
49
|
+
const initData = generatePlayReadyInitData(DUMMY_PLAY_READY_HEADER);
|
|
50
|
+
await session.generateRequest("cenc", initData);
|
|
51
|
+
session.close().catch(() => {
|
|
52
|
+
log.warn("DRM: Failed to close the dummy session");
|
|
53
|
+
});
|
|
54
|
+
result.compatibleConfiguration = keySystemAccess.getConfiguration();
|
|
55
|
+
const status = [
|
|
56
|
+
ProberStatus.Supported,
|
|
57
|
+
result,
|
|
58
|
+
];
|
|
59
|
+
return status;
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
log.debug("DRM: KeySystemAccess was granted but it is not usable");
|
|
63
|
+
const statusError = [
|
|
64
|
+
ProberStatus.NotSupported,
|
|
65
|
+
result,
|
|
66
|
+
];
|
|
67
|
+
return statusError;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
result.compatibleConfiguration = keySystemAccess.getConfiguration();
|
|
72
|
+
const status = [
|
|
73
|
+
ProberStatus.Supported,
|
|
74
|
+
result,
|
|
75
|
+
];
|
|
76
|
+
return status;
|
|
77
|
+
}
|
|
49
78
|
})
|
|
50
79
|
.catch(() => {
|
|
51
80
|
return [ProberStatus.NotSupported, result];
|
|
@@ -55,7 +55,7 @@ export default function constructDebugGeneralInfo(instance, parentElt, cancelSig
|
|
|
55
55
|
else {
|
|
56
56
|
valuesLine1.push(["wo", "0"]);
|
|
57
57
|
}
|
|
58
|
-
const valuesLine2 = [];
|
|
58
|
+
const valuesLine2 = [["v", instance.version]];
|
|
59
59
|
const ks = instance.getKeySystemConfiguration();
|
|
60
60
|
if (ks !== null) {
|
|
61
61
|
valuesLine2.push(["ks", ks.keySystem]);
|
|
@@ -143,7 +143,7 @@ class Player extends EventEmitter {
|
|
|
143
143
|
// Workaround to support Firefox autoplay on FF 42.
|
|
144
144
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
145
145
|
videoElement.preload = "auto";
|
|
146
|
-
this.version = /* PLAYER_VERSION */ "4.2.0-dev.
|
|
146
|
+
this.version = /* PLAYER_VERSION */ "4.2.0-dev.2024101500";
|
|
147
147
|
this.log = log;
|
|
148
148
|
this.state = "STOPPED";
|
|
149
149
|
this.videoElement = videoElement;
|
|
@@ -2471,5 +2471,5 @@ class Player extends EventEmitter {
|
|
|
2471
2471
|
* Use of a WeakSet ensure the object is garbage collected if it's not used anymore.
|
|
2472
2472
|
*/
|
|
2473
2473
|
Player._priv_currentlyUsedVideoElements = new WeakSet();
|
|
2474
|
-
Player.version = /* PLAYER_VERSION */ "4.2.0-dev.
|
|
2474
|
+
Player.version = /* PLAYER_VERSION */ "4.2.0-dev.2024101500";
|
|
2475
2475
|
export default Player;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find_key_system.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/find_key_system.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAUpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,WAAW,0BAA0B;IACzC,qEAAqE;IACrE,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD;;;OAGG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAC1B,oFAAoF;IACpF,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,+BAA+B,CAAC;IACtC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,gCAAgC,CAAC;IACvC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,MAAM,+BAA+B,GACvC,+BAA+B,GAC/B,gCAAgC,CAAC;AAkPrC;;;;;;;GAOG;AACH,wBAAgB,wCAAwC,CACtD,oBAAoB,EAAE,2BAA2B,EACjD,gBAAgB,EAAE,2BAA2B,GAC5C,iBAAiB,CA2CnB;AACD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,+BAA+B,CAAC,CA+H1C;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,uBAAuB,EAAE,2BAA2B,EAAE,+
|
|
1
|
+
{"version":3,"file":"find_key_system.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/find_key_system.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAUpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,WAAW,0BAA0B;IACzC,qEAAqE;IACrE,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD;;;OAGG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAC1B,oFAAoF;IACpF,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,+BAA+B,CAAC;IACtC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,gCAAgC,CAAC;IACvC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,MAAM,+BAA+B,GACvC,+BAA+B,GAC/B,gCAAgC,CAAC;AAkPrC;;;;;;;GAOG;AACH,wBAAgB,wCAAwC,CACtD,oBAAoB,EAAE,2BAA2B,EACjD,gBAAgB,EAAE,2BAA2B,GAC5C,iBAAiB,CA2CnB;AACD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,+BAA+B,CAAC,CA+H1C;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,uBAAuB,EAAE,2BAA2B,EAAE,+FAsBvD"}
|
|
@@ -376,6 +376,9 @@ export async function testKeySystem(keyType, keySystemConfigurations) {
|
|
|
376
376
|
const session = mediaKeys.createSession();
|
|
377
377
|
const initData = generatePlayReadyInitData(DUMMY_PLAY_READY_HEADER);
|
|
378
378
|
await session.generateRequest("cenc", initData);
|
|
379
|
+
session.close().catch(() => {
|
|
380
|
+
log.warn("DRM: Failed to close the dummy session");
|
|
381
|
+
});
|
|
379
382
|
}
|
|
380
383
|
catch (err) {
|
|
381
384
|
log.debug("DRM: KeySystemAccess was granted but it is not usable");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directfile_content_initializer.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/init/directfile_content_initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAI9E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AAIzE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAOpE;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,kBAAkB;IAC1E;;OAEG;IACH,OAAO,CAAC,SAAS,CAAqB;IACtC;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAgB;IAEtC;;;OAGG;gBACS,QAAQ,EAAE,kBAAkB;IAMxC;;OAEG;IACI,OAAO,IAAI,IAAI;IAItB;;;;;;;OAOG;IACI,KAAK,CACV,YAAY,EAAE,aAAa,EAC3B,gBAAgB,EAAE,6BAA6B,GAC9C,IAAI;IAmFP;;;;OAIG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;IAIjF;;OAEG;IACI,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CA0CrB;
|
|
1
|
+
{"version":3,"file":"directfile_content_initializer.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/init/directfile_content_initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAI9E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AAIzE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAOpE;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,kBAAkB;IAC1E;;OAEG;IACH,OAAO,CAAC,SAAS,CAAqB;IACtC;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAgB;IAEtC;;;OAGG;gBACS,QAAQ,EAAE,kBAAkB;IAMxC;;OAEG;IACI,OAAO,IAAI,IAAI;IAItB;;;;;;;OAOG;IACI,KAAK,CACV,YAAY,EAAE,aAAa,EAC3B,gBAAgB,EAAE,6BAA6B,GAC9C,IAAI;IAmFP;;;;OAIG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;IAIjF;;OAEG;IACI,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CA0CrB;AAwED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,wDAAwD;IACxD,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACxC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC1C,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -191,23 +191,31 @@ function getDirectFileInitialTime(mediaElement, startAt) {
|
|
|
191
191
|
}
|
|
192
192
|
const duration = mediaElement.duration;
|
|
193
193
|
if (typeof startAt.fromLastPosition === "number") {
|
|
194
|
-
if (isNullOrUndefined(duration)
|
|
195
|
-
|
|
196
|
-
|
|
194
|
+
if (!isNullOrUndefined(duration) && isFinite(duration)) {
|
|
195
|
+
return Math.max(0, duration + startAt.fromLastPosition);
|
|
196
|
+
}
|
|
197
|
+
if (mediaElement.seekable.length > 0) {
|
|
198
|
+
const lastSegmentEnd = mediaElement.seekable.end(mediaElement.seekable.length - 1);
|
|
199
|
+
if (isFinite(lastSegmentEnd)) {
|
|
200
|
+
return Math.max(0, lastSegmentEnd + startAt.fromLastPosition);
|
|
201
|
+
}
|
|
197
202
|
}
|
|
198
|
-
|
|
203
|
+
log.warn("Init: startAt.fromLastPosition set but no known duration, " +
|
|
204
|
+
"it may be too soon to seek");
|
|
205
|
+
return undefined;
|
|
199
206
|
}
|
|
200
207
|
else if (typeof startAt.fromLivePosition === "number") {
|
|
201
208
|
const livePosition = mediaElement.seekable.length > 0 ? mediaElement.seekable.end(0) : duration;
|
|
202
209
|
if (isNullOrUndefined(livePosition)) {
|
|
203
|
-
log.warn("startAt.fromLivePosition set but no known live position, " +
|
|
210
|
+
log.warn("Init: startAt.fromLivePosition set but no known live position, " +
|
|
211
|
+
"beginning at 0.");
|
|
204
212
|
return 0;
|
|
205
213
|
}
|
|
206
214
|
return Math.max(0, livePosition + startAt.fromLivePosition);
|
|
207
215
|
}
|
|
208
216
|
else if (!isNullOrUndefined(startAt.percentage)) {
|
|
209
217
|
if (isNullOrUndefined(duration) || !isFinite(duration)) {
|
|
210
|
-
log.warn("startAt.percentage set but no known duration, " + "beginning at 0.");
|
|
218
|
+
log.warn("Init: startAt.percentage set but no known duration, " + "beginning at 0.");
|
|
211
219
|
return 0;
|
|
212
220
|
}
|
|
213
221
|
const { percentage } = startAt;
|
|
@@ -35,7 +35,7 @@ import type { IInitialTimeOptions } from "./utils/get_initial_time";
|
|
|
35
35
|
*/
|
|
36
36
|
export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
37
37
|
/** Constructor settings associated to this `MediaSourceContentInitializer`. */
|
|
38
|
-
private
|
|
38
|
+
private _initSettings;
|
|
39
39
|
/**
|
|
40
40
|
* `TaskCanceller` allowing to abort everything that the
|
|
41
41
|
* `MediaSourceContentInitializer` is doing.
|
|
@@ -91,7 +91,17 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
91
91
|
*/
|
|
92
92
|
updateContentUrls(urls: string[] | undefined, refreshNow: boolean): void;
|
|
93
93
|
dispose(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Callback called when an error interrupting playback arised.
|
|
96
|
+
* @param {*} err
|
|
97
|
+
*/
|
|
94
98
|
private _onFatalError;
|
|
99
|
+
/**
|
|
100
|
+
* Initialize decryption mechanisms if needed and begin creating and relying
|
|
101
|
+
* on the initial `MediaSourceInterface` for this content.
|
|
102
|
+
* @param {HTMLMediaElement|null} mediaElement
|
|
103
|
+
* @returns {Promise.<Object>}
|
|
104
|
+
*/
|
|
95
105
|
private _initializeMediaSourceAndDecryption;
|
|
96
106
|
private _onInitialMediaSourceReady;
|
|
97
107
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media_source_content_initializer.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/init/media_source_content_initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAK9E,OAAO,KAAK,EACV,wCAAwC,EAEzC,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAO5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAStE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAUpE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,kBAAkB;IAC3E,+EAA+E;IAC/E,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"media_source_content_initializer.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/init/media_source_content_initializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
66
66
|
*/
|
|
67
67
|
constructor(settings) {
|
|
68
68
|
super();
|
|
69
|
-
this.
|
|
69
|
+
this._initSettings = settings;
|
|
70
70
|
this._initCanceller = new TaskCanceller();
|
|
71
71
|
this._manifest = null;
|
|
72
72
|
this._decryptionCapabilities = { status: "uninitialized", value: null };
|
|
@@ -125,6 +125,10 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
125
125
|
dispose() {
|
|
126
126
|
this._initCanceller.cancel();
|
|
127
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Callback called when an error interrupting playback arised.
|
|
130
|
+
* @param {*} err
|
|
131
|
+
*/
|
|
128
132
|
_onFatalError(err) {
|
|
129
133
|
if (this._initCanceller.isUsed()) {
|
|
130
134
|
return;
|
|
@@ -132,10 +136,16 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
132
136
|
this._initCanceller.cancel();
|
|
133
137
|
this.trigger("error", err);
|
|
134
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Initialize decryption mechanisms if needed and begin creating and relying
|
|
141
|
+
* on the initial `MediaSourceInterface` for this content.
|
|
142
|
+
* @param {HTMLMediaElement|null} mediaElement
|
|
143
|
+
* @returns {Promise.<Object>}
|
|
144
|
+
*/
|
|
135
145
|
_initializeMediaSourceAndDecryption(mediaElement) {
|
|
136
146
|
const initCanceller = this._initCanceller;
|
|
137
147
|
return createCancellablePromise(initCanceller.signal, (resolve) => {
|
|
138
|
-
const { keySystems } = this.
|
|
148
|
+
const { keySystems } = this._initSettings;
|
|
139
149
|
/** Initialize decryption capabilities. */
|
|
140
150
|
const { statusRef: drmInitRef, contentDecryptor } = initializeContentDecryption(mediaElement, keySystems, {
|
|
141
151
|
onWarning: (err) => this.trigger("warning", err),
|
|
@@ -236,7 +246,7 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
236
246
|
}
|
|
237
247
|
async _onInitialMediaSourceReady(mediaElement, initialMediaSource, playbackObserver, drmSystemId, initialMediaSourceCanceller) {
|
|
238
248
|
var _a;
|
|
239
|
-
const { adaptiveOptions, autoPlay, bufferOptions, lowLatencyMode, segmentRequestOptions, speed, startAt, textTrackOptions, transport, } = this.
|
|
249
|
+
const { adaptiveOptions, autoPlay, bufferOptions, lowLatencyMode, segmentRequestOptions, speed, startAt, textTrackOptions, transport, } = this._initSettings;
|
|
240
250
|
const initCanceller = this._initCanceller;
|
|
241
251
|
assert(this._manifest !== null);
|
|
242
252
|
let manifest;
|
|
@@ -336,14 +346,7 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
336
346
|
return this._onFatalError(error);
|
|
337
347
|
}
|
|
338
348
|
let textDisplayerInterface = null;
|
|
339
|
-
|
|
340
|
-
if (this._settings.textTrackOptions.textTrackMode === "html" &&
|
|
341
|
-
features.htmlTextDisplayer !== null) {
|
|
342
|
-
textDisplayer = new features.htmlTextDisplayer(mediaElement, this._settings.textTrackOptions.textTrackElement);
|
|
343
|
-
}
|
|
344
|
-
else if (features.nativeTextDisplayer !== null) {
|
|
345
|
-
textDisplayer = new features.nativeTextDisplayer(mediaElement);
|
|
346
|
-
}
|
|
349
|
+
const textDisplayer = createTextDisplayer(mediaElement, this._initSettings.textTrackOptions);
|
|
347
350
|
if (textDisplayer !== null) {
|
|
348
351
|
const sender = new MainThreadTextDisplayerInterface(textDisplayer);
|
|
349
352
|
textDisplayerInterface = sender;
|
|
@@ -757,6 +760,15 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
757
760
|
}
|
|
758
761
|
}
|
|
759
762
|
}
|
|
763
|
+
function createTextDisplayer(mediaElement, textTrackOptions) {
|
|
764
|
+
if (textTrackOptions.textTrackMode === "html" && features.htmlTextDisplayer !== null) {
|
|
765
|
+
return new features.htmlTextDisplayer(mediaElement, textTrackOptions.textTrackElement);
|
|
766
|
+
}
|
|
767
|
+
else if (features.nativeTextDisplayer !== null) {
|
|
768
|
+
return new features.nativeTextDisplayer(mediaElement);
|
|
769
|
+
}
|
|
770
|
+
return null;
|
|
771
|
+
}
|
|
760
772
|
/**
|
|
761
773
|
* Change the decipherability of Representations which have their key id in one
|
|
762
774
|
* of the given Arrays:
|
|
@@ -18,6 +18,19 @@ import StreamEventsEmitter from "./utils/stream_events_emitter/stream_events_emi
|
|
|
18
18
|
export default class MultiThreadContentInitializer extends ContentInitializer {
|
|
19
19
|
/** Constructor settings associated to this `MultiThreadContentInitializer`. */
|
|
20
20
|
private _settings;
|
|
21
|
+
/**
|
|
22
|
+
* The WebWorker may be sending messages as soon as we're preparing the
|
|
23
|
+
* content but the `MultiThreadContentInitializer` is only able to handle all of
|
|
24
|
+
* them only once `start`ed.
|
|
25
|
+
*
|
|
26
|
+
* As such `_queuedWorkerMessages` is set to an Array when `prepare` has been
|
|
27
|
+
* called but not `start` yet, and contains all worker messages that have to
|
|
28
|
+
* be processed when `start` is called.
|
|
29
|
+
*
|
|
30
|
+
* It is set to `null` when there's no need to rely on that queue (either not
|
|
31
|
+
* yet `prepare`d or already `start`ed).
|
|
32
|
+
*/
|
|
33
|
+
private _queuedWorkerMessages;
|
|
21
34
|
/**
|
|
22
35
|
* Information relative to the current loaded content.
|
|
23
36
|
*
|
|
@@ -38,7 +51,8 @@ export default class MultiThreadContentInitializer extends ContentInitializer {
|
|
|
38
51
|
*/
|
|
39
52
|
private _currentMediaSourceCanceller;
|
|
40
53
|
/**
|
|
41
|
-
* Stores the resolvers and the current messageId that is sent to the web worker to
|
|
54
|
+
* Stores the resolvers and the current messageId that is sent to the web worker to
|
|
55
|
+
* receive segment sink metrics.
|
|
42
56
|
* The purpose of collecting metrics is for monitoring and debugging.
|
|
43
57
|
*/
|
|
44
58
|
private _segmentMetrics;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi_thread_content_initializer.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/init/multi_thread_content_initializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAI9E,OAAO,KAAK,EACV,wCAAwC,EAGzC,MAAM,kBAAkB,CAAC;AAU1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMxD,OAAO,wBAAwB,MAAM,uCAAuC,CAAC;AAO7E,OAAO,KAAK,EAEV,6BAA6B,EAC9B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAM1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAMtE,OAAO,KAAK,iBAAiB,MAAM,YAAY,CAAC;AAIhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIpE,OAAO,qBAAqB,MAAM,gCAAgC,CAAC;AACnE,OAAO,mBAAmB,MAAM,qDAAqD,CAAC;AAMtF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,kBAAkB;IAC3E,+EAA+E;IAC/E,OAAO,CAAC,SAAS,CAAuB;IAExC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAAoD;IAC/E;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAgB;IACtC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B,CAAgB;IAEpD
|
|
1
|
+
{"version":3,"file":"multi_thread_content_initializer.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/init/multi_thread_content_initializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,8 +44,9 @@ export default class MultiThreadContentInitializer extends ContentInitializer {
|
|
|
44
44
|
this._currentContentInfo = null;
|
|
45
45
|
this._segmentMetrics = {
|
|
46
46
|
lastMessageId: 0,
|
|
47
|
-
resolvers:
|
|
47
|
+
resolvers: new Map(),
|
|
48
48
|
};
|
|
49
|
+
this._queuedWorkerMessages = null;
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
51
52
|
* Perform non-destructive preparation steps, to prepare a future content.
|
|
@@ -95,6 +96,66 @@ export default class MultiThreadContentInitializer extends ContentInitializer {
|
|
|
95
96
|
if (this._initCanceller.isUsed()) {
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
99
|
+
this._queuedWorkerMessages = [];
|
|
100
|
+
log.debug("MTCI: addEventListener prepare buffering worker messages");
|
|
101
|
+
const onmessage = (evt) => {
|
|
102
|
+
const msgData = evt.data;
|
|
103
|
+
const type = msgData.type;
|
|
104
|
+
switch (type) {
|
|
105
|
+
case "log" /* WorkerMessageType.LogMessage */: {
|
|
106
|
+
const formatted = msgData.value.logs.map((l) => {
|
|
107
|
+
switch (typeof l) {
|
|
108
|
+
case "string":
|
|
109
|
+
case "number":
|
|
110
|
+
case "boolean":
|
|
111
|
+
case "undefined":
|
|
112
|
+
return l;
|
|
113
|
+
case "object":
|
|
114
|
+
if (l === null) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return formatWorkerError(l);
|
|
118
|
+
default:
|
|
119
|
+
assertUnreachable(l);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
switch (msgData.value.logLevel) {
|
|
123
|
+
case "NONE":
|
|
124
|
+
break;
|
|
125
|
+
case "ERROR":
|
|
126
|
+
log.error(...formatted);
|
|
127
|
+
break;
|
|
128
|
+
case "WARNING":
|
|
129
|
+
log.warn(...formatted);
|
|
130
|
+
break;
|
|
131
|
+
case "INFO":
|
|
132
|
+
log.info(...formatted);
|
|
133
|
+
break;
|
|
134
|
+
case "DEBUG":
|
|
135
|
+
log.debug(...formatted);
|
|
136
|
+
break;
|
|
137
|
+
default:
|
|
138
|
+
assertUnreachable(msgData.value.logLevel);
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
default:
|
|
143
|
+
if (this._queuedWorkerMessages !== null) {
|
|
144
|
+
this._queuedWorkerMessages.push(evt);
|
|
145
|
+
}
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
this._settings.worker.addEventListener("message", onmessage);
|
|
150
|
+
const onmessageerror = (_msg) => {
|
|
151
|
+
log.error("MTCI: Error when receiving message from worker.");
|
|
152
|
+
};
|
|
153
|
+
this._settings.worker.addEventListener("messageerror", onmessageerror);
|
|
154
|
+
this._initCanceller.signal.register(() => {
|
|
155
|
+
log.debug("MTCI: removeEventListener prepare for worker message");
|
|
156
|
+
this._settings.worker.removeEventListener("message", onmessage);
|
|
157
|
+
this._settings.worker.removeEventListener("messageerror", onmessageerror);
|
|
158
|
+
});
|
|
98
159
|
// Also bind all `SharedReference` objects:
|
|
99
160
|
const throttleVideoBitrate = (_a = adaptiveOptions.throttlers.throttleBitrate.video) !== null && _a !== void 0 ? _a : new SharedReference(Infinity);
|
|
100
161
|
bindNumberReferencesToWorker(worker, this._initCanceller.signal, [wantedBufferAhead, "wantedBufferAhead"], [maxVideoBufferSize, "maxVideoBufferSize"], [maxBufferAhead, "maxBufferAhead"], [maxBufferBehind, "maxBufferBehind"], [throttleVideoBitrate, "throttleVideoBitrate"]);
|
|
@@ -760,67 +821,42 @@ export default class MultiThreadContentInitializer extends ContentInitializer {
|
|
|
760
821
|
}
|
|
761
822
|
}
|
|
762
823
|
break;
|
|
763
|
-
case "log" /* WorkerMessageType.LogMessage */: {
|
|
764
|
-
const formatted = msgData.value.logs.map((l) => {
|
|
765
|
-
switch (typeof l) {
|
|
766
|
-
case "string":
|
|
767
|
-
case "number":
|
|
768
|
-
case "boolean":
|
|
769
|
-
case "undefined":
|
|
770
|
-
return l;
|
|
771
|
-
case "object":
|
|
772
|
-
if (l === null) {
|
|
773
|
-
return null;
|
|
774
|
-
}
|
|
775
|
-
return formatWorkerError(l);
|
|
776
|
-
default:
|
|
777
|
-
assertUnreachable(l);
|
|
778
|
-
}
|
|
779
|
-
});
|
|
780
|
-
switch (msgData.value.logLevel) {
|
|
781
|
-
case "NONE":
|
|
782
|
-
break;
|
|
783
|
-
case "ERROR":
|
|
784
|
-
log.error(...formatted);
|
|
785
|
-
break;
|
|
786
|
-
case "WARNING":
|
|
787
|
-
log.warn(...formatted);
|
|
788
|
-
break;
|
|
789
|
-
case "INFO":
|
|
790
|
-
log.info(...formatted);
|
|
791
|
-
break;
|
|
792
|
-
case "DEBUG":
|
|
793
|
-
log.debug(...formatted);
|
|
794
|
-
break;
|
|
795
|
-
default:
|
|
796
|
-
assertUnreachable(msgData.value.logLevel);
|
|
797
|
-
}
|
|
798
|
-
break;
|
|
799
|
-
}
|
|
800
|
-
case "init-success" /* WorkerMessageType.InitSuccess */:
|
|
801
|
-
case "init-error" /* WorkerMessageType.InitError */:
|
|
802
|
-
// Should already be handled by the API
|
|
803
|
-
break;
|
|
804
824
|
case "segment-sink-store-update" /* WorkerMessageType.SegmentSinkStoreUpdate */: {
|
|
805
825
|
if (((_27 = this._currentContentInfo) === null || _27 === void 0 ? void 0 : _27.contentId) !== msgData.contentId) {
|
|
806
826
|
return;
|
|
807
827
|
}
|
|
808
|
-
const resolveFn = this._segmentMetrics.resolvers
|
|
828
|
+
const resolveFn = this._segmentMetrics.resolvers.get(msgData.value.messageId);
|
|
809
829
|
if (resolveFn !== undefined) {
|
|
810
830
|
resolveFn(msgData.value.segmentSinkMetrics);
|
|
811
|
-
delete this._segmentMetrics.resolvers[msgData.value.messageId];
|
|
812
831
|
}
|
|
813
832
|
else {
|
|
814
833
|
log.error("MTCI: Failed to send segment sink store update");
|
|
815
834
|
}
|
|
816
835
|
break;
|
|
817
836
|
}
|
|
837
|
+
case "init-success" /* WorkerMessageType.InitSuccess */:
|
|
838
|
+
case "init-error" /* WorkerMessageType.InitError */:
|
|
839
|
+
// Should already be handled by the API
|
|
840
|
+
break;
|
|
841
|
+
case "log" /* WorkerMessageType.LogMessage */:
|
|
842
|
+
// Already handled by prepare's handler
|
|
843
|
+
break;
|
|
818
844
|
default:
|
|
819
845
|
assertUnreachable(msgData);
|
|
820
846
|
}
|
|
821
847
|
};
|
|
848
|
+
log.debug("MTCI: addEventListener for worker message");
|
|
849
|
+
if (this._queuedWorkerMessages !== null) {
|
|
850
|
+
const bufferedMessages = this._queuedWorkerMessages.slice();
|
|
851
|
+
log.debug("MTCI: Processing buffered messages", bufferedMessages.length);
|
|
852
|
+
for (const message of bufferedMessages) {
|
|
853
|
+
onmessage(message);
|
|
854
|
+
}
|
|
855
|
+
this._queuedWorkerMessages = null;
|
|
856
|
+
}
|
|
822
857
|
this._settings.worker.addEventListener("message", onmessage);
|
|
823
858
|
this._initCanceller.signal.register(() => {
|
|
859
|
+
log.debug("MTCI: removeEventListener for worker message");
|
|
824
860
|
this._settings.worker.removeEventListener("message", onmessage);
|
|
825
861
|
});
|
|
826
862
|
}
|
|
@@ -1134,11 +1170,16 @@ export default class MultiThreadContentInitializer extends ContentInitializer {
|
|
|
1134
1170
|
value: { messageId },
|
|
1135
1171
|
});
|
|
1136
1172
|
return new Promise((resolve, reject) => {
|
|
1137
|
-
this._segmentMetrics.resolvers[messageId] = resolve;
|
|
1138
1173
|
const rejectFn = (err) => {
|
|
1139
|
-
|
|
1174
|
+
cancelSignal.deregister(rejectFn);
|
|
1175
|
+
this._segmentMetrics.resolvers.delete(messageId);
|
|
1140
1176
|
return reject(err);
|
|
1141
1177
|
};
|
|
1178
|
+
this._segmentMetrics.resolvers.set(messageId, (value) => {
|
|
1179
|
+
cancelSignal.deregister(rejectFn);
|
|
1180
|
+
this._segmentMetrics.resolvers.delete(messageId);
|
|
1181
|
+
resolve(value);
|
|
1182
|
+
});
|
|
1142
1183
|
cancelSignal.register(rejectFn);
|
|
1143
1184
|
});
|
|
1144
1185
|
};
|
|
@@ -55,7 +55,7 @@ export interface IInitialSeekAndPlayObject {
|
|
|
55
55
|
export default function performInitialSeekAndPlay({ mediaElement, playbackObserver, startTime, mustAutoPlay, isDirectfile, onWarning, }: {
|
|
56
56
|
mediaElement: IMediaElement;
|
|
57
57
|
playbackObserver: IMediaElementPlaybackObserver;
|
|
58
|
-
startTime: number | (() => number);
|
|
58
|
+
startTime: number | (() => number | undefined);
|
|
59
59
|
mustAutoPlay: boolean;
|
|
60
60
|
isDirectfile: boolean;
|
|
61
61
|
onWarning: (err: IPlayerError) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initial_seek_and_play.d.ts","sourceRoot":"","sources":["../../../../../src/main_thread/init/utils/initial_seek_and_play.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAKjF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAEhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AAEvC,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB;AAC3B,0EAA0E;AACxE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB;;;GAGG;GACD;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE;AAC9B,sCAAsC;GACpC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzB,+CAA+C;AAC/C,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE3C;;;OAGG;IACH,oBAAoB,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;CACzD;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,EACE,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,EAAE;IACD,YAAY,EAAE,aAAa,CAAC;IAC5B,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"initial_seek_and_play.d.ts","sourceRoot":"","sources":["../../../../../src/main_thread/init/utils/initial_seek_and_play.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAKjF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAEhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AAEvC,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB;AAC3B,0EAA0E;AACxE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB;;;GAGG;GACD;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE;AAC9B,sCAAsC;GACpC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzB,+CAA+C;AAC/C,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE3C;;;OAGG;IACH,oBAAoB,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;CACzD;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,EACE,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,EAAE;IACD,YAAY,EAAE,aAAa,CAAC;IAC5B,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;CACxC,EACD,YAAY,EAAE,kBAAkB,GAC/B,yBAAyB,CAmO3B"}
|