rx-player 4.2.0-dev.2024092400 → 4.2.0-dev.2024100200

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 (63) hide show
  1. package/CHANGELOG.md +10 -3
  2. package/VERSION +1 -1
  3. package/dist/commonjs/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
  4. package/dist/commonjs/__GENERATED_CODE/embedded_worker.js +1 -1
  5. package/dist/commonjs/core/main/worker/worker_main.d.ts.map +1 -1
  6. package/dist/commonjs/core/main/worker/worker_main.js +3 -0
  7. package/dist/commonjs/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
  8. package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +15 -0
  9. package/dist/commonjs/core/stream/representation/representation_stream.d.ts.map +1 -1
  10. package/dist/commonjs/core/stream/representation/representation_stream.js +2 -0
  11. package/dist/commonjs/main_thread/api/public_api.js +2 -2
  12. package/dist/commonjs/main_thread/init/directfile_content_initializer.d.ts.map +1 -1
  13. package/dist/commonjs/main_thread/init/directfile_content_initializer.js +14 -6
  14. package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts +13 -0
  15. package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -1
  16. package/dist/commonjs/main_thread/init/multi_thread_content_initializer.js +94 -45
  17. package/dist/commonjs/main_thread/init/utils/initial_seek_and_play.d.ts +1 -1
  18. package/dist/commonjs/main_thread/init/utils/initial_seek_and_play.d.ts.map +1 -1
  19. package/dist/commonjs/main_thread/init/utils/initial_seek_and_play.js +21 -5
  20. package/dist/commonjs/mse/main_media_source_interface.d.ts.map +1 -1
  21. package/dist/commonjs/mse/main_media_source_interface.js +21 -2
  22. package/dist/commonjs/transports/smooth/pipelines.d.ts.map +1 -1
  23. package/dist/commonjs/transports/smooth/pipelines.js +1 -0
  24. package/dist/commonjs/transports/utils/parse_text_track.d.ts.map +1 -1
  25. package/dist/commonjs/transports/utils/parse_text_track.js +1 -0
  26. package/dist/es2017/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
  27. package/dist/es2017/__GENERATED_CODE/embedded_worker.js +1 -1
  28. package/dist/es2017/core/main/worker/worker_main.d.ts.map +1 -1
  29. package/dist/es2017/core/main/worker/worker_main.js +3 -0
  30. package/dist/es2017/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
  31. package/dist/es2017/core/stream/adaptation/adaptation_stream.js +15 -0
  32. package/dist/es2017/core/stream/representation/representation_stream.d.ts.map +1 -1
  33. package/dist/es2017/core/stream/representation/representation_stream.js +2 -0
  34. package/dist/es2017/main_thread/api/public_api.js +2 -2
  35. package/dist/es2017/main_thread/init/directfile_content_initializer.d.ts.map +1 -1
  36. package/dist/es2017/main_thread/init/directfile_content_initializer.js +14 -6
  37. package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts +13 -0
  38. package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -1
  39. package/dist/es2017/main_thread/init/multi_thread_content_initializer.js +78 -41
  40. package/dist/es2017/main_thread/init/utils/initial_seek_and_play.d.ts +1 -1
  41. package/dist/es2017/main_thread/init/utils/initial_seek_and_play.d.ts.map +1 -1
  42. package/dist/es2017/main_thread/init/utils/initial_seek_and_play.js +19 -3
  43. package/dist/es2017/mse/main_media_source_interface.d.ts.map +1 -1
  44. package/dist/es2017/mse/main_media_source_interface.js +19 -0
  45. package/dist/es2017/transports/smooth/pipelines.d.ts.map +1 -1
  46. package/dist/es2017/transports/smooth/pipelines.js +1 -0
  47. package/dist/es2017/transports/utils/parse_text_track.d.ts.map +1 -1
  48. package/dist/es2017/transports/utils/parse_text_track.js +1 -0
  49. package/dist/rx-player.js +53 -14
  50. package/dist/rx-player.min.js +8 -8
  51. package/dist/worker.js +5 -5
  52. package/package.json +19 -7
  53. package/src/__GENERATED_CODE/embedded_worker.ts +1 -1
  54. package/src/core/main/worker/worker_main.ts +3 -0
  55. package/src/core/stream/adaptation/adaptation_stream.ts +23 -1
  56. package/src/core/stream/representation/representation_stream.ts +11 -0
  57. package/src/main_thread/api/public_api.ts +2 -2
  58. package/src/main_thread/init/directfile_content_initializer.ts +20 -10
  59. package/src/main_thread/init/multi_thread_content_initializer.ts +94 -43
  60. package/src/main_thread/init/utils/initial_seek_and_play.ts +24 -5
  61. package/src/mse/main_media_source_interface.ts +20 -0
  62. package/src/transports/smooth/pipelines.ts +1 -0
  63. package/src/transports/utils/parse_text_track.ts +1 -0
@@ -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,SA6W3C"}
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":"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,CAubN"}
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,CAkZN"}
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
  }
@@ -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.2024092400";
146
+ this.version = /* PLAYER_VERSION */ "4.2.0-dev.2024100200";
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.2024092400";
2474
+ Player.version = /* PLAYER_VERSION */ "4.2.0-dev.2024100200";
2475
2475
  export default Player;
@@ -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;AA8DD,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"}
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) || !isFinite(duration)) {
195
- log.warn("startAt.fromLastPosition set but no known duration, " + "beginning at 0.");
196
- return 0;
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
- return Math.max(0, duration + startAt.fromLastPosition);
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, " + "beginning at 0.");
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;
@@ -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
  *
@@ -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;;;OAGG;IACH,OAAO,CAAC,eAAe,CAGrB;IAEF;;;;OAIG;gBACS,QAAQ,EAAE,oBAAoB;IAa1C;;OAEG;IACI,OAAO,IAAI,IAAI;IAiFtB;;;;;;OAMG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAW/E;;;OAGG;IACI,KAAK,CACV,YAAY,EAAE,aAAa,EAC3B,gBAAgB,EAAE,6BAA6B,GAC9C,IAAI;IA22BA,OAAO,IAAI,IAAI;IAQtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,4BAA4B;IAkLpC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,OAAO;IA6Df;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,6BAA6B;IAmKrC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,qBAAqB;IA2E7B;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;CAsEpC;AAED,MAAM,WAAW,0CAA0C;IACzD;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,qBAAqB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACvD;;;;;OAKG;IACH,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACpD;;;;;OAKG;IACH,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;OAGG;IACH,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;;;OAMG;IACH,oBAAoB,EAAE,wBAAwB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D;;;;OAIG;IACH,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC5C;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,eAAe,EAAE,wCAAwC,CAAC;IAC1D,4CAA4C;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,aAAa,EAAE;QACb,+DAA+D;QAC/D,iBAAiB,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACpD,oEAAoE;QACpE,kBAAkB,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACrD,iFAAiF;QACjF,cAAc,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjD,oFAAoF;QACpF,eAAe,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAClD;;;WAGG;QACH,mBAAmB,EAAE,OAAO,CAAC;QAC7B,mEAAmE;QACnE,aAAa,EAAE,UAAU,GAAG,QAAQ,CAAC;KACtC,CAAC;IACF;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,0CAA0C;IAC1C,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qDAAqD;IACrD,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,gBAAgB,EAAE,IAAI,CACpB,iBAAiB,EACjB,gBAAgB,GAAG,eAAe,GAAG,sBAAsB,CAC5D,GAAG;QAGF,cAAc,EAAE,SAAS,CAAC;QAC1B,aAAa,EAAE,SAAS,CAAC;QAGzB,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;KAC1C,CAAC;IACF,4CAA4C;IAC5C,uBAAuB,EAAE;QACvB,iEAAiE;QACjE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B;;;;;WAKG;QACH,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC;;;;WAIG;QACH,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;QACtC,+CAA+C;QAC/C,6BAA6B,EAAE,MAAM,CAAC;QACtC;;;WAGG;QACH,eAAe,EAAE,gBAAgB,GAAG,SAAS,CAAC;KAC/C,CAAC;IACF,sDAAsD;IACtD,qBAAqB,EAAE;QACrB,cAAc,EAAE,OAAO,CAAC;QACxB;;;;WAIG;QACH,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC;;;;WAIG;QACH,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;QACtC,iEAAiE;QACjE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;KAC9B,CAAC;IACF,sDAAsD;IACtD,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACxC,wCAAwC;IACxC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC1C,gDAAgD;IAChD,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,oEAAoE;IACpE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB"}
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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"}
@@ -46,6 +46,7 @@ export default class MultiThreadContentInitializer extends ContentInitializer {
46
46
  lastMessageId: 0,
47
47
  resolvers: {},
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,47 +821,6 @@ 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;
@@ -815,12 +835,29 @@ export default class MultiThreadContentInitializer extends ContentInitializer {
815
835
  }
816
836
  break;
817
837
  }
838
+ case "init-success" /* WorkerMessageType.InitSuccess */:
839
+ case "init-error" /* WorkerMessageType.InitError */:
840
+ // Should already be handled by the API
841
+ break;
842
+ case "log" /* WorkerMessageType.LogMessage */:
843
+ // Already handled by prepare's handler
844
+ break;
818
845
  default:
819
846
  assertUnreachable(msgData);
820
847
  }
