MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用

先说一下我的编译环境:MacOS10.8.3、Xcode4.6(4H127)、IOS6.1

文档提供了编译FFmpeg i386(模拟器)版本、armv7版本(iPhone 3GS以上)、armv7s(iPhone5)版本等lib库的方法,最后还提供了一种把这三个版本合为一种公共lib库的脚本,模拟器和真机只需要一套库文件即可。


1.提前准备Command Line Tools,在Xcode-Preference-Downloads-Components下载。

2.从官网下载最新版本的 ffmpeg-1.2,解压到桌面或者下载里面,方便编译。从下图可以看到有很多链接可以下载

MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用_第1张图片


但是我试了下,git上面的都不是最新版本,滚动屏幕的下方可以看到有个地方可以直接下载,看日期是最新版1.2版本 Download bzip2 tarball


MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用_第2张图片


3.下载最新版本的gas-preprocessor,解压,拷贝gas-preprocessor.pl到 /usr/bin 目录中。注意这个目录是个系统目录,默认隐藏了,直接查看不到。可以先点击一下Finder,上面菜单 前往-前往文件夹,或者直接选中了Finder后按command+shift+g快捷键,粘贴/usr/bin后“前往”就可以打开这个目录了。


4.打开终端,使用cd命令切换到第二步解压后的ffmpeg目录,比如我的是 cd Desktop/ffmpeg-1.2/,然后在这个文件夹建立几个目录,方便编译时生成lib库,也方便查找,或者使用以下命令在终端里面执行生成,一行一行来。执行完成后,可以在ffmpeg-1.2/文件夹里面看到armv7、armv7s、i386、universal/lib等文件夹。

mkdir armv7
mkdir armv7s
mkdir i386
mkdir -p universal/lib


5.编译ffmpeg armv7(iPhone 3GS以上)版本,复制以下命令到终端里面执行。注意如果你的SDK是IOS6.0,只需要把iPhoneOS6.1换成iPhoneOS6.0即可

./configure \
--prefix=armv7 \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--enable-avresample \
--enable-cross-compile \
--sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk" \
--target-os=darwin \
--cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" \
--extra-cflags="-arch armv7 -mfpu=neon -miphoneos-version-min=6.0" \
--extra-ldflags="-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -miphoneos-version-min=6.0" \
--arch=arm \
--cpu=cortex-a9 \
--enable-pic \
完成后在最后你可以看到这样一行文字:
WARNING: Compiler does not indicate floating-point ABI, guessing soft.
然后接着复制以下命令在终端里面回车执行:
make clean && make && make install
完成后你就可以在ffmpeg-1.2/armv7文件夹下面看到include、lib文件夹,lib目录下全是.a文件。


6.编译ffmpeg armv7s(iPhone5)版本,复制以下命令到终端里面回车执行:

./configure \
--prefix=armv7s \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--enable-avresample \
--enable-cross-compile \
--sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk" \
--target-os=darwin \
--cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" \
--extra-cflags="-arch armv7s -mfpu=neon -miphoneos-version-min=6.0" \
--extra-ldflags="-arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -miphoneos-version-min=6.0" \
--arch=arm \
--cpu=cortex-a9 \
--enable-pic \

同样,完成后在最后你可以看到这样一行文字:

WARNING: Compiler does not indicate floating-point ABI, guessing soft.

接着一样,复制以下命令在终端里面回车执行:

make clean && make && make install


7.编译 ffmpeg i386(模拟器)版本,复制以下命令到终端里面回车执行:
./configure \
--prefix=i386 \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--enable-avresample \
--enable-cross-compile \
--sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk" \
--target-os=darwin \
--cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc" \
--extra-cflags="-arch i386" \
--extra-ldflags="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk" \
--arch=i386 \
--cpu=i386 \
--enable-pic \
--disable-asm \

同样,完成后在最后你可以看到这样一行文字:

WARNING: Compiler does not indicate floating-point ABI, guessing soft.

接着一样,复制以下命令在终端里面回车执行:

make clean && make && make install


8.创建公共lib库,就是把上面生成的三个版本的.a文件合并为一个,以后到真机或者模拟器只需要这一套就ok。复制以下命令到终端里面回车执行:

cd armv7/lib
for file in *.a
do
cd ../..
xcrun -sdk iphoneos lipo -output universal/lib/$file  -create \
-arch armv7 armv7/lib/$file \
-arch armv7s armv7s/lib/$file \
-arch i386 i386/lib/$file
echo "Universal $file created."
cd -
done
cd ../..

9.这时候你去看看第四步中建立的四个文件夹里面,都不是每个文件夹里面都有lib文件夹,并且里面都有编译好的.a文件。至此,ffmpeg的编译全部结束,我们使用的时候只需要用到2个文件夹,分别是 universal/lib 和 armv7/include/,使用时直接把这2个文件夹copy到工程中即可。


10.建立测试Demo,New一个project,把上面刚刚说的2个文件夹拖到工程中,比如:

MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用_第3张图片

其次我们需要设置一下 Header Search Paths,这个path跟上面的目录结构有关系(跟include所在的位置有关系),比如我图中include是在ffmpeg里面,这时候这个path应该是 $(SRCROOT)/ffmpeg/include跟着步骤走:选中工程文件 - 右边选择TARGETS - Build Settings,搜索 Header Search Paths,修改值为

$(SRCROOT)/ffmpeg/include

再次我们需要添加几个系统的lib库到工程中,分别是 libbz2.dylib、libz.dylib、libiconv.dylib,跟着步骤走:选中工程文件 - 右边选择TARGETS - Summary,滑动到下面可以看到添加的地方:

MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用_第4张图片



11.至此使用时需要的设置也到此结束,最后给一下我配好的工程结构图:

MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用_第5张图片


参考:

http://www.tangentsoftworks.com/blog/2012/11/12/how-to-prepare-your-mac-for-ios-development-with-ffmpeg-libraries/

http://stackoverflow.com/questions/6854190/ffmpeg-integration-on-iphone-ipad-project/15429359#15429359

http://lixiangjuan723.blog.163.com/blog/static/369091632013162736341/

http://www.cnblogs.com/kiss007/archive/2012/11/08/2760086.html



你可能感兴趣的:(MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用)