【问题标题】:FFmpeg AVPacket controlFFmpeg AVPacket 控件
【发布时间】:2012-04-18 10:27:10
【问题描述】:

根据avcodec.h文件中的文字,有一些解码器可能支持一个AVPacket中的多个帧,但avcodec_decode_video2方法只解码第一帧...我必须全部获得。

在 libavcodec 的源代码中,参数 AVPacket 注意到为const AVPacket *avpacket,因此在解码此数据包解码器时无法更改 AVPacket 的字段,我是否可以更改数据包数据的偏移量或删除已接收的数据以使解码器循环读取所有帧在包里???

【问题讨论】:

    标签: c++ ffmpeg


    【解决方案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.
    

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 2014-07-31
      • 2018-03-27
      • 2023-03-10
      • 2016-02-18
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多