這篇文章的目的是使用NDK編譯ffmpeg源碼,將編譯成功的庫(kù)文件在Android平臺(tái)使用開(kāi)發(fā)音視頻。
我這里使用的是xShell鏈接阿里云的服務(wù)器,當(dāng)然你也可以使用自己的Linux操作平臺(tái),我這里使用的是Ubantu。
然后下載NDK,根據(jù)自己的平臺(tái)可以下載最新版本或者舊版本,我這里使用的是版本17的NDK,完成后解壓。

然后下載ffmpeg源碼,下載并解壓。
最終如下所示

新建一個(gè)build.sh文件,放在ffmpeg-4.0.2目錄下,里面執(zhí)行的是shell語(yǔ)句:
shell語(yǔ)法可以查看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可以獲得,復(fù)制過(guò)來(lái)可能編譯會(huì)報(bào)錯(cuò),把報(bào)錯(cuò)的代碼刪除即可:
externalNativeBuild/xxx/build.ninja
-
build.sh中的NDK路徑如何設(shè)置?
定位到android-ndk-r17c目錄下,執(zhí)行pwd
然后設(shè)置NDK的環(huán)境變量即可:
export NDK=/root/softffmpeg/android-ndk-r17c
查看NDK的路徑:

- 如果執(zhí)行build.sh沒(méi)有權(quán)限,則需要執(zhí)行:
chmod +x build.sh
build.sh的作用是執(zhí)行configure,生成Makefile文件,下面是成功執(zhí)行的結(jié)果:

接著執(zhí)行
make
make install
執(zhí)行成功會(huì)在當(dāng)前目錄下生成一個(gè)android目錄,里面就是所需的靜態(tài)庫(kù)和頭文件。

通過(guò)執(zhí)行
tree lib/
可以看到靜態(tài)庫(kù)的樹(shù)形結(jié)構(gòu)

