編譯FFmpeg源文件并在Android Studio中使用的簡單例子

挖個坑。等我踩完這個系列的坑來再來填。先粗略寫下。

編譯環境:win7+Android Studio

————————————

具體實現:在Android Studio下使用FFmpeg的最簡單輸出Hello Wworld。

這里需要用到NDK,目前還無法熟練使用,因此記錄下來。



首先,我們需要下載FFmpeg源碼。

下載地址:http://ffmpeg.org/download.html

然后下載:MinGW。

下載完畢后MinGW需要安裝。安裝時其實先裝的是個下載管理器,到選擇安裝選項的時候要選上msys-base和mingw32-gcc-ada兩項。


選擇[Installation] - [Apply Changes],安裝

成功安裝后如下圖。


然后添加環境變量。


運行D:\MinGW\msys\1.0目錄下的msys.bat,cd到ffmpeg目錄執行build_android.sh

msys.bat類似于Windows中的cmd。



復制粘貼的命令可以參考此鏈接:

https://segmentfault.com/q/1010000002898504

使用shift + insert應該是可以粘貼的,至于復制,應該可以配置為選中即復制。

不知道為什么無法編譯成功,可能是因為之前錯誤地進行了編譯,改變了源文件,因此我再重新試試。


編寫build_android.sh腳本文件,如果從網上直接copy過去可能會是dos格式,使用dos2unix build_android.sh 轉換一下,刪掉多余空格。(出處:http://www.cnblogs.com/blogs-of-lxl/p/6252130.html?utm_source=itdadao&utm_medium=referral)


結果認真地修改了如圖所示處


后來發現之前的錯誤原因在于build_android.sh中TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64

這一句的路徑設置錯誤了。因為代碼的出處編譯環境是Mac,而Mac跟Windows路徑是不一樣的,Mac環境下是darwin-x86_64,Windows是windows-x86_64。

重新執行,結果依然是會報錯的,比如出現command not found。

但是其實實際上已經在生成so文件了。然后就需要漫長的等待了。需要幾分鐘,去吃根雪糕冷靜下先。


最后成功生成一系列.h文件。


新建的ffmpegtemp目錄下會生成文件。

D:\ffmpeg\ffmpeg-3.3.3\ffmpegtemp

ffmpeg-3.3.3目錄下也會生成一個android文件。,這里面有so文件。

到這里為止,ffmpeg庫文件就編譯好啦~

可以被Android Studio使用啦~

下面開始使用Android Studio測試編譯好的SO庫。

創建工程,并新建 jni 目錄。

(這里新建普通的工程文件就好,不用勾選include C++,我第一次新建的時候新建錯了,后來重新建立了一個工程文件那些才能正常運行)。

Android Studio如何創建.mk文件

右鍵 新建-file 在輸入的時候加上.mk即可


雖然報錯,但是依舊成功生成頭文件。


運行ndk-build(需配置NDK環境變量。em...配置好安卓SDK開發環境之后還需配置環境變量,配置NDK環境變量看這里

http://www.lxweimin.com/p/0099d0e5d3d7

http://www.lxweimin.com/p/708e6bf68ae9)。

測試是否成功配置方法,通過cmd進入命令行,輸入ndk-build。

下圖為未配置情況。

下面進行配置

這里可以看出NDK是已經安裝好了的,但是并沒有配置環境。

首先下載NDK(雖然AS中安裝了NDK但是還是需要下載),下載地址:

https://developer.android.com/ndk/downloads/index.html


谷歌中國站雖然開通了,所以可以使用下面的這個網站,

這里是中國站下載地址:https://developer.android.google.cn/ndk/downloads/index.html

比較下發現貌似就是google后面加了cn,所以以后如果沒有遇到developer.android.google打不開網站鏈接的情況下可以試試加cn訪問中國站啦。

選擇所需版本。



下好之后解壓到android-ndk文件夾中,然后配置環境。

再通過cmd進入命令行,輸入ndk-build檢測是否配置好。

此時,如下圖所示:


切換到Android程序src/main/jni目錄中,直接執行ndk-build腳本就可以了。


成功生成如下圖所示。

生成是SO文件在 src/main/libs/armeabi-v7a中


現在,還需要配置gradle文件才能運行。

在buildTypes之前的位置加上,

sourceSets.main{

jniLibs.srcDir'src/main/libs'

jni.srcDirs=[]

}


這時就可以運行程序查看效果了。

報了個錯。android:onClick不能用

參考網址:http://blog.csdn.net/shaw1994/article/details/18953771

http://blog.csdn.net/xlh1191860939/article/details/53019592

java.lang.IllegalStateException: Could not execute method for android:onClick


結果發現是因為xml文件中context沒配置好。

cannot resolve corresponding JNI function的解決方法

File--->Setting--->plugins

將 Android NDK Support 的對勾勾掉

然后重啟AS

過程中還發現一個問題,結果發現是因為生成的com_cc_myapplication_MainActivity.h文件不全導致的。(因為在編寫MainActivity之前生成了),因此無法調用native函數。

產生這個錯誤表示無法調用native函數,沒有配置好。

07-30 20:32:15.460 19330-19330/com.cc.myapplication E/art: No implementation found for java.lang.String com.cc.myapplication.MainActivity.avformatinfo() (tried Java_com_cc_myapplication_MainActivity_avformatinfo and Java_com_cc_myapplication_MainActivity_avformatinfo__)


還有這里也需要改,總之,無法調用的話,一定是沒有配置好。復制代碼的時候,得看看包名是否都改了,又或者,你可以直接把自己的工程的包名建成跟作者一樣,這樣就不用改了。

改完之后,需要重新使用ndk-build編譯生成可以通過JNI調用的類庫,否則還是之前生成的類庫,依然會報錯。

其實程序調用的是這里的文件。


最后成功圖片有4張,分別點擊4個按鈕結果如下圖:



編譯FFmpeg生成了六個SO文件,現在把這6個合成一個,修改腳本文件build_android.sh。



改為

–enable-static

–disable-shared

以及在install后面加上一段。

然后重新開始編譯ffmpeg庫。



syntax error: unexpected end of file

DOS下文件和Linux下文件格式差異問題導致的。

發現是這段出現了問題(因為刪掉這里才可以正常編譯)。

dos2unix build_android.sh? 嘗試使用這個刪除多余的空格,但是依然不行。http://blog.csdn.net/pml18710973036/article/details/68482885

解決辦法應該是需要使用vim來轉換格式。這里就這樣吧,應該是換行引起的錯誤,需要使用Linux環境來進行編寫shell文件,我先跳過這個問題,不再多糾結。

$TOOLCHAIN/bin/arm-linux-androideabi-ld \

-rpath-link=$PLATFORM/usr/lib \

-L$PLATFORM/usr/lib \

-L$PREFIX/lib \

-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \

$PREFIX/libffmpeg.so \

libavcodec/libavcodec.a \

libavfilter/libavfilter.a \

libswresample/libswresample.a \

libavformat/libavformat.a \

libavutil/libavutil.a \

libswscale/libswscale.a \

-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \

$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a \


$ chmod +x build_android.sh

$ ./build_android.sh


————————————————————————————

這里是坑的分割線。。。。

參考鏈接:

最主要是這個鏈接:http://www.ihubin.com/blog/android-ffmpeg-demo-2/ ?

http://blog.csdn.net/hejjunlin/article/details/52661331

http://blog.csdn.net/leixiaohua1020/article/details/47008825

http://www.lxweimin.com/p/dfd0de17601c

http://www.cnblogs.com/tt2015-sz/p/6148723.html


Windows下使用MinGW編譯FFmpeg

https://forevas.github.io/2017/03/20/Windows%E4%B8%8B%E4%BD%BF%E7%94%A8MinGW%E7%BC%96%E8%AF%91FFmpeg/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容