Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: auto cancel trickPlay on live as specified #6100

Merged
merged 1 commit into from
Jan 16, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 29 additions & 0 deletions lib/player.js
Original file line number Diff line number Diff line change
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