iOS視頻編解碼_2

?上一篇文章講視頻編解碼的第一種情況了嚎,收到H.264格式的視頻數(shù)據(jù)并在應(yīng)用中播放挟冠。接下來進(jìn)一步講一下當(dāng)收到視頻數(shù)據(jù)播放同時(shí)可以得到每一幀圖像捶朵。

這里我們不從AVSampleBufferDisplayLayer中的解碼器中去獲取每一幀圖像,而是通過VTDecompressionSession這個(gè)類來獲取刁标,跟AVSampleBufferDisplayLayer一樣博助,它也需要CMSampleBuffers做為輸入。這個(gè)類會(huì)將CMSampleBuffers轉(zhuǎn)化成CVPixelBuffers并且在代碼塊回調(diào)中提供猪瞬。

在創(chuàng)建VTDecompressionSession前憎瘸,需要CMVideoFormatDescription對(duì)象。如果是從Elementary Stream中解碼的話陈瘦,就從擁有parameter sets的NAL單元中獲取幌甘。如果是解碼CMSampleBuffer的話,就直接將CMVideoFormatDescription對(duì)象從中抽出來甘晤。接下來含潘,我們需要使用pixelBufferAttribute字典來做為輸出的pixelBuffers的描述。最后线婚,我們需要實(shí)現(xiàn)VTDecompressionOutputCallback這個(gè)代碼塊回調(diào)遏弱。

當(dāng)我們需要輸出的pixelBuffers兼容OpenGL ES時(shí),我們只需要?jiǎng)?chuàng)建一個(gè)CFDictionary或者NSDictionary指定kCVPixelBufferOpenGLESCompatibilityKey為true塞弊。

在輸出回調(diào)中CVPixelBuffers是不帶時(shí)間戳的漱逸,所以我們會(huì)獲取到當(dāng)前的時(shí)間戳。當(dāng)發(fā)生錯(cuò)誤或者丟幀時(shí)游沿,我們都可以從回調(diào)方法中得到相應(yīng)的錯(cuò)誤信息饰抒。

?使用VTDecompressionSessionDecodeFrame這個(gè)方法來為VTDecompressionSession提供Frames,這個(gè)方法默認(rèn)是同步執(zhí)行的诀黍。如果想要異步執(zhí)行的話需要傳入標(biāo)志EnableAsynchronousDecompression袋坑。當(dāng)異步執(zhí)行這個(gè)方法時(shí),解碼器只能提供有限的管道來解碼眯勾,所以當(dāng)管道是滿的時(shí)枣宫,方法將會(huì)阻塞。所以不要將UI層的代碼放入這個(gè)方法當(dāng)中執(zhí)行吃环。

當(dāng)解碼一段視頻時(shí)也颤,CMVideoFormatDescription會(huì)發(fā)生改變。當(dāng)收到Elementary Stream時(shí)郁轻,我們根據(jù)第一個(gè)獲取到的parameter sets來創(chuàng)建formatDescription翅娶,并且通過這個(gè)formatDescription來創(chuàng)建VTDecompressionSession來解碼接下來的視頻幀,直到收到新的parameter sets好唯。這時(shí)竭沫,我們要?jiǎng)?chuàng)建新的formatDescription并且調(diào)用VTDecompressionSessionCanAcceptFormatDescription來確認(rèn)decompressionSession是否能夠在這些formaDescription中切換。如果不能切換的話骑篙,我們就需要?jiǎng)?chuàng)建新的VTDecompressionSession输吏,并且確保舊的VTDecompressionSession被銷毀。

?總結(jié)一下替蛉,這片文章主要講了:

1贯溅、如何創(chuàng)建VTDecompressionSession

2、如何做一個(gè)最優(yōu)決策來創(chuàng)建pixelBuffer(通過pixelBufferAttribute字典來指定輸出的需求)

3躲查、如何同步或異步執(zhí)行decompressionSession

4它浅、當(dāng)CMVideoFormatDescription變化時(shí),如何處理

本文翻譯自WWDC14:Direct Access to Video Encoding and Decoding

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镣煮,一起剝皮案震驚了整個(gè)濱河市姐霍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌典唇,老刑警劉巖镊折,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異介衔,居然都是意外死亡恨胚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門炎咖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赃泡,“玉大人,你說我怎么就攤上這事乘盼∩埽” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵绸栅,是天一觀的道長级野。 經(jīng)常有香客問我,道長粹胯,這世上最難降的妖魔是什么蓖柔? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮矛双,結(jié)果婚禮上渊抽,老公的妹妹穿的比我還像新娘。我一直安慰自己议忽,他們只是感情好懒闷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栈幸,像睡著了一般愤估。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上速址,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天玩焰,我揣著相機(jī)與錄音,去河邊找鬼芍锚。 笑死昔园,一個(gè)胖子當(dāng)著我的面吹牛蔓榄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播默刚,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼甥郑,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了荤西?” 一聲冷哼從身側(cè)響起澜搅,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邪锌,沒想到半個(gè)月后勉躺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡觅丰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年饵溅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舶胀。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡概说,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嚣伐,到底是詐尸還是另有隱情糖赔,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布轩端,位于F島的核電站放典,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏基茵。R本人自食惡果不足惜奋构,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拱层。 院中可真熱鬧弥臼,春花似錦、人聲如沸根灯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烙肺。三九已至纳猪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桃笙,已是汗流浹背氏堤。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搏明,地道東北人鼠锈。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓闪檬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親购笆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谬以,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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