3

私の C++ アプリケーションは、H.264 RTP ビデオ ストリームを受信します。

現在、ストリームをデコードしてYUVファイルに保存し、後でffmpegを使用して、ファイルをWindows PCでの視聴に適したもの(Mpeg4 AVIなど)に再エンコードします。

H.264 ストリームをデコードして再エンコードすることなく、AVI (または同様の) コンテナーに保存することは可能でしょうか? 視聴するには PC に H.264 デコーダーが必要ですが、はるかに効率的です。

どうすればそれができますか?それをサポートするライブラリはありますか?

4

2 に答える 2

1

プログラムはrtp自体をパイプでつなぐことができますffmpeg-を使用してそれを呼び出すことさえできpopen3()ます。

中間SDPファイルを使用する必要があるようです-名前付きパイプとして作成したファイル、またはtmpfile()アプリケーションが書き込むファイルを指定できると思います-ファイルを中間として使用します。

コマンドラインは次のようになります。

int p[3];
const char* const out_fmt = "avi";
const char* cmd[] = {"ffmpeg","-f",,"-i",temp_sdp_filename,"-vcodec","copy","-f",out_fmt,"-",NULL};
if(-1 == popen3(p,cmd)) ...
// write the rtp that you receive to p[STDIN_FILENO]
// read the avi from p[STDOUT_FILENO]
// read any messages and error text from p[STDERR_FILENO] 

この状況では、ffmpegは、ビデオとオーディオをトランスコードせずにコンテナー(rtpストリームとAVI)を再パッケージ化するのに十分賢いと思います(これは-vcodec copyスイッチです)。したがって、品質が低下することはなく、非常に高速になります。

于 2010-10-18T07:48:01.400 に答える
1

ffmpegの使用は正しいですが、これまでに投稿された回答は私には正しく見えません。

正しいスイッチは次のとおりです。

-vcodec copy
于 2010-10-18T07:52:18.393 に答える