博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FFmpeg avcodec_send_packet函数说明
阅读量:6977 次
发布时间:2019-06-27

本文共 954 字,大约阅读时间需要 3 分钟。

int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);

/*

brief:支持将裸流数据输出给解码器

在函数内部,会拷贝相关的AVCodecContext结构变量,将这些结构变量应用到解码的每一个包。例如

AVCodecContext.skip_frame参数通知解码器扔掉包含该帧的包

@warning 输入的avpkt-data缓冲区必须大于AV_INPUT_PADDING_SIZE,因为优化的字节流读取器必须一次读取32或者64比特的数据

@warning 不能跟之前的API(例如avcodec_decode_video2)混用,否则会返回不可预知的错误

@note 在将包发送给解码器的时候,AVCodecContext必须已经通过avcodec_open2打开

@参数 avctx 解码上下文

@参数[输入]avpkt 输入AVPakcet.通常情况下,输入数据是一个单一的视频帧或者几个完整的音频帧。调用者保留包的原有属性,解码器不会修改包的内容。解码器可能创建对包的引用。如果包没有引用计数将拷贝一份。跟以往的API不一样,包必须完整的解码出来,如果包含有多个帧,要求多次调用avcodec_recvive_frame,在重新调用该接口之前。输入参数可以为NULL,或者AVPacket的data域设置为NULL或者size域设置为0,表示将刷新所有的包,意味着数据流已经结束了。第一次发送刷新会总会成功,第二次发送刷新包是没有必要的,并且返回AVERROR_EOF,如果解码器缓存了一些帧,返回一个刷新包,将会返回所有的解码包


@返回值 0 表示成功,其他的异常值说明:

AVERROR(EAGAIN):当前不接受输出,必须重新发送

AVERROR_EOF:已经刷新解码器,没有新的包可以被刷新

AVERROR(EINVAL):没有打开解码器,或者这是一个编码器,或者要求刷新

AVERRO(ENOMEN):无法添加包到内部队列


*/

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

你可能感兴趣的文章
Nginx自定义模块编写:根据post参数路由到不同服务器
查看>>
Lamp源码安装
查看>>
Linux0.00内核为什么要自己设置0x80号陷阱门来调用write_char过程?
查看>>
mysql数据库备份、恢复文档
查看>>
在linux上MySQL的三种安装方式
查看>>
cocos2dx 场景的切换
查看>>
Java用for循环Map
查看>>
让你提升命令行效率的 Bash 快捷键
查看>>
Python运维项目中用到的redis经验及数据类型
查看>>
一些要注意的地方
查看>>
android Spinner 例子
查看>>
2013年10月1日C#随机数
查看>>
fastJson结合Nutz.Mapl的进阶应用
查看>>
使用react心得
查看>>
大一新生,你为何逃课?
查看>>
OSC源创会往期图文回顾链接地址收藏
查看>>
快节奏的多人游戏同步 - 示例代码和在线演示
查看>>
【分享】Java的几个重要词语
查看>>
symfony2的配置和welcome界面问题汇总
查看>>
选IDC房时,用脚本截取丢失包和rtt的值作比对
查看>>