Skip to content

Commit

Permalink
fix: auto cancel trickPlay on live as specified (#6100)
Browse files Browse the repository at this point in the history
Fixes #5944
  • Loading branch information
avelad committed Jan 16, 2024
1 parent c596677 commit 45505b0
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions lib/player.js
Expand Up @@ -550,6 +550,12 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
*/
this.loadEventManager_ = new shaka.util.EventManager();

/**
* For listeners scoped to the lifetime of the loaded content.
* @private {shaka.util.EventManager}
*/
this.trickPlayEventManager_ = new shaka.util.EventManager();

/** @private {shaka.net.NetworkingEngine} */
this.networkingEngine_ = null;

Expand Down Expand Up @@ -848,6 +854,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
this.loadEventManager_.release();
this.loadEventManager_ = null;
}
if (this.trickPlayEventManager_) {
this.trickPlayEventManager_.release();
this.trickPlayEventManager_ = null;
}

this.abrManagerFactory_ = null;
this.config_ = null;
Expand Down Expand Up @@ -1166,6 +1176,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
// element.
if (this.video_) {
this.loadEventManager_.removeAll();
this.trickPlayEventManager_.removeAll();
}

// Stop the variant checker timer
Expand Down Expand Up @@ -3569,6 +3580,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
shaka.log.alwaysWarn('A trick play rate of 0 is unsupported!');
return;
}
this.trickPlayEventManager_.removeAll();

if (this.video_.paused) {
// Our fast forward is implemented with playbackRate and needs the video
Expand All @@ -3582,6 +3594,22 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
this.abrManager_.playbackRateChanged(rate);
this.streamingEngine_.setTrickPlay(Math.abs(rate) > 1);
}
if (this.isLive()) {
this.trickPlayEventManager_.listen(this.video_, 'timeupdate', () => {
const currentTime = this.video_.currentTime;
const seekRange = this.seekRange();
const safeSeekOffset = this.config_.streaming.safeSeekOffset;
if (rate > 0) {
if (currentTime >= seekRange.end) {
this.cancelTrickPlay();
}
} else {
if (currentTime <= (seekRange.start + safeSeekOffset)) {
this.cancelTrickPlay();
}
}
});
}
}

/**
Expand All @@ -3601,6 +3629,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
this.abrManager_.playbackRateChanged(defaultPlaybackRate);
this.streamingEngine_.setTrickPlay(false);
}
this.trickPlayEventManager_.removeAll();
}

/**
Expand Down

0 comments on commit 45505b0

Please sign in to comment.