Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
Decodificación de video H.264 de h264_v4l2m2m en Raspberry Pi 4

Resumen del problema

Estoy tratando de transmitir video en vivo desde mi Raspberry Pi 4 usando el códec h264_v4l2m2m (HWA). En el extremo receptor, estoy usando el decodificador de Broadway . Para resoluciones más bajas (320x320 a 60 fps), la calidad del video decodificado es buena. Sin embargo, cuando aumento la resolución empiezo a notar un extraño efecto de teselado como en las siguientes capturas:

Efecto de teselado en mayor resolución (960x960)

Probé otros códecs y reproductores (mpeg1video y jsmpeg como decodificador), pero a resoluciones más altas solo el H.264 acelerado por hardware alcanza una velocidad de fotogramas aceptable. Para mi aplicación particular no necesito audio.

Cosas probadas

Estoy ejecutando el siguiente comando para iniciar ffmpeg en un proceso separado:

 ffmpeg -hide_banner -fflags nobuffer -f rawvideo -pixel_format yuv420p -s 960x960 \ -i tcp://127.0.0.1:15000?listen=1 -f h264 -codec:v h264_v4l2m2m -s 960x960 -profile:v 66 \ -level 4.2 -coder 0 -bf 0 -an -b:v 4M tcp://0.0.0.0:15001?listen=1

Luego envío las unidades NAL H.264 usando un WebSocket.

El siguiente fragmento es mi aplicación de ejemplo ajustada para decodificar los marcos recibidos.

 <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>PiCamera H264 Streaming</title> </head> <body> <h1>PiCamera H264 Streaming</h1> <div id='viewer'></div> <script src='Decoder.js'></script> <script src='YUVCanvas.js'></script> <script src='Player.js'></script> <script> // player window.player = new Player({ useWorker: true, webgl: false }) var playerElement = document.getElementById('viewer') playerElement.appendChild(window.player.canvas) // Websocket var wsUri = window.location.protocol.replace(/http/, 'ws') + '//' + window.location.hostname + ':20000' var ws = new WebSocket(wsUri) ws.binaryType = 'arraybuffer' ws.onopen = function (e) { console.log('Client connected') ws.onmessage = function (msg) { // decode stream let data = new Uint8Array(msg.data); console.log(data); window.player.decode(data); } } ws.onclose = function (e) { console.log('Client disconnected') } </script> </body> </html>

Pregunta

¿Qué me estoy perdiendo? ¿Hay alguna opción en ffmpeg, o podría ser que el decodificador no pueda procesar completamente los cuadros recibidos? He intentado varias configuraciones de tasa de bits en vano.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Al final encontré jmuxer que puede reproducir video H.264 en vivo sin ningún problema. Obtuve la pista de esta publicación .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda