您的位置:首页 > 移动开发 > Android开发

Android FFmpeg 编译(2016,亲测)

2016-04-12 09:37 591 查看
Android FFmpeg的编译是通过jni调用ffmpeg库的前提。如果你要在android上使用ffmpeg,需要通ndk编译ffmpeg。然后才能在android项目中用jni来使用ffmpeg。

本文参考 http://blog.yikuyiku.com/?p=4533

本文讲解的是在Ubuntu上通过NDK-r9 编译ffmpeg库;

ndk请去android官网下载。

ffmpeg请去ffmpeg的官网去下载:http://ffmpeg.org/。我用的是2.6.3

1、把下载好的ndk和ffmpeg压缩包解压到指定目录(我都是解压到home下了),解压可以通过命令,或通过软甲打开解压。

2、修改FFmepg编译配置

把ffmpeg目录下的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包,例如libavcode.so.55中最后的那个“55”版本号.

3、编译FFmpeg,创建build_android.sh 执行文件

configure的配置有很多,有兴趣的可以自己研究下。由于本人不懂c,就用网上的流传的配置。

注意前三行要按照自己的路径正确配置。(我就是在这一步出的问题,ndk的路径没有写对,找了好久才找到)

#!/bin/bash
NDK=/home/double/android-ndk-r9d
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


保存后执行:

sudo chmod +x build_android.sh
./build_android.sh


我就是ndk的路径没写对,出现了下面的问题,出现问题了可以代开config.log查看。



给大家做个参考。

4、查看编译结果。

编译成功后,会多出一个android文件夹,里面就是我们编译好东西了。

编译就到这里了,下期会写,在android项目中使用编译好的ffmpeg库。

补充:

编译后生成的android文件夹是带锁的。

用命令:sudo chmod +x android 解锁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ffmpeg