Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

232
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda