mirror of
https://gitlab.com/futo-org/fcast.git
synced 2025-06-24 21:25:23 +00:00
Reverting stalled player workaround
This commit is contained in:
parent
07a3adab1c
commit
fad2c2bfa2
1 changed files with 0 additions and 69 deletions
|
@ -104,37 +104,6 @@ let lastPlayerUpdateGenerationTime = 0;
|
||||||
let isLive = false;
|
let isLive = false;
|
||||||
let isLivePosition = false;
|
let isLivePosition = false;
|
||||||
|
|
||||||
// Dashjs workaround for playback stalling when captions are enabled and user scrubs video beyond the loaded buffer...
|
|
||||||
let playbackSeeking = false;
|
|
||||||
let lastSeekTimestamp = 0;
|
|
||||||
let lastSeekTime = 0;
|
|
||||||
let bufferStalled = false;
|
|
||||||
|
|
||||||
function stallRecoveryCheck(dashPlayer, value) {
|
|
||||||
// Buffer could have loaded by now, but the player still might be in the stalled state
|
|
||||||
if (playbackSeeking) {
|
|
||||||
const lastSeekDelta = Math.abs(Date.now() - lastSeekTimestamp)
|
|
||||||
|
|
||||||
if (lastSeekDelta < 5000) {
|
|
||||||
console.warn('Possible player stall, waiting 5 seconds after last seek...');
|
|
||||||
window.setTimeout(() => { stallRecoveryCheck(dashPlayer, value); }, 5000 - lastSeekDelta);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
console.warn('Detected player stall, reloading video in attempt to unstall...');
|
|
||||||
dashPlayer.initialize(videoElement, `data:${value.container};base64,` + window.btoa(value.content), true, lastSeekTime);
|
|
||||||
|
|
||||||
playerPrevTime = 0;
|
|
||||||
lastPlayerUpdateGenerationTime = 0;
|
|
||||||
isLive = false;
|
|
||||||
isLivePosition = false;
|
|
||||||
|
|
||||||
playbackSeeking = false;
|
|
||||||
lastSeekTimestamp = 0;
|
|
||||||
lastSeekTime = 0;
|
|
||||||
bufferStalled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.electronAPI.onPlay((_event, value: PlayMessage) => {
|
window.electronAPI.onPlay((_event, value: PlayMessage) => {
|
||||||
console.log("Handle play message renderer", JSON.stringify(value));
|
console.log("Handle play message renderer", JSON.stringify(value));
|
||||||
|
@ -146,11 +115,6 @@ window.electronAPI.onPlay((_event, value: PlayMessage) => {
|
||||||
isLive = false;
|
isLive = false;
|
||||||
isLivePosition = false;
|
isLivePosition = false;
|
||||||
|
|
||||||
playbackSeeking = false;
|
|
||||||
lastSeekTimestamp = 0;
|
|
||||||
lastSeekTime = 0;
|
|
||||||
bufferStalled = false;
|
|
||||||
|
|
||||||
if (player) {
|
if (player) {
|
||||||
if (player.getSource() === value.url) {
|
if (player.getSource() === value.url) {
|
||||||
if (value.time) {
|
if (value.time) {
|
||||||
|
@ -233,39 +197,6 @@ window.electronAPI.onPlay((_event, value: PlayMessage) => {
|
||||||
document.getElementById("subtitle-" + e.cueID)?.remove();
|
document.getElementById("subtitle-" + e.cueID)?.remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Dashjs workaround for playback stalling when captions are enabled and user scrubs video beyond the loaded buffer...
|
|
||||||
dashPlayer.on(dashjs.MediaPlayer.events.BUFFER_LEVEL_STATE_CHANGED, (e: any) => {
|
|
||||||
if (player.isCaptionsSupported()) {
|
|
||||||
if (e.state === 'bufferStalled') {
|
|
||||||
bufferStalled = true;
|
|
||||||
}
|
|
||||||
else if (e.state === 'bufferLoaded') {
|
|
||||||
bufferStalled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (playbackSeeking && bufferStalled) {
|
|
||||||
window.setTimeout(() => { stallRecoveryCheck(dashPlayer, value); }, 5000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
dashPlayer.on(dashjs.MediaPlayer.events.PLAYBACK_SEEKING, (e: any) => {
|
|
||||||
if (player.isCaptionsSupported()) {
|
|
||||||
playbackSeeking = true;
|
|
||||||
lastSeekTimestamp = Date.now();
|
|
||||||
lastSeekTime = e.seekTime;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
dashPlayer.on(dashjs.MediaPlayer.events.PLAYBACK_SEEKED, (e: any) => {
|
|
||||||
if (player.isCaptionsSupported()) {
|
|
||||||
playbackSeeking = false;
|
|
||||||
lastSeekTimestamp = 0;
|
|
||||||
lastSeekTime = 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
dashPlayer.updateSettings({
|
dashPlayer.updateSettings({
|
||||||
// debug: {
|
// debug: {
|
||||||
// logLevel: dashjs.LogLevel.LOG_LEVEL_INFO
|
// logLevel: dashjs.LogLevel.LOG_LEVEL_INFO
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue