Ver Fonte

master: Fixed 修复视频问题

gitboyzcf há 4 meses atrás
pai
commit
38503528f2

+ 5 - 0
src/assets/js/video-lib/GetVideoStreaming.js

@@ -41,6 +41,11 @@ var kSaveBufferSize = 0;
 let Mp4HeardBufferSize = 0;
 
 function WsMessage(event) {
+  if (typeof event.data === 'string') {
+    var DataType = 'Opt';
+    self.postMessage({ DataType, data: event.data });
+    return;
+  }
   const dv = new DataView(event.data);
   const int32Value = dv.getInt32(0, true);
   const type = Number(int32Value);

+ 8 - 12
src/assets/js/video-lib/omnimatrix-video-player.ts

@@ -2,6 +2,7 @@ import { FFmpeg } from '@ffmpeg/ffmpeg';
 import { fetchFile, toBlobURL } from '@ffmpeg/util';
 import { showSaveFilePicker } from 'native-file-system-adapter';
 import workerUrl from '../../../../node_modules/@ffmpeg/ffmpeg/dist/esm/worker.js?worker&url';
+import w from '../../../../../../core/packages/compiler-sfc/__tests__/rewriteDefault.spec';
 
 const ffmpeg = new FFmpeg();
 
@@ -132,13 +133,7 @@ async function UrlStreamSaverDownload(url, fileName) {
  * @param {Function} callback - 画面渲染完成时的回调
  * @returns {Object} 包含两个Web Worker和一个关闭函数的对象
  */
-function useWorker(
-  url,
-  className,
-  device,
-  callback = () => {},
-  cropFullInfo = ''
-) {
+function useWorker(url, className, device, callback = () => {}) {
   let canvas = document.querySelector(className);
   canvas = canvas.transferControlToOffscreen();
   const worker = new Worker(new URL('./worker.js', import.meta.url), {
@@ -156,11 +151,6 @@ function useWorker(
       callback();
     }
   });
-  let DataType = 'Start';
-  worker.postMessage(
-    { DataType, canvas, url, device, cropFullInfo, className },
-    [canvas]
-  );
 
   const WebSocketWork = new Worker(
     new URL('./GetVideoStreaming.js', import.meta.url).href,
@@ -170,6 +160,12 @@ function useWorker(
   );
   WebSocketWork.postMessage({ url });
   WebSocketWork.addEventListener('message', async (message) => {
+    if (message.data.DataType === 'Opt') {
+      worker.postMessage({ DataType: 'Opt', data: message.data.data });
+      let DataType = 'Start';
+      worker.postMessage({ DataType, canvas, url, device, className }, [canvas]);
+    
+    }
     if (message.data.DataType === 'Track') {
       let DataType = 'Track';
       let codec = message.data.track.codec.startsWith('vp08')

+ 6 - 6
src/assets/js/video-lib/renderer_2d.js

@@ -49,15 +49,15 @@ export class Canvas2DRenderer {
   }
   temp = null;
   draw(frame) {
-    if (this.className.includes('part')) {
-      this.canvas.width = frame.displayWidth;
-      this.canvas.height = frame.displayHeight;
-      this.ctx.translate(this.canvas.width / 2, this.canvas.height / 2);
-    } else {
+    // if (this.className.includes('part')) {
+    //   this.canvas.width = frame.displayWidth;
+    //   this.canvas.height = frame.displayHeight;
+    //   this.ctx.translate(this.canvas.width / 2, this.canvas.height / 2);
+    // } else {
       this.canvas.width = this.cropFullInfo.W;
       this.canvas.height = this.cropFullInfo.H;
       this.ctx.translate(this.canvas.width / 2, this.canvas.height / 2);
-    }
+    // }
     switch (this.cropFullInfo.Rotate) {
       case 0:
         this.ctx.rotate(0);

+ 7 - 1
src/assets/js/video-lib/worker.js

@@ -64,12 +64,18 @@ function getShowData() {
 }
 
 var flagPost = 0;
+var cropFullInfo = '';
 // Listen for the start request.
 self.addEventListener('message', (message) => {
-  let { canvas, device, url, type, cropFullInfo, className } = message.data;
+  // console.log(message);
+  
+  let { canvas, device, url, type, className } = message.data;
   if (type === 'jt') {
     self.GetImg = true;
   }
+  if (message.data.DataType === 'Opt') {
+    cropFullInfo = message.data.data;
+  }
   if (message.data.DataType === 'Start') {
     renderer = new Canvas2DRenderer(
       canvas,