Windows 下編譯 FFmpeg 小記(移植到Android)

本文是基于 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

參考文章:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容