1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-06-24 21:25:23 +00:00

Receivers: Imporved player error handling

This commit is contained in:
Michael Hollister 2025-06-12 17:18:53 -05:00
parent 331391169f
commit 7182a1b63d
2 changed files with 42 additions and 14 deletions

View file

@ -87,7 +87,7 @@ export class Player {
case PlayerType.Html: {
this.player.src = "";
// this.player.onerror = null;
this.player.onerror = null;
this.player.onloadedmetadata = null;
this.player.ontimeupdate = null;
this.player.onplay = null;

View file

@ -202,13 +202,23 @@ function onPlay(_event, value: PlayMessage) {
}
});
player.dashPlayer.on(dashjs.MediaPlayer.events.ERROR, (data) => { window.targetAPI.sendPlaybackError({
message: `DashJS ERROR: ${JSON.stringify(data)}`
})});
player.dashPlayer.on(dashjs.MediaPlayer.events.ERROR, (data) => {
toast('Media playback error, please close the player and reconnect sender devices if you experience issues', ToastIcon.WARNING);
logger.error('Dash player error:', data);
player.dashPlayer.on(dashjs.MediaPlayer.events.PLAYBACK_ERROR, (data) => { window.targetAPI.sendPlaybackError({
message: `DashJS PLAYBACK_ERROR: ${JSON.stringify(data)}`
})});
window.targetAPI.sendPlaybackError({
message: JSON.stringify(data)
});
});
player.dashPlayer.on(dashjs.MediaPlayer.events.PLAYBACK_ERROR, (data) => {
toast('Media playback error, please close the player and reconnect sender devices if you experience issues', ToastIcon.WARNING);
logger.error('Dash player playback error:', data);
window.targetAPI.sendPlaybackError({
message: JSON.stringify(data)
});
});
player.dashPlayer.on(dashjs.MediaPlayer.events.STREAM_INITIALIZED, () => { onPlayerLoad(value); });
@ -245,10 +255,22 @@ function onPlay(_event, value: PlayMessage) {
});
} else if ((value.container === 'application/vnd.apple.mpegurl' || value.container === 'application/x-mpegURL') && !videoElement.canPlayType(value.container)) {
player.hlsPlayer.on(Hls.Events.ERROR, (eventName, data) => {
window.targetAPI.sendPlaybackError({
message: `HLS player error: ${JSON.stringify(data)}`
});
player.hlsPlayer.on(Hls.Events.ERROR, (_eventName, data) => {
if (data.fatal) {
toast('Media playback error, please close the player and reconnect sender devices if you experience issues', ToastIcon.WARNING);
logger.error('HLS player error:', data);
window.targetAPI.sendPlaybackError({
message: JSON.stringify(data)
});
if (data.type === Hls.ErrorTypes.MEDIA_ERROR) {
player.hlsPlayer.recoverMediaError();
}
}
else {
logger.warn('HLS non-fatal error:', data);
}
});
player.hlsPlayer.on(Hls.Events.LEVEL_LOADED, (eventName, level: LevelLoadedData) => {
@ -263,7 +285,6 @@ function onPlay(_event, value: PlayMessage) {
playerCtrlDuration.style.display = "none";
}
});
}
// Player event handlers
@ -292,8 +313,15 @@ function onPlay(_event, value: PlayMessage) {
}
};
videoElement.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {
logger.error("Player error", {source, lineno, colno, error});
// parameters seem to always be undefined...
// videoElement.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {
videoElement.onerror = () => {
toast('Media playback error, please close the player and reconnect sender devices if you experience issues', ToastIcon.WARNING);
logger.error('Html player error:', { playMessage: value, videoError: videoElement.error });
window.targetAPI.sendPlaybackError({
message: JSON.stringify({ playMessage: value, videoError: videoElement.error })
});
};
videoElement.onloadedmetadata = (ev) => {