FFmpeg編譯(一)
Don't run from who you are.
不要自我逃避。
FFmpeg 是廣泛使用的多媒體解決方案。因為其功能強大,音視訊開發幾乎都會使用到它。 下面就開始編譯android平臺下FFmpeg動態庫 .so
吧~
編譯環境
- 編譯系統:Ubuntu 18.04 LTS
- FFmpeg版本:ffmpeg-3.2.13
- NDK版本:ndk-r14b
友情提示:ffmpeg和ndk不要選擇最新和較老的版本,使用最新版本如果發生問題不太容易在找到解決方案,並且對初次嘗試的人來說極其不友好,等熟悉了在嘗試用最新的版本進行編譯也不遲(如果你時間多並且願意折騰請忽略)!
先安裝下面將用到的工具
sudo apt-get install make sudo apt-get install yasm sudo apt-get install gcc sudo apt-get install vim
配置NDK環境
首先在 /etc/profile.d/
目錄下建立我們環境變數指令碼,該目錄指令碼在系統啟動時會被執行,相比於在 /etc/profile
配置環境變數更安全一些,不怕誤刪了什麼變數。新增和刪除都只涉及到我們自己的 .sh
。
cd /etc/profile.d/ #建立ndk環境變數指令碼 sudo touch android_ndk_env.sh #開啟指令碼 vim android_ndk_env.sh
在 android_ndk_env 新增環境變數
#替換成你電腦中的ndk路徑,這裡是我的ndk路徑 export ANDROID_NDK=/opt/ndk/android-ndk-r14b export PATH=$PATH:$ANDROID_NDK
編寫shell指令碼
#進入對應的ffmpeg目錄 cd /opt/workspace/ffmpeg/ffmpeg-3.2.13/ #新建編譯指令碼 sudo touch build_android.sh #編輯指令碼 vim build_android.sh
build_android.sh
指令碼內容如下:
make clean #此處修改成你NDK路徑 export NDK=/opt/ndk/android-ndk-r14b export SYSROOT=$NDK/platforms/android-21/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="-Os -fpic -marm" #編譯用到的庫檔案 export ISYSROOT=$NDK/sysroot #編譯用到asm檔案 export ASM=$ISYSROOT/usr/include/arm-linux-androideabi #呼叫ffmpeg中的configure工具生成相關配置及標頭檔案 #根據實際情況修改配置,詳見./configure --help ./configure --target-os=android \ --prefix=$PREFIX --arch=arm \ --disable-doc \ --enable-shared \ --disable-static \ --disable-yasm \ --disable-symver \ --disable-gpl \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-doc \ --disable-symver \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="$ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG #相關配置檔案生成後開始編譯 make clean make make install
開始編譯
編譯需先給ndk,FFmpeg賦予許可權。
#替換成你的實際目錄 chmod 777 -R ndk chmod 777 -R ffmpeg
給予許可權後進入FFmpeg目錄執行下面片段開始編譯
cd /opt/workspace/ffmpeg/ffmpeg-3.2.13/ ./build_android.sh
如果不出意外的話,經過漫長的編譯過程在當前android目錄下可看到如下

結果.png
到此就達到了本篇的目的(編譯成功),後續將在app裡使用so