FFmpeg編譯Android使用的so庫

weixin_34208283發表於2018-09-28

Android平臺下FFmpeg類庫一共包含下面8個:


2846231-5cffa956ecf4f3be.png
image.png

上圖是我編譯好的arm架構的,我編譯的FFmpeg的版本為2.6.9,NDK版本為R12b,編譯環境為Linux。

1、Linux環境下NDK配置

1、安裝vim
2、配置vim
vim /etc/vim/vimrc 開啟vim的配置檔案
set nu 顯示行號
set tabstop tab鍵長度
set cursorline 高亮顯示當前這一行
set ruler 右下角顯示游標位置
3、下載NDK Linux環境的包
NDK下載連結
4、解壓NDK安裝包
5、配置NDK環境
vim ~/.bashrc 在末尾加上如下你NDK目錄配置如下圖:

2846231-41d4dd62a9656294.png
image.png

然後儲存退出
source ~/.bashrc 更新一下環境變數
執行ndk-build命令,如下圖NDK配置完成
2846231-eaa13c6708448f8b.png
image.png

2、FFmpeg下載解壓

FFmpeg下載地址
自行選擇對應的版本

3、執行FFmpeg的configure檔案

cd到FFmpeg解壓目錄
vim configure,修改幾行命令

2846231-18b0ccafc0caf267.png
image.png

然後執行 ./configure 命令,如果沒有安裝yasm,執行 ./configure --disable-yasm

4、編寫編譯shell指令碼

我的指令碼如下:


2846231-a4b4ebf166cd3b86.png
image.png

指令碼中可以盡情發揮,FFmpeg有幾大模組,你需要什麼就配置什麼,這樣可以減少so庫的大小。

5、編譯

執行編寫的shell指令碼 ./buil_android.sh就完事了。就這麼簡單

6、題外話

如上編譯,如果專案中幾大模組都需使用的話,8個so庫都的搬運到專案中去,CMAKE配置挺麻煩的,有沒有簡單的辦法,只有一個so庫呢?答案是肯定的,必須有啊,哈哈。

2846231-e2d1902bad3d0e4b.png
image.png

這次指令碼跟上面不一樣,這是編譯生成的是.a檔案,libavcodec.a,libavfilter.a,libswresample.a,libavformat.a,libavutil.a,libswscale.a,libpostproc.a,libavdevice.a
該指令碼執行完後,會把上述的.a檔案打包為1個.so檔案:libffmpeg.so,這是make install後面的那一行命令的結果。

相關文章