Windows 下編譯 FFmpeg 小記(移植到Android)

本文是基于 Windows 10 下的 Linux 子系統(tǒng)较雕,不得不說(shuō) Win 10 的子系統(tǒng)功能特別贊账磺,默認(rèn)我們的磁盤(pán)掛載在這個(gè)系統(tǒng)上临梗,我們不需要再去裝虛擬機(jī)或者雙系統(tǒng)就可以很方便的完成 Linux 上才能做的事宇挫,大大的節(jié)省了我們的開(kāi)發(fā)時(shí)間,為在 Windows 上進(jìn)行開(kāi)發(fā)的開(kāi)發(fā)人員開(kāi)辟了一塊新的天地吹泡。

1. 如何開(kāi)啟這個(gè)子系統(tǒng)
2. 下載 ffmpeg 源碼:https://ffmpeg.org/ 骤星, 當(dāng)前版本為3.3
3. 下載 Linux 下的 NDK:https://developer.android.com/ndk/downloads/index.html

由于是在 Linux 下編譯,所以務(wù)必要下載 Linux 版本的 NDK

4. 解壓到一個(gè)文件夾爆哑,在根目錄下找到 configure 文件洞难,找到
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'  
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'  
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'  

替換為

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  
SLIB_INSTALL_LINKS='$(SLIBNAME)'  

上面的替換主要是為了解決生成 so 文件的命名問(wèn)題

5. 新建編譯腳本 & 編譯:

在與ffmpeg源碼文件夾同級(jí)的目錄下建立build_android.sh文件,內(nèi)容如下

#!/bin/sh
cd ffmpeg-3.3
make clean
#這里的這些變量根據(jù)自己本地的環(huán)境切換
export NDK=/mnt/d/ProgramFiles/Development/SDK/ndk-bundle-linux/android-ndk-r14b
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt  
export PLATFORM=$NDK/platforms/android-19/arch-arm
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export PREFIX=../ffmpeglib  
build_one(){  
./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl --enable-shared --disable-static --enable-small \
--disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"   

}  
  
build_one  
  
make  
make install  
cd ..

記得最上面的變量一定要根據(jù)自己的開(kāi)發(fā)環(huán)境切換

安裝 gcc

apt-get install gcc

安裝 make

apt-get install make

最后打開(kāi)命令行輸入 bash 進(jìn)入 linux 子系統(tǒng)泪漂,切換目錄至 build_android.sh 所在的目錄下廊营,在命令行中輸入 <code>./build_android</code> 執(zhí)行上面的腳本等待編譯的完成即可

編譯完成后ffmpeg源碼的同級(jí)目錄下會(huì)多一個(gè) ffmpeglib 目錄,此目錄中包含so庫(kù)文件以及編程會(huì)使用到的頭文件萝勤,將其拷貝到自己項(xiàng)目的目錄中即可使用露筒。

6. 新建一個(gè)Android Studio工程,寫(xiě)一個(gè)Demo

項(xiàng)目結(jié)構(gòu)如下圖(使用最新的 cmake 構(gòu)建):


項(xiàng)目結(jié)構(gòu)

本項(xiàng)目是基于雷神的 最簡(jiǎn)單的基于FFmpeg的移動(dòng)端例子:Android HelloWorld 這篇文章有更多細(xì)節(jié)的介紹敌卓。

運(yùn)行截圖:

運(yùn)行截圖

到此本文就完了慎式,在構(gòu)建的過(guò)程中遇到了很多的坑,也花費(fèi)了不少的時(shí)間趟径,使用FFmpeg也走出了第一步瘪吏,后面還需要更多的學(xué)習(xí),如果讀者在構(gòu)建的過(guò)程中遇到問(wèn)題也歡迎留言蜗巧。

源碼地址:https://github.com/burgessjp/BlogDemo/tree/master/FFmpegStatDemoForAndroid

參考文章:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掌眠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子幕屹,更是在濱河造成了極大的恐慌蓝丙,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件望拖,死亡現(xiàn)場(chǎng)離奇詭異渺尘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)说敏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)鸥跟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人盔沫,你說(shuō)我怎么就攤上這事医咨。” “怎么了架诞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拟淮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我侈贷,道長(zhǎng)惩歉,這世上最難降的妖魔是什么等脂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮撑蚌,結(jié)果婚禮上上遥,老公的妹妹穿的比我還像新娘。我一直安慰自己争涌,他們只是感情好粉楚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著亮垫,像睡著了一般模软。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饮潦,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天燃异,我揣著相機(jī)與錄音,去河邊找鬼继蜡。 笑死回俐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稀并。 我是一名探鬼主播仅颇,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碘举!你這毒婦竟也來(lái)了忘瓦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤引颈,失蹤者是張志新(化名)和其女友劉穎耕皮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體线欲,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡明场,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年汽摹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了李丰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逼泣,死狀恐怖趴泌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拉庶,我是刑警寧澤嗜憔,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站氏仗,受9級(jí)特大地震影響吉捶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一呐舔、第九天 我趴在偏房一處隱蔽的房頂上張望币励。 院中可真熱鬧,春花似錦珊拼、人聲如沸食呻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仅胞。三九已至,卻和暖如春剑辫,著一層夾襖步出監(jiān)牢的瞬間干旧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工妹蔽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莱革,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓讹开,卻偏偏與公主長(zhǎng)得像盅视,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旦万,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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