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