接口变更:
AVStream的codec参数被codecpar参数所替代
AVCodecContext *codec变为AVCodecParameters *codecpar
av_register_all被弃用
添加av_demuxer_iterate()
const AVInputFormat *av_demuxer_iterate(void **opaque);
解码接口变更:
视频解码接口avcodec_decode_video2和avcodec_decode_audio4音频解码deprecated,两个接口做了合并,使用统一的接口。将音视频解码步骤分为两步:
第一步:avcodec_send_packet() 发送编码数据包
第二步:avcodec_receive_frame() 接收解码后数据
函数原型:
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);
参数:
AVCodecContext *avctx:视频解码的上下文,包含解码器。
const AVPacket *avpkt: 编码的音视频帧数据
返回值:
成功返回0
为什么要传递空的avpkt?
这里有一个说明是可以传递NULL,什么情况下需要传递NULL,你平时看一些视频播放器,播放经常会少最后几帧,很多情况就是因为没有处理好缓冲帧的问题,ffmpeg内部会缓冲几帧,要想取出来就需要传递空的AVPacket进去。
函数原型:
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);
参数:
AVCodecContext *avctx:视频解码的上下文,包含解码器。
AVFrame *frame:解码后的视频帧数据。
返回值:
成功返回0
*******空间申请和释放