FFMPEG解码流程

FFMPEG解码流程:

1.注册所有窗口格式和CODEC: av_register_all()

2.打开文件:    avformat_open_input()

3.从文件中提取流信息:    avformat_find_stream_info()

4.穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO/AUDIO: pFormatCtx->streams[i]->codec->codec_type

5.查找对应的解码器:    avcodec_find_decoder()

6.打开编解码器:    avcodec_open2()

7.为编解码帧分配内存:    av_frame_alloc()

8.申请内存存放原始数据:    av_malloc()&avpicture_fill()  or   avpicture_alloc()

9.不停地从码流中提取出帧数据:av_read_frame()

10.判断帧的类型,解码帧成图片,对于视频帧调用:avcodec_decode_video2()

11.解码完成,释放解码器及其他数据结构:avcodec_close()、av_frame_free()

12.关闭输入文件:     avformat_close_input()


基本概念:

编解码器、数据帧、媒体流和窗口是数字媒体处理系统的四个基本概念。

窗口/文件(Container/File):即特定格式的多媒体文件

媒体流(Stream):指时间轴上的一段连续数据,如一段声音数据,一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器

数据帧/数据包(Frame/Packet):通常,一个媒体流由大量的数据帧组成,对于压缩数据,帧对应着编解码器的最小处理单元。通常,分属于不同媒体流的数据帧交错复用于容器中

编解码器:编解码器以帧为单位实现压缩数据和原始数据之间的相互转换。


在FFMPEG中,使用AVFormatContext,AVStream,AVCodecContext,AVCodec及AVPacket等结构来抽象这些基本要素,它们的关系如下图所示:



AVCodecContext:

这是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息,如下列出了部分比较重要的域:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值