FFmpeg avcodec_send_packet函数说明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg avcodec_send_packet函数说明相关的知识,希望对你有一定的参考价值。
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):无法添加包到内部队列
*/
以上是关于FFmpeg avcodec_send_packet函数说明的主要内容,如果未能解决你的问题,请参考以下文章
Android FFMPEG 开发Android 中执行 FFMPEG 指令 ( mobile-ffmpeg 开源项目介绍 | 集成 mobile-ffmpeg 框架 )