Stdoutを使用してC++プログラム内から生のYUV444640x480フレームをffmpegにパイプしています(パイプ形式:パイプ<-Y <-U <-Vフレーム全体)。 ffmpegはh.264を使用してそれらをエンコードし、UDPを介してビデオを選択したIPにストリーミングします。
Ffmpegを使用してビデオを-mp4ファイルとしてストリーミングおよび記録デバイスに保存していない場合、すべてが機能します-しかし、ネットワーク経由でストリーミングしてVLCで受信しようとすると、ストリームが受信され、ビデオ画面の下の再生タイマーが実行されます、しかし、画像は黒で、ビデオは表示されません。また、オーディオ出力にパチパチという音がします。生のビデオにはオーディオトラックがありません。
私のffmpeg設定は次のとおりです。
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
vLC(GUI)では、udp:// @:20001で「オープンネットワークストリーム」を使用します。ポートが開いているので、単純なダミーの送信側/受信側でテストしました。ビデオ録画のほぼ同じcli引数は、ファイルに書き込んでダウンロードするときに完全に再生可能なビデオにつながります。
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
同じ録画ビデオを使用してストリーミングしようとすると
ffmpeg -i video.mp4 -v 0 -vcodec mpeg4 -f mpegts udp://192.168.150:20001
上記のように、再び黒い画面が表示されます。
VLCログ出力は私のストリームをmp3として識別しているので、おそらくストリームタイプの認識が原因です。しかし、なぜ?
ffmpegコンソール出力 と VLCログ です。
私は何が間違っているのですか?
PS:回答が得られなかったため、この質問をStack Overflowからここに移動しました。古い未回答の重複は、削除されます。
根本的な問題は解決されていませんが、@ Gyansのヒントが問題の解決に役立ちました。他のプレーヤー(PotPlayer)または古いバージョンのVLCを使用すると、ストリームディスプレイが機能するようになり、必要なのはそれだけです。