ffmpeg在win平台下的编译以及集成 |
||||||||||
+ 目录
引言Java是 write once,run anywhre,但 C 不一样,各平台均有差异,无法只写一次,而且各个平台的编译都不一样。比如android的ndk工具链,不同平台的库都是不一样的 本文主要讲解下 ffmpeg 在 win 平台下的编译以及集成
1、交叉编译交叉编译:交叉编译就是程序的编译环境和实际运行环境不一致,即在一个平台上生成另一个平台上的可执行代码。 为什么要交叉编译,其实之前原因已经说过了,因为不同平台的差异,指令集都不一样,比如win上面是intel的指令集,但android手机上几乎百分百都是arm的指令集,所以直接拿win上编译出来的库给android用,肯定无法使用的,所以需要交叉编译。 交叉编译主要是借助android 的ndk工具包 下面大致列举了一下经常会用到的组件。
下面来看一下 Android 所提供的 NDK 跟目录下的结构。
toolchains里一般会提供这么一些工具:
不过不同版本的ndk,里边的工具不一样,部分新的ndk里可能就没有ar 、strip 之类的,可能在新的ndk里这些工具命名不一样或者是放在地方了,比如本人发现的21.1.6352462(win)中包含 strip 和 ar,但 24.0.8215888 版本中没有相关库,而且这几个版本中都没有 nm 库,在编译 ffmpeg时一定会提示找不到nm,幸好 nm不是必须的,不慌,如果遇到找不到相关工具,说明路径设置的有问题,或者根本就是当前版本的ndk中没有此类工具或者已经改名,需要去找找资料看看新版本的工具叫啥或者干脆下载旧版本ndk
2、FFmpeg编译一名优秀的c++开发,必须得对c++编译有一定了解。前文已经介绍了交叉编译,那现在就来学习如何编译 ffmpeg 吧 在ffmpeg官网下载源码:
?
根据自己需要,切换自己想要的版本。 ffmpeg的编译其实已经非常简单了,因为的ffmpeg开发者提供了一个脚本,叫 configure,其实我们写的编译脚本就是在指定编译工具的位置,然后调用 configure 脚本编译 本人是在win11上编译 ffmpeg,需要下载msys2工具并配置相关环境,必须以管理员运行msys2之后才能来配置环境,否则就会报异常
?
然后在ffmpeg文件夹内建脚本文件,并把如下内容贴上:
?
相关解释:
另外编译脚本里边还有大量的 enable disable ,这些都是 configure 脚本里的编译选项,比如说 --enable-shared 意思就是编译动态库,所以上面的脚本最终会生成 so 文件,而不会生成 a 文件。 这些编译选项都可以使用 configure --help,可以查询到,大家可以试试 不管是这些 enable 编译选项,还是像 CC 一类的选项,都是在配置 configure 脚本,通过文本方式打开 configure 文件,可以看到:
?
运行编译脚本之后,如果编译成功了就会看到相关so库了,so库在lib文件夹中
3、FFmpeg集成首先看cmakelist怎么写:
?
注册即送1000元现金券
|