編譯FFmpeg源文件并在Android Studio中使用的簡(jiǎn)單例子

挖個(gè)坑。等我踩完這個(gè)系列的坑來(lái)再來(lái)填莺禁。先粗略寫(xiě)下攻冷。

編譯環(huán)境:win7+Android Studio

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

具體實(shí)現(xiàn):在Android Studio下使用FFmpeg的最簡(jiǎn)單輸出Hello Wworld未荒。

這里需要用到NDK承耿,目前還無(wú)法熟練使用,因此記錄下來(lái)博投。



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

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

然后下載:MinGW毅哗。

下載完畢后MinGW需要安裝听怕。安裝時(shí)其實(shí)先裝的是個(gè)下載管理器,到選擇安裝選項(xiàng)的時(shí)候要選上msys-base和mingw32-gcc-ada兩項(xiàng)虑绵。


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

成功安裝后如下圖。


然后添加環(huán)境變量翅睛。


運(yùn)行D:\MinGW\msys\1.0目錄下的msys.bat筷厘,cd到ffmpeg目錄執(zhí)行build_android.sh

msys.bat類(lèi)似于Windows中的cmd。



復(fù)制粘貼的命令可以參考此鏈接:

https://segmentfault.com/q/1010000002898504

使用shift + insert應(yīng)該是可以粘貼的宏所,至于復(fù)制,應(yīng)該可以配置為選中即復(fù)制摊溶。

不知道為什么無(wú)法編譯成功爬骤,可能是因?yàn)橹板e(cuò)誤地進(jìn)行了編譯,改變了源文件莫换,因此我再重新試試霞玄。


編寫(xiě)build_android.sh腳本文件骤铃,如果從網(wǎng)上直接copy過(guò)去可能會(huì)是dos格式,使用dos2unix build_android.sh 轉(zhuǎn)換一下坷剧,刪掉多余空格惰爬。(出處:http://www.cnblogs.com/blogs-of-lxl/p/6252130.html?utm_source=itdadao&utm_medium=referral)


結(jié)果認(rèn)真地修改了如圖所示處


后來(lái)發(fā)現(xiàn)之前的錯(cuò)誤原因在于build_android.sh中TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64

這一句的路徑設(shè)置錯(cuò)誤了。因?yàn)榇a的出處編譯環(huán)境是Mac惫企,而Mac跟Windows路徑是不一樣的撕瞧,Mac環(huán)境下是darwin-x86_64,Windows是windows-x86_64狞尔。

重新執(zhí)行丛版,結(jié)果依然是會(huì)報(bào)錯(cuò)的,比如出現(xiàn)command not found偏序。

但是其實(shí)實(shí)際上已經(jīng)在生成so文件了页畦。然后就需要漫長(zhǎng)的等待了。需要幾分鐘研儒,去吃根雪糕冷靜下先豫缨。


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


新建的ffmpegtemp目錄下會(huì)生成文件端朵。

D:\ffmpeg\ffmpeg-3.3.3\ffmpegtemp

ffmpeg-3.3.3目錄下也會(huì)生成一個(gè)android文件好芭。,這里面有so文件逸月。

到這里為止栓撞,ffmpeg庫(kù)文件就編譯好啦~

可以被Android Studio使用啦~

下面開(kāi)始使用Android Studio測(cè)試編譯好的SO庫(kù)。

創(chuàng)建工程,并新建 jni 目錄碗硬。

(這里新建普通的工程文件就好瓤湘,不用勾選include C++,我第一次新建的時(shí)候新建錯(cuò)了恩尾,后來(lái)重新建立了一個(gè)工程文件那些才能正常運(yùn)行)弛说。

Android Studio如何創(chuàng)建.mk文件

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


雖然報(bào)錯(cuò),但是依舊成功生成頭文件翰意。


運(yùn)行ndk-build(需配置NDK環(huán)境變量木人。em...配置好安卓SDK開(kāi)發(fā)環(huán)境之后還需配置環(huán)境變量,配置NDK環(huán)境變量看這里

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

http://www.reibang.com/p/708e6bf68ae9)冀偶。

測(cè)試是否成功配置方法醒第,通過(guò)cmd進(jìn)入命令行,輸入ndk-build。

下圖為未配置情況进鸠。

下面進(jìn)行配置

這里可以看出NDK是已經(jīng)安裝好了的稠曼,但是并沒(méi)有配置環(huán)境。

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

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


谷歌中國(guó)站雖然開(kāi)通了霞幅,所以可以使用下面的這個(gè)網(wǎng)站漠吻,

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

比較下發(fā)現(xiàn)貌似就是google后面加了cn,所以以后如果沒(méi)有遇到developer.android.google打不開(kāi)網(wǎng)站鏈接的情況下可以試試加cn訪問(wèn)中國(guó)站啦。

選擇所需版本。



下好之后解壓到android-ndk文件夾中抒巢,然后配置環(huán)境案铺。

再通過(guò)cmd進(jìn)入命令行,輸入ndk-build檢測(cè)是否配置好。

此時(shí),如下圖所示:


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


成功生成如下圖所示。

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


現(xiàn)在邢享,還需要配置gradle文件才能運(yùn)行鹏往。

在buildTypes之前的位置加上,

sourceSets.main{

jniLibs.srcDir'src/main/libs'

jni.srcDirs=[]

}


這時(shí)就可以運(yùn)行程序查看效果了骇塘。

報(bào)了個(gè)錯(cuò)伊履。android:onClick不能用

參考網(wǎng)址: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


結(jié)果發(fā)現(xiàn)是因?yàn)閤ml文件中context沒(méi)配置好。

