Estoy tratando de decodificar el flujo h264 de ws-scrcpy cuadro por cuadro para aplicar algunas operaciones de visión por computadora. (ScrCpy es básicamente una aplicación de dispositivo móvil que transmite la pantalla del dispositivo a través de h264. WS-ScrCpy es una aplicación web que puede recibir y mostrar la transmisión en un navegador).
Dado que necesito realizar las operaciones de visión por computadora en el espacio RGB y en un servidor (a través de nodejs), primero necesito convertir marcos de formato YUV a RGB. Dado que las implementaciones solo de JS son lentas, estoy tratando de hacer esto con OpenCV .
Desafortunadamente, los marcos decodificados se ven así:
Esto es lo que hago con más detalle:
Utilizo el decodificador Broadway Acv para decodificar datos (¿NALU? - recibidos a través de websocket) en marcos. Luego uso OpenCV para convertir marcos YUV a RGB.
import Avc from './vendor/Broadway/Decoder' //... this.avc.onPictureDecoded = (buffer: Uint8Array, width: number, height: number) => { const mYUV = new cv.Mat(h + h / 2, w, cv.CV_8UC1, buffer) const mRgb = mYUV.cvtColor(cv.COLOR_YUV420p2BGR) cv.imwrite('./del/test.png', mRgb) }El hecho de que el tamaño de la imagen del objeto Mat resultante sea correcto, me dice que estoy haciendo algo bien. Pero como puede ver, obviamente también hay algo mal.
¿Alguna idea de cuál podría ser el problema?