rx-player 3.30.0-dev.2023020100 → 3.30.0-dev.2023022200
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/CHANGELOG.md +2 -1
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
- package/dist/_esm5.processed/compat/event_listeners.js +1 -1
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +4 -2
- package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
- package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
- package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
- package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +105 -0
- package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
- package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
- package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
- package/dist/_esm5.processed/core/api/debug/index.js +2 -0
- package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +199 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
- package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/render.js +32 -0
- package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
- package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
- package/dist/_esm5.processed/core/api/playback_observer.js +3 -2
- package/dist/_esm5.processed/core/api/public_api.d.ts +3 -0
- package/dist/_esm5.processed/core/api/public_api.js +24 -13
- package/dist/_esm5.processed/core/api/utils.js +3 -3
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +5 -5
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +37 -47
- package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
- package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
- package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
- package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +6 -5
- package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +27 -31
- package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +2 -2
- package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
- package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
- package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
- package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
- package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
- package/dist/_esm5.processed/core/init/utils/media_duration_updater.js +23 -19
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
- package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +7 -10
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +4 -2
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +10 -11
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +26 -12
- package/dist/_esm5.processed/core/stream/period/period_stream.js +11 -10
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +15 -15
- package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
- package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
- package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
- package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
- package/dist/_esm5.processed/experimental/features/index.js +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +5 -4
- package/dist/_esm5.processed/features/features_object.js +1 -0
- package/dist/_esm5.processed/features/initialize_features.js +13 -10
- package/dist/_esm5.processed/features/types.d.ts +3 -0
- package/dist/_esm5.processed/manifest/adaptation.js +4 -0
- package/dist/_esm5.processed/manifest/manifest.js +2 -0
- package/dist/_esm5.processed/manifest/representation.js +11 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
- package/dist/_esm5.processed/public_types.d.ts +1 -0
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +13 -12
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
- package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
- package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
- package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
- package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
- package/dist/_esm5.processed/utils/reference.js +6 -0
- package/dist/_esm5.processed/utils/request/xhr.js +1 -1
- package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
- package/dist/_esm5.processed/utils/task_canceller.js +55 -22
- package/dist/rx-player.js +739 -626
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +1 -0
- package/package.json +18 -18
- package/scripts/build/constants.d.ts +1 -0
- package/scripts/report_build_sizes +4 -0
- package/sonar-project.properties +1 -1
- package/src/compat/eme/close_session.ts +2 -2
- package/src/compat/event_listeners.ts +1 -1
- package/src/core/adaptive/adaptive_representation_selector.ts +4 -2
- package/src/core/api/debug/buffer_graph.ts +247 -0
- package/src/core/api/debug/buffer_size_graph.ts +131 -0
- package/src/core/api/debug/constants.ts +2 -0
- package/src/core/api/debug/index.ts +3 -0
- package/src/core/api/debug/modules/general_info.ts +204 -0
- package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
- package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
- package/src/core/api/debug/render.ts +40 -0
- package/src/core/api/debug/utils.ts +103 -0
- package/src/core/api/playback_observer.ts +4 -2
- package/src/core/api/public_api.ts +27 -13
- package/src/core/api/utils.ts +3 -3
- package/src/core/decrypt/attach_media_keys.ts +1 -1
- package/src/core/decrypt/content_decryptor.ts +1 -1
- package/src/core/decrypt/session_events_listener.ts +37 -49
- package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
- package/src/core/fetchers/cdn_prioritizer.ts +18 -9
- package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
- package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
- package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
- package/src/core/fetchers/utils/schedule_request.ts +6 -5
- package/src/core/init/directfile_content_initializer.ts +1 -1
- package/src/core/init/media_source_content_initializer.ts +37 -41
- package/src/core/init/utils/content_time_boundaries_observer.ts +2 -2
- package/src/core/init/utils/create_media_source.ts +4 -16
- package/src/core/init/utils/end_of_stream.ts +6 -3
- package/src/core/init/utils/get_loaded_reference.ts +2 -1
- package/src/core/init/utils/initial_seek_and_play.ts +9 -5
- package/src/core/init/utils/initialize_content_decryption.ts +2 -1
- package/src/core/init/utils/media_duration_updater.ts +25 -20
- package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
- package/src/core/init/utils/throw_on_media_error.ts +1 -1
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +7 -11
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +4 -2
- package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
- package/src/core/stream/adaptation/adaptation_stream.ts +10 -11
- package/src/core/stream/orchestrator/stream_orchestrator.ts +26 -12
- package/src/core/stream/period/period_stream.ts +11 -10
- package/src/core/stream/representation/representation_stream.ts +15 -15
- package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
- package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
- package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
- package/src/experimental/features/debug_element.ts +13 -0
- package/src/experimental/features/index.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
- package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +5 -4
- package/src/features/__tests__/initialize_features.test.ts +11 -0
- package/src/features/features_object.ts +1 -0
- package/src/features/initialize_features.ts +15 -10
- package/src/features/types.ts +9 -0
- package/src/manifest/adaptation.ts +7 -0
- package/src/manifest/manifest.ts +4 -0
- package/src/manifest/representation.ts +10 -4
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
- package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
- package/src/public_types.ts +1 -0
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +30 -24
- package/src/transports/dash/low_latency_segment_loader.ts +2 -2
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +4 -4
- package/src/transports/local/segment_loader.ts +14 -30
- package/src/transports/smooth/segment_loader.ts +4 -4
- package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
- package/src/typings/globals.d.ts +2 -0
- package/src/utils/cancellable_sleep.ts +5 -14
- package/src/utils/create_cancellable_promise.ts +69 -0
- package/src/utils/reference.ts +6 -0
- package/src/utils/request/xhr.ts +1 -1
- package/src/utils/task_canceller.ts +63 -34
|
@@ -69,6 +69,7 @@ import config from "../../config";
|
|
|
69
69
|
import { MediaError } from "../../errors";
|
|
70
70
|
import log from "../../log";
|
|
71
71
|
import assert from "../../utils/assert";
|
|
72
|
+
import createCancellablePromise from "../../utils/create_cancellable_promise";
|
|
72
73
|
import objectAssign from "../../utils/object_assign";
|
|
73
74
|
import createSharedReference from "../../utils/reference";
|
|
74
75
|
import TaskCanceller from "../../utils/task_canceller";
|
|
@@ -127,11 +128,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
127
128
|
if (this._initialManifestProm !== null) {
|
|
128
129
|
return;
|
|
129
130
|
}
|
|
130
|
-
this._initialManifestProm =
|
|
131
|
-
_this._initCanceller.signal.register(function (err) {
|
|
132
|
-
_this._manifestFetcher.dispose();
|
|
133
|
-
rej(err);
|
|
134
|
-
});
|
|
131
|
+
this._initialManifestProm = createCancellablePromise(this._initCanceller.signal, function (res, rej) {
|
|
135
132
|
_this._manifestFetcher.addEventListener("warning", function (err) {
|
|
136
133
|
return _this.trigger("warning", err);
|
|
137
134
|
});
|
|
@@ -142,7 +139,10 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
142
139
|
_this._manifestFetcher.addEventListener("manifestReady", function (manifest) {
|
|
143
140
|
res(manifest);
|
|
144
141
|
});
|
|
145
|
-
|
|
142
|
+
});
|
|
143
|
+
this._manifestFetcher.start();
|
|
144
|
+
this._initCanceller.signal.register(function () {
|
|
145
|
+
_this._manifestFetcher.dispose();
|
|
146
146
|
});
|
|
147
147
|
};
|
|
148
148
|
/**
|
|
@@ -176,7 +176,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
176
176
|
this._initCanceller.cancel();
|
|
177
177
|
};
|
|
178
178
|
MediaSourceContentInitializer.prototype._onFatalError = function (err) {
|
|
179
|
-
if (this._initCanceller.isUsed) {
|
|
179
|
+
if (this._initCanceller.isUsed()) {
|
|
180
180
|
return;
|
|
181
181
|
}
|
|
182
182
|
this._initCanceller.cancel();
|
|
@@ -184,12 +184,9 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
184
184
|
};
|
|
185
185
|
MediaSourceContentInitializer.prototype._initializeMediaSourceAndDecryption = function (mediaElement, protectionRef) {
|
|
186
186
|
var _this = this;
|
|
187
|
-
|
|
187
|
+
var initCanceller = this._initCanceller;
|
|
188
|
+
return createCancellablePromise(initCanceller.signal, function (resolve) {
|
|
188
189
|
var keySystems = _this._settings.keySystems;
|
|
189
|
-
var initCanceller = _this._initCanceller;
|
|
190
|
-
var unregisterReject = initCanceller.signal.register(function (err) {
|
|
191
|
-
reject(err);
|
|
192
|
-
});
|
|
193
190
|
/** Initialize decryption capabilities. */
|
|
194
191
|
var drmInitRef = initializeContentDecryption(mediaElement, keySystems, protectionRef, {
|
|
195
192
|
onWarning: function (err) { return _this.trigger("warning", err); },
|
|
@@ -200,9 +197,8 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
200
197
|
return;
|
|
201
198
|
}
|
|
202
199
|
stopListeningToDrmUpdates();
|
|
203
|
-
var mediaSourceCanceller = new TaskCanceller(
|
|
204
|
-
|
|
205
|
-
});
|
|
200
|
+
var mediaSourceCanceller = new TaskCanceller();
|
|
201
|
+
mediaSourceCanceller.linkToSignal(initCanceller.signal);
|
|
206
202
|
openMediaSource(mediaElement, mediaSourceCanceller.signal)
|
|
207
203
|
.then(function (mediaSource) {
|
|
208
204
|
var lastDrmStatus = drmInitRef.getValue();
|
|
@@ -211,7 +207,6 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
211
207
|
drmInitRef.onUpdate(function (newDrmStatus, stopListeningToDrmUpdatesAgain) {
|
|
212
208
|
if (newDrmStatus.initializationState.type === "initialized") {
|
|
213
209
|
stopListeningToDrmUpdatesAgain();
|
|
214
|
-
unregisterReject();
|
|
215
210
|
resolve({ mediaSource: mediaSource, drmSystemId: newDrmStatus.drmSystemId,
|
|
216
211
|
unlinkMediaSource: mediaSourceCanceller });
|
|
217
212
|
return;
|
|
@@ -219,14 +214,13 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
219
214
|
}, { emitCurrentValue: true, clearSignal: initCanceller.signal });
|
|
220
215
|
}
|
|
221
216
|
else if (drmStatus.initializationState.type === "initialized") {
|
|
222
|
-
unregisterReject();
|
|
223
217
|
resolve({ mediaSource: mediaSource, drmSystemId: drmStatus.drmSystemId,
|
|
224
218
|
unlinkMediaSource: mediaSourceCanceller });
|
|
225
219
|
return;
|
|
226
220
|
}
|
|
227
221
|
})
|
|
228
222
|
.catch(function (err) {
|
|
229
|
-
if (mediaSourceCanceller.isUsed) {
|
|
223
|
+
if (mediaSourceCanceller.isUsed()) {
|
|
230
224
|
return;
|
|
231
225
|
}
|
|
232
226
|
_this._onFatalError(err);
|
|
@@ -252,20 +246,21 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
252
246
|
bufferOnMediaSource(opts, onReloadMediaSource, currentCanceller.signal);
|
|
253
247
|
function onReloadMediaSource(reloadOrder) {
|
|
254
248
|
currentCanceller.cancel();
|
|
255
|
-
if (initCanceller.isUsed) {
|
|
249
|
+
if (initCanceller.isUsed()) {
|
|
256
250
|
return;
|
|
257
251
|
}
|
|
258
252
|
triggerEvent("reloadingMediaSource", null);
|
|
259
|
-
if (initCanceller.isUsed) {
|
|
253
|
+
if (initCanceller.isUsed()) {
|
|
260
254
|
return;
|
|
261
255
|
}
|
|
262
|
-
var newCanceller = new TaskCanceller(
|
|
256
|
+
var newCanceller = new TaskCanceller();
|
|
257
|
+
newCanceller.linkToSignal(initCanceller.signal);
|
|
263
258
|
openMediaSource(mediaElement, newCanceller.signal)
|
|
264
259
|
.then(function (newMediaSource) {
|
|
265
260
|
recursivelyLoadOnMediaSource(newMediaSource, reloadOrder.position, reloadOrder.autoPlay, newCanceller);
|
|
266
261
|
})
|
|
267
262
|
.catch(function (err) {
|
|
268
|
-
if (newCanceller.isUsed) {
|
|
263
|
+
if (newCanceller.isUsed()) {
|
|
269
264
|
return;
|
|
270
265
|
}
|
|
271
266
|
onFatalError(err);
|
|
@@ -305,7 +300,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
305
300
|
subBufferOptions = objectAssign({ textTrackOptions: textTrackOptions, drmSystemId: drmSystemId }, bufferOptions);
|
|
306
301
|
segmentFetcherCreator = new SegmentFetcherCreator(transport, segmentRequestOptions, initCanceller.signal);
|
|
307
302
|
this.trigger("manifestReady", manifest);
|
|
308
|
-
if (initCanceller.isUsed) {
|
|
303
|
+
if (initCanceller.isUsed()) {
|
|
309
304
|
return [2 /*return*/];
|
|
310
305
|
}
|
|
311
306
|
bufferOnMediaSource = this._startBufferingOnMediaSource.bind(this);
|
|
@@ -339,7 +334,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
339
334
|
segmentBuffersStore.disposeAll();
|
|
340
335
|
});
|
|
341
336
|
var _b = performInitialSeekAndPlay(mediaElement, playbackObserver, initialTime, autoPlay, function (err) { return _this.trigger("warning", err); }, cancelSignal), autoPlayResult = _b.autoPlayResult, initialPlayPerformed = _b.initialPlayPerformed, initialSeekPerformed = _b.initialSeekPerformed;
|
|
342
|
-
if (cancelSignal.isCancelled) {
|
|
337
|
+
if (cancelSignal.isCancelled()) {
|
|
343
338
|
return;
|
|
344
339
|
}
|
|
345
340
|
initialPlayPerformed.onUpdate(function (isPerformed, stopListening) {
|
|
@@ -368,7 +363,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
368
363
|
}, { emitCurrentValue: true, clearSignal: cancelSignal });
|
|
369
364
|
})
|
|
370
365
|
.catch(function (err) {
|
|
371
|
-
if (cancelSignal.isCancelled) {
|
|
366
|
+
if (cancelSignal.isCancelled()) {
|
|
372
367
|
return; // Current loading cancelled, no need to trigger the error
|
|
373
368
|
}
|
|
374
369
|
_this._onFatalError(err);
|
|
@@ -395,7 +390,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
395
390
|
discontinuity: imminentDiscontinuity,
|
|
396
391
|
position: position,
|
|
397
392
|
});
|
|
398
|
-
if (cancelSignal.isCancelled) {
|
|
393
|
+
if (cancelSignal.isCancelled()) {
|
|
399
394
|
return; // Previous call has stopped streams due to a side-effect
|
|
400
395
|
}
|
|
401
396
|
// If the status for the last Period indicates that segments are all loaded
|
|
@@ -432,14 +427,14 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
432
427
|
},
|
|
433
428
|
adaptationChange: function (value) {
|
|
434
429
|
self.trigger("adaptationChange", value);
|
|
435
|
-
if (cancelSignal.isCancelled) {
|
|
430
|
+
if (cancelSignal.isCancelled()) {
|
|
436
431
|
return; // Previous call has stopped streams due to a side-effect
|
|
437
432
|
}
|
|
438
433
|
contentTimeBoundariesObserver.onAdaptationChange(value.type, value.period, value.adaptation);
|
|
439
434
|
},
|
|
440
435
|
representationChange: function (value) {
|
|
441
436
|
self.trigger("representationChange", value);
|
|
442
|
-
if (cancelSignal.isCancelled) {
|
|
437
|
+
if (cancelSignal.isCancelled()) {
|
|
443
438
|
return; // Previous call has stopped streams due to a side-effect
|
|
444
439
|
}
|
|
445
440
|
contentTimeBoundariesObserver.onRepresentationChange(value.type, value.period);
|
|
@@ -449,7 +444,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
449
444
|
periodStreamReady: function (value) { return self.trigger("periodStreamReady", value); },
|
|
450
445
|
periodStreamCleared: function (value) {
|
|
451
446
|
contentTimeBoundariesObserver.onPeriodCleared(value.type, value.period);
|
|
452
|
-
if (cancelSignal.isCancelled) {
|
|
447
|
+
if (cancelSignal.isCancelled()) {
|
|
453
448
|
return; // Previous call has stopped streams due to a side-effect
|
|
454
449
|
}
|
|
455
450
|
self.trigger("periodStreamCleared", value);
|
|
@@ -479,7 +474,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
479
474
|
for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
|
|
480
475
|
var protectionData = value_1[_i];
|
|
481
476
|
protectionRef.setValue(protectionData);
|
|
482
|
-
if (cancelSignal.isCancelled) {
|
|
477
|
+
if (cancelSignal.isCancelled()) {
|
|
483
478
|
return; // Previous call has stopped streams due to a side-effect
|
|
484
479
|
}
|
|
485
480
|
}
|
|
@@ -528,7 +523,8 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
528
523
|
});
|
|
529
524
|
contentTimeBoundariesObserver.addEventListener("endOfStream", function () {
|
|
530
525
|
if (endOfStreamCanceller === null) {
|
|
531
|
-
endOfStreamCanceller = new TaskCanceller(
|
|
526
|
+
endOfStreamCanceller = new TaskCanceller();
|
|
527
|
+
endOfStreamCanceller.linkToSignal(cancelSignal);
|
|
532
528
|
log.debug("Init: end-of-stream order received.");
|
|
533
529
|
maintainEndOfStream(mediaSource, endOfStreamCanceller.signal);
|
|
534
530
|
}
|
|
@@ -83,7 +83,7 @@ var ContentTimeBoundariesObserver = /** @class */ (function (_super) {
|
|
|
83
83
|
}, { includeLastObservation: true, clearSignal: cancelSignal });
|
|
84
84
|
manifest.addEventListener("manifestUpdate", function () {
|
|
85
85
|
_this.trigger("durationUpdate", getManifestDuration());
|
|
86
|
-
if (cancelSignal.isCancelled) {
|
|
86
|
+
if (cancelSignal.isCancelled()) {
|
|
87
87
|
return;
|
|
88
88
|
}
|
|
89
89
|
_this._checkEndOfStream();
|
|
@@ -128,7 +128,7 @@ var ContentTimeBoundariesObserver = /** @class */ (function (_super) {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
|
-
if (this._canceller.isUsed) {
|
|
131
|
+
if (this._canceller.isUsed()) {
|
|
132
132
|
return;
|
|
133
133
|
}
|
|
134
134
|
if (adaptation === null) {
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
import { clearElementSrc, events, MediaSource_, } from "../../../compat";
|
|
17
17
|
import { MediaError } from "../../../errors";
|
|
18
18
|
import log from "../../../log";
|
|
19
|
+
import createCancellablePromise from "../../../utils/create_cancellable_promise";
|
|
19
20
|
import isNonEmptyString from "../../../utils/is_non_empty_string";
|
|
20
|
-
import TaskCanceller from "../../../utils/task_canceller";
|
|
21
21
|
/**
|
|
22
22
|
* Dispose of ressources taken by the MediaSource:
|
|
23
23
|
* - Clear the MediaSource' SourceBuffers
|
|
@@ -100,19 +100,10 @@ function createMediaSource(mediaElement, unlinkSignal) {
|
|
|
100
100
|
* @returns {Promise}
|
|
101
101
|
*/
|
|
102
102
|
export default function openMediaSource(mediaElement, unlinkSignal) {
|
|
103
|
-
return
|
|
104
|
-
var hasResolved = false;
|
|
103
|
+
return createCancellablePromise(unlinkSignal, function (resolve) {
|
|
105
104
|
var mediaSource = createMediaSource(mediaElement, unlinkSignal);
|
|
106
|
-
var eventListenerCanceller = new TaskCanceller({ cancelOn: unlinkSignal });
|
|
107
105
|
events.onSourceOpen(mediaSource, function () {
|
|
108
|
-
eventListenerCanceller.cancel();
|
|
109
|
-
hasResolved = true;
|
|
110
106
|
resolve(mediaSource);
|
|
111
|
-
},
|
|
112
|
-
unlinkSignal.register(function (error) {
|
|
113
|
-
if (!hasResolved) {
|
|
114
|
-
reject(error);
|
|
115
|
-
}
|
|
116
|
-
});
|
|
107
|
+
}, unlinkSignal);
|
|
117
108
|
});
|
|
118
109
|
}
|
|
@@ -55,7 +55,8 @@ export default function triggerEndOfStream(mediaSource, cancelSignal) {
|
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
57
|
log.debug("Init: Waiting SourceBuffers to be updated before calling endOfStream.");
|
|
58
|
-
var innerCanceller = new TaskCanceller(
|
|
58
|
+
var innerCanceller = new TaskCanceller();
|
|
59
|
+
innerCanceller.linkToSignal(cancelSignal);
|
|
59
60
|
for (var _i = 0, updatingSourceBuffers_1 = updatingSourceBuffers; _i < updatingSourceBuffers_1.length; _i++) {
|
|
60
61
|
var sourceBuffer = updatingSourceBuffers_1[_i];
|
|
61
62
|
onSourceBufferUpdate(sourceBuffer, function () {
|
|
@@ -75,10 +76,12 @@ export default function triggerEndOfStream(mediaSource, cancelSignal) {
|
|
|
75
76
|
* @param {Object} cancelSignal
|
|
76
77
|
*/
|
|
77
78
|
export function maintainEndOfStream(mediaSource, cancelSignal) {
|
|
78
|
-
var endOfStreamCanceller = new TaskCanceller(
|
|
79
|
+
var endOfStreamCanceller = new TaskCanceller();
|
|
80
|
+
endOfStreamCanceller.linkToSignal(cancelSignal);
|
|
79
81
|
onSourceOpen(mediaSource, function () {
|
|
80
82
|
endOfStreamCanceller.cancel();
|
|
81
|
-
endOfStreamCanceller = new TaskCanceller(
|
|
83
|
+
endOfStreamCanceller = new TaskCanceller();
|
|
84
|
+
endOfStreamCanceller.linkToSignal(cancelSignal);
|
|
82
85
|
triggerEndOfStream(mediaSource, endOfStreamCanceller.signal);
|
|
83
86
|
}, cancelSignal);
|
|
84
87
|
triggerEndOfStream(mediaSource, endOfStreamCanceller.signal);
|
|
@@ -26,7 +26,8 @@ import TaskCanceller from "../../../utils/task_canceller";
|
|
|
26
26
|
* @returns {Object}
|
|
27
27
|
*/
|
|
28
28
|
export default function getLoadedReference(playbackObserver, mediaElement, isDirectfile, cancelSignal) {
|
|
29
|
-
var listenCanceller = new TaskCanceller(
|
|
29
|
+
var listenCanceller = new TaskCanceller();
|
|
30
|
+
listenCanceller.linkToSignal(cancelSignal);
|
|
30
31
|
var isLoaded = createSharedReference(false, listenCanceller.signal);
|
|
31
32
|
playbackObserver.listen(function (observation) {
|
|
32
33
|
if (observation.rebuffering !== null ||
|
|
@@ -42,7 +42,7 @@ export default function performInitialSeekAndPlay(mediaElement, playbackObserver
|
|
|
42
42
|
if (mediaElement.readyState >= READY_STATES.HAVE_METADATA) {
|
|
43
43
|
onLoadedMetadata();
|
|
44
44
|
}
|
|
45
|
-
cancelSignal.register(function (err) {
|
|
45
|
+
var deregisterCancellation = cancelSignal.register(function (err) {
|
|
46
46
|
mediaElement.removeEventListener("loadedmetadata", onLoadedMetadata);
|
|
47
47
|
rejectAutoPlay(err);
|
|
48
48
|
});
|
|
@@ -60,7 +60,7 @@ export default function performInitialSeekAndPlay(mediaElement, playbackObserver
|
|
|
60
60
|
"falsely announced having loaded the content.");
|
|
61
61
|
onWarning(error);
|
|
62
62
|
}
|
|
63
|
-
if (cancelSignal.isCancelled) {
|
|
63
|
+
if (cancelSignal.isCancelled()) {
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
66
66
|
playbackObserver.listen(function (observation, stopListening) {
|
|
@@ -82,6 +82,7 @@ export default function performInitialSeekAndPlay(mediaElement, playbackObserver
|
|
|
82
82
|
}
|
|
83
83
|
initialPlayPerformed.setValue(true);
|
|
84
84
|
initialPlayPerformed.finish();
|
|
85
|
+
deregisterCancellation();
|
|
85
86
|
return resolveAutoPlay({ type: "skipped" });
|
|
86
87
|
}
|
|
87
88
|
var playResult;
|
|
@@ -89,19 +90,22 @@ export default function performInitialSeekAndPlay(mediaElement, playbackObserver
|
|
|
89
90
|
playResult = (_a = mediaElement.play()) !== null && _a !== void 0 ? _a : Promise.resolve();
|
|
90
91
|
}
|
|
91
92
|
catch (playError) {
|
|
93
|
+
deregisterCancellation();
|
|
92
94
|
return rejectAutoPlay(playError);
|
|
93
95
|
}
|
|
94
96
|
playResult
|
|
95
97
|
.then(function () {
|
|
96
|
-
if (cancelSignal.isCancelled) {
|
|
98
|
+
if (cancelSignal.isCancelled()) {
|
|
97
99
|
return;
|
|
98
100
|
}
|
|
99
101
|
initialPlayPerformed.setValue(true);
|
|
100
102
|
initialPlayPerformed.finish();
|
|
103
|
+
deregisterCancellation();
|
|
101
104
|
return resolveAutoPlay({ type: "autoplay" });
|
|
102
105
|
})
|
|
103
106
|
.catch(function (playError) {
|
|
104
|
-
|
|
107
|
+
deregisterCancellation();
|
|
108
|
+
if (cancelSignal.isCancelled()) {
|
|
105
109
|
return;
|
|
106
110
|
}
|
|
107
111
|
if (playError instanceof Error && playError.name === "NotAllowedError") {
|
|
@@ -111,7 +115,7 @@ export default function performInitialSeekAndPlay(mediaElement, playbackObserver
|
|
|
111
115
|
var error = new MediaError("MEDIA_ERR_BLOCKED_AUTOPLAY", "Cannot trigger auto-play automatically: " +
|
|
112
116
|
"your browser does not allow it.");
|
|
113
117
|
onWarning(error);
|
|
114
|
-
if (cancelSignal.isCancelled) {
|
|
118
|
+
if (cancelSignal.isCancelled()) {
|
|
115
119
|
return;
|
|
116
120
|
}
|
|
117
121
|
return resolveAutoPlay({ type: "autoplay-blocked" });
|
|
@@ -62,7 +62,8 @@ export default function initializeContentDecryption(mediaElement, keySystems, pr
|
|
|
62
62
|
ref.finish(); // We know that no new value will be triggered
|
|
63
63
|
return ref;
|
|
64
64
|
}
|
|
65
|
-
var decryptorCanceller = new TaskCanceller(
|
|
65
|
+
var decryptorCanceller = new TaskCanceller();
|
|
66
|
+
decryptorCanceller.linkToSignal(cancelSignal);
|
|
66
67
|
var drmStatusRef = createSharedReference({
|
|
67
68
|
initializationState: { type: "uninitialized", value: null },
|
|
68
69
|
drmSystemId: undefined,
|
|
@@ -40,7 +40,8 @@ var MediaDurationUpdater = /** @class */ (function () {
|
|
|
40
40
|
this._currentKnownDuration = currentKnownDuration;
|
|
41
41
|
var isMediaSourceOpened = createMediaSourceOpenReference(mediaSource, this._canceller.signal);
|
|
42
42
|
/** TaskCanceller triggered each time the MediaSource open status changes. */
|
|
43
|
-
var msUpdateCanceller = new TaskCanceller(
|
|
43
|
+
var msUpdateCanceller = new TaskCanceller();
|
|
44
|
+
msUpdateCanceller.linkToSignal(this._canceller.signal);
|
|
44
45
|
isMediaSourceOpened.onUpdate(onMediaSourceOpenedStatusChanged, { emitCurrentValue: true,
|
|
45
46
|
clearSignal: this._canceller.signal });
|
|
46
47
|
function onMediaSourceOpenedStatusChanged() {
|
|
@@ -48,16 +49,15 @@ var MediaDurationUpdater = /** @class */ (function () {
|
|
|
48
49
|
if (!isMediaSourceOpened.getValue()) {
|
|
49
50
|
return;
|
|
50
51
|
}
|
|
51
|
-
msUpdateCanceller = new TaskCanceller(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
msUpdateCanceller = new TaskCanceller();
|
|
53
|
+
msUpdateCanceller.linkToSignal(canceller.signal);
|
|
54
|
+
/** TaskCanceller triggered each time the content's duration may have changed */
|
|
55
|
+
var durationChangeCanceller = new TaskCanceller();
|
|
56
|
+
durationChangeCanceller.linkToSignal(msUpdateCanceller.signal);
|
|
56
57
|
var reSetDuration = function () {
|
|
57
58
|
durationChangeCanceller.cancel();
|
|
58
|
-
durationChangeCanceller = new TaskCanceller(
|
|
59
|
-
|
|
60
|
-
});
|
|
59
|
+
durationChangeCanceller = new TaskCanceller();
|
|
60
|
+
durationChangeCanceller.linkToSignal(msUpdateCanceller.signal);
|
|
61
61
|
onDurationMayHaveChanged(durationChangeCanceller.signal);
|
|
62
62
|
};
|
|
63
63
|
currentKnownDuration.onUpdate(reSetDuration, { emitCurrentValue: false,
|
|
@@ -68,10 +68,12 @@ var MediaDurationUpdater = /** @class */ (function () {
|
|
|
68
68
|
function onDurationMayHaveChanged(cancelSignal) {
|
|
69
69
|
var areSourceBuffersUpdating = createSourceBuffersUpdatingReference(mediaSource.sourceBuffers, cancelSignal);
|
|
70
70
|
/** TaskCanceller triggered each time SourceBuffers' updating status changes */
|
|
71
|
-
var sourceBuffersUpdatingCanceller = new TaskCanceller(
|
|
71
|
+
var sourceBuffersUpdatingCanceller = new TaskCanceller();
|
|
72
|
+
sourceBuffersUpdatingCanceller.linkToSignal(cancelSignal);
|
|
72
73
|
return areSourceBuffersUpdating.onUpdate(function (areUpdating) {
|
|
73
74
|
sourceBuffersUpdatingCanceller.cancel();
|
|
74
|
-
sourceBuffersUpdatingCanceller = new TaskCanceller(
|
|
75
|
+
sourceBuffersUpdatingCanceller = new TaskCanceller();
|
|
76
|
+
sourceBuffersUpdatingCanceller.linkToSignal(cancelSignal);
|
|
75
77
|
if (areUpdating) {
|
|
76
78
|
return;
|
|
77
79
|
}
|
|
@@ -119,19 +121,21 @@ function setMediaSourceDuration(mediaSource, manifest, knownDuration) {
|
|
|
119
121
|
var newDuration = knownDuration;
|
|
120
122
|
if (newDuration === undefined) {
|
|
121
123
|
if (manifest.isDynamic) {
|
|
122
|
-
|
|
123
|
-
// Some targets poorly support setting a very high number for durations.
|
|
124
|
-
// Yet, in dynamic contents, we would prefer setting a value as high as possible
|
|
125
|
-
// to still be able to seek anywhere we want to (even ahead of the Manifest if
|
|
126
|
-
// we want to). As such, we put it at a safe default value of 2^32 excepted
|
|
127
|
-
// when the maximum position is already relatively close to that value, where
|
|
128
|
-
// we authorize exceptionally going over it.
|
|
129
|
-
newDuration = Math.max(Math.pow(2, 32), maxPotentialPos + YEAR_IN_SECONDS);
|
|
124
|
+
newDuration = (_a = manifest.getLivePosition()) !== null && _a !== void 0 ? _a : manifest.getMaximumSafePosition();
|
|
130
125
|
}
|
|
131
126
|
else {
|
|
132
127
|
newDuration = manifest.getMaximumSafePosition();
|
|
133
128
|
}
|
|
134
129
|
}
|
|
130
|
+
if (manifest.isDynamic) {
|
|
131
|
+
// Some targets poorly support setting a very high number for durations.
|
|
132
|
+
// Yet, in dynamic contents, we would prefer setting a value as high as possible
|
|
133
|
+
// to still be able to seek anywhere we want to (even ahead of the Manifest if
|
|
134
|
+
// we want to). As such, we put it at a safe default value of 2^32 excepted
|
|
135
|
+
// when the maximum position is already relatively close to that value, where
|
|
136
|
+
// we authorize exceptionally going over it.
|
|
137
|
+
newDuration = Math.max(Math.pow(2, 32), newDuration + YEAR_IN_SECONDS);
|
|
138
|
+
}
|
|
135
139
|
var maxBufferedEnd = 0;
|
|
136
140
|
for (var i = 0; i < mediaSource.sourceBuffers.length; i++) {
|
|
137
141
|
var sourceBuffer = mediaSource.sourceBuffers[i];
|
|
@@ -35,13 +35,15 @@ export default function streamEventsEmitter(manifest, mediaElement, playbackObse
|
|
|
35
35
|
scheduledEventsRef.setValue(refreshScheduledEventsList(prev, manifest));
|
|
36
36
|
}, cancelSignal);
|
|
37
37
|
var isPollingEvents = false;
|
|
38
|
-
var cancelCurrentPolling = new TaskCanceller(
|
|
38
|
+
var cancelCurrentPolling = new TaskCanceller();
|
|
39
|
+
cancelCurrentPolling.linkToSignal(cancelSignal);
|
|
39
40
|
scheduledEventsRef.onUpdate(function (_a) {
|
|
40
41
|
var scheduledEventsLength = _a.length;
|
|
41
42
|
if (scheduledEventsLength === 0) {
|
|
42
43
|
if (isPollingEvents) {
|
|
43
44
|
cancelCurrentPolling.cancel();
|
|
44
|
-
cancelCurrentPolling = new TaskCanceller(
|
|
45
|
+
cancelCurrentPolling = new TaskCanceller();
|
|
46
|
+
cancelCurrentPolling.linkToSignal(cancelSignal);
|
|
45
47
|
isPollingEvents = false;
|
|
46
48
|
}
|
|
47
49
|
return;
|
|
@@ -127,7 +129,7 @@ export default function streamEventsEmitter(manifest, mediaElement, playbackObse
|
|
|
127
129
|
else {
|
|
128
130
|
onEventSkip(event_2.value);
|
|
129
131
|
}
|
|
130
|
-
if (stopSignal.isCancelled) {
|
|
132
|
+
if (stopSignal.isCancelled()) {
|
|
131
133
|
return;
|
|
132
134
|
}
|
|
133
135
|
}
|
|
@@ -138,7 +140,7 @@ export default function streamEventsEmitter(manifest, mediaElement, playbackObse
|
|
|
138
140
|
if (typeof event_3.onExit === "function") {
|
|
139
141
|
event_3.onExit();
|
|
140
142
|
}
|
|
141
|
-
if (stopSignal.isCancelled) {
|
|
143
|
+
if (stopSignal.isCancelled()) {
|
|
142
144
|
return;
|
|
143
145
|
}
|
|
144
146
|
}
|
|
@@ -21,7 +21,7 @@ import isNullOrUndefined from "../../../utils/is_null_or_undefined";
|
|
|
21
21
|
* @param {Object} cancelSignal
|
|
22
22
|
*/
|
|
23
23
|
export default function listenToMediaError(mediaElement, onError, cancelSignal) {
|
|
24
|
-
if (cancelSignal.isCancelled) {
|
|
24
|
+
if (cancelSignal.isCancelled()) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
27
|
mediaElement.addEventListener("error", onMediaError);
|
|
@@ -35,6 +35,7 @@ import { getLoggableSegmentId } from "../../../../manifest";
|
|
|
35
35
|
import areArraysOfNumbersEqual from "../../../../utils/are_arrays_of_numbers_equal";
|
|
36
36
|
import assertUnreachable from "../../../../utils/assert_unreachable";
|
|
37
37
|
import { toUint8Array } from "../../../../utils/byte_parsing";
|
|
38
|
+
import createCancellablePromise from "../../../../utils/create_cancellable_promise";
|
|
38
39
|
import hashBuffer from "../../../../utils/hash_buffer";
|
|
39
40
|
import noop from "../../../../utils/noop";
|
|
40
41
|
import objectAssign from "../../../../utils/object_assign";
|
|
@@ -227,15 +228,15 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
227
228
|
*/
|
|
228
229
|
AudioVideoSegmentBuffer.prototype._addToQueue = function (operation, cancellationSignal) {
|
|
229
230
|
var _this = this;
|
|
230
|
-
return
|
|
231
|
-
if (cancellationSignal.cancellationError !== null) {
|
|
232
|
-
return reject(cancellationSignal.cancellationError);
|
|
233
|
-
}
|
|
231
|
+
return createCancellablePromise(cancellationSignal, function (resolve, reject) {
|
|
234
232
|
var shouldRestartQueue = _this._queue.length === 0 &&
|
|
235
233
|
_this._pendingTask === null;
|
|
236
234
|
var queueItem = objectAssign({ resolve: resolve, reject: reject }, operation);
|
|
237
235
|
_this._queue.push(queueItem);
|
|
238
|
-
|
|
236
|
+
if (shouldRestartQueue) {
|
|
237
|
+
_this._flush();
|
|
238
|
+
}
|
|
239
|
+
return function () {
|
|
239
240
|
// Remove the corresponding element from the AudioVideoSegmentBuffer's
|
|
240
241
|
// queue.
|
|
241
242
|
// If the operation was a pending task, it should still continue to not
|
|
@@ -246,11 +247,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
246
247
|
}
|
|
247
248
|
queueItem.resolve = noop;
|
|
248
249
|
queueItem.reject = noop;
|
|
249
|
-
|
|
250
|
-
});
|
|
251
|
-
if (shouldRestartQueue) {
|
|
252
|
-
_this._flush();
|
|
253
|
-
}
|
|
250
|
+
};
|
|
254
251
|
});
|
|
255
252
|
};
|
|
256
253
|
/**
|
|
@@ -272,7 +272,8 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
|
|
|
272
272
|
var proportionalCues = this._currentCues
|
|
273
273
|
.filter(function (cue) { return cue.resolution !== null; });
|
|
274
274
|
if (proportionalCues.length > 0) {
|
|
275
|
-
this._sizeUpdateCanceller = new TaskCanceller(
|
|
275
|
+
this._sizeUpdateCanceller = new TaskCanceller();
|
|
276
|
+
this._sizeUpdateCanceller.linkToSignal(this._canceller.signal);
|
|
276
277
|
var TEXT_TRACK_SIZE_CHECKS_INTERVAL = config.getCurrent().TEXT_TRACK_SIZE_CHECKS_INTERVAL;
|
|
277
278
|
// update propertionally-sized elements periodically
|
|
278
279
|
var heightWidthRef = onHeightWidthChange(this._textTrackElement, TEXT_TRACK_SIZE_CHECKS_INTERVAL, this._sizeUpdateCanceller.signal);
|
|
@@ -297,7 +298,8 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
|
|
|
297
298
|
var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.getCurrent().MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL;
|
|
298
299
|
var startAutoRefresh = function () {
|
|
299
300
|
stopAutoRefresh();
|
|
300
|
-
autoRefreshCanceller = new TaskCanceller(
|
|
301
|
+
autoRefreshCanceller = new TaskCanceller();
|
|
302
|
+
autoRefreshCanceller.linkToSignal(cancellationSignal);
|
|
301
303
|
var intervalId = setInterval(function () { return _this.refreshSubtitles(); }, MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL);
|
|
302
304
|
autoRefreshCanceller.signal.register(function () {
|
|
303
305
|
clearInterval(intervalId);
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import { MediaError } from "../../errors";
|
|
17
17
|
import features from "../../features";
|
|
18
18
|
import log from "../../log";
|
|
19
|
+
import createCancellablePromise from "../../utils/create_cancellable_promise";
|
|
19
20
|
import { AudioVideoSegmentBuffer, } from "./implementations";
|
|
20
21
|
var POSSIBLE_BUFFER_TYPES = ["audio",
|
|
21
22
|
"video",
|
|
@@ -141,20 +142,23 @@ var SegmentBuffersStore = /** @class */ (function () {
|
|
|
141
142
|
if (this._areNativeBuffersUsable()) {
|
|
142
143
|
return Promise.resolve();
|
|
143
144
|
}
|
|
144
|
-
return
|
|
145
|
-
|
|
145
|
+
return createCancellablePromise(cancelWaitSignal, function (res) {
|
|
146
|
+
/* eslint-disable-next-line prefer-const */
|
|
147
|
+
var onAddedOrDisabled;
|
|
148
|
+
var removeCallback = function () {
|
|
149
|
+
var indexOf = _this._onNativeBufferAddedOrDisabled.indexOf(onAddedOrDisabled);
|
|
150
|
+
if (indexOf >= 0) {
|
|
151
|
+
_this._onNativeBufferAddedOrDisabled.splice(indexOf, 1);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
onAddedOrDisabled = function () {
|
|
146
155
|
if (_this._areNativeBuffersUsable()) {
|
|
156
|
+
removeCallback();
|
|
147
157
|
res();
|
|
148
158
|
}
|
|
149
159
|
};
|
|
150
160
|
_this._onNativeBufferAddedOrDisabled.push(onAddedOrDisabled);
|
|
151
|
-
|
|
152
|
-
var indexOf = _this._onNativeBufferAddedOrDisabled.indexOf(onAddedOrDisabled);
|
|
153
|
-
if (indexOf >= 0) {
|
|
154
|
-
_this._onNativeBufferAddedOrDisabled.splice(indexOf, 1);
|
|
155
|
-
}
|
|
156
|
-
rej(error);
|
|
157
|
-
});
|
|
161
|
+
return removeCallback;
|
|
158
162
|
});
|
|
159
163
|
};
|
|
160
164
|
/**
|
|
@@ -57,7 +57,8 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
57
57
|
var directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
|
|
58
58
|
var manifest = content.manifest, period = content.period, adaptation = content.adaptation;
|
|
59
59
|
/** Allows to cancel everything the `AdaptationStream` is doing. */
|
|
60
|
-
var adapStreamCanceller = new TaskCanceller(
|
|
60
|
+
var adapStreamCanceller = new TaskCanceller();
|
|
61
|
+
adapStreamCanceller.linkToSignal(parentCancelSignal);
|
|
61
62
|
/**
|
|
62
63
|
* The buffer goal ratio base itself on the value given by `wantedBufferAhead`
|
|
63
64
|
* to determine a more dynamic buffer goal for a given Representation.
|
|
@@ -117,9 +118,8 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
117
118
|
* terminating and as such the next one might be immediately created
|
|
118
119
|
* recursively.
|
|
119
120
|
*/
|
|
120
|
-
var repStreamTerminatingCanceller = new TaskCanceller(
|
|
121
|
-
|
|
122
|
-
});
|
|
121
|
+
var repStreamTerminatingCanceller = new TaskCanceller();
|
|
122
|
+
repStreamTerminatingCanceller.linkToSignal(adapStreamCanceller.signal);
|
|
123
123
|
var _a = estimateRef.getValue(), representation = _a.representation, manual = _a.manual;
|
|
124
124
|
if (representation === null) {
|
|
125
125
|
return;
|
|
@@ -188,11 +188,11 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
188
188
|
}
|
|
189
189
|
var repInfo = { type: adaptation.type, period: period, representation: representation };
|
|
190
190
|
currentRepresentation.setValue(representation);
|
|
191
|
-
if (adapStreamCanceller.isUsed) {
|
|
191
|
+
if (adapStreamCanceller.isUsed()) {
|
|
192
192
|
return; // previous callback has stopped everything by side-effect
|
|
193
193
|
}
|
|
194
194
|
callbacks.representationChange(repInfo);
|
|
195
|
-
if (adapStreamCanceller.isUsed) {
|
|
195
|
+
if (adapStreamCanceller.isUsed()) {
|
|
196
196
|
return; // previous callback has stopped everything by side-effect
|
|
197
197
|
}
|
|
198
198
|
var representationStreamCallbacks = {
|
|
@@ -208,13 +208,13 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
208
208
|
},
|
|
209
209
|
addedSegment: function (segmentInfo) {
|
|
210
210
|
abrCallbacks.addedSegment(segmentInfo);
|
|
211
|
-
if (adapStreamCanceller.isUsed) {
|
|
211
|
+
if (adapStreamCanceller.isUsed()) {
|
|
212
212
|
return;
|
|
213
213
|
}
|
|
214
214
|
callbacks.addedSegment(segmentInfo);
|
|
215
215
|
},
|
|
216
216
|
terminating: function () {
|
|
217
|
-
if (repStreamTerminatingCanceller.isUsed) {
|
|
217
|
+
if (repStreamTerminatingCanceller.isUsed()) {
|
|
218
218
|
return; // Already handled
|
|
219
219
|
}
|
|
220
220
|
repStreamTerminatingCanceller.cancel();
|
|
@@ -236,9 +236,8 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
236
236
|
* `TaskCanceller` triggered when the `RepresentationStream` calls its
|
|
237
237
|
* `terminating` callback.
|
|
238
238
|
*/
|
|
239
|
-
var terminatingRepStreamCanceller = new TaskCanceller(
|
|
240
|
-
|
|
241
|
-
});
|
|
239
|
+
var terminatingRepStreamCanceller = new TaskCanceller();
|
|
240
|
+
terminatingRepStreamCanceller.linkToSignal(adapStreamCanceller.signal);
|
|
242
241
|
var bufferGoal = createMappedReference(wantedBufferAhead, function (prev) {
|
|
243
242
|
return prev * getBufferGoalRatio(representation);
|
|
244
243
|
}, terminatingRepStreamCanceller.signal);
|