因为项目需求原因,所以这两天一直在研究ffmpeg64位的编译,在这写一下自己研究过程中的一些心得。
首先介绍一下脚本里的语言所代表的含义:
大致可以分为2类:
1.裁剪:即禁用掉一些不必要的编码部分,只打开所需要的部分,这样可以使静态库更小,
--enable-decoder=NAME 启用xx解码器,
--enable-demuxer=NAME 启用xx解轨器,
--enable-parser= NAME 启用xx剖析器,
--disable-asm 禁用汇编
还有一些其他的指令,这里不再赘述,视自己情况而定。
2.指定编译环境
--enable-cross-compile 使用交叉编译器
--sysroot=path root of cross-build tree
--target-os=darwin 编译器的目标操作系统
--extra-cflags=CFLAGS 添加ECLFAGS到CFLAGS[] 表示用于c编译器
--extra-ldflags=LDFLAGS 添加ELDFLAGS 到 LDFLAGS[] 表示用于c++编译器
--prefix=PREFIX 指定静态库的安装路径。
要整合armv7、armv7s、i386和arm64,首先必须要下载一个脚本文件,这个脚本文件也是我在其他的博客中找到的,链接如下:https://gist.github.com/m1entus/6983547,脚本的所有的版本可以在这个链接中看到:http://www.ffmpeg.org/releases/,还有一个需要的脚本是perl语言写的,下载该脚本(gas-preprocessor.pl)放在/usr/bin/目录(可以在Finder下按comd+shift+g前往文件夹/usr/bin)当中,脚本链接:https://github.com/mansr/gas-preprocessor。然后修改 gas-preprocessor.pl文件的权限,在终端上进入/usr/bin文件中,执行下面操作:
然后返回到自己放置.sh脚本的文件夹中,运行
即可。
我在测试中使用的ios sdk版本为8.1,.sh脚本的版本为2.5。经过这样后会出现的文件。
不过,在只是参照上述步骤后不会出现arm64 和universal里,需要在脚本中改动一些地方(参考了一些别人的情况),具体的地方如下:
1.如果没有出现armv7,armv7s,arm64,i386等里面含有的.a文件则加入--disable-armv6 --disable-armv6t2 到./configure中去,
2.
改成图片中的样子,这样,在文件夹中就已经将这4个合并为一个放在universal文件夹中,
3.如果你一直在尝试中没有出现64位的文件夹,那么可以把--cup-cortext-a9删除掉,具体的我也不是很清楚,这样做完了就差不多可以出现上述文件了。
至此,ffmpeg的编译基本上都已经包含了。