Estoy canalizando fotogramas YUV444 640x480 sin procesar a ffmpeg desde dentro de un programa C++ usando stdout (formato de tubería: pipe<-Y<-U<-V fotogramas completos cada uno). ffmpeg los codifica usando h.264 y transmite el video a través de UDP a una IP de mi elección.
Cuando no estoy transmitiendo y guardando el video en el dispositivo de grabación como archivo -mp4 con ffmpeg, todo funciona, pero cuando transmito a través de la red e intento recibirlo en VLC, la transmisión se recibe y se ejecuta el temporizador de reproducción debajo de la pantalla de video. ,pero la imagen es negra, no se muestra nada del video.También tengo algunos sonidos crepitantes en mi salida de audio. El vídeo sin editar no tiene pista de audio.
Mi configuración de ffmpeg es la siguiente:
ffmpeg -y -loglevel verbose -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 -f mpegts udp://192.168.150.1:20001
en VLC (GUI), solo uso "flujo de red abierta" con udp://@:20001. El puerto está abierto, lo probé con un remitente/receptor ficticio simple. Casi los mismos argumentos cli para la grabación de video conducen a un video perfectamente reproducible al escribir en un archivo y descargarlo:
ffmpeg -y -loglevel verbose -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 video.mp4
Si intento transmitir el mismo vídeo grabado usando
ffmpeg -i video.mp4 -v 0 -vcodec mpeg4 -f mpegts udp://192.168.150:20001
Vuelvo a aparecer una pantalla negra, como arriba.
La salida del registro de VLC identifica mi transmisión como mp3, por lo que tal vez el culpable sea el reconocimiento del tipo de transmisión. ¿Pero por qué?
Aquí están lossalida de consola ffmpegy elregistro VLC.
¿Qué estoy haciendo mal?
PD: Moví esta pregunta aquí desde Stack Overflow porque no obtuvo ninguna respuesta, se eliminó el antiguo duplicado sin respuesta.
Respuesta1
Si bien el problema subyacente no se resolvió, las sugerencias de @Gyans me ayudaron a resolver mi problema. El uso de otros reproductores (PotPlayer) o una versión anterior de VLC hizo que la pantalla de transmisión funcionara, y eso es todo lo que necesitaba.