821
848
  };
849
+ log.debug("MTCI: addEventListener for worker message");
850
+ if (this._queuedWorkerMessages !== null) {
851
+ const bufferedMessages = this._queuedWorkerMessages.slice();
852
+ log.debug("MTCI: Processing buffered messages", bufferedMessages.length);
853
+ for (const message of bufferedMessages) {
854
+ onmessage(message);
855
+ }
856
+ this._queuedWorkerMessages = null;
857
+ }
822
858
  this._settings.worker.addEventListener("message", onmessage);
823
859
  this._initCanceller.signal.register(() => {
860
+ log.debug("MTCI: removeEventListener for worker message");
824
861
  this._settings.worker.removeEventListener("message", onmessage);
825
862
  });
826
863
  }
@@ -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;IACnC,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,CAgN3B"}
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"}
@@ -49,17 +49,33 @@ export default function performInitialSeekAndPlay({ mediaElement, playbackObserv
49
49
  // So let's divide the two possibilities here.
50
50
  if (!isDirectfile || typeof startTime === "number") {
51
51
  const initiallySeekedTime = typeof startTime === "number" ? startTime : startTime();
52
- if (initiallySeekedTime !== 0) {
52
+ if (initiallySeekedTime !== 0 && initiallySeekedTime !== undefined) {
53
53
  performInitialSeek(initiallySeekedTime);
54
54
  }
55
55
  waitForSeekable();
56
56
  }
57
57
  else {
58
58
  playbackObserver.listen((obs, stopListening) => {
59
+ const initiallySeekedTime = typeof startTime === "number" ? startTime : startTime();
60
+ if (initiallySeekedTime === undefined &&
61
+ obs.readyState < HTMLMediaElement.HAVE_CURRENT_DATA) {
62
+ /**
63
+ * On browser, such as Safari, the HTMLMediaElement.duration
64
+ * and HTMLMediaElement.buffered may not be initialized at readyState 1, leading
65
+ * to cases where it can be equal to `Infinity`.
66
+ * If so, the range in which it is possible to seek is not yet known.
67
+ * To solve this, the seek should be done after readyState HAVE_CURRENT_DATA (2),
68
+ * at that time the previously mentioned attributes are correctly initialized and
69
+ * the range in which it is possible to seek is correctly known.
70
+ * If the initiallySeekedTime is still `undefined` when the readyState is >= 2,
71
+ * let assume that the initiallySeekedTime will never be known and continue
72
+ * the logic without seeking.
73
+ */
74
+ return;
75
+ }
59
76
  if (obs.readyState >= 1) {
60
77
  stopListening();
61
- const initiallySeekedTime = typeof startTime === "number" ? startTime : startTime();
62
- if (initiallySeekedTime !== 0) {
78
+ if (initiallySeekedTime !== 0 && initiallySeekedTime !== undefined) {
63
79
  if (canSeekDirectlyAfterLoadedMetadata) {
64
80
  performInitialSeek(initiallySeekedTime);
65
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"main_media_source_interface.d.ts","sourceRoot":"","sources":["../../../src/mse/main_media_source_interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAOzF,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAGlD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EAEtB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAIjB;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,wBACnB,SAAQ,YAAY,CAAC,2BAA2B,CAChD,YAAW,qBAAqB;IAEhC,iCAAiC;IAC1B,EAAE,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACI,MAAM,EAAE,kBAAkB,CAAC;IAClC,iCAAiC;IAC1B,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAClD,iCAAiC;IAC1B,UAAU,EAAE,UAAU,CAAC;IAC9B,6EAA6E;IAC7E,OAAO,CAAC,YAAY,CAAe;IACnC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAA6B;IACrD;;;;OAIG;IACH,OAAO,CAAC,qBAAqB,CAAuB;IACpD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAElC;;;;;;OAMG;gBACS,EAAE,EAAE,MAAM;IAkDtB,iCAAiC;IAC1B,eAAe,CACpB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,GACZ,yBAAyB;IAO5B,iCAAiC;IAC1B,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAItE,iCAAiC;IAC1B,wBAAwB;IAI/B,iCAAiC;IAC1B,mBAAmB;IAS1B,iCAAiC;IAC1B,eAAe;IAQtB,iCAAiC;IAC1B,OAAO;CAKf;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,sBAAsB;IACtE,kCAAkC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IAC9B;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAClC,+EAA+E;IAC/E,OAAO,CAAC,aAAa,CAAgB;IACrC;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAwB;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAA6C;IAEvE;;;;;;OAMG;gBACS,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa;IA8DhF,kCAAkC;IAC3B,YAAY,CACjB,GAAG,IAAI,EAAE,UAAU,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,GAC1D,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpB,kCAAkC;IAC3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAa5D,kCAAkC;IAC3B,WAAW,IAAI,MAAM,EAAE;IAa9B,kCAAkC;IAC3B,KAAK,IAAI,IAAI;IASpB,kCAAkC;IAC3B,OAAO,IAAI,IAAI;IAStB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,qBAAqB;IAiI7B,OAAO,CAAC,gBAAgB;CAyDzB"}
1
+ {"version":3,"file":"main_media_source_interface.d.ts","sourceRoot":"","sources":["../../../src/mse/main_media_source_interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAOzF,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAGlD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EAEtB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAIjB;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,wBACnB,SAAQ,YAAY,CAAC,2BAA2B,CAChD,YAAW,qBAAqB;IAEhC,iCAAiC;IAC1B,EAAE,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACI,MAAM,EAAE,kBAAkB,CAAC;IAClC,iCAAiC;IAC1B,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAClD,iCAAiC;IAC1B,UAAU,EAAE,UAAU,CAAC;IAC9B,6EAA6E;IAC7E,OAAO,CAAC,YAAY,CAAe;IACnC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAA6B;IACrD;;;;OAIG;IACH,OAAO,CAAC,qBAAqB,CAAuB;IACpD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAElC;;;;;;OAMG;gBACS,EAAE,EAAE,MAAM;IAkDtB,iCAAiC;IAC1B,eAAe,CACpB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,GACZ,yBAAyB;IAO5B,iCAAiC;IAC1B,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAItE,iCAAiC;IAC1B,wBAAwB;IAI/B,iCAAiC;IAC1B,mBAAmB;IAS1B,iCAAiC;IAC1B,eAAe;IAQtB,iCAAiC;IAC1B,OAAO;CAKf;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,sBAAsB;IACtE,kCAAkC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IAC9B;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAClC,+EAA+E;IAC/E,OAAO,CAAC,aAAa,CAAgB;IACrC;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAwB;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAA6C;IAEvE;;;;;;OAMG;gBACS,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa;IA8DhF,kCAAkC;IAC3B,YAAY,CACjB,GAAG,IAAI,EAAE,UAAU,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,GAC1D,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpB,kCAAkC;IAC3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAa5D,kCAAkC;IAC3B,WAAW,IAAI,MAAM,EAAE;IAa9B,kCAAkC;IAC3B,KAAK,IAAI,IAAI;IASpB,kCAAkC;IAC3B,OAAO,IAAI,IAAI;IAStB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,qBAAqB;IAqJ7B,OAAO,CAAC,gBAAgB;CAyDzB"}
@@ -336,6 +336,19 @@ export class MainSourceBufferInterface {
336
336
  op.reject(error);
337
337
  });
338
338
  this._currentOperations = [];
339
+ // A synchronous error probably will not lead to updateend event, so we need to
340
+ // go to next queue element manually
341
+ //
342
+ // FIXME: This here is needed to ensure that we're not left with a
343
+ // dangling queue of operations.
344
+ // However it can potentially be counter-productive if e.g. the `appendBuffer`
345
+ // error was due to a full buffer and if there are pushing operations awaiting in
346
+ // the queue.
347
+ //
348
+ // A better solution might just be to reject all push operations right away here?
349
+ // Only for a `QuotaExceededError` (to check MSE)?
350
+ // However this is too disruptive for what is now a hotfix
351
+ this._performNextOperation();
339
352
  }
340
353
  }
341
354
  else {
@@ -351,7 +364,13 @@ export class MainSourceBufferInterface {
351
364
  ? new SourceBufferError(err.name, err.message, false)
352
365
  : new SourceBufferError("Error", "Unknown SourceBuffer Error during remove", false);
353
366
  nextElem.reject(error);
367
+ this._currentOperations.forEach((op) => {
368
+ op.reject(error);
369
+ });
354
370
  this._currentOperations = [];
371
+ // A synchronous error probably will not lead to updateend event, so we need to
372
+ // go to next queue element manually
373
+ this._performNextOperation();
355
374
  }
356
375
  }
357
376
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../../../src/transports/smooth/pipelines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,OAAO,KAAK,EAeV,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAUlB,MAAM,CAAC,OAAO,WAAW,gBAAgB,EAAE,iBAAiB,GAAG,mBAAmB,CA2XjF"}
1
+ {"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../../../src/transports/smooth/pipelines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,OAAO,KAAK,EAeV,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAUlB,MAAM,CAAC,OAAO,WAAW,gBAAgB,EAAE,iBAAiB,GAAG,mBAAmB,CA4XjF"}
@@ -251,6 +251,7 @@ export default function (transportOptions) {
251
251
  const lcCodec = codecs.toLowerCase();
252
252
  if (mimeType === "application/ttml+xml+mp4" ||
253
253
  lcCodec === "stpp" ||
254
+ lcCodec === "stpp.ttml" ||
254
255
  lcCodec === "stpp.ttml.im1t") {
255
256
  _sdType = "ttml";
256
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse_text_track.d.ts","sourceRoot":"","sources":["../../../../src/transports/utils/parse_text_track.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEvF;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAG1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAcpF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAkBjC;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,EACE,OAAO,EACP,QAAQ,EACR,MAAM,GACP,EAAE;IACD,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,EACD,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,cAAc,GAAG,IAAI,EACjC,SAAS,EAAE,OAAO,GACjB,qBAAqB,GAAG,IAAI,CAyB9B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,OAAO,GACjB,qBAAqB,GAAG,IAAI,CAmB9B"}
1
+ {"version":3,"file":"parse_text_track.d.ts","sourceRoot":"","sources":["../../../../src/transports/utils/parse_text_track.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEvF;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAG1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAepF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAkBjC;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,EACE,OAAO,EACP,QAAQ,EACR,MAAM,GACP,EAAE;IACD,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,EACD,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,cAAc,GAAG,IAAI,EACjC,SAAS,EAAE,OAAO,GACjB,qBAAqB,GAAG,IAAI,CAyB9B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,OAAO,GACjB,qBAAqB,GAAG,IAAI,CAmB9B"}
@@ -37,6 +37,7 @@ export function getISOBMFFTextTrackFormat(codecs) {
37
37
  }
38
38
  switch (codecs.toLowerCase()) {
39
39
  case "stpp": // stpp === TTML in MP4
40
+ case "stpp.ttml":
40
41
  case "stpp.ttml.im1t":
41
42
  return "ttml";
42
43
  case "wvtt": // wvtt === WebVTT in MP4