15

mpeg4 ビデオ ストリームのカスタム実装用のビデオ デコーダー (FFMPEG/AVCodec を使用) を作成しています。このビデオ ストリームの特異性は、同じ親に基づいて多くの P フレームを作成する多くの「息子」ストリームに分割できることです。デコードしようとしているビデオ ストリームは、実際には一種の「ビデオ ツリー」です。このようなもの:

I <--P <--P <---------------------P <-------------- P <------------ P
           \ <--P <--P <--P        \ <--P <--P       \ <--P <--P 

1 つのパスをたどることに決めたときに正常に動作する基本的なデコーダーを既に作成しました。問題は、ビデオ ツリー内の複数のパスをたどろうとした場合です。この時点で、デコーダーを「フォーク」して、2 つの異なるビデオ ストリームを追跡する必要があります。分割はキー フレームの後だけでなく、P フレームの後でも発生する可能性があるため、AVCodecContext を複製する必要があります (私は を使用しますavcodec_copy_context) が、クリーン ステータスから新しいデコーダを作成するようです..以前のビデオ ステータスを無視しているようです、したがって、デコードされた P フレームは空のビデオ フレームに「適用」されます。おそらく使用してコンテキストをコピーするavcodec_copy_contextだけでは不十分です...何か提案はありますか? デコーダーのコンテキストと完全なステータスを複製するにはどうすればよいですか? または、参照を使用してストリームをデコードする他の方法はありますか? ありがとう!

4

1 に答える 1

3

ドキュメントによると、「結果の宛先コーデック コンテキストは開かれません。つまり、この AVCodecContext を使用してビデオ/オーディオ データをデコード/エンコードする前に、avcodec_open() を呼び出す必要があります。」

したがって、他のデコーダーにいるポイントに到達するには、ストリームを開いて同じ位置 ( av_seek_frame ) をシークする必要があると思います。

または、後でフォークする必要がある場合に備えて、最初から複数のデコーダーを並行して維持することもできます。これは、並行していくつかのパスのみが必要な場合のオプションになる可能性があります。

または、単一のデコーダーのみを使用し、この場合、たとえば DVD メニュー構造のように、いつでも単一のパスのみを表示する必要がある場合にシークします。

于 2015-04-28T08:44:33.420 に答える