Ubuntu下编译android所需ffmpeg的so库

时间:2021-08-21 18:25:58

编译ffmpeg源码

环境说明

尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697

环境(包括版本)尽量下面的保持一致,其他环境不一定能成功。

系统: Ubuntu16.04 LTS
最好不要再windows系统下编译,可在windows中安装VMware虚拟一个linux系统出来,对linux系统不太熟悉的建议使用Ubuntu,入门比较快。

NDK版本: android-ndk-r9d

试过16、14、13版本都未成功,使用ndk-r9d才成功的。这里是下载地址:https://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2

ffmpeg版本: ffmpeg-3.2.9
使用过最新的ffmpeg-3.4编译并未成功,于是使用了3.2.9。下载地址(建议下载tar.bz2的):https://ffmpeg.org/download.html#releases

修改configure

在ffmpeg根目录找到configure文件,由于根据此配置文件(在ffmpeg源码的根目录)生成的so名字类似于libXXX.05421423.so;android不能失败了带有数字的so库;需要将生成so库名字的配置修改一下,主要有四个地方.
将以下的内容:

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

生成config.h文件

在ffmpeg根目录中输入一下命令:

./configure

如果有错误提示,根据提示来,在./configure 后面加上提示参数即可(注意是两个-),如:

Ubuntu下编译android所需ffmpeg的so库

创建编译脚本

在与ffmpeg同级目录创建一个用于存放编译后生成的动态库的文件夹,这里叫armlib

在与ffmpeg同级的目录下新建build-ffmpeg-arm.sh文件,内容为:

#!/bin/bash 
#需要改成你的ffmpeg源码地址
cd /home/hdl/ffmpeg/ffmpeg-3.2.9

make clean
#需要改成你的ndk地址
export NDK=/home/hdl/tools/android-ndk-r9d
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt
export PLATFORM=$NDK/platforms/android-8/arch-arm
#这里是最后生成的库文件存放的位置,改成你自己的即可
export PREFIX=/home/hdl/ffmpeg/armlib
build_one(){
./configure --target-os=linux --prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl --enable-shared --disable-static --enable-small \
--disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv6"
}

build_one

make
make install

cd ..

注意:以上生成的是armeabi类型的so,armeabi已能涵盖大部分安卓手机,其他类型的需要更改一下配置。

为build-ffmpeg-arm.sh授予可执行的权限

命令行下输入:

chmod +x build-ffmpeg-arm.sh

开始编译

./build-ffmpeg-arm.sh

等待几分钟,会在/home/hdl/ffmpeg/armlib(这是我自己的哦,即configure中设置的PREFIX地址)目录下面生成编译后的文件。

Ubuntu下编译android所需ffmpeg的so库

注意:请使用带有版本号的so文件(如:libavcodec-57.so),不带版本号的只是一个”快捷方式”

尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697