ffmpeg源码简析之结构总览

本文介绍了FFmpeg源码的主要结构,包括API的变化,如av_find_stream_info()替换为avformat_find_stream_info()。通过一张结构图,详细说明了编码过程中的各个函数角色,如粉红背景的API函数,白色背景的内部函数等,并划分了架构函数、协议处理函数、封装格式处理函数和编解码函数四个区域。同时,列举了不同协议(如File、RTMP、UDP)和封装格式(如FLV、MKV、MPEG2TS)的处理函数,以及编解码器(如HEVC、H.264、VP8、MPEG2)的实现函数。
摘要由CSDN通过智能技术生成

本系列前办部分应该是对雷神和其他资料的总结。感谢雷神,中国音视频技术领域无私的拓荒者传承者,您的博文治学态度令我敬佩,文章使我受益良多

ffmpeg API变更

雷神记录获取媒体信息使用的函数是 av_find_stream_info()。但是较新的版本中,av_find_stream_info() 函数已经无法使用了,取而代之的是 avformat_find_stream_info()。

再比如,早一些的程序中,打开解码器可以使用 avcodec_open(),但是新版本的程序中必须使用 avcodec_open2()。而早期版本的 FFmpeg 中打开媒体的函数 av_open_input_file() 也已经被 avformat_open_input() 所取代。可以看出一些与 libavformat 相关的 av_***() 都变更为了 avformat_***(),这一趋势也说明 FFmpeg 的 API 正在慢慢朝着“名称更加规范”的方向发展。

ffmpeg源码结构图

编码

图片引自雷神,图片较大建议保存为本地文件,然后再查看:

编码原图

函数背景色

函数在图中以方框的形式表现出来。不同的背景色标志了该函数不同的作用:

粉红色背景函数:FFmpeg的API函数。

白色背景的函数:FFmpeg的内部函数。

黄色背景的函数:URLProtocol结构体中的函数,包含了读写各种协议的功能。

绿色背景的函数:AVOutputFormat结构体中的函数,包含了读写各种封装格式的功能。

蓝色背景的函数:AVCodec结构体中的函数,包含了编解码的功能。

区域

整个关系图可以分为以下几个区域:

左边区域——架构函数区域:这些函数并不针对某一特定的视频格式。

右上方黄色区域——协议处理函数区域:不同的协议(RTP,RTMP,FILE)会调用不同的协议处理函数。

右边中间绿色区域——封装格式处理函数区域:不同的封装格式(MKV,FLV,MPEG2TS,AVI)会调用不同的封装格式处理函数。

右边下方蓝色区域——编解码函数区域:不同的编码标准(HEVC,H.264,MPEG2)会调用不同的编解码函数。

箭头线

为了把调用关系表示的更明显,图中的箭头线也使用了不同的颜色:

红色的箭头线:标志了编码的流程。

其他颜色的箭头线:标志了函数之间的调用关系。其中:

调用 URLProtocol 结构体中的函数用黄色箭头线标识;

调用 AVOutputFormat 结构体中的函数用绿色箭头线标识;

调用 AVCodec 结构体中的函数用蓝色箭头线标识。

函数所在的文件

ffmpeg学习资料点击:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值