基于ndk-r21b编译ffmpeg-4.3.1

1、ffmpeg下载地址:http://ffmpeg.org/download.html,打开下载地址选择需要的平台和版本号进行下载,下载可以先下载下来,然后在上传到linux上,也可以使用以下命令,在linux上直接下载:

wget http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.bz2

2、解压下载好的ffmpeg,解压命令如下:

tar xvf ffmpeg-4.3.1.tar.bz2

3、解压后会生成一个解压目录ffmpeg-4.3.1,在这个目录下创建android/armeabi-v7a文件夹用来存放编译生成的ffmpeg静态库或者动态库

4、下载并解压ndk(r21b),下载和解压命令:

wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip

unzip android-ndk-r21b-linux-x86_64.zip

5、修改so文件的命名规则:

#将ffmpeg-4.3.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)'

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

6、创建一个build_android_r21b.sh文件,在文件中添加一下脚本:

#!/bin/bash

PREFIX=/usr/hui/ndk/ffmpeg-4.3.1/android/armeabi-v7a

TOOLCHAIN=/usr/hui/ndk/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64

build()
{
./configure \
--prefix=$PREFIX \
--disable-static \
--enable-shared \
--enable-small \
--enable-gpl \
--disable-doc \
--disable-programs \
--disable-avdevice \
--enable-cross-compile \
--target-os=android \
--arch=armeabi-v7a \
--cc=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-

make clean
make -j4
make install
}

build

7、为build_android_r21b.sh文件设置可执行权限:

chmod +x build_android_r21b.sh

8、执行build_android_r21b.sh进行交叉编译:

./build_android_r21b.sh

9、执行完成后可以去文件生成目录(/usr/hui/ndk/ffmpeg-4.3.1/android/armeabi-v7a)查看编译生成的文件:
基于ndk-r21b编译ffmpeg-4.3.1_第1张图片
10、在第9步中查看到生成的文件是动态库so格式的,如果要想编译成静态库,只需要修改第6步中的两个配置参数:

--disable-static \
--enable-shared \

修改为
--enable-static \
--disable-shared \

修改后重新进行编译生成静态库结果如下:
基于ndk-r21b编译ffmpeg-4.3.1_第2张图片

你可能感兴趣的:(Android,android,ffmpeg,ndk,音视频)