根据avcodec.h文件中的文字,有些解码器可能在一个AVPacket
中支持多个帧,但avcodec_decode_video2
方法仅解码第一帧...我必须得到所有这些。
在libavcodec的源代码中,参数AVPacket注意到const AVPacket *avpacket
,因此在解码此数据包时,解码器无法更改AVPacket的字段,我是否可以更改数据包数据的偏移量或删除已经重新获取的数据以使解码器在循环中读取包中的所有帧???
答案 0 :(得分: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.