自己动手编译android ffmpeg
本文主要介紹自己動(dòng)手編譯一份ffmpeg動(dòng)態(tài)庫,解決在android開發(fā)過程中沒有合適的版本、或者合適配置的ffmepg的so庫問題
一、版本下載
首先編譯android的ffmpeg我們需要ffmpeg和ndk,而我們常用的動(dòng)態(tài)庫都是.so文件格式,因此我們得選擇linux下做編譯。
| 編譯產(chǎn)物 | libjni_impl.dylib | .obj | libjni_impl.so |
1.1、ffmpeg
ffmpeg這里使用3.4.11版本,可以去官網(wǎng)下載,也可以直接使用以下命令安裝linux版本
curl http://ffmpeg.org/release/ffmpeg-3.4.11.tar.gz > ffmpeg-3.4.11.tar.gz解壓縮
tar -zxf ffmpeg-3.4.11.tar.gz1.2、NDK
為了保證兼容性,這里使用r14b版本,可以去官網(wǎng)下載,也可以直接使用以下命令安裝linux版本
curl https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip > android-ndk-r14b-linux-x86_64.zip解壓縮
unzip android-ndk-r14b-linux-x86_64.zip二、編譯ffmpeg生成so文件
編譯ffmpeg生成so文件,用于android平臺(tái)的,這里定位架構(gòu)是armv7
2.1、build_android.sh腳本
#!/bin/bashNDK=/root/sdk/android-ndk-r14bbuild_one() { /root/sdk/ffmpeg-3.4.11/configure \--enable-cross-compile \--enable-shared \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffserver \--disable-avdevice \--disable-symver \--prefix=$PREFIX \--cross-prefix=$CROSS_COMPILE \--target-os=android \--arch=$ARCH \--sysroot=$SYSROOT--extra-cflags="-Os -fpic $ADDI_CFLAGS" \ make clean make make install }ARCH=arm CPU=armv7-a # 設(shè)置編譯后文件的輸出目錄 PREFIX=$(pwd)/android/$CPU TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- # 設(shè)置編譯針對(duì)的平臺(tái),可以根據(jù)實(shí)際需求進(jìn)行設(shè)置 # 當(dāng)前設(shè)置為最低支持android-14版本,arm架構(gòu) SYSROOT=$NDK/platforms/android-14/arch-$ARCH ADDI_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"build_one2.2、腳本解釋
–enable-cross-compile:開啟交叉比編譯
–enable-shared:開啟動(dòng)態(tài)庫
–disable-static:關(guān)閉靜態(tài)庫
–disable-doc:關(guān)閉文檔生成
–disable-ffmpeg:關(guān)閉ffmpeg的應(yīng)用程序 (由ffmpeg編譯生成exe可執(zhí)行程序,這里只需要庫不需要可執(zhí)行程序)
–disable-ffplay:關(guān)閉生成播放器的應(yīng)用程序
–disable-ffserver:關(guān)閉生成服務(wù)器的應(yīng)用程序
–disable-avdevice:關(guān)閉訪問電腦攝像頭(用于電腦,手機(jī)需要調(diào)用系統(tǒng)的api)
–disable-symver:暫時(shí)不清楚
–prefix=$PREFIX:指定生成動(dòng)態(tài)庫的位置
–cross-prefix=$CROSS_COMPILE:交叉編譯工具鏈的位置
–target-os=android:目標(biāo)操作系統(tǒng),這里寫linux操作系統(tǒng)也可以
–arch=$ARCH:這里cpu架構(gòu)是arm指令的
–sysroot=$SYSROOT:最低支持的android版本(NDK platforms結(jié)構(gòu)如下)
–extra-cflags=“-Os -fpic $ADDI_CFLAGS”:編譯C的優(yōu)化指令
make clean:清空臨時(shí)文件(這里的make是去調(diào)用makefile)
make:編譯
make install:拷貝生成產(chǎn)物到指定位置
2.3、執(zhí)行結(jié)果
sh build_android.sh在./android/armv7-a/下生成對(duì)應(yīng)sdk,lib下的就是用于android的so庫
三、流程分析
上面編譯ffmpeg腳本流程:shell -> configure -> make
首先我們編寫build_android.sh腳本,調(diào)用configure配置參數(shù),最后調(diào)用make命令生成動(dòng)態(tài)庫。
其中的make就是調(diào)用makefile,makefile是一種構(gòu)建工具,類似于Gradle(構(gòu)建.apk)、Maven(構(gòu)建.war)
總結(jié)
以上是生活随笔為你收集整理的自己动手编译android ffmpeg的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab ones函数_Matlab
- 下一篇: TensorFolw 报错