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.
Files changed (167) hide show
  1. package/CHANGELOG.md +2 -1
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
  4. package/dist/_esm5.processed/compat/event_listeners.js +1 -1
  5. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +4 -2
  6. package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
  7. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
  8. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
  9. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +105 -0
  10. package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
  11. package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
  12. package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
  13. package/dist/_esm5.processed/core/api/debug/index.js +2 -0
  14. package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
  15. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +199 -0
  16. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
  17. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
  18. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
  19. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
  20. package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
  21. package/dist/_esm5.processed/core/api/debug/render.js +32 -0
  22. package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
  23. package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
  24. package/dist/_esm5.processed/core/api/playback_observer.js +3 -2
  25. package/dist/_esm5.processed/core/api/public_api.d.ts +3 -0
  26. package/dist/_esm5.processed/core/api/public_api.js +24 -13
  27. package/dist/_esm5.processed/core/api/utils.js +3 -3
  28. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +5 -5
  29. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
  30. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
  31. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +37 -47
  32. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
  33. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
  34. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
  35. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
  36. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
  37. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
  38. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
  39. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +6 -5
  40. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
  41. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +27 -31
  42. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +2 -2
  43. package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
  44. package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
  45. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
  46. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
  47. package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
  48. package/dist/_esm5.processed/core/init/utils/media_duration_updater.js +23 -19
  49. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
  50. package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
  51. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +7 -10
  52. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +4 -2
  53. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
  54. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +10 -11
  55. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +26 -12
  56. package/dist/_esm5.processed/core/stream/period/period_stream.js +11 -10
  57. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +15 -15
  58. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +1 -1
  59. package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
  60. package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
  61. package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
  62. package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
  63. package/dist/_esm5.processed/experimental/features/index.js +1 -0
  64. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
  65. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +5 -4
  66. package/dist/_esm5.processed/features/features_object.js +1 -0
  67. package/dist/_esm5.processed/features/initialize_features.js +13 -10
  68. package/dist/_esm5.processed/features/types.d.ts +3 -0
  69. package/dist/_esm5.processed/manifest/adaptation.js +4 -0
  70. package/dist/_esm5.processed/manifest/manifest.js +2 -0
  71. package/dist/_esm5.processed/manifest/representation.js +11 -4
  72. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
  73. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
  74. package/dist/_esm5.processed/public_types.d.ts +1 -0
  75. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +13 -12
  76. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
  77. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  78. package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
  79. package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
  80. package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
  81. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  82. package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
  83. package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
  84. package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
  85. package/dist/_esm5.processed/utils/reference.js +6 -0
  86. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  87. package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
  88. package/dist/_esm5.processed/utils/task_canceller.js +55 -22
  89. package/dist/rx-player.js +739 -626
  90. package/dist/rx-player.min.js +1 -1
  91. package/jest.config.js +1 -0
  92. package/package.json +18 -18
  93. package/scripts/build/constants.d.ts +1 -0
  94. package/scripts/report_build_sizes +4 -0
  95. package/sonar-project.properties +1 -1
  96. package/src/compat/eme/close_session.ts +2 -2
  97. package/src/compat/event_listeners.ts +1 -1
  98. package/src/core/adaptive/adaptive_representation_selector.ts +4 -2
  99. package/src/core/api/debug/buffer_graph.ts +247 -0
  100. package/src/core/api/debug/buffer_size_graph.ts +131 -0
  101. package/src/core/api/debug/constants.ts +2 -0
  102. package/src/core/api/debug/index.ts +3 -0
  103. package/src/core/api/debug/modules/general_info.ts +204 -0
  104. package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
  105. package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
  106. package/src/core/api/debug/render.ts +40 -0
  107. package/src/core/api/debug/utils.ts +103 -0
  108. package/src/core/api/playback_observer.ts +4 -2
  109. package/src/core/api/public_api.ts +27 -13
  110. package/src/core/api/utils.ts +3 -3
  111. package/src/core/decrypt/attach_media_keys.ts +1 -1
  112. package/src/core/decrypt/content_decryptor.ts +1 -1
  113. package/src/core/decrypt/session_events_listener.ts +37 -49
  114. package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
  115. package/src/core/fetchers/cdn_prioritizer.ts +18 -9
  116. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
  117. package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
  118. package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
  119. package/src/core/fetchers/utils/schedule_request.ts +6 -5
  120. package/src/core/init/directfile_content_initializer.ts +1 -1
  121. package/src/core/init/media_source_content_initializer.ts +37 -41
  122. package/src/core/init/utils/content_time_boundaries_observer.ts +2 -2
  123. package/src/core/init/utils/create_media_source.ts +4 -16
  124. package/src/core/init/utils/end_of_stream.ts +6 -3
  125. package/src/core/init/utils/get_loaded_reference.ts +2 -1
  126. package/src/core/init/utils/initial_seek_and_play.ts +9 -5
  127. package/src/core/init/utils/initialize_content_decryption.ts +2 -1
  128. package/src/core/init/utils/media_duration_updater.ts +25 -20
  129. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
  130. package/src/core/init/utils/throw_on_media_error.ts +1 -1
  131. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +7 -11
  132. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +4 -2
  133. package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
  134. package/src/core/stream/adaptation/adaptation_stream.ts +10 -11
  135. package/src/core/stream/orchestrator/stream_orchestrator.ts +26 -12
  136. package/src/core/stream/period/period_stream.ts +11 -10
  137. package/src/core/stream/representation/representation_stream.ts +15 -15
  138. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
  139. package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
  140. package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
  141. package/src/experimental/features/debug_element.ts +13 -0
  142. package/src/experimental/features/index.ts +1 -0
  143. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
  144. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +5 -4
  145. package/src/features/__tests__/initialize_features.test.ts +11 -0
  146. package/src/features/features_object.ts +1 -0
  147. package/src/features/initialize_features.ts +15 -10
  148. package/src/features/types.ts +9 -0
  149. package/src/manifest/adaptation.ts +7 -0
  150. package/src/manifest/manifest.ts +4 -0
  151. package/src/manifest/representation.ts +10 -4
  152. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
  153. package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
  154. package/src/public_types.ts +1 -0
  155. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +30 -24
  156. package/src/transports/dash/low_latency_segment_loader.ts +2 -2
  157. package/src/transports/dash/manifest_parser.ts +1 -1
  158. package/src/transports/dash/segment_loader.ts +4 -4
  159. package/src/transports/local/segment_loader.ts +14 -30
  160. package/src/transports/smooth/segment_loader.ts +4 -4
  161. package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
  162. package/src/typings/globals.d.ts +2 -0
  163. package/src/utils/cancellable_sleep.ts +5 -14
  164. package/src/utils/create_cancellable_promise.ts +69 -0
  165. package/src/utils/reference.ts +6 -0
  166. package/src/utils/request/xhr.ts +1 -1
  167. 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 = new Promise(function (res, rej) {
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
- _this._manifestFetcher.start();
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
- return new Promise(function (resolve, reject) {
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
- cancelOn: initCanceller.signal,
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({ cancelOn: initCanceller.signal });
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({ cancelOn: cancelSignal });
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 new Promise(function (resolve, reject) {
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
- }, eventListenerCanceller.signal);
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({ cancelOn: cancelSignal });
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({ cancelOn: cancelSignal });
79
+ var endOfStreamCanceller = new TaskCanceller();
80
+ endOfStreamCanceller.linkToSignal(cancelSignal);
79
81
  onSourceOpen(mediaSource, function () {
80
82
  endOfStreamCanceller.cancel();
81
- endOfStreamCanceller = new TaskCanceller({ cancelOn: cancelSignal });
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({ cancelOn: cancelSignal });
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
- if (cancelSignal.isCancelled) {
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({ cancelOn: cancelSignal });
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({ cancelOn: this._canceller.signal });
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({ cancelOn: canceller.signal });
52
- /** TaskCanceller triggered each time the content's duration may have change */
53
- var durationChangeCanceller = new TaskCanceller({
54
- cancelOn: msUpdateCanceller.signal,
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
- cancelOn: msUpdateCanceller.signal,
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({ cancelOn: cancelSignal });
71
+ var sourceBuffersUpdatingCanceller = new TaskCanceller();
72
+ sourceBuffersUpdatingCanceller.linkToSignal(cancelSignal);
72
73
  return areSourceBuffersUpdating.onUpdate(function (areUpdating) {
73
74
  sourceBuffersUpdatingCanceller.cancel();
74
- sourceBuffersUpdatingCanceller = new TaskCanceller({ cancelOn: cancelSignal });
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
- var maxPotentialPos = (_a = manifest.getLivePosition()) !== null && _a !== void 0 ? _a : manifest.getMaximumSafePosition();
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({ cancelOn: cancelSignal });
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({ cancelOn: cancelSignal });
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 new Promise(function (resolve, reject) {
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
- cancellationSignal.register(function (error) {
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
- reject(error);
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({ cancelOn: this._canceller.signal });
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({ cancelOn: cancellationSignal });
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 new Promise(function (res, rej) {
145
- var onAddedOrDisabled = function () {
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
- cancelWaitSignal.register(function (error) {
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({ cancelOn: parentCancelSignal });
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
- cancelOn: adapStreamCanceller.signal,
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
- cancelOn: adapStreamCanceller.signal,
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);