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

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 (44) hide show
  1. package/CHANGELOG.md +2 -1
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/compat/event_listeners.js +6 -1
  4. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +1 -6
  5. package/dist/_esm5.processed/core/api/playback_observer.d.ts +47 -35
  6. package/dist/_esm5.processed/core/api/playback_observer.js +120 -117
  7. package/dist/_esm5.processed/core/api/public_api.d.ts +4 -1
  8. package/dist/_esm5.processed/core/api/public_api.js +10 -5
  9. package/dist/_esm5.processed/core/init/content_time_boundaries_observer.js +1 -1
  10. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +1 -1
  11. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +23 -6
  12. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +3 -3
  13. package/dist/_esm5.processed/core/init/initialize_directfile.js +1 -1
  14. package/dist/_esm5.processed/core/init/load_on_media_source.js +1 -1
  15. package/dist/_esm5.processed/core/init/stall_avoider.js +12 -8
  16. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -4
  17. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +1 -1
  18. package/dist/_esm5.processed/core/stream/period/period_stream.js +21 -5
  19. package/dist/_esm5.processed/core/stream/reload_after_switch.js +1 -1
  20. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +1 -1
  21. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +1 -1
  22. package/dist/_esm5.processed/utils/reference.d.ts +2 -2
  23. package/dist/_esm5.processed/utils/reference.js +5 -4
  24. package/dist/rx-player.js +249 -180
  25. package/dist/rx-player.min.js +1 -1
  26. package/package.json +2 -2
  27. package/sonar-project.properties +1 -1
  28. package/src/compat/event_listeners.ts +6 -1
  29. package/src/core/adaptive/adaptive_representation_selector.ts +1 -7
  30. package/src/core/api/playback_observer.ts +185 -173
  31. package/src/core/api/public_api.ts +15 -6
  32. package/src/core/init/content_time_boundaries_observer.ts +1 -1
  33. package/src/core/init/create_stream_playback_observer.ts +69 -47
  34. package/src/core/init/initial_seek_and_play.ts +3 -3
  35. package/src/core/init/initialize_directfile.ts +1 -1
  36. package/src/core/init/load_on_media_source.ts +1 -1
  37. package/src/core/init/stall_avoider.ts +12 -9
  38. package/src/core/stream/orchestrator/stream_orchestrator.ts +5 -4
  39. package/src/core/stream/period/create_empty_adaptation_stream.ts +1 -1
  40. package/src/core/stream/period/period_stream.ts +33 -14
  41. package/src/core/stream/reload_after_switch.ts +1 -1
  42. package/src/core/stream/representation/append_segment_to_buffer.ts +1 -1
  43. package/src/core/stream/representation/representation_stream.ts +1 -1
  44. package/src/utils/reference.ts +7 -5
