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

Backported to v4.3.x
  • Loading branch information
avelad authored and joeyparrish committed Feb 17, 2024
1 parent 8de8ec4 commit 1b08e12
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions lib/player.js
Expand Up @@ -479,6 +479,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 @@ -897,6 +903,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 @@ -1555,6 +1565,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
// be if there was an error and we, by chance, did not have a media element.
if (has.mediaElement) {
this.loadEventManager_.removeAll();
this.trickPlayEventManager_.removeAll();
}

// Stop the variant checker timer
Expand Down Expand Up @@ -3709,6 +3720,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 @@ -3722,6 +3734,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 @@ -3741,6 +3769,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 1b08e12

Please sign in to comment.