mac 平台下编译android版本 ffmpeg+h264

来源:互联网 发布:java实现接口 编辑:程序博客网 时间:2024/05/22 14:18

网上很多例子,但是试了很多都没有都没有弄好,最后经过长时间的试错,终于弄好了,放到android 里没有问题。

系统环境:os 10.11.5
ndk r12

1,首先下载ffmpeg 2.5.11 https://ffmpeg.org/解压
2,下载x264 http://download.videolan.org/pub/videolan/x264/snapshots/最新的版本 解压
3,x264编译 修改一下configure文件:
找到libx264.so.$API修改为libx264.so[如不修改,生成的动态库为libx264.so.148,android无法识别]
在x264主目录中新建shell脚本build_android.sh其内容如下

#!/bin/bashNDK=/Users/weifengxu/android/tool/android-sdk-macosx/ndk-bundle#NDK= 换成自己的ndk主目录 SYSROOT=$NDK/platforms/android-15/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64 function build_one { bash  ./configure \    --prefix=$PREFIX \    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \    --sysroot="$SYSROOT" \    --host=arm-linux \    --enable-pic \    --enable-shared \    --enable-static \    --disable-cli    make    make install } CPU=arm PREFIX=/usr/localbuild_one 

编译的成功与失败关键就在shell脚本上,一点失误就编译不成功
编译开始:在终端输切换到x264主目录后入如下命令:
(1)获取超级用户权限

sudo -s

(2)输入密码即可
(3)sudo chmod +x build_android.sh
(4)./build_android.sh
运行几分钟后编译完成
切换到 /usr/local目录下会看到include 和lib两个文件夹,打开lib会看到libx264.so文件,打开include看到x264.h和x264_config.h,
编译成功!
可能出现问题:/usr/local/lib无libx264.so,而其他文件都存在,没关系,copy x264主文件目录下的libx264.so到/usr/local/lib即可
4,编译ffmpeg
ffmpeg依赖x264,而前面已经吧x264编译好了。
(1)修改configure:
把一下内容

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

改为

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS='$(SLIBNAME)'

这样生成的.so文件末尾不会携带版本信息[.so.123]
(2)在ffmpeg主目录中建立shell脚本:build_android.sh
内容如下:

#!/bin/bashNDK=/Users/weifengxu/android/tool/android-sdk-macosx/ndk-bundle#NDK=  改成自己的NDK路径export PATH=$PATH:$NDKSYSROOT=$NDK/platforms/android-15/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64function build_one{bash  ./configure \    --prefix=$PREFIX \    --enable-shared \    --disable-static \    --disable-doc \    --disable-ffserver \    --enable-cross-compile \    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \    --target-os=linux \    --arch=arm \    --enable-gpl \    --enable-libx264 \    --enable-decoder=h264 \    --enable-encoder=libx264 \    --extra-libs=-lgcc \    --sysroot=$SYSROOT \    --enable-asm \    --enable-neon \    --extra-cflags=-I/usr/local/include \    --extra-ldflags=-L/usr/local/lib \    $ADDITIONAL_CONFIGURE_FLAG    make    make install}CPU=armPREFIX=/usr/localADDI_CFLAGS="-marm -mfpu=neon"build_one

终端切换到ffmepeg根目录下执行如下命令
获取超级用户权限

sudo -s

输入密码即可
sudo chmod +x build_android.sh
./build_android.sh
运行10分钟左右后编译完成
切换到 /usr/local目录下
编译成功!
/usr/local/include 和/usr/local/lib文件内容就是捆绑了 h264的ffmpeg

0 0