本文是基于 Windows 10 下的 Linux 子系統(tǒng)较雕,不得不說(shuō) Win 10 的子系統(tǒng)功能特別贊账磺,默認(rèn)我們的磁盤(pán)掛載在這個(gè)系統(tǒng)上临梗,我們不需要再去裝虛擬機(jī)或者雙系統(tǒng)就可以很方便的完成 Linux 上才能做的事宇挫,大大的節(jié)省了我們的開(kāi)發(fā)時(shí)間,為在 Windows 上進(jìn)行開(kāi)發(fā)的開(kāi)發(fā)人員開(kāi)辟了一塊新的天地吹泡。
1. 如何開(kāi)啟這個(gè)子系統(tǒng)
2. 下載 ffmpeg 源碼:https://ffmpeg.org/ 骤星, 當(dāng)前版本為3.3
3. 下載 Linux 下的 NDK:https://developer.android.com/ndk/downloads/index.html
由于是在 Linux 下編譯,所以務(wù)必要下載 Linux 版本的 NDK
4. 解壓到一個(gè)文件夾爆哑,在根目錄下找到 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)'
上面的替換主要是為了解決生成 so 文件的命名問(wèn)題
5. 新建編譯腳本 & 編譯:
在與ffmpeg源碼文件夾同級(jí)的目錄下建立build_android.sh文件,內(nèi)容如下
#!/bin/sh
cd ffmpeg-3.3
make clean
#這里的這些變量根據(jù)自己本地的環(huán)境切換
export NDK=/mnt/d/ProgramFiles/Development/SDK/ndk-bundle-linux/android-ndk-r14b
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
export PLATFORM=$NDK/platforms/android-19/arch-arm
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export PREFIX=../ffmpeglib
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=armv7-a"
}
build_one
make
make install
cd ..
記得最上面的變量一定要根據(jù)自己的開(kāi)發(fā)環(huán)境切換
安裝 gcc
apt-get install gcc
安裝 make
apt-get install make
最后打開(kāi)命令行輸入 bash 進(jìn)入 linux 子系統(tǒng)泪漂,切換目錄至 build_android.sh 所在的目錄下廊营,在命令行中輸入 <code>./build_android</code> 執(zhí)行上面的腳本等待編譯的完成即可
編譯完成后ffmpeg源碼的同級(jí)目錄下會(huì)多一個(gè) ffmpeglib 目錄,此目錄中包含so庫(kù)文件以及編程會(huì)使用到的頭文件萝勤,將其拷貝到自己項(xiàng)目的目錄中即可使用露筒。
6. 新建一個(gè)Android Studio工程,寫(xiě)一個(gè)Demo
項(xiàng)目結(jié)構(gòu)如下圖(使用最新的 cmake 構(gòu)建):
本項(xiàng)目是基于雷神的 最簡(jiǎn)單的基于FFmpeg的移動(dòng)端例子:Android HelloWorld 這篇文章有更多細(xì)節(jié)的介紹敌卓。
運(yùn)行截圖:
到此本文就完了慎式,在構(gòu)建的過(guò)程中遇到了很多的坑,也花費(fèi)了不少的時(shí)間趟径,使用FFmpeg也走出了第一步瘪吏,后面還需要更多的學(xué)習(xí),如果讀者在構(gòu)建的過(guò)程中遇到問(wèn)題也歡迎留言蜗巧。
源碼地址:https://github.com/burgessjp/BlogDemo/tree/master/FFmpegStatDemoForAndroid
參考文章: