This comes from my github READMElinux
移植ffmpeg到android,編譯可用於jni調用的so庫.
編譯出的so在android apk中的使用參考個人另外一個項目ffmpeg-jni-sampleandroid
ubuntu ubuntu15.10_64
ffmpeg 2.6.2
git
git clone https://github.com/tainzhi/ffmpeg-for-android-shared-library
安裝android linux SDK以及NDK,並配置環境變量;github
個人是經過Android SDK manager下載, 默認安裝在~/Android/Sdk/ndk-build
ubuntu
從ffmpeg官網下載ffmpeg源碼包;也能夠直接使用我本項目中的ffmpeg源碼,我所使用的是2.6.2版本
若是要使用本身下載的ffmpeg源碼,須要先將source/ffmpeg下的全部內容刪除,而後將本身所下載的源碼包解壓到ffmpeg目錄下
多線程
本項目提供了分別編譯arm平臺庫和x86庫和arm64平臺的sh文件,分別爲ide
source/build_android_arm.sh
工具
source/build_android_x86.sh
ui
source/build_android_aarch64.sh
idea
下面以build_android_arm.sh爲例進行說明:
將source/build_android_arm.sh
複製到ffmpeg
目錄下
export TMPDIR=/tmp
指定一個臨時目錄,能夠是任何路徑,但必須保證存在,ffmpeg編譯要用;
NDK=~/Android/Sdk/ndk-build
SYSROOT=$NDK/platforms/android-21/arch-arm/
這裏指定的ndk platform的路徑,必定要選擇比你的目標機器使用的版本低的
,好比你的手機是android-21版本,那麼就選擇低於21的
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm PREFIX=$(pwd)/android/$CPU
顯然,生成的文件在source/ffmpeg/android/arm/
目錄下
這個目錄是ffmpeg編譯後的so的輸出目錄,會有一個include和lib文件夾生成在這裏,這也是咱們以後要在android apk中使用的.
source/ffmpeg/android/arm/lib/
目錄下是動態庫文件.so
source/ffmpeg/android/arm/include/
目錄下的是頭文件,不只須要動態庫,還須要頭文件
--enable-shared
和--disable-static
生成動態庫
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
是一些跨平臺變異所須要的文件,不一樣的平臺是不同的
--target-os=android
指定適配android平臺,我以前fork的原庫是linux,若是是linux,那麼生成的庫名中有版本號,還須要重命名指定android後就不須要了
make -j8
多線程加速編譯
具體查看ffmpeg文檔.
cp source/build_android_arm.sh source/ffmpeg/ cd source/ffmpeg ./build_andrioid_arm.sh
若是編譯過程當中出現錯誤,錯誤信息會輸出在source/ffmpeg/config.log
文件中,通常在文件末尾.仔細分析該文件,能夠找到編譯出錯的緣由
等待編譯完成後,在source/android/arm/
目錄下分別有動態庫lib
和頭文件include
.
修改了build_android_arm.sh
文件,發現參數沒有起做用,原來沒有清除以前configure生成的文件.這個命令,值得擁有
make distclean #delete files created by configure #then . ./build_android_arm.sh