這篇文章的目的是使用NDK編譯ffmpeg源碼庵芭,將編譯成功的庫文件在Android平臺使用開發(fā)音視頻。
我這里使用的是xShell鏈接阿里云的服務(wù)器涯曲,當(dāng)然你也可以使用自己的Linux操作平臺野哭,我這里使用的是Ubantu。
然后下載NDK幻件,根據(jù)自己的平臺可以下載最新版本或者舊版本拨黔,我這里使用的是版本17的NDK,完成后解壓绰沥。
然后下載ffmpeg源碼篱蝇,下載并解壓。
最終如下所示
新建一個build.sh文件揪利,放在ffmpeg-4.0.2目錄下态兴,里面執(zhí)行的是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可以獲得,復(fù)制過來可能編譯會報(bào)錯疟位,把報(bào)錯的代碼刪除即可:
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沒有權(quán)限,則需要執(zhí)行:
chmod +x build.sh
build.sh的作用是執(zhí)行configure绍撞,生成Makefile文件正勒,下面是成功執(zhí)行的結(jié)果:
接著執(zhí)行
make
make install
執(zhí)行成功會在當(dāng)前目錄下生成一個android目錄,里面就是所需的靜態(tài)庫和頭文件傻铣。
通過執(zhí)行
tree lib/
可以看到靜態(tài)庫的樹形結(jié)構(gòu)