[汇总]FFMPEG 主要API以及结构体学习

0 前言


本篇博客是一篇汇总性博客,用以记录学习ffmpeg api 源码过程中参考的前人博客(主要是雷神的博客)以及汇总自己跟踪ffmpeg 4.1版本的源码所记录的所思所想。计划2019年7月前追踪完ffmpeg的基础源码,本篇博客也会持续更新到2019年7月。ffmpeg发展速度很快,前人所写博客所对应的api版本已经非常低了,有些api可能已经不存在或者标记为attribute_deprecated,或者实现的方式已经千差万别。比如之前学习源码,必学之首个函数av_register_all()已经被标记为attribute_deprecated,已经不推荐使用了,并且内部代码实现也与之前的版本不一样了。因此,有必要追踪下当前版本的源码(2019年3月21日,ffmpeg4.1),其实这个版本是2018年6月的版本,已经有大半年没有出新的版本了。但是前人的笔记也是个相当重要的参考,本人从今开始,也是先学习雷神的博客,在学习一篇收集一篇的过程中去理解基础概念,整体的流程,设计思想,以期在看4.1版本源码的时候能少些坑,能更快的上手。

正如雷神所说:FFmpeg自带的三个工程:”ffplay, ffmpeg, ffprobe的代码量非常的大,其中包含了成百上千的API;而这些API背后又包含了大量的FFmpeg内部函数。如此一来,要理清楚所有的关系是非常困难,也不是一件实在的事“。因此,做事需要抓主要问题,抓住解码和编码过程中最核心的API进行分析,把握主要脉络,这样就能从整体上去理解ffmpeg,并达到一定的深度。

在写这篇博客的同时,我也在尝试使用ffmpeg当前的api去实现简单的视频播放器,音频播放器等等,并写一两篇入门级的文章,完成后也会在此贴出来以作参考。而以下的API和结构体的介绍顺序与其在播放器中出场的顺序一致,以便有条理的建立逻辑概念和知识梳理。

1 重要的博客收集


1.1  FFMPEG核心API详解


ffmpeg 源代码简单分析 : av_register_all()

ffmpeg 源代码简单分析 : avcodec_register_all()

FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)

FFmpeg源代码简单分析:avformat_open_input() (含init_input以及avio_open函数)

图解FFMPEG打开媒体的函数avformat_open_input

1.1.2 FFMPEG核心结构体


FFMPEG中最关键的结构体之间的关系

FFMPEG结构体分析:AVFormatContext

FFMPEG结构体分析:AVIOContext

FFMPEG结构体分析:AVCodecContext

FFMPEG结构体分析:AVStream

FFMPEG结构体分析:AVCodec

FFMPEG结构体分析:AVPacket

FFMPEG结构体分析:AVFrame

FFmpeg源代码简单分析:结构体成员管理系统-AVClass

FFmpeg源代码简单分析:结构体成员管理系统-AVOption

ffmpeg # AVRational    

FFmpeg结构体彻底分析——AVRational


2 FFMPEG 4.1版本 API与结构体分析


2.1 FFMPEG 4.1 核心API


2.2 FFMPEG 4.1 核心结构体


 

你可能感兴趣的