这篇文章的目的是使用NDK编译ffmpeg源码,将编译成功的库文件在Android平台使用开发音视频。
我这里使用的是xShell链接阿里云的服务器,当然你也可以使用自己的Linux操作平台,我这里使用的是Ubantu。
然后下载NDK,根据自己的平台可以下载最新版本或者旧版本,我这里使用的是版本17的NDK,完成后解压。
然后下载ffmpeg源码,下载并解压。
最终如下所示
新建一个build.sh文件,放在ffmpeg-4.0.2目录下,里面执行的是shell语句:
shell语法可以查看shell脚本记录
#!/bin/bash
CPU=arm-linux-androideabi
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fPIC"
INCLUDES=" -isystem $NDK_ROOT/sources/android/support/include"
PREFIX=`pwd`/android/armeabi-v7a_lsn11
./configure \
--prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/$CPU- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot/" \
--arch=arm \
--target-os=android
注意
- FLAGS和INCLUDES是从AndroidStudio可以获得,复制过来可能编译会报错,把报错的代码删除即可:
externalNativeBuild/xxx/build.ninja
-
build.sh中的NDK路径如何设置?
定位到android-ndk-r17c目录下,执行pwd
然后设置NDK的环境变量即可:
export NDK=/root/softffmpeg/android-ndk-r17c
查看NDK的路径:
- 如果执行build.sh没有权限,则需要执行:
chmod +x build.sh
build.sh的作用是执行configure,生成Makefile文件,下面是成功执行的结果:
接着执行
make
make install
执行成功会在当前目录下生成一个android目录,里面就是所需的静态库和头文件。
通过执行
tree lib/
可以看到静态库的树形结构
网友评论