FFmpeg是一套很是強大的音視頻處理工具,在音視頻領域絕對是一個元老級的存在,圍繞FFmpeh能夠進行音視頻編解碼,裁剪,拼接等操做。 今天的主題就是使用NDK進行教交叉編譯,生成so文件在Android上使用html
FFmpeg官網下載:www.ffmpeg.org/download.ht…python
也能夠Git下載 git clone git.ffmpeg.org/ffmpeg.git ffmpeglinux
默認編譯出來的so庫版本號是在.so以後,Android識別不了,因此要修改configure文件android
使用sublime打開configure,大概在3305行git
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)'
複製代碼
把上面幾行直接改爲ide
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
複製代碼
這個文件須要本身在FFmpeg根目錄下手動建立,直接在sublime新建一個.sh文件。此腳本網上不少,大部分能夠直接拿過來使用,可是要注意修改NDK目錄。下面我提供一個修改以後的腳本以供參考工具
# ndk環境
export NDK=/Users/CH/Learn/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-14/arch-arm
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CPU=armv7-a
# 要保存動態庫的目錄,這裏保存在源碼根目錄下的android/armv7-a
export PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
function build_android
{
./configure
--target-os=linux
--prefix=$PREFIX \
--enable-cross-compile \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--enable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--arch=arm \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
# 不肯定本身上面的目錄或者環境有沒有錯誤時
# 能夠先註釋一下下面兩個命令
# make
# make install
}
build_android
複製代碼
進入到腳本根目錄,若是你是第一次執行可能會提示權限不足,以下:測試
Permission deniedui
授予權限便可:google
chmod 777 build_android.sh
複製代碼
而後從新執行
./build_android.sh
複製代碼
此處若是腳本文件環境配置正常會提示一個WARNING,不用管它繼續執行
make
複製代碼
大概15分鐘以後執行結束根目錄下你配置的輸出目錄下看到.so文件和頭文件兩個文件夾,以下圖:
儘可能先執行./build_android 確認配置無問題在執行 make 和 makeinstall 由於編譯一次大概十幾分鍾。因此說必定先確認環境,目錄無問題在執行 make
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build
那就說明你沒有安裝彙編工具yasm
直接在終端執行
brew install yasm
複製代碼
便可安裝
No such file or directory make: Error 127
這說明你的輸出目錄找不到,儘可能不要把輸出目錄建在系統下。還有一點最好手動把輸出目錄設置爲可讀寫(雖然可能已是可讀寫了~)
目前在我編譯過程當中最新版本3.4.2是不行的,我目前使用的是3.0.11
到官網手動 下載ndk(我使用的是android-ndk-r14b)
developer.android.google.cn/ndk/downloa…
編譯過程當中必定要耐心再耐心~特別像我這種不會C不會Linux的,簡直是在看天書各類google,下一篇會講述把so包集成到Android中。