package/dist/rx-player.js CHANGED
@@ -1981,7 +1981,7 @@ function getDocumentVisibilityRef(stopListening) {
1981
1981
  var hidden = (0,is_non_empty_string/* default */.Z)(prefix) ? prefix + "Hidden" : "hidden";
1982
1982
  var visibilityChangeEvent = (0,is_non_empty_string/* default */.Z)(prefix) ? prefix + "visibilitychange" : "visibilitychange";
1983
1983
  var isHidden = document[hidden];
1984
- var ref = (0,reference/* default */.ZP)(isHidden);
1984
+ var ref = (0,reference/* default */.ZP)(!isHidden);
1985
1985
  addEventListener(document, visibilityChangeEvent, function () {
1986
1986
  var isVisible = !document[hidden];
1987
1987
  ref.setValueIfChanged(isVisible);
@@ -2007,11 +2007,14 @@ function getPageActivityRef(stopListening) {
2007
2007
  var ref = (0,reference/* default */.ZP)(true);
2008
2008
  stopListening.register(function () {
2009
2009
  clearTimeout(currentTimeout);
2010
+ currentTimeout = undefined;
2010
2011
  ref.finish();
2011
2012
  });
2012
2013
  isDocVisibleRef.onUpdate(function onDocVisibilityChange(isVisible) {
2013
2014
  clearTimeout(currentTimeout); // clear potential previous timeout
2014
2015
 
2016
+ currentTimeout = undefined;
2017
+
2015
2018
  if (!isVisible) {
2016
2019
  var _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(),
2017
2020
  INACTIVITY_DELAY = _config$getCurrent.INACTIVITY_DELAY;
@@ -2117,6 +2120,7 @@ function getVideoVisibilityRef(pipStatus, stopListening) {
2117
2120
  var ref = (0,reference/* default */.ZP)(true);
2118
2121
  stopListening.register(function () {
2119
2122
  clearTimeout(currentTimeout);
2123
+ currentTimeout = undefined;
2120
2124
  ref.finish();
2121
2125
  });
2122
2126
  isDocVisibleRef.onUpdate(checkCurrentVisibility, {
@@ -2129,6 +2133,9 @@ function getVideoVisibilityRef(pipStatus, stopListening) {
2129
2133
  return ref;
2130
2134
 
2131
2135
  function checkCurrentVisibility() {
2136
+ clearTimeout(currentTimeout);
2137
+ currentTimeout = undefined;
2138
+
2132
2139
  if (pipStatus.getValue().isEnabled || isDocVisibleRef.getValue()) {
2133
2140
  ref.setValueIfChanged(true);
2134
2141
  } else {
@@ -11035,7 +11042,7 @@ function waitUntilPlayable(observation$) {
11035
11042
  }
11036
11043
  /**
11037
11044
  * Try to play content then handle autoplay errors.
11038
- * @param {HTMLMediaElement} - mediaElement
11045
+ * @param {HTMLMediaElement} mediaElement
11039
11046
  * @returns {Observable}
11040
11047
  */
11041
11048
 
@@ -11078,10 +11085,10 @@ function initialSeekAndPlay(_ref2) {
11078
11085
  }));
11079
11086
  var seekAndPlay$ = seek$.pipe((0,mergeMap/* mergeMap */.z)(function () {
11080
11087
  if (!(0,should_validate_metadata/* default */.Z)() || mediaElement.duration > 0) {
11081
- return waitUntilPlayable(playbackObserver.observe(true));
11088
+ return waitUntilPlayable(playbackObserver.getReference().asObservable());
11082
11089
  } else {
11083
11090
  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)));
11091
+ return waitUntilPlayable(playbackObserver.getReference().asObservable()).pipe((0,startWith/* startWith */.O)(events_generators/* default.warning */.Z.warning(error)));
11085
11092
  }
11086
11093
  }), (0,mergeMap/* mergeMap */.z)(function (evt) {
11087
11094
  if (evt !== undefined) {
@@ -11342,7 +11349,7 @@ function initializeDirectfileContent(_ref) {
11342
11349
  // through a throwing Observable.
11343
11350
 
11344
11351
  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
11352
+ var observation$ = playbackObserver.getReference().asObservable(); // Set the speed set by the user on the media element while pausing a
11346
11353
  // little longer while the buffer is empty.
11347
11354
 
11348
11355
  var playbackRate$ = (0,update_playback_rate/* default */.Z)(mediaElement, speed, observation$).pipe((0,ignoreElements/* ignoreElements */.l)());
@@ -11667,7 +11674,7 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11667
11674
  * order (first ordered by Period's start, then by bufferType in any order.
11668
11675
  */
11669
11676
 
11670
- var discontinuitiesStore$ = discontinuityUpdate$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.observe(true)), (0,scan/* scan */.R)(function (discontinuitiesStore, _ref) {
11677
+ var discontinuitiesStore$ = discontinuityUpdate$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.getReference().asObservable()), (0,scan/* scan */.R)(function (discontinuitiesStore, _ref) {
11671
11678
  var evt = _ref[0],
11672
11679
  observation = _ref[1];
11673
11680
  return updateDiscontinuitiesStore(discontinuitiesStore, evt, observation);
@@ -11705,7 +11712,7 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11705
11712
  * Period handled by that stream to unlock the situation.
11706
11713
  */
11707
11714
 
11708
- var unlock$ = lockedStream$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.observe(true)), (0,tap/* tap */.b)(function (_ref2) {
11715
+ var unlock$ = lockedStream$.pipe((0,withLatestFrom/* withLatestFrom */.M)(playbackObserver.getReference().asObservable()), (0,tap/* tap */.b)(function (_ref2) {
11709
11716
  var lockedStreamEvt = _ref2[0],
11710
11717
  observation = _ref2[1];
11711
11718
 
@@ -11732,7 +11739,7 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11732
11739
 
11733
11740
  /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
11734
11741
  (0,ignoreElements/* ignoreElements */.l)());
11735
- var stall$ = playbackObserver.observe(true).pipe((0,withLatestFrom/* withLatestFrom */.M)(discontinuitiesStore$), (0,map/* map */.U)(function (_ref3) {
11742
+ var stall$ = playbackObserver.getReference().asObservable().pipe((0,withLatestFrom/* withLatestFrom */.M)(discontinuitiesStore$), (0,map/* map */.U)(function (_ref3) {
11736
11743
  var observation = _ref3[0],
11737
11744
  discontinuitiesStore = _ref3[1];
11738
11745
  var buffered = observation.buffered,
@@ -11807,11 +11814,17 @@ function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUp
11807
11814
  ignoredStallTimeStamp = _now;
11808
11815
  }
11809
11816
 
11810
- if (is_seeking_approximate && observation.position < lastSeekingPosition && _now - ignoredStallTimeStamp < FORCE_DISCONTINUITY_SEEK_DELAY) {
11811
- return {
11812
- type: "stalled",
11813
- value: stalledReason
11814
- };
11817
+ if (is_seeking_approximate && observation.position < lastSeekingPosition) {
11818
+ log/* default.debug */.Z.debug("Init: the device appeared to have seeked back by itself.");
11819
+
11820
+ if (_now - ignoredStallTimeStamp < FORCE_DISCONTINUITY_SEEK_DELAY) {
11821
+ return {
11822
+ type: "stalled",
11823
+ value: stalledReason
11824
+ };
11825
+ } else {
11826
+ log/* default.warn */.Z.warn("Init: ignored stall for too long, checking discontinuity", _now - ignoredStallTimeStamp);
11827
+ }
11815
11828
  }
11816
11829
 
11817
11830
  lastSeekingPosition = null;
@@ -41418,9 +41431,9 @@ function createSharedReference(initialValue) {
41418
41431
  */
41419
41432
  setValue: function setValue(newVal) {
41420
41433
  if (isFinished) {
41421
- if (false) {} else {
41422
- return;
41423
- }
41434
+ if (false) {}
41435
+
41436
+ return;
41424
41437
  }
41425
41438
 
41426
41439
  value = newVal;
@@ -41558,10 +41571,14 @@ function createSharedReference(initialValue) {
41558
41571
  if (!cbObj.hasBeenCleared) {
41559
41572
  cbObj.complete();
41560
41573
  }
41574
+
41575
+ cbObj.hasBeenCleared = true;
41561
41576
  } catch (_) {
41562
41577
  /* nothing */
41563
41578
  }
41564
41579
  }
41580
+
41581
+ cbs.length = 0;
41565
41582
  }
41566
41583
  };
41567
41584
  }
@@ -50806,17 +50823,9 @@ function getEstimateReference(_ref, stopAllEstimates) {
50806
50823
  * Only used in very specific scenarios.
50807
50824
  */
50808
50825
 
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?
50826
+ var guessBasedChooser = new GuessBasedChooser(scoreCalculator, prevEstimate); // get initial observation for initial estimate
50819
50827
 
50828
+ var lastPlaybackObservation = playbackObserver.getReference().getValue();
50820
50829
  /** Reference through which estimates are emitted. */
50821
50830
 
50822
50831
  var innerEstimateRef = (0,reference/* default */.ZP)(getCurrentEstimate()); // subscribe to subsequent playback observations
@@ -51337,7 +51346,7 @@ var link_drm_and_content = __webpack_require__(9607);
51337
51346
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/throwError.js
51338
51347
  var throwError = __webpack_require__(3610);
51339
51348
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/interval.js
51340
- var observable_interval = __webpack_require__(6697);
51349
+ var interval = __webpack_require__(6697);
51341
51350
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/tap.js
51342
51351
  var tap = __webpack_require__(2006);
51343
51352
  // EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js
@@ -51462,7 +51471,7 @@ var AudioVideoSegmentBuffer = /*#__PURE__*/function (_SegmentBuffer) {
51462
51471
  // SourceBuffer is currently updating.
51463
51472
 
51464
51473
 
51465
- (0,observable_interval/* interval */.F)(SOURCE_BUFFER_FLUSHING_INTERVAL).pipe((0,tap/* tap */.b)(function () {
51474
+ (0,interval/* interval */.F)(SOURCE_BUFFER_FLUSHING_INTERVAL).pipe((0,tap/* tap */.b)(function () {
51466
51475
  return _this._flush();
51467
51476
  }), (0,takeUntil/* takeUntil */.R)(_this._destroy$)).subscribe();
51468
51477
  (0,fromEvent/* fromEvent */.R)(_this._sourceBuffer, "error").pipe((0,tap/* tap */.b)(function (err) {
@@ -52932,7 +52941,7 @@ function reloadAfterSwitch(period, bufferType, playbackObserver, deltaPos) {
52932
52941
  // It can happen when `reloadAfterSwitch` is called as a side-effect of the
52933
52942
  // same event that triggers the playback observation to be emitted.
52934
52943
  return nextTickObs().pipe((0,mergeMap/* mergeMap */.z)(function () {
52935
- return playbackObserver.observe(true);
52944
+ return playbackObserver.getReference().asObservable();
52936
52945
  }), (0,map/* map */.U)(function (observation) {
52937
52946
  var _a, _b;
52938
52947
 
@@ -54517,7 +54526,7 @@ function appendSegmentToBuffer(playbackObserver, segmentBuffer, dataInfos) {
54517
54526
  throw new media_error/* default */.Z("BUFFER_APPEND_ERROR", reason);
54518
54527
  }
54519
54528
 
54520
- return playbackObserver.observe(true).pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
54529
+ return playbackObserver.getReference().asObservable().pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
54521
54530
  var _a;
54522
54531
 
54523
54532
  var currentPos = (_a = observation.position.pending) !== null && _a !== void 0 ? _a : observation.position.last;
@@ -54798,7 +54807,7 @@ function RepresentationStream(_ref) {
54798
54807
  var queue$ = downloadingQueue.start().pipe((0,mergeMap/* mergeMap */.z)(onQueueEvent));
54799
54808
  /** Observable emitting the stream "status" and filling `lastSegmentQueue`. */
54800
54809
 
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) {
54810
+ 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
54811
  var _ref2$ = _ref2[0],
54803
54812
  observation = _ref2$[0],
54804
54813
  bufferGoal = _ref2$[1],
@@ -55450,7 +55459,7 @@ function createEmptyAdaptationStream(playbackObserver, wantedBufferAhead, buffer
55450
55459
  var period = content.period;
55451
55460
  var hasFinishedLoading = false;
55452
55461
  var wantedBufferAhead$ = wantedBufferAhead.asObservable();
55453
- var observation$ = playbackObserver.observe(true);
55462
+ var observation$ = playbackObserver.getReference().asObservable();
55454
55463
  return combineLatest([observation$, wantedBufferAhead$]).pipe((0,mergeMap/* mergeMap */.z)(function (_ref) {
55455
55464
  var observation = _ref[0],
55456
55465
  wba = _ref[1];
@@ -55840,6 +55849,7 @@ function getFirstSegmentAfterPeriod(inventory, period) {
55840
55849
 
55841
55850
 
55842
55851
 
55852
+
55843
55853
  /**
55844
55854
  * Create single PeriodStream Observable:
55845
55855
  * - Lazily create (or reuse) a SegmentBuffer for the given type.
@@ -56036,16 +56046,30 @@ function getFirstDeclaredMimeType(adaptation) {
56036
56046
 
56037
56047
 
56038
56048
  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)
56049
+ return initialPlaybackObserver.deriveReadOnlyObserver(function transform(observationRef, cancellationSignal) {
56050
+ var newRef = (0,reference/* default */.ZP)(constructAdaptationStreamPlaybackObservation());
56051
+ observationRef.onUpdate(emitAdaptationStreamPlaybackObservation, {
56052
+ clearSignal: cancellationSignal,
56053
+ emitCurrentValue: false
56047
56054
  });
56048
- }
56055
+ cancellationSignal.register(function () {
56056
+ newRef.finish();
56057
+ });
56058
+ return newRef;
56059
+
56060
+ function constructAdaptationStreamPlaybackObservation() {
56061
+ var baseObservation = observationRef.getValue();
56062
+ var buffered = segmentBuffer.getBufferedRanges();
56063
+ var bufferGap = (0,ranges/* getLeftSizeOfRange */.L7)(buffered, baseObservation.position.last);
56064
+ return (0,object_assign/* default */.Z)({}, baseObservation, {
56065
+ bufferGap: bufferGap
56066
+ });
56067
+ }
56068
+
56069
+ function emitAdaptationStreamPlaybackObservation() {
56070
+ newRef.setValue(constructAdaptationStreamPlaybackObservation());
56071
+ }
56072
+ });
56049
56073
  }
56050
56074
  ;// CONCATENATED MODULE: ./src/core/stream/period/index.ts
56051
56075
  /**
@@ -56426,7 +56450,7 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56426
56450
  var defaultMaxAhead = MAXIMUM_MAX_BUFFER_AHEAD[bufferType] != null ? MAXIMUM_MAX_BUFFER_AHEAD[bufferType] : Infinity;
56427
56451
  return BufferGarbageCollector({
56428
56452
  segmentBuffer: segmentBuffer,
56429
- currentTime$: playbackObserver.observe(true).pipe((0,map/* map */.U)(function (o) {
56453
+ currentTime$: playbackObserver.getReference().asObservable().pipe((0,map/* map */.U)(function (o) {
56430
56454
  var _a;
56431
56455
 
56432
56456
  return (_a = o.position.pending) !== null && _a !== void 0 ? _a : o.position.last;
@@ -56544,7 +56568,8 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56544
56568
  // than the ones already considered
56545
56569
 
56546
56570
 
56547
- var restartStreamsWhenOutOfBounds$ = playbackObserver.observe(true).pipe((0,filter_map/* default */.Z)(function (_ref2) {
56571
+ var observation$ = playbackObserver.getReference().asObservable();
56572
+ var restartStreamsWhenOutOfBounds$ = observation$.pipe((0,filter_map/* default */.Z)(function (_ref2) {
56548
56573
  var position = _ref2.position;
56549
56574
 
56550
56575
  var _a, _b;
@@ -56605,7 +56630,7 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56605
56630
  }).concat([// Schedule micro task before checking the last playback observation
56606
56631
  // to reduce the risk of race conditions where the next observation
56607
56632
  // 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) {
56633
+ nextTickObs().pipe((0,ignoreElements/* ignoreElements */.l)()), playbackObserver.getReference().asObservable().pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
56609
56634
  var _a;
56610
56635
 
56611
56636
  var shouldAutoPlay = !((_a = observation.paused.pending) !== null && _a !== void 0 ? _a : playbackObserver.getIsPaused());
@@ -56662,7 +56687,7 @@ function StreamOrchestrator(content, playbackObserver, representationEstimator,
56662
56687
 
56663
56688
  var destroyNextStreams$ = new Subject/* Subject */.x(); // Emits when the current position goes over the end of the current Stream.
56664
56689
 
56665
- var endOfCurrentStream$ = playbackObserver.observe(true).pipe((0,filter/* filter */.h)(function (_ref4) {
56690
+ var endOfCurrentStream$ = playbackObserver.getReference().asObservable().pipe((0,filter/* filter */.h)(function (_ref4) {
56666
56691
  var position = _ref4.position;
56667
56692
 
56668
56693
  var _a;
@@ -56814,7 +56839,7 @@ function ContentTimeBoundariesObserver(manifest, streams, playbackObserver) {
56814
56839
  var maximumPositionCalculator = new MaximumPositionCalculator(manifest); // trigger warnings when the wanted time is before or after the manifest's
56815
56840
  // segments
56816
56841
 
56817
- var outOfManifest$ = playbackObserver.observe(true).pipe((0,filter_map/* default */.Z)(function (_ref) {
56842
+ var outOfManifest$ = playbackObserver.getReference().asObservable().pipe((0,filter_map/* default */.Z)(function (_ref) {
56818
56843
  var position = _ref.position;
56819
56844
 
56820
56845
  var _a;
@@ -57042,7 +57067,7 @@ function getLastPositionFromAdaptation(adaptation) {
57042
57067
  * @param {Object} manifest
57043
57068
  * @param {Object} playbackObserver
57044
57069
  * @param {Object} args
57045
- * @returns {Observable}
57070
+ * @returns {Object}
57046
57071
  */
57047
57072
 
57048
57073
  function createStreamPlaybackObserver(manifest, playbackObserver, _ref) {
@@ -57051,10 +57076,24 @@ function createStreamPlaybackObserver(manifest, playbackObserver, _ref) {
57051
57076
  initialSeekPerformed = _ref.initialSeekPerformed,
57052
57077
  speed = _ref.speed,
57053
57078
  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];
57079
+ return playbackObserver.deriveReadOnlyObserver(function transform(observationRef, cancellationSignal) {
57080
+ var newRef = (0,reference/* default */.ZP)(constructStreamPlaybackObservation());
57081
+ speed.onUpdate(emitStreamPlaybackObservation, {
57082
+ clearSignal: cancellationSignal,
57083
+ emitCurrentValue: false
57084
+ });
57085
+ observationRef.onUpdate(emitStreamPlaybackObservation, {
57086
+ clearSignal: cancellationSignal,
57087
+ emitCurrentValue: false
57088
+ });
57089
+ cancellationSignal.register(function () {
57090
+ newRef.finish();
57091
+ });
57092
+ return newRef;
57093
+
57094
+ function constructStreamPlaybackObservation() {
57095
+ var observation = observationRef.getValue();
57096
+ var lastSpeed = speed.getValue();
57058
57097
  var pendingPosition;
57059
57098
 
57060
57099
  if (!initialSeekPerformed.getValue()) {
@@ -57088,7 +57127,11 @@ function createStreamPlaybackObserver(manifest, playbackObserver, _ref) {
57088
57127
  readyState: observation.readyState,
57089
57128
  speed: lastSpeed
57090
57129
  };
57091
- }));
57130
+ }
57131
+
57132
+ function emitStreamPlaybackObservation() {
57133
+ newRef.setValue(constructStreamPlaybackObservation());
57134
+ }
57092
57135
  });
57093
57136
  }
57094
57137
  // EXTERNAL MODULE: ./src/core/init/emit_loaded_event.ts + 1 modules
@@ -57478,7 +57521,7 @@ function areSourceBuffersUpdating$(sourceBuffers) {
57478
57521
  return true;
57479
57522
  })), (0,fromEvent/* fromEvent */.R)(sourceBuffer, "update").pipe((0,map/* map */.U)(function () {
57480
57523
  return false;
57481
- })), (0,observable_interval/* interval */.F)(500).pipe((0,map/* map */.U)(function () {
57524
+ })), (0,interval/* interval */.F)(500).pipe((0,map/* map */.U)(function () {
57482
57525
  return sourceBuffer.updating;
57483
57526
  }))).pipe((0,startWith/* startWith */.O)(sourceBuffer.updating), (0,distinctUntilChanged/* distinctUntilChanged */.x)()));
57484
57527
  };
@@ -57773,7 +57816,7 @@ function streamEventsEmitter(manifest, mediaElement, observation$) {
57773
57816
  var _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(),
57774
57817
  STREAM_EVENT_EMITTER_POLL_INTERVAL = _config$getCurrent.STREAM_EVENT_EMITTER_POLL_INTERVAL;
57775
57818
 
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) {
57819
+ 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
57820
  var _ = _ref[0],
57778
57821
  observation = _ref[1];
57779
57822
  var seeking = observation.seeking;
@@ -57891,7 +57934,7 @@ function createMediaSourceLoader(_ref) {
57891
57934
  initialPlayPerformed = _initialSeekAndPlay.initialPlayPerformed,
57892
57935
  initialSeekPerformed = _initialSeekAndPlay.initialSeekPerformed;
57893
57936
 
57894
- var observation$ = playbackObserver.observe(true);
57937
+ var observation$ = playbackObserver.getReference().asObservable();
57895
57938
  var streamEvents$ = initialPlayPerformed.asObservable().pipe((0,filter/* filter */.h)(function (hasPlayed) {
57896
57939
  return hasPlayed;
57897
57940
  }), (0,mergeMap/* mergeMap */.z)(function () {
@@ -59218,12 +59261,6 @@ function parseLoadVideoOptions(options) {
59218
59261
  }
59219
59262
 
59220
59263
 
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
59264
  ;// CONCATENATED MODULE: ./src/core/api/playback_observer.ts
59228
59265
  /**
59229
59266
  * Copyright 2015 CANAL+ Group
@@ -59246,6 +59283,7 @@ function skip(count) {
59246
59283
 
59247
59284
 
59248
59285
 
59286
+
59249
59287
  /**
59250
59288
  * HTMLMediaElement Events for which playback observations are calculated and
59251
59289
  * emitted.
@@ -59269,6 +59307,12 @@ var SCANNED_MEDIA_ELEMENTS_EVENTS = ["canplay", "ended", "play", "pause", "seeki
59269
59307
 
59270
59308
  var PlaybackObserver = /*#__PURE__*/function () {
59271
59309
  /**
59310
+ * Create a new `PlaybackObserver`, which allows to produce new "playback
59311
+ * observations" on various media events and intervals.
59312
+ *
59313
+ * Note that creating a `PlaybackObserver` lead to the usage of resources,
59314
+ * such as event listeners which will only be freed once the `stop` method is
59315
+ * called.
59272
59316
  * @param {HTMLMediaElement} mediaElement
59273
59317
  * @param {Object} options
59274
59318
  */
@@ -59277,18 +59321,33 @@ var PlaybackObserver = /*#__PURE__*/function () {
59277
59321
  this._mediaElement = mediaElement;
59278
59322
  this._withMediaSource = options.withMediaSource;
59279
59323
  this._lowLatencyMode = options.lowLatencyMode;
59280
- this._lastObservation = null;
59281
- this._observation$ = null;
59324
+ this._canceller = new task_canceller/* default */.ZP();
59325
+ this._observationRef = this._createSharedReference();
59282
59326
  }
59283
59327
  /**
59284
- * Returns the current position advertised by the `HTMLMediaElement`, in
59285
- * seconds.
59286
- * @returns {number}
59328
+ * Stop the `PlaybackObserver` from emitting playback observations and free all
59329
+ * resources reserved to emitting them such as event listeners, intervals and
59330
+ * subscribing callbacks.
59331
+ *
59332
+ * Once `stop` is called, no new playback observation will ever be emitted.
59333
+ *
59334
+ * Note that it is important to call stop once the `PlaybackObserver` is no
59335
+ * more needed to avoid unnecessarily leaking resources.
59287
59336
  */
59288
59337
 
59289
59338
 
59290
59339
  var _proto = PlaybackObserver.prototype;
59291
59340
 
59341
+ _proto.stop = function stop() {
59342
+ this._canceller.cancel();
59343
+ }
59344
+ /**
59345
+ * Returns the current position advertised by the `HTMLMediaElement`, in
59346
+ * seconds.
59347
+ * @returns {number}
59348
+ */
59349
+ ;
59350
+
59292
59351
  _proto.getCurrentTime = function getCurrentTime() {
59293
59352
  return this._mediaElement.currentTime;
59294
59353
  }
@@ -59330,31 +59389,19 @@ var PlaybackObserver = /*#__PURE__*/function () {
59330
59389
  return this._mediaElement.readyState;
59331
59390
  }
59332
59391
  /**
59333
- * Returns an Observable regularly emitting playback observation, optionally
59334
- * starting with the last one.
59392
+ * Returns an `IReadOnlySharedReference` storing the last playback observation
59393
+ * produced by the `PlaybackObserver` and updated each time a new one is
59394
+ * produced.
59335
59395
  *
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.
59396
+ * This value can then be for example subscribed to to be notified of future
59397
+ * playback observations.
59340
59398
  *
59341
- * @param {boolean} includeLastObservation
59342
- * @returns {Observable}
59399
+ * @returns {Object}
59343
59400
  */
59344
59401
  ;
59345
59402
 
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
- });
59403
+ _proto.getReference = function getReference() {
59404
+ return this._observationRef;
59358
59405
  }
59359
59406
  /**
59360
59407
  * Register a callback so it regularly receives playback observations.
@@ -59364,25 +59411,20 @@ var PlaybackObserver = /*#__PURE__*/function () {
59364
59411
  * be first emitted synchronously.
59365
59412
  * - `clearSignal`: If set, the callback will be unregistered when this
59366
59413
  * CancellationSignal emits.
59367
- * @returns {Function} - Allows to easily unregister the callback
59368
59414
  */
59369
59415
  ;
59370
59416
 
59371
59417
  _proto.listen = function listen(cb, options) {
59372
- var _a, _b, _c, _d;
59418
+ var _a;
59373
59419
 
59374
- if (((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
59420
+ if (this._canceller.isUsed || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
59375
59421
  return noop/* default */.Z;
59376
59422
  }
59377
59423
 
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
- };
59424
+ this._observationRef.onUpdate(cb, {
59425
+ clearSignal: options === null || options === void 0 ? void 0 : options.clearSignal,
59426
+ emitCurrentValue: options === null || options === void 0 ? void 0 : options.includeLastObservation
59427
+ });
59386
59428
  }
59387
59429
  /**
59388
59430
  * Generate a new playback observer which can listen to other
@@ -59395,82 +59437,113 @@ var PlaybackObserver = /*#__PURE__*/function () {
59395
59437
  *
59396
59438
  * As argument, this method takes a function which will allow to produce
59397
59439
  * the new set of properties to be present on each observation.
59398
- * @param {Function} mapObservable
59440
+ * @param {Function} transform
59399
59441
  * @returns {Object}
59400
59442
  */
59401
59443
  ;
59402
59444
 
59403
- _proto.deriveReadOnlyObserver = function deriveReadOnlyObserver(mapObservable) {
59404
- return generateReadOnlyObserver(this, mapObservable);
59445
+ _proto.deriveReadOnlyObserver = function deriveReadOnlyObserver(transform) {
59446
+ return generateReadOnlyObserver(this, transform, this._canceller.signal);
59405
59447
  }
59406
59448
  /**
59407
- * Creates the observable that will generate playback observations.
59449
+ * Creates the `IReadOnlySharedReference` that will generate playback
59450
+ * observations.
59408
59451
  * @returns {Observable}
59409
59452
  */
59410
59453
  ;
59411
59454
 
59412
- _proto._createInnerObservable = function _createInnerObservable() {
59413
- var _this2 = this;
59455
+ _proto._createSharedReference = function _createSharedReference() {
59456
+ var _this = this;
59414
59457
 
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;
59458
+ if (this._observationRef !== undefined) {
59459
+ return this._observationRef;
59460
+ }
59420
59461
 
59421
- var getCurrentObservation = function getCurrentObservation(event) {
59422
- var _a;
59462
+ var lastObservation;
59423
59463
 
59424
- var tmpEvt = event;
59464
+ var _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(),
59465
+ SAMPLING_INTERVAL_MEDIASOURCE = _config$getCurrent.SAMPLING_INTERVAL_MEDIASOURCE,
59466
+ SAMPLING_INTERVAL_LOW_LATENCY = _config$getCurrent.SAMPLING_INTERVAL_LOW_LATENCY,
59467
+ SAMPLING_INTERVAL_NO_MEDIASOURCE = _config$getCurrent.SAMPLING_INTERVAL_NO_MEDIASOURCE;
59425
59468
 
59426
- if (tmpEvt === "seeking" && _this2._internalSeekingEventsIncomingCounter > 0) {
59427
- tmpEvt = "internal-seeking";
59428
- _this2._internalSeekingEventsIncomingCounter -= 1;
59429
- }
59469
+ var getCurrentObservation = function getCurrentObservation(event) {
59470
+ var tmpEvt = event;
59430
59471
 
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);
59472
+ if (tmpEvt === "seeking" && _this._internalSeekingEventsIncomingCounter > 0) {
59473
+ tmpEvt = "internal-seeking";
59474
+ _this._internalSeekingEventsIncomingCounter -= 1;
59475
+ }
59446
59476
 
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
- }
59477
+ var _lastObservation = lastObservation !== null && lastObservation !== void 0 ? lastObservation : _this._generateInitialObservation();
59478
+
59479
+ var mediaTimings = getMediaInfos(_this._mediaElement, tmpEvt);
59480
+ var internalSeeking = mediaTimings.seeking && ( // We've just received the event for internally seeking
59481
+ tmpEvt === "internal-seeking" || // or We're still waiting on the previous internal-seek
59482
+ _lastObservation.internalSeeking && tmpEvt !== "seeking");
59483
+ var rebufferingStatus = getRebufferingStatus(_lastObservation, mediaTimings, {
59484
+ lowLatencyMode: _this._lowLatencyMode,
59485
+ withMediaSource: _this._withMediaSource
59486
+ });
59487
+ var freezingStatus = getFreezingStatus(_lastObservation, mediaTimings);
59488
+ var timings = (0,object_assign/* default */.Z)({}, {
59489
+ rebuffering: rebufferingStatus,
59490
+ freezing: freezingStatus,
59491
+ internalSeeking: internalSeeking
59492
+ }, mediaTimings);
59493
+
59494
+ if (log/* default.hasLevel */.Z.hasLevel("DEBUG")) {
59495
+ 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);
59496
+ }
59497
+
59498
+ return timings;
59499
+ };
59450
59500
 
59451
- return timings;
59501
+ var returnedSharedReference = (0,reference/* default */.ZP)(getCurrentObservation("init"));
59502
+
59503
+ var generateObservationForEvent = function generateObservationForEvent(event) {
59504
+ var newObservation = getCurrentObservation(event);
59505
+
59506
+ if (log/* default.hasLevel */.Z.hasLevel("DEBUG")) {
59507
+ log/* default.debug */.Z.debug("API: current playback timeline:\n" + prettyPrintBuffered(newObservation.buffered, newObservation.position), "\n" + event);
59508
+ }
59509
+
59510
+ lastObservation = newObservation;
59511
+ returnedSharedReference.setValue(newObservation);
59512
+ };
59513
+
59514
+ var interval = this._lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY : this._withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE : SAMPLING_INTERVAL_NO_MEDIASOURCE;
59515
+ var intervalId = setInterval(onInterval, interval);
59516
+ var removeEventListeners = SCANNED_MEDIA_ELEMENTS_EVENTS.map(function (eventName) {
59517
+ _this._mediaElement.addEventListener(eventName, onMediaEvent);
59518
+
59519
+ function onMediaEvent() {
59520
+ restartInterval();
59521
+ generateObservationForEvent(eventName);
59522
+ }
59523
+
59524
+ return function () {
59525
+ _this._mediaElement.removeEventListener(eventName, onMediaEvent);
59452
59526
  };
59527
+ });
59453
59528
 
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
- }));
59529
+ this._canceller.signal.register(function () {
59530
+ clearInterval(intervalId);
59531
+ removeEventListeners.forEach(function (cb) {
59532
+ return cb();
59458
59533
  });
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);
59534
+ returnedSharedReference.finish();
59535
+ });
59465
59536
 
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
- }
59537
+ return returnedSharedReference;
59469
59538
 
59470
- _this2._lastObservation = newObservation;
59471
- return newObservation;
59472
- }));
59473
- });
59539
+ function onInterval() {
59540
+ generateObservationForEvent("timeupdate");
59541
+ }
59542
+
59543
+ function restartInterval() {
59544
+ clearInterval(intervalId);
59545
+ intervalId = setInterval(onInterval, interval);
59546
+ }
59474
59547
  };
59475
59548
 
59476
59549
  _proto._generateInitialObservation = function _generateInitialObservation() {
@@ -59769,18 +59842,13 @@ function prettyPrintBuffered(buffered, currentTime) {
59769
59842
  * Create `IReadOnlyPlaybackObserver` from a source `IReadOnlyPlaybackObserver`
59770
59843
  * and a mapping function.
59771
59844
  * @param {Object} src
59772
- * @param {Function} mapObservable
59845
+ * @param {Function} transform
59773
59846
  * @returns {Object}
59774
59847
  */
59775
59848
 
59776
59849
 
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
- }));
59850
+ function generateReadOnlyObserver(src, transform, cancellationSignal) {
59851
+ var mappedRef = transform(src.getReference(), cancellationSignal);
59784
59852
  return {
59785
59853
  getCurrentTime: function getCurrentTime() {
59786
59854
  return src.getCurrentTime();
@@ -59791,28 +59859,23 @@ function generateReadOnlyObserver(src, mapObservable) {
59791
59859
  getIsPaused: function getIsPaused() {
59792
59860
  return src.getIsPaused();
59793
59861
  },
59794
- observe: function observe(includeLastObservation) {
59795
- return includeLastObservation ? newObs : newObs.pipe(skip(1));
59862
+ getReference: function getReference() {
59863
+ return mappedRef;
59796
59864
  },
59797
59865
  listen: function listen(cb, options) {
59798
- var _a, _b, _c;
59866
+ var _a;
59799
59867
 
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;
59868
+ if (cancellationSignal.isCancelled || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
59869
+ return;
59802
59870
  }
59803
59871
 
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
- };
59872
+ mappedRef.onUpdate(cb, {
59873
+ clearSignal: options === null || options === void 0 ? void 0 : options.clearSignal,
59874
+ emitCurrentValue: options === null || options === void 0 ? void 0 : options.includeLastObservation
59875
+ });
59813
59876
  },
59814
- deriveReadOnlyObserver: function deriveReadOnlyObserver(newUdateObserver) {
59815
- return generateReadOnlyObserver(this, newUdateObserver);
59877
+ deriveReadOnlyObserver: function deriveReadOnlyObserver(newTransformFn) {
59878
+ return generateReadOnlyObserver(this, newTransformFn, cancellationSignal);
59816
59879
  }
59817
59880
  };
59818
59881
  }
@@ -61240,7 +61303,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
61240
61303
  videoElement.preload = "auto";
61241
61304
  _this.version =
61242
61305
  /* PLAYER_VERSION */
61243
- "3.28.0-dev.2022062300";
61306
+ "3.28.0-dev.2022071100";
61244
61307
  _this.log = log/* default */.Z;
61245
61308
  _this.state = "STOPPED";
61246
61309
  _this.videoElement = videoElement;
@@ -61559,6 +61622,9 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
61559
61622
  withMediaSource: !isDirectFile,
61560
61623
  lowLatencyMode: lowLatencyMode
61561
61624
  });
61625
+ currentContentCanceller.signal.register(function () {
61626
+ playbackObserver.stop();
61627
+ });
61562
61628
  /** Emit playback events. */
61563
61629
 
61564
61630
  var playback$;
@@ -61804,7 +61870,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
61804
61870
  }), (0,share/* share */.B)());
61805
61871
  /** Emit when the media element emits a "seeking" event. */
61806
61872
 
61807
- var observation$ = playbackObserver.observe(true);
61873
+ var observation$ = playbackObserver.getReference().asObservable();
61808
61874
  var stateChangingEvent$ = observation$.pipe((0,filter/* filter */.h)(function (o) {
61809
61875
  return o.event === "seeking" || o.event === "ended" || o.event === "play" || o.event === "pause";
61810
61876
  }));
@@ -63350,9 +63416,12 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
63350
63416
  this._priv_contentEventsMemory = {}; // DRM-related clean-up
63351
63417
 
63352
63418
  var freeUpContentLock = function freeUpContentLock() {
63353
- log/* default.debug */.Z.debug("Unlocking `contentLock`. Next content can begin.");
63419
+ if (_this4.videoElement !== null) {
63420
+ // If not disposed
63421
+ log/* default.debug */.Z.debug("Unlocking `contentLock`. Next content can begin.");
63354
63422
 
63355
- _this4._priv_contentLock.setValue(false);
63423
+ _this4._priv_contentLock.setValue(false);
63424
+ }
63356
63425
  };
63357
63426
 
63358
63427
  if (!(0,is_null_or_undefined/* default */.Z)(this.videoElement)) {
@@ -64055,7 +64124,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
64055
64124
 
64056
64125
  Player.version =
64057
64126
  /* PLAYER_VERSION */
64058
- "3.28.0-dev.2022062300";
64127
+ "3.28.0-dev.2022071100";
64059
64128
  /* harmony default export */ var public_api = (Player);
64060
64129
  ;// CONCATENATED MODULE: ./src/core/api/index.ts
64061
64130
  /**