如何把ffmpeg.c封装成静态库—FFmpeg魔改教程
本文的配套视频:https://www.bilibili.com/video/BV14L411h7aR
通过前文《Linux环境编译静态库》 《MSVC编译静态库》,我们知道,静态库,其实就是一些 .o
或者 .obj
文件的集合。而 ffmpeg.exe
命令行就是由下面的几个文件组成的。
ffmpeg.exe
的源代码文件如下:
ffmpeg.c
,这个文件是ffmpeg.exe
命令行的主要逻辑,main 入口函数就在这个文件里定义。ffmpeg_opt.c
,这里的 opt 是 options 的缩写,所以很明显是 处理应用 命令行参数 的文件。ffmpeg_filter.c
,这个文件是配置 ffmpeg 命令行的滤镜逻辑的。cmdutils.c
,这个文件复制解析命令行参数,这是一个通用的文件,被ffmpeg.exe
,ffplay.exe
,ffprobe.exe
共同使用ffmpeg_hw.c
,ffmpeg_qsv.c
,这两个文件是处理硬件加速的,因为硬件加速的函数调用流程 跟 普通的编解码函数流程 有些不同。硬件加速有些额外的东西需要去设置。
如果只是单纯把上面这 5 个文件打包成 静态库,是没有意义的。因为 ffmpeg.c
里面有 main 函数,会跟自己的项目的 main
函数冲突。
即使把 ffmpeg.c
的 main()
函数换个名称,例如换成 ffmpeg_main()
,然后直接引入自己项目,还是有一些问题,如下:
1,ffmpeg.c
里面有不少 全局变量,如果多次调用 ffmpeg_main
,需要对这些全局变量进行处理,重置他们的值。
2,ffmpeg.c
的退出逻辑,默认是退出进程的,所以如果你在 本进程调 ffmpeg_main
,会导致你的本身 业务进程退出。除非你另开一个进程运行 ffmpeg_main
函数,不过这跟直接开进程调 ffmpeg.exe
是没有区别的。
下面是 VIP会员专属 内容,购买后即可查看