NDKr20使用clang編譯ffmpeg

我收集了一些學習用的資料,其中包含了不少學習,面試,中高進階fluuter資料,還有不少視頻詳解,若是有同窗想進一步瞭解,詳情請看文末。也歡迎各路大神門前來裝X。

t01e48f9d7ea02d9ef0.jpg

經過這篇文章瞭解c/c++編譯器的基本使用,可以在後續移植第三方框架進行交叉編譯時(編譯android可用的庫),清楚的瞭解應該傳遞什麼參數,怎麼傳遞參數給編譯器,各個參數的意義是什麼,從而爲後面音視頻的深刻學習編譯ffmpeg作好準備工做。android

有關ffmpeg的編譯資料網上一大推,可是照着資料拷貝的運行進行編譯能順利編譯出靜態庫或靜態庫產物的寥寥無幾。c++

筆者在學習的時候也是踩了不少的坑,確實是每次編譯會誕生一個放棄的念頭,緣由仍是本身的基礎學得不夠紮實。面試

由於ffmpeg和NDK都是在不斷進行迭代的,好比說NDK在r18以後以後完全移除了gcc(包含r18版本),ffmpeg在4.o版本開始也針對Android平臺的交叉編譯默認使用clang編譯,可是網上的不少資料都是使用gcc編譯的。shell

因此若是要對照網上資料進行編譯的話,保證NDK版本和ffmpeg版本甚至是編譯環境工具都和做者的同樣,這樣會大大提升編譯的成功率。小程序

在編譯成功以後再不斷嘗試修改參數結合搜索資料嘗試,力求弄清楚每一個參數的意義,作到舉一反三。框架

本次編譯使用的是mac蘋果電腦,使用的NDK版本是r20,ffmpeg是從官網下載的最新版4.2.2。工具

編譯腳本

從ffmpeg官網下載好源碼解壓後,進入源碼目錄,新建shell腳本文件,好比學習

腳本內容以下:ui

保存後運行腳本。spa

運行腳本的時候可能會遇到沒有權限的問題,運行命令行增長一下執行權限後再次執行便可進行編譯。

若是沒有報錯,大概幾分鐘後就能看編譯成功:
F525B39F9F04552E10C6C326F9922FB2.JPG
編譯成功

編譯成功後在目標輸出目錄下會生成三個文件,如圖:
6DAC26D1D4AAA8C97780ACAE1DAB9A7B.JPG
編譯成功後的目錄

其中目錄下是使用動態庫或靜態庫時所須要的一些頭文件;

目錄存放着編譯產物動態庫或者靜態庫;

目錄則存放一些簡單的demo,咱們能夠參照這些demo編寫音視頻的編解碼等邏輯。

一些技巧

更多參數可在ffmpeg的源碼目錄下執行查看。

CFLAG參數這麼長,怎麼來的?其實這個不用死記,能夠從AS NDK工程的.externativeBuild/cmake/debug/armeabi-v7a/build.ninja中拷貝,須要注意的是替換掉NDK的路徑地址。

與網上gcc編譯的腳本對比能夠發現少了一些相似這樣的參數,或許這就是clang的好處之一吧。

須要學習更多Android進階,高階,flutter,面試資料的請戳下面連接獲取

https://shimo.im/docs/dYkqrQc...《android學習面試fulutter進階資料免費獲取》,可複製連接後用石墨文檔 App 或小程序打開。

相關文章
相關標籤/搜索