From 170ee55bd1f0858fdbad3147a72c0f185d49a9a6 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期四, 10 三月 2022 11:02:01 +0800 Subject: [PATCH] cameraPlayer 添加h265b播放功能 --- src/components/wasmPlayer/wasm/player.js | 108 +++++++++++++++++++++++++++++------------------------ 1 files changed, 59 insertions(+), 49 deletions(-) diff --git a/src/components/wasmPlayer/wasm/player.js b/src/components/wasmPlayer/wasm/player.js index eff828d..787e02c 100644 --- a/src/components/wasmPlayer/wasm/player.js +++ b/src/components/wasmPlayer/wasm/player.js @@ -1,5 +1,5 @@ -import { PCMPlayer } from './pcm-player' -import { WebGLPlayer } from './webgl' +import { PCMPlayer } from "./pcm-player" +import { WebGLPlayer } from "./webgl" export function Player() { this.hPlayer = 0 @@ -10,22 +10,21 @@ this.timeLabel = null this.timeTrack = null this.CurPos = 0 - this.displayDuration = '00:00:00' + 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 -) { +Player.prototype.play = function(url, canvas, isStream, timeTrack, timeLabel, payload) { if (this.hPlayer != 0) return this.MediaName = url @@ -42,60 +41,76 @@ This.seek(This.timeTrack.value) } - this.TurboWorker = new Worker('/libs/wasmPlayer/turbo.js') + 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': { + case "initialized": { This.TurboWorker.postMessage({ - command: 'play', + command: "play", media_name: url, other: isStream, - payload: payload, + payload: payload }) break } - case 'create_video': { + 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.displayDuration = This.formatTime(This.VideoParam.duration / 1000) } This.startTrackTimer() + + This.statusCallback(0) break } - case 'create_audio': { + case "create_audio": { This.AudioParam = evt.data.param //{channel:Channel,sample_rate:SampleRate} This.pcmPlayer = new PCMPlayer({ - encoding: '16bitInt', + encoding: "16bitInt", channels: This.AudioParam.channel, sampleRate: This.AudioParam.sample_rate, - flushingTime: 5000, + flushingTime: 5000 }) + + This.statusCallback(1) break } - case 'deliver_video': { + 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 - ) + This.webglPlayer.renderFrame(evt.data.sample.buf, This.VideoParam.width, This.VideoParam.height) break } - case 'deliver_audio': { + 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 } @@ -105,19 +120,19 @@ Player.prototype.pause = function() { if (this.hPlayer == 0 || this.PlayOrPause == 0) return this.PlayOrPause = 0 - this.TurboWorker.postMessage({ command: 'pause' }) + 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' }) + this.TurboWorker.postMessage({ command: "resume" }) } Player.prototype.stop = function() { if (this.hPlayer == 0) return this.hPlayer = 0 - this.TurboWorker.postMessage({ command: 'stop' }) + this.TurboWorker.postMessage({ command: "stop" }) this.stopTrackTimer() if (this.pcmPlayer) { this.pcmPlayer.destroy() @@ -128,15 +143,15 @@ Player.prototype.seek = function(ms) { if (this.hPlayer == 0) return - this.TurboWorker.postMessage({ command: 'seek', pos: ms }) + this.TurboWorker.postMessage({ command: "seek", pos: ms }) if (this.pcmPlayer != null) { this.pcmPlayer.destroy() this.pcmPlayer = new PCMPlayer({ - encoding: '16bitInt', + encoding: "16bitInt", channels: this.AudioParam.channel, sampleRate: this.AudioParam.sample_rate, - flushingTime: 5000, + flushingTime: 5000 }) } } @@ -145,14 +160,16 @@ 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 + if (This.timeLabel) This.timeLabel.innerHTML = This.formatTime(This.CurPos / 1000) + "/" + This.displayDuration }, 500) } @@ -164,16 +181,9 @@ } 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) + 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 + return h + ":" + m + ":" + s } -- Gitblit v1.8.0