cannot resolve corresponding JNI function的解決方法

File--->Setting--->plugins

將 Android NDK Support 的對(duì)勾勾掉

然后重啟AS

過(guò)程中還發(fā)現(xiàn)一個(gè)問(wèn)題款违,結(jié)果發(fā)現(xiàn)是因?yàn)樯傻腸om_cc_myapplication_MainActivity.h文件不全導(dǎo)致的唐瀑。(因?yàn)樵诰帉?xiě)MainActivity之前生成了),因此無(wú)法調(diào)用native函數(shù)插爹。

產(chǎn)生這個(gè)錯(cuò)誤表示無(wú)法調(diào)用native函數(shù)哄辣,沒(méi)有配置好。

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__)


還有這里也需要改赠尾,總之力穗,無(wú)法調(diào)用的話,一定是沒(méi)有配置好气嫁。復(fù)制代碼的時(shí)候当窗,得看看包名是否都改了,又或者寸宵,你可以直接把自己的工程的包名建成跟作者一樣崖面,這樣就不用改了。

改完之后梯影,需要重新使用ndk-build編譯生成可以通過(guò)JNI調(diào)用的類(lèi)庫(kù)巫员,否則還是之前生成的類(lèi)庫(kù),依然會(huì)報(bào)錯(cuò)甲棍。

其實(shí)程序調(diào)用的是這里的文件疏遏。


最后成功圖片有4張,分別點(diǎn)擊4個(gè)按鈕結(jié)果如下圖:



編譯FFmpeg生成了六個(gè)SO文件,現(xiàn)在把這6個(gè)合成一個(gè)财异,修改腳本文件build_android.sh。



改為

–enable-static

–disable-shared

以及在install后面加上一段唱遭。

然后重新開(kāi)始編譯ffmpeg庫(kù)戳寸。



syntax error: unexpected end of file

DOS下文件和Linux下文件格式差異問(wèn)題導(dǎo)致的。

發(fā)現(xiàn)是這段出現(xiàn)了問(wèn)題(因?yàn)閯h掉這里才可以正常編譯)拷泽。

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

解決辦法應(yīng)該是需要使用vim來(lái)轉(zhuǎn)換格式司致。這里就這樣吧拆吆,應(yīng)該是換行引起的錯(cuò)誤,需要使用Linux環(huán)境來(lái)進(jìn)行編寫(xiě)shell文件脂矫,我先跳過(guò)這個(gè)問(wèn)題枣耀,不再多糾結(jié)。

$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


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

這里是坑的分割線庭再。捞奕。。拄轻。

參考鏈接:

最主要是這個(gè)鏈接: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.reibang.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/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颅围,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恨搓,更是在濱河造成了極大的恐慌院促,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斧抱,死亡現(xiàn)場(chǎng)離奇詭異常拓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)夺姑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)墩邀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人盏浙,你說(shuō)我怎么就攤上這事眉睹。” “怎么了废膘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵竹海,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我丐黄,道長(zhǎng)斋配,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮艰争,結(jié)果婚禮上坏瞄,老公的妹妹穿的比我還像新娘。我一直安慰自己甩卓,他們只是感情好鸠匀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著逾柿,像睡著了一般缀棍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上机错,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天爬范,我揣著相機(jī)與錄音,去河邊找鬼弱匪。 笑死青瀑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痢法。 我是一名探鬼主播狱窘,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼财搁!你這毒婦竟也來(lái)了蘸炸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尖奔,失蹤者是張志新(化名)和其女友劉穎搭儒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體提茁,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淹禾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茴扁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铃岔。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖峭火,靈堂內(nèi)的尸體忽然破棺而出毁习,到底是詐尸還是另有隱情,我是刑警寧澤卖丸,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布纺且,位于F島的核電站,受9級(jí)特大地震影響稍浆,放射性物質(zhì)發(fā)生泄漏载碌。R本人自食惡果不足惜猜嘱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫁艇。 院中可真熱鬧朗伶,春花似錦、人聲如沸步咪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)歧斟。三九已至,卻和暖如春偏形,著一層夾襖步出監(jiān)牢的瞬間静袖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工俊扭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留队橙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓萨惑,卻偏偏與公主長(zhǎng)得像捐康,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庸蔼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容