根据 avcodec.h 文件中的文本,有一些解码器可能支持多帧合一AVPacket
,但avcodec_decode_video2
方法只解码第一帧......我必须得到所有这些。
在 libavcodec 的源代码中,参数 AVPacket 注意到为const AVPacket *avpacket
,因此在解码此数据包解码器时无法更改 AVPacket 的字段,我可以更改数据包数据的偏移量或删除已经接收的数据以使解码器循环读取数据包中的所有帧吗???
我认为这甚至不会再发生了,但基本上你会做这样的事情:
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.