ubuntu下 android ndk编译x264和ffmpeg

本文介绍了如何在Ubuntu系统下利用Android NDK编译x264和ffmpeg库。首先确保NDK环境配置完成,然后分别详细阐述了编译x264和ffmpeg的步骤,包括配置环境变量、编写脚本、解决编译过程中遇到的问题,以及对ffmpeg的配置文件进行修改以适应Android平台。文章最后提供了参考资料链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先默认你的电脑已经配置好了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的内容如下:(请替换为自己目录)
#!/bin/bash  
NDK=/home/kim/android-ndk
SYSROOT=$NDK/platforms/android-21/arch-arm/  
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64  
  
function build_one  
{  
./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 \  
    --sysroot=$SYSROOT \  
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \  
    --extra-ldflags="$ADDI_LDFLAGS" \  
    $ADDITIONAL_CONFIGURE_FLAG  
}  
CPU=arm  
PREFIX=$(pwd)/android/$CPU  
ADDI_CFLAGS="-marm"  
build_one  
给build_android.sh增加可执行权限:
$chmod+x build_android.sh  
执行build_android.sh
$./build_android.sh 
配置该脚本完成对ffmpeg的配置,会生成config.h等配置文件,后面的编译会用到。如果未经过配置直接进行编译会提示无法找到config.h文件等错误。
$make  
$make install 
至此,会在ffmpeg目录下生成一个android目录,其中ffmpeg/android/arm/lib目录下的so库文件如下:
-rwxr-xr-x 1 dennisdennis   55208 Mar 29 16:26libavdevice-55.so  
-rwxr-xr-x 1 dennisdennis  632476 Mar 29 16:26 libavfilter-4.so  
-rwxr-xr-x 1 dennisdennis 1442948 Mar 29 16:26 libavformat-55.so  
-rwxr-xr-x 1 dennisdennis 7985396 Mar 29 16:26 libavcodec-55.so  
-rwxr-xr-x 1 dennisdennis   83356 Mar 29 16:26libswresample-0.so  
-rwxr-xr-x 1 dennisdennis  308636 Mar 29 16:26 libswscale-2.so  
-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/





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值