mirror of
https://gitlab.com/futo-org/fcast.git
synced 2025-08-03 15:57:01 +00:00
Receivers: Added unified logger module
This commit is contained in:
parent
7f9d7939bc
commit
b24b3f0c55
17 changed files with 351 additions and 117 deletions
|
@ -1,6 +1,8 @@
|
|||
import dashjs from 'modules/dashjs';
|
||||
import Hls from 'modules/hls.js';
|
||||
|
||||
const logger = window.targetAPI.logger;
|
||||
|
||||
export enum PlayerType {
|
||||
Html,
|
||||
Dash,
|
||||
|
@ -26,7 +28,7 @@ export class Player {
|
|||
try {
|
||||
(this.player as dashjs.MediaPlayerClass).destroy();
|
||||
} catch (e) {
|
||||
console.warn("Failed to destroy dash player", e);
|
||||
logger.warn("Failed to destroy dash player", e);
|
||||
}
|
||||
this.player = null;
|
||||
this.playerType = null;
|
||||
|
@ -37,7 +39,7 @@ export class Player {
|
|||
try {
|
||||
this.hlsPlayer.destroy();
|
||||
} catch (e) {
|
||||
console.warn("Failed to destroy hls player", e);
|
||||
logger.warn("Failed to destroy hls player", e);
|
||||
}
|
||||
// fall through
|
||||
|
||||
|
@ -65,7 +67,7 @@ export class Player {
|
|||
}
|
||||
}
|
||||
|
||||
play() { console.log("Player: play"); this.player.play(); }
|
||||
play() { logger.info("Player: play"); this.player.play(); }
|
||||
|
||||
isPaused(): boolean {
|
||||
if (this.playerType === PlayerType.Dash) {
|
||||
|
@ -74,7 +76,7 @@ export class Player {
|
|||
return (this.player as HTMLVideoElement).paused;
|
||||
}
|
||||
}
|
||||
pause() { console.log("Player: pause"); this.player.pause(); }
|
||||
pause() { logger.info("Player: pause"); this.player.pause(); }
|
||||
|
||||
getVolume(): number {
|
||||
if (this.playerType === PlayerType.Dash) {
|
||||
|
@ -84,7 +86,7 @@ export class Player {
|
|||
}
|
||||
}
|
||||
setVolume(value: number) {
|
||||
console.log(`Player: setVolume ${value}`);
|
||||
logger.info(`Player: setVolume ${value}`);
|
||||
const sanitizedVolume = Math.min(1.0, Math.max(0.0, value));
|
||||
|
||||
if (this.playerType === PlayerType.Dash) {
|
||||
|
@ -102,7 +104,7 @@ export class Player {
|
|||
}
|
||||
}
|
||||
setMute(value: boolean) {
|
||||
console.log(`Player: setMute ${value}`);
|
||||
logger.info(`Player: setMute ${value}`);
|
||||
|
||||
if (this.playerType === PlayerType.Dash) {
|
||||
(this.player as dashjs.MediaPlayerClass).setMute(value);
|
||||
|
@ -119,7 +121,7 @@ export class Player {
|
|||
}
|
||||
}
|
||||
setPlaybackRate(value: number) {
|
||||
console.log(`Player: setPlaybackRate ${value}`);
|
||||
logger.info(`Player: setPlaybackRate ${value}`);
|
||||
const sanitizedSpeed = Math.min(16.0, Math.max(0.0, value));
|
||||
|
||||
if (this.playerType === PlayerType.Dash) {
|
||||
|
@ -147,7 +149,7 @@ export class Player {
|
|||
}
|
||||
}
|
||||
setCurrentTime(value: number) {
|
||||
// console.log(`Player: setCurrentTime ${value}`);
|
||||
// logger.info(`Player: setCurrentTime ${value}`);
|
||||
const sanitizedTime = Math.min(this.getDuration(), Math.max(0.0, value));
|
||||
|
||||
if (this.playerType === PlayerType.Dash) {
|
||||
|
|
|
@ -1,7 +1,18 @@
|
|||
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { PlaybackErrorMessage, PlaybackUpdateMessage, VolumeUpdateMessage, Opcode } from 'common/Packets';
|
||||
export {};
|
||||
import { Logger, LoggerType } from 'common/Logger';
|
||||
const logger = new Logger('PlayerWindow', LoggerType.FRONTEND);
|
||||
|
||||
// Cannot directly pass the object to the renderer for some reason...
|
||||
const loggerInterface = {
|
||||
trace: (message?: any, ...optionalParams: any[]) => { logger.trace(message, ...optionalParams); },
|
||||
debug: (message?: any, ...optionalParams: any[]) => { logger.debug(message, ...optionalParams); },
|
||||
info: (message?: any, ...optionalParams: any[]) => { logger.info(message, ...optionalParams); },
|
||||
warn: (message?: any, ...optionalParams: any[]) => { logger.warn(message, ...optionalParams); },
|
||||
error: (message?: any, ...optionalParams: any[]) => { logger.error(message, ...optionalParams); },
|
||||
fatal: (message?: any, ...optionalParams: any[]) => { logger.fatal(message, ...optionalParams); },
|
||||
};
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
|
@ -37,21 +48,22 @@ if (TARGET === 'electron') {
|
|||
onDisconnect: (callback: any) => electronAPI.ipcRenderer.on('disconnect', callback),
|
||||
onPing: (callback: any) => electronAPI.ipcRenderer.on('ping', callback),
|
||||
onPong: (callback: any) => electronAPI.ipcRenderer.on('pong', callback),
|
||||
logger: loggerInterface,
|
||||
});
|
||||
|
||||
// @ts-ignore
|
||||
} else if (TARGET === 'webOS' || TARGET === 'tizenOS') {
|
||||
preloadData = {
|
||||
sendPlaybackErrorCb: () => { console.error('Player: Callback "send_playback_error" not set'); },
|
||||
sendPlaybackUpdateCb: () => { console.error('Player: Callback "send_playback_update" not set'); },
|
||||
sendVolumeUpdateCb: () => { console.error('Player: Callback "send_volume_update" not set'); },
|
||||
// onPlayCb: () => { console.error('Player: Callback "play" not set'); },
|
||||
sendPlaybackErrorCb: () => { logger.error('Player: Callback "send_playback_error" not set'); },
|
||||
sendPlaybackUpdateCb: () => { logger.error('Player: Callback "send_playback_update" not set'); },
|
||||
sendVolumeUpdateCb: () => { logger.error('Player: Callback "send_volume_update" not set'); },
|
||||
// onPlayCb: () => { logger.error('Player: Callback "play" not set'); },
|
||||
onPlayCb: undefined,
|
||||
onPauseCb: () => { console.error('Player: Callback "pause" not set'); },
|
||||
onResumeCb: () => { console.error('Player: Callback "resume" not set'); },
|
||||
onSeekCb: () => { console.error('Player: Callback "onseek" not set'); },
|
||||
onSetVolumeCb: () => { console.error('Player: Callback "setvolume" not set'); },
|
||||
onSetSpeedCb: () => { console.error('Player: Callback "setspeed" not set'); },
|
||||
onPauseCb: () => { logger.error('Player: Callback "pause" not set'); },
|
||||
onResumeCb: () => { logger.error('Player: Callback "resume" not set'); },
|
||||
onSeekCb: () => { logger.error('Player: Callback "onseek" not set'); },
|
||||
onSetVolumeCb: () => { logger.error('Player: Callback "setvolume" not set'); },
|
||||
onSetSpeedCb: () => { logger.error('Player: Callback "setspeed" not set'); },
|
||||
};
|
||||
|
||||
window.targetAPI = {
|
||||
|
@ -64,10 +76,11 @@ if (TARGET === 'electron') {
|
|||
onSeek: (callback: any) => { preloadData.onSeekCb = callback; },
|
||||
onSetVolume: (callback: any) => { preloadData.onSetVolumeCb = callback; },
|
||||
onSetSpeed: (callback: any) => { preloadData.onSetSpeedCb = callback; },
|
||||
logger: loggerInterface,
|
||||
};
|
||||
} else {
|
||||
// @ts-ignore
|
||||
console.log(`Attempting to run FCast player on unsupported target: ${TARGET}`);
|
||||
logger.warn(`Attempting to run FCast player on unsupported target: ${TARGET}`);
|
||||
}
|
||||
|
||||
export {
|
||||
|
|
|
@ -12,6 +12,8 @@ import {
|
|||
captionsLineHeight
|
||||
} from 'src/player/Renderer';
|
||||
|
||||
const logger = window.targetAPI.logger;
|
||||
|
||||
function formatDuration(duration: number) {
|
||||
if (isNaN(duration)) {
|
||||
return '00:00';
|
||||
|
@ -120,7 +122,7 @@ let captionsBaseHeight = 0;
|
|||
let captionsContentHeight = 0;
|
||||
|
||||
function onPlay(_event, value: PlayMessage) {
|
||||
console.log("Handle play message renderer", JSON.stringify(value));
|
||||
logger.info("Handle play message renderer", JSON.stringify(value));
|
||||
const currentVolume = player ? player.getVolume() : null;
|
||||
const currentPlaybackRate = player ? player.getPlaybackRate() : null;
|
||||
|
||||
|
@ -143,7 +145,7 @@ function onPlay(_event, value: PlayMessage) {
|
|||
|
||||
if ((value.url || value.content) && value.container && videoElement) {
|
||||
if (value.container === 'application/dash+xml') {
|
||||
console.log("Loading dash player");
|
||||
logger.info("Loading dash player");
|
||||
const dashPlayer = dashjs.MediaPlayer().create();
|
||||
const source = value.content ? value.content : value.url;
|
||||
player = new Player(PlayerType.Dash, dashPlayer, source);
|
||||
|
@ -236,7 +238,7 @@ function onPlay(_event, value: PlayMessage) {
|
|||
}
|
||||
|
||||
} else if ((value.container === 'application/vnd.apple.mpegurl' || value.container === 'application/x-mpegURL') && !videoElement.canPlayType(value.container)) {
|
||||
console.log("Loading hls player");
|
||||
logger.info("Loading hls player");
|
||||
|
||||
const config = {
|
||||
xhrSetup: function (xhr: XMLHttpRequest) {
|
||||
|
@ -277,7 +279,7 @@ function onPlay(_event, value: PlayMessage) {
|
|||
// hlsPlayer.subtitleDisplay = true;
|
||||
|
||||
} else {
|
||||
console.log("Loading html player");
|
||||
logger.info("Loading html player");
|
||||
player = new Player(PlayerType.Html, videoElement, value.url);
|
||||
|
||||
videoElement.src = value.url;
|
||||
|
@ -307,7 +309,7 @@ function onPlay(_event, value: PlayMessage) {
|
|||
};
|
||||
|
||||
videoElement.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {
|
||||
console.error("Player error", {source, lineno, colno, error});
|
||||
logger.error("Player error", {source, lineno, colno, error});
|
||||
};
|
||||
|
||||
videoElement.onloadedmetadata = (ev) => {
|
||||
|
@ -419,7 +421,7 @@ function playerCtrlStateUpdate(event: PlayerControlEvent) {
|
|||
break;
|
||||
|
||||
case PlayerControlEvent.VolumeChange: {
|
||||
// console.log(`VolumeChange: isMute ${player?.isMuted()}, volume: ${player?.getVolume()}`);
|
||||
// logger.info(`VolumeChange: isMute ${player?.isMuted()}, volume: ${player?.getVolume()}`);
|
||||
const volume = Math.round(player?.getVolume() * playerCtrlVolumeBar.offsetWidth);
|
||||
|
||||
if (player?.isMuted()) {
|
||||
|
@ -440,7 +442,7 @@ function playerCtrlStateUpdate(event: PlayerControlEvent) {
|
|||
}
|
||||
|
||||
case PlayerControlEvent.TimeUpdate: {
|
||||
// console.log(`TimeUpdate: Position: ${player.getCurrentTime()}, Duration: ${player.getDuration()}`);
|
||||
// logger.info(`TimeUpdate: Position: ${player.getCurrentTime()}, Duration: ${player.getDuration()}`);
|
||||
|
||||
if (isLive) {
|
||||
if (isLivePosition && player.getDuration() - player.getCurrentTime() > livePositionWindow) {
|
||||
|
@ -736,7 +738,7 @@ const skipInterval = 10;
|
|||
const volumeIncrement = 0.1;
|
||||
|
||||
function keyDownEventListener(event: any) {
|
||||
// console.log("KeyDown", event);
|
||||
// logger.info("KeyDown", event);
|
||||
const handledCase = targetKeyDownEventListener(event);
|
||||
if (handledCase) {
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue