ubuntu下 android ndk编译x264和ffmpeg

原文:http://blog.youkuaiyun.com/jinrall/article/details/50556328

首先默认你的电脑已经配置好了ndk环境。

一、编译x264

1.下载x264

http://www.videolan.org/developers/x264.html

将下载下来的压缩包解压,我这里是解压到download目录下x264文件夹

1.在终端下进入x264目录:

cd /home/kim/download/x264(换成你自己的路径)

2. 在x264文件夹下建立build_x264.sh

gedit build_x264.sh

3.在新建的文件中输入如下内容(修改为自己的目录):

export NDK=/home/kim/Android-ndk
export PREBUILT=$NDK/toolchains/arm-Linux-androideabi-4.9/prebuilt
export PLATFORM=$NDK/platforms/android-21/arch-arm 
export PREFIX=/home/kim/download/x264
./configure --prefix=$PREFIX \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM

4.在终端中输入

make

OK!一切顺利的话,你将会在x264文件夹下看到一个libx264.a的文件,编译成功!



…………………………………………………………error………………………………………………………………

当然,编译的过程有些人并非能一帆风顺,比如我就在make 的时候遇到一个错误:no working c compiler found x264,网上搜了很多方法,都没有解决。后来不得不去看config.log日志。发现是在配置-cross-prefix路径的时候填错了,编译的时候找不到路径。修改正确后,OK,编译通过!

所以,习惯看日志有多重要!!!


如果以上还是没能解决您的问题,这里留下我在编译的时候参考的文章,供您参考:

http://blog.youkuaiyun.com/chinabinlang/article/details/38561719

http://blog.youkuaiyun.com/seafit/article/details/46815263

http://blog.youkuaiyun.com/huahuahailang/article/details/27373169



二、编译ffmpeg

修改ffmpeg/configure文件

如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android上似乎无法加载。因此需要按如下修改:

将该文件中的如下四行:

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)'

编写build_android.sh脚本文件

build_android.sh的内容如下:(请替换为自己目录)
[html]  view plain  copy
  1. #!/bin/bash    
  2. NDK=/home/kim/android-ndk  
  3. SYSROOT=$NDK/platforms/android-21/arch-arm/    
  4. TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64    
  5.     
  6. function build_one    
  7. {    
  8. ./configure \    
  9.     --prefix=$PREFIX \    
  10.     --enable-shared \    
  11.     --disable-static \    
  12.     --disable-doc \    
  13.     --disable-ffserver \    
  14.     --enable-cross-compile \    
  15.     --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \    
  16.     --target-os=linux \    
  17.     --arch=arm \    
  18.     --sysroot=$SYSROOT \    
  19.     --extra-cflags="-Os -fpic $ADDI_CFLAGS" \    
  20.     --extra-ldflags="$ADDI_LDFLAGS" \    
  21.     $ADDITIONAL_CONFIGURE_FLAG    
  22. }    
  23. CPU=arm    
  24. PREFIX=$(pwd)/android/$CPU    
  25. ADDI_CFLAGS="-marm"    
  26. build_one    
给build_android.sh增加可执行权限:
[html]  view plain  copy
  1. $chmod+x build_android.sh    
执行build_android.sh
[html]  view plain  copy
  1. $./build_android.sh   
配置该脚本完成对ffmpeg的配置,会生成config.h等配置文件,后面的编译会用到。如果未经过配置直接进行编译会提示无法找到config.h文件等错误。
[html]  view plain  copy
  1. $make    
  2. $make install   
至此,会在ffmpeg目录下生成一个android目录,其中ffmpeg/android/arm/lib目录下的so库文件如下:
[html]  view plain  copy
  1. -rwxr-xr-x 1 dennisdennis   55208 Mar 29 16:26libavdevice-55.so    
  2. -rwxr-xr-x 1 dennisdennis  632476 Mar 29 16:26 libavfilter-4.so    
  3. -rwxr-xr-x 1 dennisdennis 1442948 Mar 29 16:26 libavformat-55.so    
  4. -rwxr-xr-x 1 dennisdennis 7985396 Mar 29 16:26 libavcodec-55.so    
  5. -rwxr-xr-x 1 dennisdennis   83356 Mar 29 16:26libswresample-0.so    
  6. -rwxr-xr-x 1 dennisdennis  308636 Mar 29 16:26 libswscale-2.so    
  7. -rwxr-xr-x 1 dennisdennis  300580 Mar 29 16:26libavutil-52.so    
注:以上列表去掉了符号链接文件和pkgconfig目录。
http://blog.youkuaiyun.com/leixiaohua1020/article/details/47008825

http://www.roman10.net/how-to-build-ffmpeg-for-android/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值