/* eslint-disable */ import { PCMPlayer } from "./pcm-player"; import { WebGLPlayer } from "./webgl"; export function Player() { this.hPlayer = 0; this.PlayOrPause = 0; this.MediaName = null; this.isStream = false; this.canvas = null; this.timeLabel = null; this.timeTrack = null; this.CurPos = 0; this.displayDuration = "00:00:00"; this.pcmPlayer = null; this.webglPlayer = null; this.trackTimer = null; this.loop = false; this.preload = true; this.preloadFlag = 0; this.statusCallback = (stat) => { console.log(stat); }; } Player.prototype.play = function ( url, canvas, isStream, timeTrack, timeLabel, payload ) { if (this.hPlayer != 0) return; this.MediaName = url; this.isStream = isStream; this.canvas = canvas; //hWnd this.timeTrack = timeTrack; this.timeLabel = timeLabel; var This = this; this.timeTrack.oninput = function () { This.seek(This.timeTrack.value); }; this.TurboWorker = new Worker("/libs/wasmPlayer/turbo.js"); this.hPlayer = 1; this.PlayOrPause = 1; this.TurboWorker.onmessage = function (evt) { switch (evt.data.command) { case "initialized": { This.TurboWorker.postMessage({ command: "play", media_name: url, other: isStream, payload: payload, }); break; } case "create_video": { This.VideoParam = evt.data.param; //{duration:xxx,width:xxx,height:xxx} This.webglPlayer = new WebGLPlayer(This.canvas); if (This.timeTrack) { This.timeTrack.min = 0; This.timeTrack.max = This.VideoParam.duration; This.timeTrack.value = 0; This.displayDuration = This.formatTime( This.VideoParam.duration / 1000 ); } This.startTrackTimer(); This.statusCallback(0); break; } case "create_audio": { This.AudioParam = evt.data.param; //{channel:Channel,sample_rate:SampleRate} This.pcmPlayer = new PCMPlayer({ encoding: "16bitInt", channels: This.AudioParam.channel, sampleRate: This.AudioParam.sample_rate, flushingTime: 5000, }); This.statusCallback(1); break; } case "deliver_video": { if (!This.isStream && This.preload && This.preloadFlag == 0) { This.preloadFlag = 1; This.pause(); This.statusCallback(0); } //sample:{time_stamp:xxx,data:xxx} This.CurPos = evt.data.sample.time_stamp; This.webglPlayer.renderFrame( evt.data.sample.buf, This.VideoParam.width, This.VideoParam.height ); break; } case "deliver_audio": { //sample:{time_stamp:xxx,data:xxx} This.pcmPlayer.play(evt.data.sample.buf); break; } case "play_failed": { This.statusCallback(-1); This.stop(); break; } case "play_end": { if (This.loop) { This.seek(0); } break; } default: return; } }; }; Player.prototype.pause = function () { if (this.hPlayer == 0 || this.PlayOrPause == 0) return; this.PlayOrPause = 0; this.TurboWorker.postMessage({ command: "pause" }); }; Player.prototype.resume = function () { if (this.hPlayer == 0 || this.PlayOrPause == 1) return; this.PlayOrPause = 1; this.TurboWorker.postMessage({ command: "resume" }); }; Player.prototype.stop = function () { if (this.hPlayer == 0) return; this.hPlayer = 0; this.TurboWorker.postMessage({ command: "stop" }); this.stopTrackTimer(); if (this.pcmPlayer) { this.pcmPlayer.destroy(); this.pcmPlayer = null; } //webglPlayer? }; Player.prototype.seek = function (ms) { if (this.hPlayer == 0) return; this.TurboWorker.postMessage({ command: "seek", pos: ms }); if (this.pcmPlayer != null) { this.pcmPlayer.destroy(); this.pcmPlayer = new PCMPlayer({ encoding: "16bitInt", channels: this.AudioParam.channel, sampleRate: this.AudioParam.sample_rate, flushingTime: 5000, }); } }; Player.prototype.fullscreen = function () { if (this.webglPlayer) this.webglPlayer.fullscreen(); }; Player.prototype.exitfullscreen = function () { if (this.webglPlayer) this.webglPlayer.exitfullscreen(); }; Player.prototype.startTrackTimer = function () { var This = this; this.trackTimer = setInterval(function () { if (This.timeTrack) This.timeTrack.value = This.CurPos; if (This.timeLabel) This.timeLabel.innerHTML = This.formatTime(This.CurPos / 1000) + "/" + This.displayDuration; }, 500); }; Player.prototype.stopTrackTimer = function () { if (this.trackTimer != null) { clearInterval(this.trackTimer); this.trackTimer = null; } }; Player.prototype.formatTime = function (s) { var h = Math.floor(s / 3600) < 10 ? "0" + Math.floor(s / 3600) : Math.floor(s / 3600); var m = Math.floor((s / 60) % 60) < 10 ? "0" + Math.floor((s / 60) % 60) : Math.floor((s / 60) % 60); var s = Math.floor(s % 60) < 10 ? "0" + Math.floor(s % 60) : Math.floor(s % 60); return h + ":" + m + ":" + s; };