首先是吹牛
本人大二的時(shí)候做單片機(jī),后來(lái)做了個(gè)智能家居機(jī)器人,因?yàn)閳D像傳輸续捂,wifi控制是用的路由器破解的,一直想轉(zhuǎn)化為自己的“姿勢(shì)”宦搬,所以大三就搞起了ARM牙瓢,后來(lái)發(fā)現(xiàn)搞ARM其實(shí)是搞嵌入式Linux,于是就搞起了Linux驅(qū)動(dòng)和Linux應(yīng)用间校,從此進(jìn)去萬(wàn)劫不復(fù)的深淵矾克。
Linux的視頻相關(guān)的操作,就繞不過(guò)ffmpeg和openCV憔足,但是因?yàn)楫厴I(yè)的緣故胁附,直接去三星做Linux Audio驅(qū)動(dòng)了差购,也就是ALSA,或者更精確地說(shuō)汉嗽,是ASOC欲逃,負(fù)責(zé)三星手機(jī)的底層音頻驅(qū)動(dòng)開(kāi)發(fā)。也就對(duì)視頻處理沒(méi)有再繼續(xù)饼暑。
Linux驅(qū)動(dòng)既復(fù)雜又枯燥稳析,主要是周?chē)娜瞬恢滥愕降自诟陕铩9选U镁印T偌由喜幌矚g安卓手機(jī),還是喜歡小蘋(píng)果撰筷,所以轉(zhuǎn)行了陈惰!轉(zhuǎn)行了!到iOS開(kāi)發(fā)了毕籽。一開(kāi)始覺(jué)得隔行如隔山抬闯,一個(gè)最底層,一個(gè)最頂層关筒,所以一開(kāi)始感覺(jué)之前干的都白干了溶握。
后來(lái)發(fā)現(xiàn),以前學(xué)的那些編程思想蒸播,那些算法睡榆,那些編碼規(guī)范,對(duì)iOS開(kāi)發(fā)太有幫助了袍榆,另外胀屿,了解UNIX/Linux內(nèi)核,對(duì)頂層開(kāi)發(fā)更有幫助包雀,不過(guò)雖然這么說(shuō)宿崭,心里還是不太舒服的。
直到最近馏艾!我搞起了iOS音視頻開(kāi)發(fā)劳曹,哈哈,簡(jiǎn)直和以前的工作聯(lián)系了起來(lái)琅摩,什么speaker / reveiver / main mic / sub mic,什么機(jī)制與策略锭硼,什么系統(tǒng)音效房资,媒體播放等策略,全都用起來(lái)了檀头。然后就到了音視頻編輯轰异,就到了ffmpeg岖沛,就到了交叉編譯,命令行操作搭独,完全融合起來(lái)了婴削。心里炒雞興奮~~~~~~~~~~~~~~~~~
所以打算好好研究一下,研究完了ffmpeg牙肝,研究openCV唉俗,然后沒(méi)準(zhǔn)又會(huì)做回智能家居,哈哈哈配椭。
屁話(huà)夠多了虫溜,下面是骨感的現(xiàn)實(shí):
然后才是是安裝
參考簡(jiǎn)書(shū)文章:
iOS 利用FFmpeg 開(kāi)發(fā)音視頻流(一)——Mac 系統(tǒng)上編譯 FFmpeg
iOS 利用FFmpeg 開(kāi)發(fā)音視頻流(二)——Mac 系統(tǒng)上編譯 iOS 可用的FFmpeg 庫(kù)
這位作者寫(xiě)的流程很好。其中安裝homebrew的鏈接似乎有些問(wèn)題股缸,我去homebrew官網(wǎng)找的鏈接:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝完了衡楞,就新建工程,仿照剛剛貼的兩個(gè)文章敦姻,導(dǎo)入文件瘾境,添加頭文件查找。
接著镰惦,我們要調(diào)用一個(gè)初始化方法
聲明一下寄雀,我是在邊寫(xiě)文章邊實(shí)驗(yàn),所以肯定有彎路陨献,反正我走一步寫(xiě)一步盒犹,防止忘了。眨业。
這一步急膀,我是參考這個(gè)文章An ffmpeg and SDL Tutorial.
在ffmpeg使用之前,需要初始化ffmpeg龄捡,需要調(diào)用一個(gè)av_register_all方法卓嫂,并且只調(diào)用一次。這個(gè)教程不是給iOS專(zhuān)用的聘殖,所以我轉(zhuǎn)化了一下晨雳,在iOS的main.m中調(diào)用:
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "avformat.h"
#import "avcodec.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
av_register_all();
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
編譯的時(shí)候,我就發(fā)現(xiàn)奸腺,有點(diǎn)問(wèn)題餐禁,很多報(bào)錯(cuò),原因是要導(dǎo)入一些系統(tǒng)框架:
然后就能編譯成功了突照。也不知道對(duì)不對(duì)
另外帮非,mark一個(gè)帖子,有一些ffmpeg的bug修復(fù),不知道有沒(méi)有用:
iOS下使用FFMPEG的一些總結(jié)
PS:以前做Linux Audio Driver的時(shí)候末盔,就是沒(méi)有資料筑舅,尤其沒(méi)有中文資料,只能遵從Linus的忠告陨舱,read the fucking source code〈浼穑現(xiàn)在又是這樣,所有中文資料都是只說(shuō)怎么編譯游盲。尼瑪使用呢误墓?好吧,開(kāi)始Google了背桐,祝我好運(yùn)优烧。。链峭。
Corina你看到文章推送畦娄,要是不鼓勵(lì)一下,你覺(jué)得你好意思嗎~~~~~