ffmpeg for android shared library
ffmpeg for android shared library
This comes from my github README
移植ffmpeg到android,編譯可用于jni調(diào)用的so庫.
編譯出的so在android apk中的使用參考我的另一個(gè)項(xiàng)目ffmpeg-jni-sample
環(huán)境
ubuntu ubuntu15.10_64
ffmpeg 2.6.2
獲取代碼
git clone https://github.com/tainzhi/ffmpeg-for-android-shared-library使用
Step 1
安裝android linux SDK以及NDK,并配置環(huán)境變量;
我的是通過Android SDK manager下載, 默認(rèn)安裝在~/Android/Sdk/ndk-build
從ffmpeg官網(wǎng)下載ffmpeg源碼包;也可以直接使用我本項(xiàng)目中的ffmpeg源碼,我所使用的是2.6.2版本
如果要使用自己下載的ffmpeg源碼,需要先將source/ffmpeg下的所有內(nèi)容刪除,然后將自己所下載的源碼包解壓到ffmpeg目錄下
Step 2
本項(xiàng)目提供了分別編譯arm平臺庫和x86庫和arm64平臺的sh文件,分別為
source/build_android_arm.sh
source/build_android_x86.sh
source/build_android_aarch64.sh
下面以build_android_arm.sh為例進(jìn)行說明:
將source/build_android_arm.sh復(fù)制到ffmpeg目錄下
1.指定臨時(shí)目錄
export TMPDIR=/tmp指定一個(gè)臨時(shí)目錄,可以是任何路徑,但必須保證存在,ffmpeg編譯要用;
2.指定NDK路徑
NDK=~/Android/Sdk/ndk-build3.指定使用NDK Platform版本
SYSROOT=$NDK/platforms/android-21/arch-arm/這里指定的ndk platform的路徑,一定要選擇比你的目標(biāo)機(jī)器使用的版本低的,比如你的手機(jī)是android-21版本,那么就選擇低于21的
4.指定編譯工具鏈
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_645.指定編譯后的安裝目錄
CPU=arm PREFIX=$(pwd)/android/$CPU顯然,生成的文件在source/ffmpeg/android/arm/目錄下
這個(gè)目錄是ffmpeg編譯后的so的輸出目錄,會有一個(gè)include和lib文件夾生成在這里,這也是我們之后要在android apk中使用的.
source/ffmpeg/android/arm/lib/目錄下是動(dòng)態(tài)庫文件.so
source/ffmpeg/android/arm/include/目錄下的是頭文件,不僅需要?jiǎng)討B(tài)庫,還需要頭文件
build_android_arm.sh參數(shù)配置
--enable-shared和--disable-static生成動(dòng)態(tài)庫
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-是一些跨平臺變異所需要的文件,不同的平臺是不一樣的
--target-os=android指定適配android平臺,我之前fork的原庫是linux,如果是linux,那么生成的庫名中有版本號,還需要重命名指定android后就不需要了
make -j8多線程加速編譯
具體查看ffmpeg文檔.
Step 3
cp source/build_android_arm.sh source/ffmpeg/ cd source/ffmpeg ./build_andrioid_arm.shStep 4編譯出現(xiàn)錯(cuò)誤
如果編譯過程中出現(xiàn)錯(cuò)誤,錯(cuò)誤信息會輸出在source/ffmpeg/config.log文件中,一般在文件末尾.仔細(xì)分析該文件,可以找到編譯出錯(cuò)的原因
Step 5
等待編譯完成后,在source/android/arm/目錄下分別有動(dòng)態(tài)庫lib和頭文件include.
Step6 重新configure&&compile
修改了build_android_arm.sh文件,發(fā)現(xiàn)參數(shù)沒有起作用,原來沒有清除之前configure生成的文件.這個(gè)命令,值得擁有
make distclean #delete files created by configure #then . ./build_android_arm.shReference & Thanks
ffmpeg-for-android
總結(jié)
以上是生活随笔為你收集整理的ffmpeg for android shared library的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知乎不看他的动态怎么设置
- 下一篇: 《巅峰战舰》实战攻略 打战舰的经验分享