###前言linux
咱們進行Android FFmpeg開發的時候,須要一些FFmpeg預編譯的庫,這些預編譯的so庫須要在Linux環境下編譯。android
###Linux下FFmpeg編譯shell
因爲筆者公司的電腦是Ubuntu14.04系統,所以咱們直接使用Ubuntu系統進行編譯。讀者也能夠本身搭建Linux虛擬機或者購買雲服務器。vim
####關於雲服務器的購買bash
####1、準備NDK服務器
編譯FFmpeg的時候須要用到NDK。微信
在Linux環境中,咱們須要有一個NDK的壓縮包,例如:架構
android-ndk-r10e-linux-x86_64.bin
複製代碼
而後執行下面的命令進行解壓縮便可(注意權限問題):ide
./android-ndk-r10e-linux-x86_64.bin
複製代碼
####2、配置NDK環境變量ui
環境變量配置
vim ~/.bashrc(~表明當前用戶)
複製代碼
編輯:
export NDKROOT=你的NDK根目錄
export PATH=$NDKROOT:$PATH
複製代碼
更新(否則的話就須要重啓命令行)
source ~/.bashrc
複製代碼
####3、準備FFmpeg
咱們須要去FFmpeg官網下載FFmpeg的Linux源碼,版本不須要太新:
ffmpeg-2.6.9.zip
複製代碼
而後執行解壓縮命令:
uzip ffmpeg-2.6.9.zip
複製代碼
####4、編寫shell腳本
咱們須要編寫shell腳本傳參調用ffmpeg-2.6.9下的configure腳本,進行編譯,咱們寫的shell腳本以下,build_android.sh:
#!/bin/bash
make clean
export NDK=/home/wuhuannan/Android/Sdk/ndk-bundle
export SYSROOT=$NDK/platforms/android-14/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
複製代碼
指定NDK的一些路徑,配置CPU架構類型,PREFIX是指定動態庫輸出的路徑,而後disable一些不須要的庫(可減少輸出的動態庫的大小)等等。enable-shared是生成共享庫的意思。
注意:
####5、修改configure文件
ffmpeg-2.6.9根目錄下有個configure文件,這個文件比較重要。咱們本身寫的腳本文件就是依據這個文件來寫的。
經過這個文件咱們能夠看到FFmpeg庫之間的依賴關係,例如:
avcodec_example_deps="avcodec avutil"
複製代碼
一些編譯指令。
這裏咱們須要修改一下輸出的動態庫的命名規則:
#註釋的部分
#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)'
複製代碼
####6、執行腳本文件
咱們須要把咱們本身寫的build_android.sh放到ffmpeg-2.6.9根目錄下,而後授予權限,執行:
./build_android.sh開始編譯
複製代碼
編譯過程當中會臨時先自動生成c.mak文件,頭文件等。編譯大概幾分鐘時間。
####7、最終編譯輸出的動態庫文件以下:
這些庫咱們就能夠直接放到Android Studio工程中使用了。
若是以爲個人文字對你有所幫助的話,歡迎關注個人公衆號:
個人羣歡迎你們進來探討各類技術與非技術的話題,有興趣的朋友們加我私人微信huannan88,我拉你進羣交(♂)流(♀)。