1

AVPacketavcodec.hファイルのテキストによると、1つで複数のフレームをサポートするデコーダーがいくつかありますが、avcodec_decode_video2メソッドは最初のフレームのみをデコードします...すべてを取得する必要があります。

libavcodecのソースコードでは、パラメータAVPacketがとして認識されてconst AVPacket *avpacketいるため、このパケットデコーダをデコードしている間、AVPacketのフィールドを変更することはできませんが、パケットデータのオフセットを変更したり、すでに受信したデータを削除して、デコーダにパケット内のすべてのフレームをループで読み取らせることはできますか?

4

1 に答える 1

1

私はそれがもう起こることさえできないと思います、しかし基本的にあなたはこのようなことをするでしょう:

while(packet->size > 0)
{
     int ret = avcodec_decode_video2(..., packet);
     if(ret < -1)
        throw std::exception("error");

     packet->size -= ret;
     packet->data += ret;
}

// NOTE! You have to restore original packet->size and packet->data, or modify a copy, before calling av_packet_free.
于 2012-04-04T17:12:29.600 に答える