今年做了一些音视频编解码工作,此前做图形、图像类工作多一些,做了音视频编解码才知道,这项工作还是很有趣、很神奇的。比如采集几十M的视频数据,经过编码存储后,文件体积仅仅有几十K大小,这当中就需要x264来发挥神奇了。下面将手机端ios及android两个平台下x264编译脚本分享出来,希望对正在做相关工作的同学有帮助。x264源码地址:http://www.videolan.org/developers/x264.html
1. ios平台下x264编译。这个编译脚本修改自:https://github.com/xlking/build_x264,有时侯真觉得github真是万能的,上面好东西太多了。这个编译脚本功能比较丰富,会同时编译模拟器和真机两个静态库,最后还会将两个库合为一个静态库,我在实际应用中发现,x264在视频编码过程中有些模块需要硬件指令支持,而模拟器是不提供这种硬件指令的,所以用模拟器调试视频编码程序时,均以程序崩溃告终,建议统一用真机调试,可以省很多时间,少走很多弯路。另外要说的是这个编译脚本可选参数很多,现在ios8已经出来了,我当时编译时还是ios7.1呢,所以脚本中sdk_version选项,可以酌情修改。脚本内容如下:
#!/bin/sh cd x264 DEST=install SDK_VERSION="7.1" echo "Building armv7" ARM="armv7" export CC=`xcodebuild -find clang` DEVPATH=/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDK_VERSION}.sdk ./configure --host=arm-apple-darwin --sysroot=$DEVPATH --prefix=$DEST/$ARM --extra-cflags="-arch $ARM" --extra-ldflags="-L$DEVPATH/usr/lib/system -arch $ARM" --enable-pic --enable-static --enable-asm make && make install && make clean echo "Installed: $DEST/$ARM" echo "Building i386" SIM="i386" CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc DEVPATH=/Applications/XCode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDK_VERSION}.sdk ./configure --host=i386-apple-darwin -sysroot=$DEVPATH --prefix=$DEST/$SIM --extra-cflags="-arch $SIM" --extra-ldflags="-L$DEVPATH/usr/lib/system -arch $SIM" --enable-pic --enable-static --disable-asm make && make install && make clean echo "Installed: $DEST/$SIM" echo "Combining library ......" BUILD_LIBS="libx264.a" OUTPUT_DIR="output" ARCHS="armv7 i386" cd install mkdir $OUTPUT_DIR mkdir $OUTPUT_DIR/lib mkdir $OUTPUT_DIR/include LIPO_CREATE="" for ARCH in $ARCHS; do LIPO_CREATE="$LIPO_CREATE $ARCH/lib/$BUILD_LIBS " done lipo -create $LIPO_CREATE -output $OUTPUT_DIR/lib/$BUILD_LIBS cp -f $ARCH/include/*.* $OUTPUT_DIR/include/ echo "************************************************************" lipo -i $OUTPUT_DIR/lib/$BUILD_LIBS echo "************************************************************" echo "OK, merge done!"
2. android平台下x264编译。除了下载x264源码外,还要搭建ndk开发环境,这个很容易,只要到官网下载相应平台的ndk包即可。完成ndk环境搭建,下一步就是执行脚本,编译x264源码。首先在x264源码目录下新建build_x264.sh脚本文件,将下列内容拷贝进文件并保存。打开终端,cd进入x264目录,执行./build_x264.sh,按照提示输入make,然后耐心等待编译结果。脚本内容如下:
export NDK=/home/mypc/android-ndk-r9d export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt export PLATFORM=$NDK/platforms/android-8/arch-arm export PREFIX=/home/mypc/x264 ./configure --prefix=$PREFIX --enable-static --enable-pic --disable-asm --disable-cli --host=arm-linux --cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- --sysroot=$PLATFORM
有了libx264.a文件,下一步就可以调用相应api做视频编码工作了。当然也可以统一使用ffmpeg做音视频编码,只需在编译ffmpeg时将支持libx264选项打开即可。