ios及android两个平台下x264编译脚本

今年做了一些音视频编解码工作,此前做图形、图像类工作多一些,做了音视频编解码才知道,这项工作还是很有趣、很神奇的。比如采集几十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选项打开即可。

时间: 2024-10-03 17:57:58

ios及android两个平台下x264编译脚本的相关文章

【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库

编译 Luajit 库,的确是一个挑战.因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了.以前只是编译了适用于真机的 Luajit 库.最近在尝试编译模拟器 Luajit 库,就顺便梳理了下 Luajit 库的编译经验,供以后查阅.网上的讨论也是有一些,但是相当一部分都已经过时.或许等你看到这篇文章的时候,可能也只是能获得一些可能的经验来解决自己的编译问题.所以说,了解一些基本的编译知识,能勉强看懂 Luajit 的 make 文件,还是很有必要的.本篇是关于 Luaj

ubuntu12.04平台下a80编译环境搭建

如果出现unable to locate package ,则用sudo apt-get update 安装JDK6 下面开始安装jdk: 在网上查的一些资料上都是把jdk安装在/usr/lib/jvm/jdk下面,也有安装在/opt下的,我在这里介绍的就是把它安装在了/opt下, 终端下进入你存放jdk-6u45-linux-x64.bin $sudo chmod 777 jdk-6u45-linux-x64.bin $ sudo -s  ./jdk-6u45-linux-x64.bin  /

在idea2018和vs2017平台下JNI编程调用C++算法(2)-调用嵌套dll实践

背景 我之所以采用JNI是由于我要实现一个java系统,java系统需调用C++核心程序.而目前的需求是不想破坏C++核心程序的独立性.因此想把JNI调用的接口写在C++核心程序之外.这就需要 首先将C++核心程序生成内层dll 在外层包装一层JNI接口调用内层dll 再将外层C++生成外层dll后,java调用外层dll. 那么JNI支持这种嵌套dll调用吗?经验告诉我肯定能,但是程序员从来不敢想当然,那就让我们试一试,顺便理清思路吧. 上篇文章介绍了在idea2018和vs2017两大平台下

Android OS 源码 引入和编译 jar / so库

Android -- 源码平台下JAR包的引入与编译https://blog.csdn.net/csdn_of_coder/article/details/64538227 BUILD_JAVA_LIBRARY 与 BUILD_STATIC_JAVA_LIBRARY 在Android.mk中可通过调用include $(BUILD_JAVA_LIBRARY)和include $(BUILD_STATIC_JAVA_LIBRARY)来分别生成目标设备上的共享JAVA库与静态JAVA库. 二者的区别

[转帖]Android平台下OpenGL初步

原文请看 Android平台下OpenGL初步 本文只关注于如何一步步实现在Android平台下运用OpenGl. 1.GLSurfaceView GLSurfaceView是Android应用程序中实现OpenGl画图的重要组成部分.GLSurfaceView中封装了一个Surface.而android平台下关于图像的现实,差不多都是由Surface来实现的 2.Renderer 有了GLSurfaceView之后,就相当于我们有了画图的纸.现在我们所需要做的就是如何在这张纸上画图.所以我们需

win7平台下React-Native Android:Unable to upload some APKs

一.问题描述 根据网络上的Win7平台下React-native配置教程配置好开发环境的过程中,在艰难进行到react-native run-android这一步时,发现一直出现错误,截图如下: 错误的说明信息表明是 Ubable to upload some APKs.经过网上搜索最后在这里(http://www.hacksparrow.com/react-native-android-unable-to-upload-some-apks.html)得到了一个比较全面的答案,我简单地翻译一下原

Android Ubuntu平台下ADB驱动的安装

在Android平台下做开发,adb总是需要使用到的,同时,因为linux没有windows这样操作傻瓜化,有些东西还是需要自行设置的,否则将会连接不上. 关于这些内容,google也有一定的描述,可以参考http://developer.android.com/tools/device.html 1. 确保设备已经连接正常 首先需要取得root权限,这个没啥说的.然后用lsusb命令列一下所有USB设备,如下图所示: 这里可以比较清楚的看到有一个设备,ID号是1782:5d04,如果你的系统上

Windows平台下Qt开发环境的搭建

Qt 是采用开源和商用双协议发布的开放源代码的图形开发类库,现在很多图形化的开源软件都使用了Qt. 下载地址:http://qt-project.org/downloads 1. 下载安装包 你可以从下载页下载已经编译好的二进制安装包,也可以下载源码自行编译,下面是二进制软件安装包下载列表的部分截图. 可以看到,当前最新的版本是Qt 5.3.1,目前已经提供了Window 32/64bit,Linux 32/64bit,Mac, Android以及iOS版本的开发包.本文档中将介绍目前最新的最复

JS判断客户端是否是iOS或者Android或者ipad(二)

js判断客户端是IPAD和iphone 多了就不说了,直接上代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22     function checkIsIphoneIpad() { var pda_user_agent_list = new Array("iPhone", "iPod", "iPad"/*, "GTB"*/); var pda_app_nam