如何把ffmpeg.c封装成静态库—FFmpeg魔改教程

本文的配套视频:https://www.bilibili.com/video/BV14L411h7aR

通过前文《Linux环境编译静态库》 《MSVC编译静态库》,我们知道,静态库,其实就是一些 .o 或者 .obj 文件的集合。而 ffmpeg.exe 命令行就是由下面的几个文件组成的。

ffmpeg.exe 的源代码文件如下:

  1. ffmpeg.c,这个文件是 ffmpeg.exe 命令行的主要逻辑,main 入口函数就在这个文件里定义。
  2. ffmpeg_opt.c,这里的 opt 是 options 的缩写,所以很明显是 处理应用 命令行参数 的文件。
  3. ffmpeg_filter.c,这个文件是配置 ffmpeg 命令行的滤镜逻辑的。
  4. cmdutils.c,这个文件复制解析命令行参数,这是一个通用的文件,被 ffmpeg.exeffplay.exeffprobe.exe 共同使用
  5. ffmpeg_hw.cffmpeg_qsv.c,这两个文件是处理硬件加速的,因为硬件加速的函数调用流程 跟 普通的编解码函数流程 有些不同。硬件加速有些额外的东西需要去设置。

如果只是单纯把上面这 5 个文件打包成 静态库,是没有意义的。因为 ffmpeg.c 里面有 main 函数,会跟自己的项目的 main 函数冲突。

即使把 ffmpeg.cmain() 函数换个名称,例如换成 ffmpeg_main(),然后直接引入自己项目,还是有一些问题,如下:

1,ffmpeg.c 里面有不少 全局变量,如果多次调用 ffmpeg_main,需要对这些全局变量进行处理,重置他们的值。

2,ffmpeg.c 的退出逻辑,默认是退出进程的,所以如果你在 本进程调 ffmpeg_main,会导致你的本身 业务进程退出。除非你另开一个进程运行 ffmpeg_main 函数,不过这跟直接开进程调 ffmpeg.exe 是没有区别的。


下面是 VIP会员专属 内容,购买后即可查看

版权所属 xianwanzhiyin.net 罗上文 2023 all right reserved,powered by Gitbook该文件修订时间: 2023-05-27 13:53:19

results matching ""

    No results matching ""