rx-player 3.28.0-dev.2022062300 → 3.28.0-dev.2022062700

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 (42) hide show
  1. package/CHANGELOG.md +2 -1
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +1 -6
  4. package/dist/_esm5.processed/core/api/playback_observer.d.ts +47 -35
  5. package/dist/_esm5.processed/core/api/playback_observer.js +120 -117
  6. package/dist/_esm5.processed/core/api/public_api.d.ts +4 -1
  7. package/dist/_esm5.processed/core/api/public_api.js +10 -5
  8. package/dist/_esm5.processed/core/init/content_time_boundaries_observer.js +1 -1
  9. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +1 -1
  10. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +23 -6
  11. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +3 -3
  12. package/dist/_esm5.processed/core/init/initialize_directfile.js +1 -1
  13. package/dist/_esm5.processed/core/init/load_on_media_source.js +1 -1
  14. package/dist/_esm5.processed/core/init/stall_avoider.js +12 -8
  15. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -4
  16. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +1 -1
  17. package/dist/_esm5.processed/core/stream/period/period_stream.js +21 -5
  18. package/dist/_esm5.processed/core/stream/reload_after_switch.js +1 -1
  19. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +1 -1
  20. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +1 -1
  21. package/dist/_esm5.processed/utils/reference.d.ts +2 -2
  22. package/dist/_esm5.processed/utils/reference.js +5 -4
  23. package/dist/rx-player.js +241 -179
  24. package/dist/rx-player.min.js +1 -1
  25. package/package.json +2 -2
  26. package/sonar-project.properties +1 -1
  27. package/src/core/adaptive/adaptive_representation_selector.ts +1 -7
  28. package/src/core/api/playback_observer.ts +185 -173
  29. package/src/core/api/public_api.ts +15 -6
  30. package/src/core/init/content_time_boundaries_observer.ts +1 -1
  31. package/src/core/init/create_stream_playback_observer.ts +69 -47
  32. package/src/core/init/initial_seek_and_play.ts +3 -3
  33. package/src/core/init/initialize_directfile.ts +1 -1
  34. package/src/core/init/load_on_media_source.ts +1 -1
  35. package/src/core/init/stall_avoider.ts +12 -9
  36. package/src/core/stream/orchestrator/stream_orchestrator.ts +5 -4
  37. package/src/core/stream/period/create_empty_adaptation_stream.ts +1 -1
  38. package/src/core/stream/period/period_stream.ts +33 -14
  39. package/src/core/stream/reload_after_switch.ts +1 -1
  40. package/src/core/stream/representation/append_segment_to_buffer.ts +1 -1
  41. package/src/core/stream/representation/representation_stream.ts +1 -1
  42. package/src/utils/reference.ts +7 -5
package/dist/rx-player.js CHANGED
@@ -11035,7 +11035,7 @@ function waitUntilPlayable(observation$) {
11035
11035
  }
11036
11036
  /**
11037
11037
  * Try to play content then handle autoplay errors.
11038
- * @param {HTMLMediaElement} - mediaElement
11038
+ * @param {HTMLMediaElement} mediaElement
11039
11039
  * @returns {Observable}
11040
11040
  */
11041
11041
 
@@ -11078,10 +11078,10 @@ function initialSeekAndPlay(_ref2) {
11078
11078
  }));
