C++ 数据包控制
根据avcodec.h文件中的文本,有些解码器可能在一个C++ 数据包控制,c++,ffmpeg,C++,Ffmpeg,根据avcodec.h文件中的文本,有些解码器可能在一个AVPacket中支持多个帧,但avcodec\u decode\u video2方法仅解码第一帧。。。我必须把它们都弄到手 在libavcodec的源代码中,参数AVPacket被注意为const AVPacket*AVPacket,因此在解码此数据包解码器时不能更改AVPacket的字段,我是否可以更改数据包数据的偏移量或删除已经接收到的数据,以使解码器在循环中读取数据包中的所有帧?我认为这种情况不会再发生,但基本上你会这样做: whi
AVPacket
中支持多个帧,但avcodec\u decode\u 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.
while(数据包->大小>0)
{
int ret=avcodec_decode_video2(…,数据包);
如果(ret<-1)
抛出std::异常(“错误”);
数据包->大小-=ret;
数据包->数据+=ret;
}
//注意!在调用av_packet_free之前,您必须恢复原始数据包->大小和数据包->数据,或修改副本。
我认为这种情况不可能再发生了,但基本上你会这样做:
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.
while(数据包->大小>0)
{
int ret=avcodec_decode_video2(…,数据包);
如果(ret<-1)
抛出std::异常(“错误”);
数据包->大小-=ret;
数据包->数据+=ret;
}
//注意!在调用av_packet_free之前,您必须恢复原始数据包->大小和数据包->数据,或修改副本。