FFmepg avcodec_receive_frame函数分析

news/2024/7/10 19:55:28 标签: ffmpeg
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);
/*
brief:从解码器中获取解码的输出数据
*/
@参数 avctx 编码上下文
@参数 frame 这将会指向从解码器分配的一个引用计数的视频或者音频帧(取决于解码类型)
@注意该函数在处理其他事情之前会调用av_frame_unref(frame)

@返回值
0:成功,返回一帧数据
AVERROR(EAGAIN):当前输出无效,用户必须发送新的输入
AVERROR_EOF:解码器已经完全刷新,当前没有多余的帧可以输出
AVERROR(EINVAL):解码器没有被打开,或者它是一个编码器
其他负值:对应其他的解码错误

代码例子
avcodec_send_packet和avcodec_receive_frame调用关系并不一定是一对一的,比如一些音频数据一个AVPacket中包含了1秒钟的音频,调用一次avcodec_send_packet之后,可能需要调用25次 avcodec_receive_frame才能获取全部的解码音频数据,所以要做如下处理:

int re = avcodec_send_packet(codec, pkt);
if (re != 0)
{
    return;
}

while( avcodec_receive_frame(codec, frame) == 0)
{
    //读取到一帧音频或者视频
    //处理解码后音视频 frame
}


根据上面的评论,下面的代码是否有问题,当前只是处理视频帧数据
while(1)
{
     int nRet = avcodec_send_packet(pAVCodecContext, packet);
     if (0 != nRet)    continue;

     if (avcodec_receive_frame(pVideoc->m_pAVCodecContext, pFrame) != 0) continue;
}



参考

http://www.bubuko.com/infodetail-2106896.html





     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/2063583,如需转载请自行联系原作者


http://www.niftyadmin.cn/n/1169682.html

相关文章

基于Xposed hook 实时监测微信消息

本文以微信版本6.7.3为例进行分析有hook, 大部分做微信机器人的话,首先要实时抓取微信的消息,在这里展示三种方式对微信的消息进行hook: 1.基于UI层拉取加载进行监听 2.基于微信dao层调用的保存进行监听 3.基于数据库的插入保存进…

汇编指令大全

汇编指令大全 一、数据传输指令 ─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 汇编指令大全 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,…

像我这样的人,除了写代码,还能干啥?

微信公众号【程序员江湖】 作者黄小斜,斜杠青年,某985硕士,阿里研发工程师,于2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer 个人擅长领域 :自学编程、技术校园招聘、软件工程考研(关注公众号后回…

zooinspector可视化工具

安装git并clone git clone https://gitee.com/yuejuncheng/zooInspector.gitzooInspector目录的build目录下 运行文件 java -jar zookeeper-dev-ZooInspector.jar试了下可以获取到数据

寻 asp下无组件大文件上传 解决方案

寻 asp下无组件大文件上传 解决方案近日使用(优酷网)[url]http://www.youku.com/[/url] 的上传,发现上传速度很快,不知道在asp下如何实现大文件的快速上传?还请开发高手指点。本文转自极光苏键 51CTO博客,原…

[19/06/06-星期四] HTML基础_文本标签、列表(有序、无序、定义)、文本格式化(单位、字体、大小写、文本修饰、间距、对齐文本)...

一、文本标签 em:用来表示一段内容的着重点,语气上的强调。一般显示为斜体 i:是斜体显示,和em显示效果一样。h5规定不需要着重的内容而是单纯加粗或斜体可以用i或b。用的不多 strong:用来表示一个内容的重要性。一般显…

物联网高并发编程之网络编程中的线程模型

如需了解更多物联网网络编程知识请点击:物联网云端开发武器库 物联网高并发编程之网络编程中的线程模型 值得说明的是,具体选择线程还是进程,更多是与平台及编程语言相关。例如 C 语言使用线程和进程都可以(例如 Nginx 使用进程,M…

Zookeeper连接使用—zkCli

这个更详细点 这里主要介绍以命令行的形式介绍Zookeeper 假如我们已经安装了Zookeeper集群,集群中的安装目录都是/opt/zookeeper-3.4.14,集群地址: # 192.168.209.133 test1 # 192.168.209.134 test2 # 192.168.209.135 test3 端口都是默认…