FFmpeg4Android移植封裝

本篇文章已授權(quán)微信公眾號(hào) guolin_blog (郭霖)獨(dú)家發(fā)布

背景:

公司項(xiàng)目哪痰,iOS端說Android端拍的視頻,碼率不對(duì)茂装,他無法播放怎诫。圖片和視頻的選擇或拍攝一直用的PictureSelector,問了開源作者才知道錄制的沒做任何處理蓝晒,直接調(diào)用的系統(tǒng)拍攝腮出,只提供了設(shè)置拍攝的質(zhì)量為0還是1的方法,無奈芝薇,只能想著自己壓縮了胚嘲。說到視頻的處理,現(xiàn)在最火的肯定還是FFmpeg洛二。FFmpeg的移植馋劈,不難,就是太坑了晾嘶。既然移植比較麻煩妓雾,我想著能不能將FFpemg移植后封裝成一個(gè)lib,以后其他項(xiàng)目使用直接引用垒迂,不需要再移植了械姻,經(jīng)過三天的各種折騰和測(cè)試,終于成功了机断。楷拳。绣夺。。

A 源碼下載

首先把ffmpeg-3.2.4的源碼下載下來唯竹,源碼最好就下載我這個(gè)乐导,我最開始用的官網(wǎng)的最新版本,build的時(shí)候老是報(bào)錯(cuò)浸颓,最后換成3.2.4物臂,就不再報(bào)錯(cuò)了!

下載下來后解壓放到純英文路徑下产上,然后將源碼路徑添加到環(huán)境變量中

B 編譯FFmpeg生成.so文件

1 在main目錄下新建jni文件夾
圖片.png

直接點(diǎn)擊finish自動(dòng)生成

2 copy FFmpeg的源碼和.mk文件到j(luò)ni

將Demo中jni里的這些文件拷貝到你model中的jni棵磷,圖中紅色選中的三個(gè)不要復(fù)制,這個(gè)是根據(jù)項(xiàng)目生成的(如果你直接引用這個(gè)model晋涣,就不用管)仪媒。


圖片.png
3 如圖將FFmpegKit的代碼copy到j(luò)ava工程中
圖片.png
4 編譯FFmpegKit

控制臺(tái)中切到j(luò)ava文件夾目錄下,輸入javah com.ffmpegtest.xxx.utils.FFmpegKit (FFmpegKit的引用路徑)谢鹊,只有在java目錄下執(zhí)行這行命令才能成功算吩,直接進(jìn)到Utils目錄執(zhí)行會(huì)報(bào)找不到.so文件,編譯成功后會(huì)生成圖中黑框中的兩個(gè)c++文件佃扼,剪貼這兩個(gè)文件到j(luò)ni文件夾中

圖片.png

5 創(chuàng)建com_ffmpegtest_www_utils_FFmpegKit.c文件
圖片.png

你或許會(huì)注意到新建的文件和生成的哪個(gè).h文件名稱一致偎巢,只是格式不同。對(duì)兼耀,沒錯(cuò)压昼,必須一致,這是按照項(xiàng)目包名生成的瘤运,不能隨便更改窍霞!

6 修改Android.mk和Application.mk

1 更改Android.mk中LOCAL_SRC_FILES值和FFmpeg源碼路徑


圖片.png

2 Application.mk中,設(shè)置生成so庫拯坟,這里我們只設(shè)置生成armeabi-v7a下的(其他庫空格添加生成但金,考慮到生成的so文件都是10M+,就沒設(shè)置其他的)


圖片.png
6 其他配置

1 在app下的gradle中設(shè)置so庫支持和路徑讀人扑:


圖片.png

2 Manifest中添加版本設(shè)置(別忘了添加讀寫和攝像頭權(quán)限)

圖片.png

3 gradle.properties中添加 android.useDeprecatedNdk=true傲绣,不添加可能會(huì)爆xxx.so" is 32-bit instead of 64-bit的錯(cuò)誤
圖片.png

C 編譯FFmpeg生成.so文件

以上配置完成后,就可以編譯了巩踏,控制臺(tái)中切換到j(luò)ni目錄下秃诵,執(zhí)行ndk-build命令(需要配置ndk),執(zhí)行完成后塞琼,會(huì)自動(dòng)生成libs和obj兩個(gè)文件夾菠净,這就是我們需要的.so文件了。


這里插一句:如果編譯的時(shí)候報(bào)各種警告,生成的.so是不行的毅往,把我們上面的新建的哪個(gè)com_ffmpegtest_www_utils_FFmpegKit.c文件牵咙,隨便亂刪除點(diǎn)東西保存后執(zhí)行ndk-build,然后再恢復(fù)正確攀唯,再執(zhí)行ndk-build洁桌,不要問我為什么,姑且理解為編譯器不識(shí)好歹侯嘀!

D 總結(jié)

到此為止另凌,F(xiàn)Fmpeg的移植就完成了,至于怎么壓縮怎么添加水印戒幔,那是FFmpeg命令行的具體應(yīng)用了吠谢,大家結(jié)合著Demo和FFmpeg文檔自求多福吧。Demo中的ffmpeglib已經(jīng)封裝好诗茎,大家可以在項(xiàng)目中直接import model使用(親測(cè)沒問題)工坊,避免了每次都要編譯,而且獨(dú)立的mk和gradle配置敢订,免去了和其他第三方庫的沖突王污。

十分感謝reverse_Android對(duì)此次集成的幫助和解答。

參考文章:

最簡(jiǎn)單的基于FFmpeg的移動(dòng)端例子:Android HelloWorld

FFmpeg-Android拍攝壓縮Demo(敲黑板)

仿微信視頻拍攝UI, 基于ffmpeg的視頻錄制編輯(上)(api>22的情況下無法找不到so文件楚午,慎用)

項(xiàng)目源碼github傳送門

碎碎念:諸君若是喜歡玉掸,請(qǐng)star,謝謝醒叁!

更多問題加群:584275290

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市泊业,隨后出現(xiàn)的幾起案子把沼,更是在濱河造成了極大的恐慌,老刑警劉巖吁伺,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饮睬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡篮奄,警方通過查閱死者的電腦和手機(jī)捆愁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窟却,“玉大人昼丑,你說我怎么就攤上這事】浜眨” “怎么了菩帝?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我呼奢,道長(zhǎng)宜雀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任握础,我火速辦了婚禮辐董,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禀综。我一直安慰自己简烘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布菇存。 她就那樣靜靜地躺著夸研,像睡著了一般。 火紅的嫁衣襯著肌膚如雪依鸥。 梳的紋絲不亂的頭發(fā)上亥至,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音贱迟,去河邊找鬼姐扮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛衣吠,可吹牛的內(nèi)容都是我干的茶敏。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼缚俏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惊搏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忧换,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤恬惯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亚茬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酪耳,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年刹缝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碗暗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梢夯,死狀恐怖言疗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厨疙,我是刑警寧澤洲守,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布疑务,位于F島的核電站,受9級(jí)特大地震影響梗醇,放射性物質(zhì)發(fā)生泄漏知允。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一叙谨、第九天 我趴在偏房一處隱蔽的房頂上張望温鸽。 院中可真熱鬧,春花似錦手负、人聲如沸涤垫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝠猬。三九已至,卻和暖如春统捶,著一層夾襖步出監(jiān)牢的瞬間榆芦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國打工喘鸟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匆绣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓什黑,卻偏偏與公主長(zhǎng)得像崎淳,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子愕把,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361