欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ubuntu下编译android所需ffmpeg的so库

程序员文章站 2022-07-13 13:32:06
...

编译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