IOS FFmpeg零到自己的播放器4头镊,架構(gòu)


本文意在設(shè)計(jì)一個(gè)最基礎(chǔ)的本地播放器的架構(gòu),不涉及網(wǎng)絡(luò)模塊魄幕。本文提及的各個(gè)模塊相艇,將在后續(xù)的文章中一一講解如何實(shí)現(xiàn)。

正文開始

從功能上分析纯陨,我們傳一個(gè)本地文件給播放器坛芽,需要播放器對(duì)文件解封裝、解碼為音視頻數(shù)據(jù)翼抠,需要音頻輸出模塊對(duì)解碼后的音頻進(jìn)行播放咙轩,需要視頻輸出模塊對(duì)解碼后的視頻數(shù)據(jù)進(jìn)行渲染。

然而簡(jiǎn)單的對(duì)音視頻數(shù)據(jù)渲染是不夠的阴颖,還必須保證音視頻的同步來保證用戶的視聽體驗(yàn)臭墨,所以還需要一個(gè)音視頻同步模塊來保證音視頻的同步。

另外膘盖,由于手機(jī)硬件的性能參差和用戶使用場(chǎng)景的復(fù)雜胧弛,為了讓用戶有更流暢的觀影體驗(yàn),我們?cè)谝粢曨l同步模塊中侠畔,在本地對(duì)解碼的音視頻做一個(gè)緩存(也方便以后向網(wǎng)絡(luò)點(diǎn)播和直播拓展)结缚,當(dāng)然緩存的數(shù)據(jù)需要一個(gè)上限,避免占用內(nèi)存過多软棺,需要一個(gè)下限红竭,低于這個(gè)下限的時(shí)候使用解碼模塊解碼數(shù)據(jù)進(jìn)行緩存。這里不可避免的涉及到多線程的使用,因?yàn)槿绻獯a和播放在同一個(gè)線程里茵宪,需要播放一幀的時(shí)候去解碼一幀最冰,或者解碼完一幀進(jìn)行播放,又或者邊緩沖邊播放稀火,都有可能會(huì)造成卡頓暖哨。

最后,選擇模塊凰狞,驅(qū)動(dòng)整個(gè)架構(gòu)運(yùn)轉(zhuǎn)篇裁。

劃重點(diǎn),我們需要的模塊:解碼模塊赡若、音視頻同步模塊达布、音頻渲染模塊、視頻渲染模塊逾冬。解碼模塊(或者說緩沖模塊)和音視頻渲染模塊工作在不同的子線程上黍聂。這里用一個(gè)viewController來協(xié)調(diào)各個(gè)模塊協(xié)同工作,如下面圖1所示:
圖1
音視頻渲染模塊需要數(shù)據(jù)時(shí)身腻,向viewController索取分冈,viewController再調(diào)用音視頻同步模塊,從同步模塊的緩沖池里取數(shù)據(jù)給音視頻渲染模塊霸株。音視頻同步模塊需要數(shù)據(jù)時(shí),向viewController索取集乔,viewController再調(diào)用解碼模塊向音視頻同步模塊的緩沖池填充數(shù)據(jù)去件,如圖2:

圖2


到這里基本完成了整個(gè)架構(gòu)設(shè)計(jì),剩下的就是讓各個(gè)模塊運(yùn)轉(zhuǎn)起來扰路。如何運(yùn)轉(zhuǎn)呢尤溜,這里我們選音頻渲染模塊作為整個(gè)架構(gòu)的驅(qū)動(dòng)。我們的音頻渲染模塊是基于audio Unit 實(shí)現(xiàn)的汗唱,audio Unit跑起來以后宫莱,需要向其中不斷填充音頻數(shù)據(jù),按照上面設(shè)計(jì)的數(shù)據(jù)響應(yīng)鏈哩罪,整個(gè)架構(gòu)就跑起來了授霸。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市际插,隨后出現(xiàn)的幾起案子碘耳,更是在濱河造成了極大的恐慌,老刑警劉巖框弛,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辛辨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斗搞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門指攒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人僻焚,你說我怎么就攤上這事允悦。” “怎么了溅呢?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵澡屡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我咐旧,道長(zhǎng)驶鹉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任铣墨,我火速辦了婚禮室埋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伊约。我一直安慰自己姚淆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布屡律。 她就那樣靜靜地躺著腌逢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪超埋。 梳的紋絲不亂的頭發(fā)上搏讶,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音霍殴,去河邊找鬼媒惕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛来庭,可吹牛的內(nèi)容都是我干的妒蔚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼月弛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肴盏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帽衙,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤叁鉴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后佛寿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幌墓,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡但壮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了常侣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜡饵。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胳施,靈堂內(nèi)的尸體忽然破棺而出溯祸,到底是詐尸還是另有隱情,我是刑警寧澤舞肆,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布焦辅,位于F島的核電站,受9級(jí)特大地震影響椿胯,放射性物質(zhì)發(fā)生泄漏筷登。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一哩盲、第九天 我趴在偏房一處隱蔽的房頂上張望前方。 院中可真熱鬧,春花似錦廉油、人聲如沸惠险。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)班巩。三九已至,卻和暖如春嘶炭,著一層夾襖步出監(jiān)牢的瞬間抱慌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工旱物, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卫袒。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓宵呛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親夕凝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宝穗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355