整理备用。在编译ffmpeg的之前,我们要先编译x264。原文地址:http://blog.sina.com.cn/s/blog_47522f7f0102vcbj.html
在成功编译FFMpeg之后,调用某些FFMpeg的命令还需要用到libx264,因此需要额外编译libx264并打包在FFMpeg中
1. 编译环境:
Mac OS 10.11 XCode6.1
2. libx264的编译
编译包需要符合arm64、armv7s、armv7、x86_64、i386这几个架构。前面3个是给真机使用的,后面2个是给模拟器使用的。目前使用FFmpeg-iOS-build-script作者写的一键编译脚本只能编译出适用于模拟器的.a包,适用于真机的包还需要自己手动编译。有时间可以研究它的编译脚本源码,添加上手动编译的代码,这里先做一个总结。
(1)首先到http://www.videolan.org/developers/x264.html
下载最新的libx264源码包,解压之后是一个含snapshot-xxxx的一个文件夹,把它拷贝到随便一个文件夹下,重命名为x264; (2)到https://github.com/kewlbear/x264-ios
下载x264的一键编译脚本文件,把它放到跟x264文件夹同级的地方; (3)运行脚本./build-x264.sh;
(4)脚本运行完毕之后,会多出几个文件夹:x264-iOS,scratch-x264,thin-x264。其中x264-iOS是最终的输出,里面有include和lib两个文件夹。lib文件夹里面只有*.a一个文件。如果顺利的话,这个包是一个fat包,是包含了arm64、armv7s、armv7、x86_64、i386这几个架构的,但是在我的机器上,用lipo命令看,只有x86_64、i386这两种架构,具体原因还没有搞清楚。因此我们还需要手动编译arm64、armv7s、armv7的包,继续下一步;
(5)再拷贝一份源码出来,放到另外一个文件夹下,在命令行中进入这个文件夹;
(6)编译armv7的包:进入源码的文件夹后,在命令行中输入
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
./configure --host=arm-apple-darwin --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk
--prefix='build' --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/system'
--enable-pic --extra-asflags='-arch armv7'
注意修改里面的iPhoneOS版本。
如果config成功,命令行会提示可以执行make命令了,先不急着执行make。手动copy 一个新版的gas-preprocessor.pl到extras目录下面。gas-preprocessor.pl我用的是https://git.libav.org/?p=gas-preprocessor.git;a=blob;f=gas-preprocessor.pl;h=44d11178667ece04df993e50
023b41155d53582a;hb=HEAD 这个版本,源码1033行,比x264的源码要长很多。 复制完毕后,在命令行中执行make;执行完make之后再执行make install,成功后会发现源码文件夹里面多了一个libx264.a的包,用lipo查看,确实是armv7的架构,把它拷贝出来,重命名为libx264-armv7。
(7)编译armv7s的包。先执行下make clean,清除上一步执行得到的结果。编译armv7s的包与编译armv7的步骤完全一致,只不过配置需要略微修改,且不需要再拷贝gas-preprocessor.pl文件。配置命令如下:
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
./configure --host=arm-apple-darwin --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk
--prefix='build' --extra-cflags='-arch armv7s' --extra-ldflags='-arch armv7s -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/system'
--enable-pic --extra-asflags='-arch armv7s'
同样得到一个libx264.a的包,拷贝出来,重命名为libx264-armv7s。
(8)编译arm64的包,方法同上,配置命令如下:
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
./configure --host=aarch64-apple-darwin --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk
--prefix='build' --extra-cflags='-arch arm64' --extra-ldflags='-arch arm64
-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/system' --enable-pic --extra-asflags='-arch arm64'
同样得到一个libx264.a的包,拷贝出来,重命名为libx264-arm64。
(9)此时我们得到了*.a,libx264-armv7.a,libx264-armv7s.a,libx264-arm64.a四个文件,用lipo命令把他们融合成一个包:
lipo -create
*.a,libx264-armv7.a,libx264-armv7s.a,libx264-arm64.a -output libx264.a 把生成的libx264.a的包拷贝回x264-iOS/lib中,和include一起,整个x264-iOS当做libx264的output
3. 编译带x264的ffmpeg包
拷贝x264-iOS到build-ffmpeg.sh脚本所在目录下,并重命名x264-iOS为fat-x264,清除build-ffmpeg.sh脚本中X264=`pwd`/fat-x264一行的注释,保存后执行脚本,顺利的话就会跟之前一样生成各个包啦。。相比之前,会多出一个libpostproc.a。
4. 在项目中使用带x264的ffmpeg以及libx264
如果直接替换掉原来的FFMPEG .a库,会报编译错误。此时需要加上libx264。把x264-iOS(含头文件和.a)拖到项目中,link framework中加入libx264,user header search path中加入x264-iOS/include的路径,运行就可以了。
下面是编译ffmpeg,原文地址:http://www.cocoachina.com/ios/20150514/11827.html
最近刚接触ffmpeg,找了很多相关的编译资料,都没有编译成功,前几天在 github上找到一个脚本(https://github.com/kewlbear/FFmpeg-iOS-build-script),就可完美编译
准备条件
-
先下载文件:https://github.com/libav/gas-preprocessor,
复制gas-preprocessor.pl到/usr/sbin下,在10.11上面直接复制是没有权限的,此时需要重启电脑,command+R进入终端,输入scrutil disable,然后再重启即可。
修改文件权限:chmod 777 /usr/local/bin/gas-preprocessor.pl
-
安装yasm
具体步骤如下:
1. 下载脚本:https://github.com/kewlbear/FFmpeg-iOS-build-script
2. 解压,找到文件 build-ffmpeg.sh
3. 执行服本文件:./build-ffmpeg.sh, 由于本人没有事先安装Yasm 执行脚本文件会出错,
如下:
1
2
3
4
5
6
7
8
|
MAC:FFmpeg-iOS-build-script-master-2 jinsonglnan$ ./build-ffmpeg.sh
Yasm not found
Homebrew not found. Trying to install...
Whoops, the Homebrew installer has moved! Please instead run:
ruby -e
"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Also, please ask wherever you got
this
link from to update it to the above.
Trying to install Yasm...
./build-ffmpeg.sh: line 67: brew: command not found
|
意思就是说,没有yasm, 看到提示执行 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装,如果没有成功,可以按照如下步骤操作;
curl http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz >yasm.tar.gz
tar xzvf yasm.tar.gz
cd yasm-1.2.0
./configure
make
sudo make install
4.编译完成后,终端进入FFmpeg-iOS-build-script目录,然后输入./build-ffmpeg.sh lipo,这个命令是讲.a文件合并成一个
5.把ffmpeg-iOS文件加入到工程中
6.添加一个头文件引用 #include "avformat.h"
添加一个api语句:av_register_all();给一个类文件.m后缀改为.mm,开启混编模式。
运行工程,如果没有报错,则表明编译成功
7.其他注意细节
编译的时候报错: 'libavcodec/avcodec.h' file not found ,修改Header search paths 里的路径:$(PROJECT_DIR)/FFmpeg-iOS/include
加入External libraries:
1
2
3
|
libz.dylib
libbz2.dylib
libiconv.dylib
|