11079
11079
  var seekAndPlay$ = seek$.pipe((0,mergeMap/* mergeMap */.z)(function () {
11080
11080
  if (!(0,should_validate_metadata/* default */.Z)() || mediaElement.duration > 0) {
11081
- return waitUntilPlayable(playbackObserver.observe(true));
11081
+ return waitUntilPlayable(playbackObserver.getReference().asObservable());
11082
11082
  } else {
11083
11083
  var error = new media_error/* default */.Z("MEDIA_ERR_NOT_LOADED_METADATA", "Cannot load automatically: your browser " + "falsely announced having loaded the content.");
11084
- return waitUntilPlayable(playbackObserver.observe(true)).pipe((0,startWith/* startWith */.O)(events_generators/* default.warning */.Z.warning(error)));
11084
+ return waitUntilPlayable(playbackObserver.getReference().asObservable()).pipe((0,startWith/* startWith */.O)(events_generators/* default.warning */.Z.warning(error)));
11085
11085
  }
11086
11086
  }), (0,mergeMap/* mergeMap */.z)(function (evt) {
11087
11087
  if (evt !== undefined) {
@@ -11342,7 +11342,7 @@ function initializeDirectfileContent(_ref) {
11342
11342
  // through a throwing Observable.
11343
11343
 
11344
11344
  var mediaError$ = (0,throw_on_media_error/* default */.Z)(mediaElement);
11345
- var observation$ = playbackObserver.observe(true); // Set the speed set by the user on the media element while pausing a
11345
+ var observation$ = playbackObserver.getReference().asObservable(); // Set the speed set by the user on the media element while pausing a
11346
11346
  // little longer while the buffer is empty.
11347
11347
 
11348
11348
  var playbackRate$ = (0,update_playback_rate/* default */.Z)(mediaElement, speed, observation$).pipe((0,ignoreElements/* ignoreElements */.l)());
@@ -11667,7 +11667,7 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11667
11667
  * order (first ordered by Period's start, then by bufferType in any order.
11668
11668
  */
11669
11669
 
11670
- var discontinuitiesStore$ = discontinuityUpdate$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.observe(true)), (0,scan/* scan */.R)(function (discontinuitiesStore, _ref) {
11670
+ var discontinuitiesStore$ = discontinuityUpdate$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.getReference().asObservable()), (0,scan/* scan */.R)(function (discontinuitiesStore, _ref) {
11671
11671
  var evt = _ref[0],
11672
11672
  observation = _ref[1];
11673
11673
  return updateDiscontinuitiesStore(discontinuitiesStore, evt, observation);
@@ -11705,7 +11705,7 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11705
11705
  * Period handled by that stream to unlock the situation.
11706
11706
  */
11707
11707
 
11708
- var unlock$ = lockedStream$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.observe(true)), (0,tap/* tap */.b)(function (_ref2) {
11708
+ var unlock$ = lockedStream$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.getReference().asObservable()), (0,tap/* tap */.b)(function (_ref2) {
11709
11709
  var lockedStreamEvt = _ref2[0],
11710
11710
  observation = _ref2[1];
11711
11711
 
@@ -11732,7 +11732,7 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11732
11732
 
11733
11733
  /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
11734
11734
  (0,ignoreElements/* ignoreElements */.l)());
11735
- var stall$ = playbackObserver.observe(true).pipe((0,withLatestFrom/* withLatestFrom */.M)(discontinuitiesStore$), (0,map/* map */.U)(function (_ref3) {
11735
+ var stall$ = playbackObserver.getReference().asObservable().pipe((0,withLatestFrom/* withLatestFrom */.M)(discontinuitiesStore$), (0,map/* map */.U)(function (_ref3) {
11736
11736
  var observation = _ref3[0],
11737
11737
  discontinuitiesStore = _ref3[1];
11738
11738
  var buffered = observation.buffered,
@@ -11807,11 +11807,17 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11807
11807
  ignoredStallTimeStamp = _now;
11808
11808
  }
11809
11809
 
11810
- if (is_seeking_approximate && observation.position < lastSeekingPosition && _now - ignoredStallTimeStamp < FORCE_DISCONTINUITY_SEEK_DELAY) {
11811
- return {
11812
- type: "stalled",
11813
- value: stalledReason
11814
- };
11810
+ if (is_seeking_approximate && observation.position < lastSeekingPosition) {
11811
+ log/* default.debug */.Z.debug("Init: the device appeared to have seeked back by itself.");
11812
+
11813
+ if (_now - ignoredStallTimeStamp < FORCE_DISCONTINUITY_SEEK_DELAY) {
11814
+ return {
11815
+ type: "stalled",
11816
+ value: stalledReason
11817
+ };
11818
+ } else {
11819
+ log/* default.warn */.Z.warn("Init: ignored stall for too long, checking discontinuity", _now - ignoredStallTimeStamp);
11820
+ }
11815
11821
  }
11816
11822
 
11817
11823
  lastSeekingPosition = null;
@@ -41418,9 +41424,9 @@ function createSharedReference(initialValue) {
41418
41424
  */
41419
41425
  setValue: function setValue(newVal) {
41420
41426
  if (isFinished) {
41421
- if (false) {} else {
41422
- return;
41423
- }
41427
+ if (false) {}
41428
+
41429
+ return;
41424
41430
  }
41425
41431
 
41426
41432
  value = newVal;
@@ -41558,10 +41564,14 @@ function createSharedReference(initialValue) {
41558
41564
  if (!cbObj.hasBeenCleared) {
41559
41565
  cbObj.complete();
41560
41566
  }
41567
+
41568
+ cbObj.hasBeenCleared = true;
41561
41569
  } catch (_) {
41562
41570
  /* nothing */
41563
41571
  }
41564
41572
  }
41573
+
41574
+ cbs.length = 0;
41565
41575
  }
41566
41576
  };
41567
41577
  }
@@ -50806,17 +50816,9 @@ function getEstimateReference(_ref, stopAllEstimates) {
50806
50816
  * Only used in very specific scenarios.
50807
50817
  */
50808
50818
 
50809
- var guessBasedChooser = new GuessBasedChooser(scoreCalculator, prevEstimate);
50810
- var lastPlaybackObservation; // get initial observation for initial estimate
50811
-
50812
- var unregisterInitial = playbackObserver.listen(function (obs) {
50813
- lastPlaybackObservation = obs;
50814
- }, {
50815
- includeLastObservation: true
50816
- });
50817
- unregisterInitial(); // The initial is emitted synchronously, we can now remove it
50818
- // TODO cleaner playbackObserver.getLast() or something?
50819
+ var guessBasedChooser = new GuessBasedChooser(scoreCalculator, prevEstimate); // get initial observation for initial estimate
50819
50820
 
50821
+ var lastPlaybackObservation = playbackObserver.getReference().getValue();
50820
50822
  /** Reference through which estimates are emitted. */
50821
50823
 
50822
50824
  var innerEstimateRef = (0,reference/* default */.ZP)(getCurrentEstimate()); // subscribe to subsequent playback observations
@@ -51337,7 +51339,7 @@ var link_drm_and_content = __webpack_require__(9607);
51337
51339
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/throwError.js
51338
51340
  var throwError = __webpack_require__(3610);
51339
51341
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/interval.js
51340
- var observable_interval = __webpack_require__(6697);
51342
+ var interval = __webpack_require__(6697);
51341
51343
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/tap.js
51342
51344
  var tap = __webpack_require__(2006);
51343
51345
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js
@@ -51462,7 +51464,7 @@ var AudioVideoSegmentBuffer = /*#__PURE__*/function (_SegmentBuffer) {
51462
51464
  // SourceBuffer is currently updating.
51463
51465
 
51464
51466
 
51465
- (0,observable_interval/* interval */.F)(SOURCE_BUFFER_FLUSHING_INTERVAL).pipe((0,tap/* tap */.b)(function () {
51467
+ (0,interval/* interval */.F)(SOURCE_BUFFER_FLUSHING_INTERVAL).pipe((0,tap/* tap */.b)(function () {
51466
51468
  return _this._flush();
51467
51469
  }), (0,takeUntil/* takeUntil */.R)(_this._destroy$)).subscribe();
51468
51470
  (0,fromEvent/* fromEvent */.R)(_this._sourceBuffer, "error").pipe((0,tap/* tap */.b)(function (err) {
@@ -52932,7 +52934,7 @@ function reloadAfterSwitch(period, bufferType, playbackObserver, deltaPos) {
52932
52934
  // It can happen when `reloadAfterSwitch` is called as a side-effect of the
52933
52935
  // same event that triggers the playback observation to be emitted.
52934
52936
  return nextTickObs().pipe((0,mergeMap/* mergeMap */.z)(function () {
52935
- return playbackObserver.observe(true);
52937
+ return playbackObserver.getReference().asObservable();
52936
52938
  }), (0,map/* map */.U)(function (observation) {
52937
52939
  var _a, _b;
52938
52940
 
@@ -54517,7 +54519,7 @@ function appendSegmentToBuffer(playbackObserver, segmentBuffer, dataInfos) {
54517
54519
  throw new media_error/* default */.Z("BUFFER_APPEND_ERROR", reason);
54518
54520
  }
54519
54521
 
54520
- return playbackObserver.observe(true).pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
54522
+ return playbackObserver.getReference().asObservable().pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
54521
54523
  var _a;
54522
54524
 
54523
54525
  var currentPos = (_a = observation.position.pending) !== null && _a !== void 0 ? _a : observation.position.last;
@@ -54798,7 +54800,7 @@ function RepresentationStream(_ref) {
54798
54800
  var queue$ = downloadingQueue.start().pipe((0,mergeMap/* mergeMap */.z)(onQueueEvent));
54799
54801
  /** Observable emitting the stream "status" and filling `lastSegmentQueue`. */
54800
54802
 
54801
- var status$ = combineLatest([playbackObserver.observe(true), bufferGoal$, maxBufferSize$, terminate$.pipe((0,take/* take */.q)(1), (0,startWith/* startWith */.O)(null)), reCheckNeededSegments$.pipe((0,startWith/* startWith */.O)(undefined))]).pipe((0,withLatestFrom/* withLatestFrom */.M)(fastSwitchThreshold$), (0,mergeMap/* mergeMap */.z)(function (_ref2) {
54803
+ var status$ = combineLatest([playbackObserver.getReference().asObservable(), bufferGoal$, maxBufferSize$, terminate$.pipe((0,take/* take */.q)(1), (0,startWith/* startWith */.O)(null)), reCheckNeededSegments$.pipe((0,startWith/* startWith */.O)(undefined))]).pipe((0,withLatestFrom/* withLatestFrom */.M)(fastSwitchThreshold$), (0,mergeMap/* mergeMap */.z)(function (_ref2) {
54802
54804
  var _ref2$ = _ref2[0],
54803
54805
  observation = _ref2$[0],
54804
54806
  bufferGoal = _ref2$[1],
@@ -55450,7 +55452,7 @@ function createEmptyAdaptationStream(playbackObserver, wantedBufferAhead, buffer
55450
55452
  var period = content.period;
55451
55453
  var hasFinishedLoading = false;
55452
55454
  var wantedBufferAhead$ = wantedBufferAhead.asObservable();
55453
- var observation$ = playbackObserver.observe(true);
55455
+ var observation$ = playbackObserver.getReference().asObservable();
55454
55456
  return combineLatest([observation$, wantedBufferAhead$]).pipe((0,mergeMap/* mergeMap */.z)(function (_ref) {
55455
55457
  var observation = _ref[0],
55456
55458
  wba = _ref[1];
@@ -55840,6 +55842,7 @@ function getFirstSegmentAfterPeriod(inventory, period) {
55840
55842
 
55841
55843
 
55842
55844
 
55845
+
55843
55846
  /**
55844
55847
  * Create single PeriodStream Observable:
55845
55848
  * - Lazily create (or reuse) a SegmentBuffer for the given type.
@@ -56036,16 +56039,30 @@ function getFirstDeclaredMimeType(adaptation) {
56036
56039
 
56037
56040
 
56038
56041
  function createAdaptationStreamPlaybackObserver(initialPlaybackObserver, segmentBuffer) {
56039
- return initialPlaybackObserver.deriveReadOnlyObserver(function (observation$) {
56040
- return observation$.pipe((0,map/* map */.U)(mapObservation));
56041
- }, mapObservation);
56042
-
56043
- function mapObservation(baseObservation) {
56044
- var buffered = segmentBuffer.getBufferedRanges();
56045
- return (0,object_assign/* default */.Z)({}, baseObservation, {
56046
- bufferGap: (0,ranges/* getLeftSizeOfRange */.L7)(buffered, baseObservation.position.last)
56042
+ return initialPlaybackObserver.deriveReadOnlyObserver(function transform(observationRef, cancellationSignal) {
56043
+ var newRef = (0,reference/* default */.ZP)(constructAdaptationStreamPlaybackObservation());
56044
+ observationRef.onUpdate(emitAdaptationStreamPlaybackObservation, {
56045
+ clearSignal: cancellationSignal,
56046
+ emitCurrentValue: false
56047
56047
  });
56048
- }
56048
+ cancellationSignal.register(function () {
56049
+ newRef.finish();
56050
+ });
56051
+ return newRef;
56052
+
56053
+ function constructAdaptationStreamPlaybackObservation() {
56054
+ var baseObservation = observationRef.getValue();
56055
+ var buffered = segmentBuffer.getBufferedRanges();
56056
+ var bufferGap = (0,ranges/* getLeftSizeOfRange */.L7)(buffered, baseObservation.position.last);
56057
+ return (0,object_assign/* default */.Z)({}, baseObservation, {
56058
+ bufferGap: bufferGap
56059
+ });
56060
+ }
56061
+
56062
+ function emitAdaptationStreamPlaybackObservation() {
56063
+ newRef.setValue(constructAdaptationStreamPlaybackObservation());
56064
+ }
56065
+ });
56049
56066
  }
56050
56067
  ;// CONCATENATED MODULE: ./src/core/stream/period/index.ts
56051
56068
  /**
@@ -56426,7 +56443,7 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56426
56443
  var defaultMaxAhead = MAXIMUM_MAX_BUFFER_AHEAD[bufferType] != null ? MAXIMUM_MAX_BUFFER_AHEAD[bufferType] : Infinity;
56427
56444
  return BufferGarbageCollector({
56428
56445
  segmentBuffer: segmentBuffer,
56429
- currentTime$: playbackObserver.observe(true).pipe((0,map/* map */.U)(function (o) {
56446
+ currentTime$: playbackObserver.getReference().asObservable().pipe((0,map/* map */.U)(function (o) {
56430
56447
  var _a;
56431
56448
 
56432
56449
  return (_a = o.position.pending) !== null && _a !== void 0 ? _a : o.position.last;
@@ -56544,7 +56561,8 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56544
56561
  // than the ones already considered
56545
56562
 
56546
56563
 
56547
- var restartStreamsWhenOutOfBounds$ = playbackObserver.observe(true).pipe((0,filter_map/* default */.Z)(function (_ref2) {
56564
+ var observation$ = playbackObserver.getReference().asObservable();
56565
+ var restartStreamsWhenOutOfBounds$ = observation$.pipe((0,filter_map/* default */.Z)(function (_ref2) {
56548
56566
  var position = _ref2.position;
56549
56567
 
56550
56568
  var _a, _b;
@@ -56605,7 +56623,7 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56605
56623
  }).concat([// Schedule micro task before checking the last playback observation
56606
56624
  // to reduce the risk of race conditions where the next observation
56607
56625
  // was going to be emitted synchronously.
56608
- nextTickObs().pipe((0,ignoreElements/* ignoreElements */.l)()), playbackObserver.observe(true).pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
56626
+ nextTickObs().pipe((0,ignoreElements/* ignoreElements */.l)()), playbackObserver.getReference().asObservable().pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
56609
56627
  var _a;
56610
56628
 
56611
56629
  var shouldAutoPlay = !((_a = observation.paused.pending) !== null && _a !== void 0 ? _a : playbackObserver.getIsPaused());
@@ -56662,7 +56680,7 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56662
56680
 
56663
56681
  var destroyNextStreams$ = new Subject/* Subject */.x(); // Emits when the current position goes over the end of the current Stream.
56664
56682
 
56665
- var endOfCurrentStream$ = playbackObserver.observe(true).pipe((0,filter/* filter */.h)(function (_ref4) {
56683
+ var endOfCurrentStream$ = playbackObserver.getReference().asObservable().pipe((0,filter/* filter */.h)(function (_ref4) {
56666
56684
  var position = _ref4.position;
56667
56685
 
56668
56686
  var _a;
@@ -56814,7 +56832,7 @@ function ContentTimeBoundariesObserver(manifest, streams, playbackObserver) {
56814
56832
  var maximumPositionCalculator = new MaximumPositionCalculator(manifest); // trigger warnings when the wanted time is before or after the manifest's
56815
56833
  // segments
56816
56834
 
56817
- var outOfManifest$ = playbackObserver.observe(true).pipe((0,filter_map/* default */.Z)(function (_ref) {
56835
+ var outOfManifest$ = playbackObserver.getReference().asObservable().pipe((0,filter_map/* default */.Z)(function (_ref) {
56818
56836
  var position = _ref.position;
56819
56837
 
56820
56838
  var _a;
@@ -57042,7 +57060,7 @@ function getLastPositionFromAdaptation(adaptation) {
57042
57060
  * @param {Object} manifest
57043
57061
  * @param {Object} playbackObserver
57044
57062
  * @param {Object} args
57045
- * @returns {Observable}
57063
+ * @returns {Object}
57046
57064
  */
57047
57065
 
57048
57066
  function createStreamPlaybackObserver(manifest, playbackObserver, _ref) {
@@ -57051,10 +57069,24 @@ function createStreamPlaybackObserver(manifest, playbackObserver, _ref) {
57051
57069
  initialSeekPerformed = _ref.initialSeekPerformed,
57052
57070
  speed = _ref.speed,
57053
57071
  startTime = _ref.startTime;
57054
- return playbackObserver.deriveReadOnlyObserver(function mapObservable(observation$) {
57055
- return combineLatest([observation$, speed.asObservable()]).pipe((0,map/* map */.U)(function (_ref2) {
57056
- var observation = _ref2[0],
57057
- lastSpeed = _ref2[1];
57072
+ return playbackObserver.deriveReadOnlyObserver(function transform(observationRef, cancellationSignal) {
57073
+ var newRef = (0,reference/* default */.ZP)(constructStreamPlaybackObservation());
57074
+ speed.onUpdate(emitStreamPlaybackObservation, {
57075
+ clearSignal: cancellationSignal,
57076
+ emitCurrentValue: false
57077
+ });
57078
+ observationRef.onUpdate(emitStreamPlaybackObservation, {
57079
+ clearSignal: cancellationSignal,
57080
+ emitCurrentValue: false
57081
+ });
57082
+ cancellationSignal.register(function () {
57083
+ newRef.finish();
57084
+ });
57085
+ return newRef;
57086
+
57087
+ function constructStreamPlaybackObservation() {
57088
+ var observation = observationRef.getValue();
57089
+ var lastSpeed = speed.getValue();
57058
57090
  var pendingPosition;
57059
57091
 
57060
57092
  if (!initialSeekPerformed.getValue()) {
@@ -57088,7 +57120,11 @@ function createStreamPlaybackObserver(manifest, playbackObserver, _ref) {
57088
57120
  readyState: observation.readyState,
57089
57121
  speed: lastSpeed
57090
57122
  };
57091
- }));
57123
+ }
57124
+
57125
+ function emitStreamPlaybackObservation() {
57126
+ newRef.setValue(constructStreamPlaybackObservation());
57127
+ }
57092
57128
  });
57093
57129
  }
57094
57130
  // EXTERNAL MODULE: ./src/core/init/emit_loaded_event.ts + 1 modules
@@ -57478,7 +57514,7 @@ function areSourceBuffersUpdating$(sourceBuffers) {
57478
57514
  return true;
57479
57515
  })), (0,fromEvent/* fromEvent */.R)(sourceBuffer, "update").pipe((0,map/* map */.U)(function () {
57480
57516
  return false;
57481
- })), (0,observable_interval/* interval */.F)(500).pipe((0,map/* map */.U)(function () {
57517
+ })), (0,interval/* interval */.F)(500).pipe((0,map/* map */.U)(function () {
57482
57518
  return sourceBuffer.updating;
57483
57519
  }))).pipe((0,startWith/* startWith */.O)(sourceBuffer.updating), (0,distinctUntilChanged/* distinctUntilChanged */.x)()));
57484
57520
  };
@@ -57773,7 +57809,7 @@ function streamEventsEmitter(manifest, mediaElement, observation$) {
57773
57809
  var _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(),
57774
57810
  STREAM_EVENT_EMITTER_POLL_INTERVAL = _config$getCurrent.STREAM_EVENT_EMITTER_POLL_INTERVAL;
57775
57811
 
57776
- return combineLatest([(0,observable_interval/* interval */.F)(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe((0,startWith/* startWith */.O)(null)), observation$]).pipe((0,map/* map */.U)(function (_ref) {
57812
+ return combineLatest([(0,interval/* interval */.F)(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe((0,startWith/* startWith */.O)(null)), observation$]).pipe((0,map/* map */.U)(function (_ref) {
57777
57813
  var _ = _ref[0],
57778
57814
  observation = _ref[1];
57779
57815
  var seeking = observation.seeking;
@@ -57891,7 +57927,7 @@ function createMediaSourceLoader(_ref) {
57891
57927
  initialPlayPerformed = _initialSeekAndPlay.initialPlayPerformed,
57892
57928
  initialSeekPerformed = _initialSeekAndPlay.initialSeekPerformed;
57893
57929
 
57894
- var observation$ = playbackObserver.observe(true);
57930
+ var observation$ = playbackObserver.getReference().asObservable();
57895
57931
  var streamEvents$ = initialPlayPerformed.asObservable().pipe((0,filter/* filter */.h)(function (hasPlayed) {
57896
57932
  return hasPlayed;
57897
57933
  }), (0,mergeMap/* mergeMap */.z)(function () {
@@ -59218,12 +59254,6 @@ function parseLoadVideoOptions(options) {
59218
59254
  }
59219
59255
 
59220
59256
 
59221
- ;// CONCATENATED MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/skip.js
59222
-
59223
- function skip(count) {
59224
- return (0,filter/* filter */.h)(function (_, index) { return count <= index; });
59225
- }
59226
- //# sourceMappingURL=skip.js.map
59227
59257
  ;// CONCATENATED MODULE: ./src/core/api/playback_observer.ts
59228
59258
  /**
59229
59259
  * Copyright 2015 CANAL+ Group
@@ -59246,6 +59276,7 @@ function skip(count) {
59246
59276
 
59247
59277
 
59248
59278
 
59279
+
59249
59280
  /**
59250
59281
  * HTMLMediaElement Events for which playback observations are calculated and
59251
59282
  * emitted.
@@ -59269,6 +59300,12 @@ var SCANNED_MEDIA_ELEMENTS_EVENTS = ["canplay", "ended", "play", "pause", "seeki
59269
59300
 
59270
59301
  var PlaybackObserver = /*#__PURE__*/function () {
59271
59302
  /**
59303
+ * Create a new `PlaybackObserver`, which allows to produce new "playback
59304
+ * observations" on various media events and intervals.
59305
+ *
59306
+ * Note that creating a `PlaybackObserver` lead to the usage of resources,
59307
+ * such as event listeners which will only be freed once the `stop` method is
59308
+ * called.
59272
59309
  * @param {HTMLMediaElement} mediaElement
59273
59310
  * @param {Object} options
59274
59311
  */
@@ -59277,18 +59314,33 @@ var PlaybackObserver = /*#__PURE__*/function () {
59277
59314
  this._mediaElement = mediaElement;
59278
59315
  this._withMediaSource = options.withMediaSource;
59279
59316
  this._lowLatencyMode = options.lowLatencyMode;
59280
- this._lastObservation = null;
59281
- this._observation$ = null;
59317
+ this._canceller = new task_canceller/* default */.ZP();
59318
+ this._observationRef = this._createSharedReference();
59282
59319
  }
59283
59320
  /**
59284
- * Returns the current position advertised by the `HTMLMediaElement`, in
59285
- * seconds.
59286
- * @returns {number}
59321
+ * Stop the `PlaybackObserver` from emitting playback observations and free all
59322
+ * resources reserved to emitting them such as event listeners, intervals and
59323
+ * subscribing callbacks.
59324
+ *
59325
+ * Once `stop` is called, no new playback observation will ever be emitted.
59326
+ *
59327
+ * Note that it is important to call stop once the `PlaybackObserver` is no
59328
+ * more needed to avoid unnecessarily leaking resources.
59287
59329
  */
59288
59330
 
59289
59331
 
59290
59332
  var _proto = PlaybackObserver.prototype;
59291
59333
 
59334
+ _proto.stop = function stop() {
59335
+ this._canceller.cancel();
59336
+ }
59337
+ /**
59338
+ * Returns the current position advertised by the `HTMLMediaElement`, in
59339
+ * seconds.
59340
+ * @returns {number}
59341
+ */
59342
+ ;
59343
+
59292
59344
  _proto.getCurrentTime = function getCurrentTime() {
59293
59345
  return this._mediaElement.currentTime;
59294
59346
  }
@@ -59330,31 +59382,19 @@ var PlaybackObserver = /*#__PURE__*/function () {
59330
59382
  return this._mediaElement.readyState;
59331
59383
  }
59332
59384
  /**
59333
- * Returns an Observable regularly emitting playback observation, optionally
59334
- * starting with the last one.
59385
+ * Returns an `IReadOnlySharedReference` storing the last playback observation
59386
+ * produced by the `PlaybackObserver` and updated each time a new one is
59387
+ * produced.
59335
59388
  *
59336
- * Note that this Observable is shared and unique, so that multiple `observe`
59337
- * call will return the exact same Observable and multiple concurrent
59338
- * `subscribe` will receive the same events at the same time.
59339
- * This was done for performance and simplicity reasons.
59389
+ * This value can then be for example subscribed to to be notified of future
59390
+ * playback observations.
59340
59391
  *
59341
- * @param {boolean} includeLastObservation
59342
- * @returns {Observable}
59392
+ * @returns {Object}
59343
59393
  */
59344
59394
  ;
59345
59395
 
59346
- _proto.observe = function observe(includeLastObservation) {
59347
- var _this = this;
59348
-
59349
- return (0,defer/* defer */.P)(function () {
59350
- if (_this._observation$ === null || _this._lastObservation === null) {
59351
- _this._lastObservation = _this._generateInitialObservation();
59352
- _this._observation$ = _this._createInnerObservable().pipe((0,share/* share */.B)());
59353
- return _this.observe(includeLastObservation);
59354
- } else {
59355
- return includeLastObservation ? _this._observation$.pipe((0,startWith/* startWith */.O)(_this._lastObservation)) : _this._observation$;
59356
- }
59357
- });
59396
+ _proto.getReference = function getReference() {
59397
+ return this._observationRef;
59358
59398
  }
59359
59399
  /**
59360
59400
  * Register a callback so it regularly receives playback observations.
@@ -59364,25 +59404,20 @@ var PlaybackObserver = /*#__PURE__*/function () {
59364
59404
  * be first emitted synchronously.
59365
59405
  * - `clearSignal`: If set, the callback will be unregistered when this
59366
59406
  * CancellationSignal emits.
59367
- * @returns {Function} - Allows to easily unregister the callback
59368
59407
  */
59369
59408
  ;
59370
59409
 
59371
59410
  _proto.listen = function listen(cb, options) {
59372
- var _a, _b, _c, _d;
59411
+ var _a;
59373
59412
 
59374
- if (((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
59413
+ if (this._canceller.isUsed || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
59375
59414
  return noop/* default */.Z;
59376
59415
  }
59377
59416
 
59378
- var sub = this.observe((_b = options === null || options === void 0 ? void 0 : options.includeLastObservation) !== null && _b !== void 0 ? _b : false).subscribe(cb);
59379
- var unregister = (_d = (_c = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _c === void 0 ? void 0 : _c.register(function () {
59380
- sub.unsubscribe();
59381
- })) !== null && _d !== void 0 ? _d : noop/* default */.Z;
59382
- return function () {
59383
- unregister();
59384
- sub.unsubscribe();
59385
- };
59417
+ this._observationRef.onUpdate(cb, {
59418
+ clearSignal: options === null || options === void 0 ? void 0 : options.clearSignal,
59419
+ emitCurrentValue: options === null || options === void 0 ? void 0 : options.includeLastObservation
59420
+ });
59386
59421
  }
59387
59422
  /**
59388
59423
  * Generate a new playback observer which can listen to other
@@ -59395,82 +59430,113 @@ var PlaybackObserver = /*#__PURE__*/function () {
59395
59430
  *
59396
59431
  * As argument, this method takes a function which will allow to produce
59397
59432
  * the new set of properties to be present on each observation.
59398
- * @param {Function} mapObservable
59433
+ * @param {Function} transform
59399
59434
  * @returns {Object}
59400
59435
  */
59401
59436
  ;
59402
59437
 
59403
- _proto.deriveReadOnlyObserver = function deriveReadOnlyObserver(mapObservable) {
59404
- return generateReadOnlyObserver(this, mapObservable);
59438
+ _proto.deriveReadOnlyObserver = function deriveReadOnlyObserver(transform) {
59439
+ return generateReadOnlyObserver(this, transform, this._canceller.signal);
59405
59440
  }
59406
59441
  /**
59407
- * Creates the observable that will generate playback observations.
59442
+ * Creates the `IReadOnlySharedReference` that will generate playback
59443
+ * observations.
59408
59444
  * @returns {Observable}
59409
59445
  */
59410
59446
  ;
59411
59447
 
59412
- _proto._createInnerObservable = function _createInnerObservable() {
59413
- var _this2 = this;
59448
+ _proto._createSharedReference = function _createSharedReference() {
59449
+ var _this = this;
59414
59450
 
59415
- return (0,defer/* defer */.P)(function () {
59416
- var _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(),
59417
- SAMPLING_INTERVAL_MEDIASOURCE = _config$getCurrent.SAMPLING_INTERVAL_MEDIASOURCE,
59418
- SAMPLING_INTERVAL_LOW_LATENCY = _config$getCurrent.SAMPLING_INTERVAL_LOW_LATENCY,
59419
- SAMPLING_INTERVAL_NO_MEDIASOURCE = _config$getCurrent.SAMPLING_INTERVAL_NO_MEDIASOURCE;
59451
+ if (this._observationRef !== undefined) {
59452
+ return this._observationRef;
59453
+ }
59420
59454
 
59421
- var getCurrentObservation = function getCurrentObservation(event) {
59422
- var _a;
59455
+ var lastObservation;
59423
59456
 
59424
- var tmpEvt = event;
59457
+ var _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(),
59458
+ SAMPLING_INTERVAL_MEDIASOURCE = _config$getCurrent.SAMPLING_INTERVAL_MEDIASOURCE,
59459
+ SAMPLING_INTERVAL_LOW_LATENCY = _config$getCurrent.SAMPLING_INTERVAL_LOW_LATENCY,
59460
+ SAMPLING_INTERVAL_NO_MEDIASOURCE = _config$getCurrent.SAMPLING_INTERVAL_NO_MEDIASOURCE;
59425
59461
 
59426
- if (tmpEvt === "seeking" && _this2._internalSeekingEventsIncomingCounter > 0) {
59427
- tmpEvt = "internal-seeking";
59428
- _this2._internalSeekingEventsIncomingCounter -= 1;
59429
- }
59462
+ var getCurrentObservation = function getCurrentObservation(event) {
59463
+ var tmpEvt = event;
59430
59464
 
59431
- var lastObservation = (_a = _this2._lastObservation) !== null && _a !== void 0 ? _a : _this2._generateInitialObservation();
59432
- var mediaTimings = getMediaInfos(_this2._mediaElement, tmpEvt);
59433
- var internalSeeking = mediaTimings.seeking && ( // We've just received the event for internally seeking
59434
- tmpEvt === "internal-seeking" || // or We're still waiting on the previous internal-seek
59435
- lastObservation.internalSeeking && tmpEvt !== "seeking");
59436
- var rebufferingStatus = getRebufferingStatus(lastObservation, mediaTimings, {
59437
- lowLatencyMode: _this2._lowLatencyMode,
59438
- withMediaSource: _this2._withMediaSource
59439
- });
59440
- var freezingStatus = getFreezingStatus(lastObservation, mediaTimings);
59441
- var timings = (0,object_assign/* default */.Z)({}, {
59442
- rebuffering: rebufferingStatus,
59443
- freezing: freezingStatus,
59444
- internalSeeking: internalSeeking
59445
- }, mediaTimings);
59465
+ if (tmpEvt === "seeking" && _this._internalSeekingEventsIncomingCounter > 0) {
59466
+ tmpEvt = "internal-seeking";
59467
+ _this._internalSeekingEventsIncomingCounter -= 1;
59468
+ }
59446
59469
 
59447
- if (log/* default.hasLevel */.Z.hasLevel("DEBUG")) {
59448
- log/* default.debug */.Z.debug("API: current media element state tick", "event", timings.event, "position", timings.position, "seeking", timings.seeking, "internalSeeking", timings.internalSeeking, "rebuffering", timings.rebuffering !== null, "freezing", timings.freezing !== null, "ended", timings.ended, "paused", timings.paused, "playbackRate", timings.playbackRate, "readyState", timings.readyState);
59449
- }
59470
+ var _lastObservation = lastObservation !== null && lastObservation !== void 0 ? lastObservation : _this._generateInitialObservation();
59471
+
59472
+ var mediaTimings = getMediaInfos(_this._mediaElement, tmpEvt);
59473
+ var internalSeeking = mediaTimings.seeking && ( // We've just received the event for internally seeking
59474
+ tmpEvt === "internal-seeking" || // or We're still waiting on the previous internal-seek
59475
+ _lastObservation.internalSeeking && tmpEvt !== "seeking");
59476
+ var rebufferingStatus = getRebufferingStatus(_lastObservation, mediaTimings, {
59477
+ lowLatencyMode: _this._lowLatencyMode,
59478
+ withMediaSource: _this._withMediaSource
59479
+ });
59480
+ var freezingStatus = getFreezingStatus(_lastObservation, mediaTimings);
59481
+ var timings = (0,object_assign/* default */.Z)({}, {
59482
+ rebuffering: rebufferingStatus,
59483
+ freezing: freezingStatus,
59484
+ internalSeeking: internalSeeking
59485
+ }, mediaTimings);
59486
+
59487
+ if (log/* default.hasLevel */.Z.hasLevel("DEBUG")) {
59488
+ log/* default.debug */.Z.debug("API: current media element state tick", "event", timings.event, "position", timings.position, "seeking", timings.seeking, "internalSeeking", timings.internalSeeking, "rebuffering", timings.rebuffering !== null, "freezing", timings.freezing !== null, "ended", timings.ended, "paused", timings.paused, "playbackRate", timings.playbackRate, "readyState", timings.readyState);
59489
+ }
59490
+
59491
+ return timings;
59492
+ };
59450
59493
 
59451
- return timings;
59494
+ var returnedSharedReference = (0,reference/* default */.ZP)(getCurrentObservation("init"));
59495
+
59496
+ var generateObservationForEvent = function generateObservationForEvent(event) {
59497
+ var newObservation = getCurrentObservation(event);
59498
+
59499
+ if (log/* default.hasLevel */.Z.hasLevel("DEBUG")) {
59500
+ log/* default.debug */.Z.debug("API: current playback timeline:\n" + prettyPrintBuffered(newObservation.buffered, newObservation.position), "\n" + event);
59501
+ }
59502
+
59503
+ lastObservation = newObservation;
59504
+ returnedSharedReference.setValue(newObservation);
59505
+ };
59506
+
59507
+ var interval = this._lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY : this._withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE : SAMPLING_INTERVAL_NO_MEDIASOURCE;
59508
+ var intervalId = setInterval(onInterval, interval);
59509
+ var removeEventListeners = SCANNED_MEDIA_ELEMENTS_EVENTS.map(function (eventName) {
59510
+ _this._mediaElement.addEventListener(eventName, onMediaEvent);
59511
+
59512
+ function onMediaEvent() {
59513
+ restartInterval();
59514
+ generateObservationForEvent(eventName);
59515
+ }
59516
+
59517
+ return function () {
59518
+ _this._mediaElement.removeEventListener(eventName, onMediaEvent);
59452
59519
  };
59520
+ });
59453
59521
 
59454
- var eventObs = SCANNED_MEDIA_ELEMENTS_EVENTS.map(function (eventName) {
59455
- return (0,fromEvent/* fromEvent */.R)(_this2._mediaElement, eventName).pipe((0,map/* map */.U)(function () {
59456
- return eventName;
59457
- }));
59522
+ this._canceller.signal.register(function () {
59523
+ clearInterval(intervalId);
59524
+ removeEventListeners.forEach(function (cb) {
59525
+ return cb();
59458
59526
  });
59459
- var interval = _this2._lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY : _this2._withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE : SAMPLING_INTERVAL_NO_MEDIASOURCE;
59460
- var interval$ = (0,observable_interval/* interval */.F)(interval).pipe((0,map/* map */.U)(function () {
59461
- return "timeupdate";
59462
- }));
59463
- return merge/* merge.apply */.T.apply(void 0, [interval$].concat(eventObs)).pipe((0,map/* map */.U)(function (event) {
59464
- var newObservation = getCurrentObservation(event);
59527
+ returnedSharedReference.finish();
59528
+ });
59465
59529
 
59466
- if (log/* default.hasLevel */.Z.hasLevel("DEBUG")) {
59467
- log/* default.debug */.Z.debug("API: current playback timeline:\n" + prettyPrintBuffered(newObservation.buffered, newObservation.position), "\n" + event);
59468
- }
59530
+ return returnedSharedReference;
59469
59531
 
59470
- _this2._lastObservation = newObservation;
59471
- return newObservation;
59472
- }));
59473
- });
59532
+ function onInterval() {
59533
+ generateObservationForEvent("timeupdate");
59534
+ }
59535
+
59536
+ function restartInterval() {
59537
+ clearInterval(intervalId);
59538
+ intervalId = setInterval(onInterval, interval);
59539
+ }
59474
59540
  };
59475
59541
 
59476
59542
  _proto._generateInitialObservation = function _generateInitialObservation() {
@@ -59769,18 +59835,13 @@ function prettyPrintBuffered(buffered, currentTime) {
59769
59835
  * Create `IReadOnlyPlaybackObserver` from a source `IReadOnlyPlaybackObserver`
59770
59836
  * and a mapping function.
59771
59837
  * @param {Object} src
59772
- * @param {Function} mapObservable
59838
+ * @param {Function} transform
59773
59839
  * @returns {Object}
59774
59840
  */
59775
59841
 
59776
59842
 
59777
- function generateReadOnlyObserver(src, mapObservable) {
59778
- var newObs = (0,defer/* defer */.P)(function () {
59779
- return mapObservable(src.observe(true));
59780
- }).pipe((0,shareReplay/* shareReplay */.d)({
59781
- bufferSize: 1,
59782
- refCount: true
59783
- }));
59843
+ function generateReadOnlyObserver(src, transform, cancellationSignal) {
59844
+ var mappedRef = transform(src.getReference(), cancellationSignal);
59784
59845
  return {
59785
59846
  getCurrentTime: function getCurrentTime() {
59786
59847
  return src.getCurrentTime();
@@ -59791,28 +59852,23 @@ function generateReadOnlyObserver(src, mapObservable) {
59791
59852
  getIsPaused: function getIsPaused() {
59792
59853
  return src.getIsPaused();
59793
59854
  },
59794
- observe: function observe(includeLastObservation) {
59795
- return includeLastObservation ? newObs : newObs.pipe(skip(1));
59855
+ getReference: function getReference() {
59856
+ return mappedRef;
59796
59857
  },
59797
59858
  listen: function listen(cb, options) {
59798
- var _a, _b, _c;
59859
+ var _a;
59799
59860
 
59800
- if (((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
59801
- return noop/* default */.Z;
59861
+ if (cancellationSignal.isCancelled || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
59862
+ return;
59802
59863
  }
59803
59864
 
59804
- var obs = (options === null || options === void 0 ? void 0 : options.includeLastObservation) === true ? newObs : newObs.pipe(skip(1));
59805
- var sub = obs.subscribe(cb);
59806
- var unregister = (_c = (_b = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _b === void 0 ? void 0 : _b.register(function () {
59807
- sub.unsubscribe();
59808
- })) !== null && _c !== void 0 ? _c : noop/* default */.Z;
59809
- return function () {
59810
- unregister();
59811
- sub.unsubscribe();
59812
- };
59865
+ mappedRef.onUpdate(cb, {
59866
+ clearSignal: options === null || options === void 0 ? void 0 : options.clearSignal,
59867
+ emitCurrentValue: options === null || options === void 0 ? void 0 : options.includeLastObservation
59868
+ });
59813
59869
  },
59814
- deriveReadOnlyObserver: function deriveReadOnlyObserver(newUdateObserver) {
59815
- return generateReadOnlyObserver(this, newUdateObserver);
59870
+ deriveReadOnlyObserver: function deriveReadOnlyObserver(newTransformFn) {
59871
+ return generateReadOnlyObserver(this, newTransformFn, cancellationSignal);
59816
59872
  }
59817
59873
  };
59818
59874
  }
@@ -61240,7 +61296,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
61240
61296
  videoElement.preload = "auto";
61241
61297
  _this.version =
61242
61298
  /* PLAYER_VERSION */
61243
- "3.28.0-dev.2022062300";
61299
+ "3.28.0-dev.2022062700";
61244
61300
  _this.log = log/* default */.Z;
61245
61301
  _this.state = "STOPPED";
61246
61302
  _this.videoElement = videoElement;
@@ -61559,6 +61615,9 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
61559
61615
  withMediaSource: !isDirectFile,
61560
61616
  lowLatencyMode: lowLatencyMode
61561
61617
  });
61618
+ currentContentCanceller.signal.register(function () {
61619
+ playbackObserver.stop();
61620
+ });
61562
61621
  /** Emit playback events. */
61563
61622
 
61564
61623
  var playback$;
@@ -61804,7 +61863,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
61804
61863
  }), (0,share/* share */.B)());
61805
61864
  /** Emit when the media element emits a "seeking" event. */
61806
61865
 
61807
- var observation$ = playbackObserver.observe(true);
61866
+ var observation$ = playbackObserver.getReference().asObservable();
61808
61867
  var stateChangingEvent$ = observation$.pipe((0,filter/* filter */.h)(function (o) {
61809
61868
  return o.event === "seeking" || o.event === "ended" || o.event === "play" || o.event === "pause";
61810
61869
  }));
@@ -63350,9 +63409,12 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
63350
63409
  this._priv_contentEventsMemory = {}; // DRM-related clean-up
63351
63410
 
63352
63411
  var freeUpContentLock = function freeUpContentLock() {
63353
- log/* default.debug */.Z.debug("Unlocking `contentLock`. Next content can begin.");
63412
+ if (_this4.videoElement !== null) {
63413
+ // If not disposed
63414
+ log/* default.debug */.Z.debug("Unlocking `contentLock`. Next content can begin.");
63354
63415
 
63355
- _this4._priv_contentLock.setValue(false);
63416
+ _this4._priv_contentLock.setValue(false);
63417
+ }
63356
63418
  };
63357
63419
 
63358
63420
  if (!(0,is_null_or_undefined/* default */.Z)(this.videoElement)) {
@@ -64055,7 +64117,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
64055
64117
 
64056
64118
  Player.version =
64057
64119
  /* PLAYER_VERSION */
64058
- "3.28.0-dev.2022062300";
64120
+ "3.28.0-dev.2022062700";
64059
64121
  /* harmony default export */ var public_api = (Player);
64060
64122
  ;// CONCATENATED MODULE: ./src/core/api/index.ts
64061
64123
  /**