Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数据包控制_C++_Ffmpeg - Fatal编程技术网

C++ 数据包控制

C++ 数据包控制,c++,ffmpeg,C++,Ffmpeg,根据avcodec.h文件中的文本,有些解码器可能在一个AVPacket中支持多个帧,但avcodec\u decode\u video2方法仅解码第一帧。。。我必须把它们都弄到手 在libavcodec的源代码中,参数AVPacket被注意为const AVPacket*AVPacket,因此在解码此数据包解码器时不能更改AVPacket的字段,我是否可以更改数据包数据的偏移量或删除已经接收到的数据,以使解码器在循环中读取数据包中的所有帧?我认为这种情况不会再发生,但基本上你会这样做: whi

根据avcodec.h文件中的文本,有些解码器可能在一个
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之前,您必须恢复原始数据包->大小和数据包->数据,或修改副本。