本文是基于 Windows 10 下的 Linux 子系統,不得不說 Win 10 的子系統功能特別贊,默認我們的磁盤掛載在這個系統上,我們不需要再去裝虛擬機或者雙系統就可以很方便的完成 Linux 上才能做的事,大大的節省了我們的開發時間,為在 Windows 上進行開發的開發人員開辟了一塊新的天地。
1. 如何開啟這個子系統
2. 下載 ffmpeg 源碼:https://ffmpeg.org/ , 當前版本為3.3
3. 下載 Linux 下的 NDK:https://developer.android.com/ndk/downloads/index.html
由于是在 Linux 下編譯,所以務必要下載 Linux 版本的 NDK
4. 解壓到一個文件夾,在根目錄下找到 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 文件的命名問題
5. 新建編譯腳本 & 編譯:
在與ffmpeg源碼文件夾同級的目錄下建立build_android.sh文件,內容如下
#!/bin/sh
cd ffmpeg-3.3
make clean
#這里的這些變量根據自己本地的環境切換
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 ..
記得最上面的變量一定要根據自己的開發環境切換
安裝 gcc
apt-get install gcc
安裝 make
apt-get install make
最后打開命令行輸入 bash 進入 linux 子系統,切換目錄至 build_android.sh 所在的目錄下,在命令行中輸入 <code>./build_android</code> 執行上面的腳本等待編譯的完成即可
編譯完成后ffmpeg源碼的同級目錄下會多一個 ffmpeglib 目錄,此目錄中包含so庫文件以及編程會使用到的頭文件,將其拷貝到自己項目的目錄中即可使用。
6. 新建一個Android Studio工程,寫一個Demo
項目結構如下圖(使用最新的 cmake 構建):
本項目是基于雷神的 最簡單的基于FFmpeg的移動端例子:Android HelloWorld 這篇文章有更多細節的介紹。
運行截圖:
到此本文就完了,在構建的過程中遇到了很多的坑,也花費了不少的時間,使用FFmpeg也走出了第一步,后面還需要更多的學習,如果讀者在構建的過程中遇到問題也歡迎留言。
源碼地址:https://github.com/burgessjp/BlogDemo/tree/master/FFmpegStatDemoForAndroid
參考文章: