Estou canalizando quadros YUV444 640x480 brutos para ffmpeg de dentro de um programa C++ usando stdout (formato de tubo: pipe<-Y<-U<-V quadros inteiros cada). ffmpeg os codifica usando h.264 e transmite o vídeo via UDP para um IP de minha escolha.
Quando não estou transmitindo e salvando o vídeo no dispositivo de gravação como arquivo -mp4 com ffmpeg, tudo funciona - Mas quando faço streaming pela rede e tento receber no VLC, o stream é recebido e o cronômetro de reprodução na tela do vídeo é executado ,mas a imagem está preta, nenhum vídeo é exibido.Também tenho alguns sons crepitantes na minha saída de áudio. O vídeo bruto não possui trilha de áudio.
Minhas configurações do ffmpeg são as seguintes:
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
no VLC (GUI), eu apenas uso "open network stream" com udp://@:20001. A porta está aberta, testei-a com um simples remetente/receptor fictício. Quase os mesmos argumentos cli para a gravação de vídeo levam a um vídeo perfeitamente reproduzível ao gravar em um arquivo e baixá-lo:
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
Se eu tentar transmitir o mesmo vídeo gravado usando
ffmpeg -i video.mp4 -v 0 -vcodec mpeg4 -f mpegts udp://192.168.150:20001
Recebo uma tela preta novamente, como acima.
A saída do log do VLC identifica meu stream como mp3, então talvez o reconhecimento do tipo de stream seja o culpado. Mas por que?
Aqui está osaída do console ffmpege aRegistro VLC.
O que estou fazendo de errado?
PS: Movi esta questão do Stack Overflow para cá porque não estava obtendo nenhuma resposta, a duplicata antiga sem resposta foi excluída.
Responder1
Embora o problema subjacente não tenha sido resolvido, as dicas do @Gyans me ajudaram a resolver meu problema. Usar outros players (PotPlayer) ou uma versão mais antiga do VLC fez com que a exibição do stream funcionasse, e isso era tudo que eu precisava.