6

フラグにAV_PKT_FLAG_KEYを含むパケットをデコードした後、Iフレームを取得することを期待していましたが、代わりにPフレームを取得しました。

に電話した後:

avcodec_decode_video2(codecCtx, frame, &frameFinished, &packet); // mpeg2 video

健全性チェックとして以下を印刷します。

    printf("packet flags: %d picture type: %c\n", packet.flags,
            av_get_picture_type_char(frame->pict_type));

出力を返します:

    packet flags: 1 picture type: P

私が期待していたとき:

    packet flags: 1 picture type: I  

ここで、「1」==AV_PKT_FLAG_KEY。「I」はAV_PICTURE_TYPE_Iを指し、

この動作は正しいですか?(私はMPEG2ビデオをデコードしています)。

4

1 に答える 1

8

ffmpegバグトラッカーから応答がありました:

https://ffmpeg.org/trac/ffmpeg/ticket/2074

コーデックの遅延がないのではないかと思います。通常、出力されるビデオフレームは、送信したばかりのパケットにまったく基づいていません。これはマルチスレッドデコードで特に当てはまりますが、Bフレームがどのように機能するかにより、それがなくても一般的には不可能です。

そして、実際、私は3フレーム後に-> pict_type "picture type"を印刷します。数フレーム後にポップアップし、ちょうど3フレーム後に「遅延」のような「遅延」が発生するIフレームがあります。私の場合、クアッドコアコンピューターを使用しているので、エンコードを行うためにコンピューターの各コアにスレッドが割り当てられている可能性があります。

于 2012-12-28T18:07:58.433 に答える