ffmpeg视频解码器

1、目录


#################################################

#################################################

2、视频解码知识


#################################################

#################################################


3、VC下FFmpeg开发环境的搭建



测试:因为ffmpeg本身是基于C的,C++调用C时需要添加extern"C",告诉C++这里面调用的是C语言,#define _STDC_CONSTANT_MACROS是ffmpeg规定在C++里面必须加的。


FFmpeg库


#################################################

#################################################


4、FFmpeg解码的函数(流程)

(4.1)解码函数

av_register_all()注册所有组件

avformat_open_input()打开视频流

avformat_find_stream_info()查找视频流信息(宽、高、解码器的类型)

avcodec_find_decoder()找出对应视频的解码器(H264,MPEG2)

avcodec_open2()打开解码器

循环:

每调用一次读取一帧压缩的视频数据(H.264码流),判断是否读到或读到文件末尾就结束退出。能读到会读到AVPacket(结构体)(装的是H.264视频流数据),解码器也就是avco

dec_decode_video2这个函数,生成AVFrame(装的是YUV数据),


(4.2)解码流程


#################################################

#################################################


5、FFmpeg解码的数据结构

(5.1)AV是音频(Audio )和视频(Video )的简称

(5.2)avformatcontext是视频封装格式的上下文,包含视频最外层的信息(处理封装格式)

(5.3)avinputformat结构体指明了文件用什么封装格式(flv,mkv等)。avstream[0]是视频流,avcodeccontext专门处理编解码,avcodec指明了编码器时什么类型的。

avstream[1]是音频流

(5.4)avpacket是解码前存储一帧视频数据的结构体,avframe是解码完后保存的数据结构体



#################################################

#################################################

6、数据结构分析

跟封装格式相关的


编解码相关的


AVPacket是装H.264数据的,而AVFrame是装YUV数据的。


#################################################

#################################################


7、补充小知识


8、练习


9、代码补充


解码前的文件(通过av_read_frame函数从码流中读取一帧H.264的压缩数据,存在packet里面)判断是否为 视频流,把packet的data写入文件里面


输出yuv数据中的y数据


输出yuv数据(U和V宽和高是Y的1/2)


保存参数到文件中(fprintf函数)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值