编译ffmpeg到android

这里试着编译ffmpeg到android上面,linux上面用编译ffmpeg比较简单,编译完成后就可以在linux上用了。

这里使用的ffmpeg是2.1,android的ndk是r9c,环境在Ubuntu12.04下。

这篇文章是根据http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/这里的文章进行的,相当于那篇英文的翻译。


首先先解压android NDK,我将它解压到主文件夹下,解压完之后,这里还是和原文章一样,使用$NDK来表示NDK的路径。

然后将下载下来的ffmpeg源码解压到$NDK/sources路径下,如下图:


接下来用文本编辑器打开ffmpeg2.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)'
这段就是编译 libavcodec.so的,但是这样不能支持Android系统,所以我们要稍微改一下,用接下来的代码来代替这上面的四行代码:

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

替换之后就可以开始编译ffmpeg了,先复制下面的代码到build_android.sh这个新建脚本了。

#!/bin/bash
NDK=$HOME/Desktop/adt/android-ndk-r9
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
function build_one
{
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"
build_one
不过记得把NDK的路径改成自己的,在看看上面那三个路径都正确没有。

然后就是给build_android.sh赋予相应的权限,能执行的权限:

sudo chmod a+x build_android.sh
完成之后,就可以开始执行这个脚本了:

./build_android.sh
然后就开始执行了,现在就有一段时间等了。等了一段时间之后,当它完成了,会找到 $NDK/sources/ffmpeg-2.1/android这个路径,里面就有编译完成的库了,这种方法编译出来的.so有好几个,里面有几个是快捷方式,可以把它们删了,剩下的就是可以用的.so了。

看网上其他编译出来只有一个libffmpeg.so文件,可我按照那些都编译不出来,只有根据上面网址的那篇英文文章才编译出了.so文件,不过这有好几个了,如libavcodec-55.so,libavformat-55.so等等。这些库成了之后,可以在C语言中用,然后根据ndk,可以编译出有用的.so库文件。这样就能在android工程中用了。



参考文章:http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/

最后有个作者的工程在里面,可以下载来参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值