背景
FFmpeg源码目录中doc/examples下有不少基础例子,搭建一个可以单步调试这些demo的环境相信对深入了解FFmpeg一定能起到事半功倍的效果
编译
examples/README告知了我们如何编译,这里我们选择方法2
笔者的环境是Mac M1,在终端窗口执行
./configure && make -j4 examples
编译产物中带_g的可执行文件是可以用来调试的
如果你是x86_64的架构,想编译arm64的可执行文件,可以执行如下命令
./configure --enable-cross-compile --arch=arm64 --cc='clang -arch arm64' && make -j4 examples
调试
源码调试环境的搭建可以参考编译ffplay并导入IDE断点调试
这里我们以show_metadata.c举例,看看metadata是从哪里获取的
首先可以看到在avformat_open_input后,fmt_ctx上的metadata就已经被填充
通过进一步单步调试,我们发现metadata是在demuxer的reader_header后被填充
因为输入是一个mp4文件,所以会走到mov_read_header
在mov_read_default中,会逐步填充metadata
比如当解析到文件的ftyp时会写入major_brand和minor_version
~~END~~