VideoToolBox硬編碼,硬解碼

VideoToolBox硬編碼(h264)

H264編碼分為兩層:

視頻編碼層(VCL:Video Coding Layer)負(fù)責(zé)高效的視頻內(nèi)容表示
網(wǎng)絡(luò)提取層(NAL:Network Abstraction Layer)負(fù)責(zé)以網(wǎng)絡(luò)所要求的恰當(dāng)?shù)姆绞綄?shù)據(jù)進(jìn)行打包和傳送(根據(jù)不同的網(wǎng)絡(luò)把數(shù)據(jù)打包成相應(yīng)的格式娶桦,將VCL產(chǎn)生的比特字符串適配到各種各樣的網(wǎng)絡(luò)和多元環(huán)境中)
NALU:NAL unit,NAL單元

I幀贾节、P幀、B幀都是被封裝成一個(gè)或者多個(gè)NALU進(jìn)行傳輸或者存儲(chǔ)的
I幀開始之前也有非VCL的NAL單元衷畦,用于保存其他信息憎乙,比如:PPS杆怕、SPS

PPS(Picture Parameter Sets):圖像參數(shù)集
SPS(Sequence Parameter Set):序列參數(shù)集
在實(shí)際的H264數(shù)據(jù)幀中,往往幀前面帶有00 00 00 01 或 00 00 01分隔符,一般來說編碼器編出的首幀數(shù)據(jù)為PPS與SPS奠蹬,接著為I幀叹誉,后續(xù)是B幀弱贼、P幀等數(shù)據(jù)戚炫。
GOP:Group of picture圖像組,一組中包含一個(gè)i幀多個(gè)bp幀墨吓,每個(gè)i幀都是 IDR 圖像(立即刷新圖像)球匕,當(dāng)解碼器解碼到 IDR 圖像時(shí),立即將參考幀隊(duì)列清空帖烘,將已解碼的數(shù)據(jù)全部輸出或拋棄亮曹,重新查找參數(shù)集,開始一個(gè)新的序列秘症。這樣照卦,如果前一個(gè)序列出現(xiàn)重大錯(cuò)誤,在這里可以獲得重新同步的機(jī)會(huì)乡摹。

H.264編碼流程:

1役耕、通過攝像頭采集畫面,通過- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 方法傳回sampleBuffer聪廉,sampleBuffer中存放了視頻畫面信息瞬痘。
2、初始化文件寫入對象(NSFileHandle)板熊,設(shè)置文件存儲(chǔ)路徑.
3框全、初始化壓縮會(huì)話(VTCompressionSessionRef),設(shè)置視頻的壓縮轉(zhuǎn)換格式(h.264)干签,幀率津辩、碼率,幀間隔等轉(zhuǎn)換信息(配置轉(zhuǎn)換器)。
4喘沿、將攝像頭采集到的畫面?zhèn)魅胝⒍龋凑説.264的壓縮算法進(jìn)行壓縮,轉(zhuǎn)換完成后會(huì)通過創(chuàng)建VTCompressionSessionRef是的方法中的回調(diào)方法 傳出壓縮轉(zhuǎn)換后的sampleBuffer蚜印。
5莺禁、獲取到轉(zhuǎn)換后的sampleBuffer,按照h.264的編碼格式進(jìn)行編碼寫入文件。
關(guān)鍵幀

1>判斷是否為關(guān)鍵幀(一個(gè)新的GOP),i幀前存放sps和pps(寫入sps和pps時(shí)要在前面添加‘00 00 00 01’分隔)晒哄。
2>圖像數(shù)據(jù)區(qū)域(i,b,p)是被封裝成一個(gè)個(gè)NAL Unit睁宰。但是前面通過h.264壓縮算法后傳回的sampleBuffer肪获,每一幀錢存放的不是‘00 00 00 01’寝凌,所以需要跳過讀取,需要在每一幀前添加‘00 00 00 01’孝赫,然后寫入文件较木。
VideoToolBox硬解碼(h264):

1、讀取數(shù)據(jù)到buffer中青柄,通過startCode“00 00 00 01”定位起始位置

伐债,繼續(xù)移動(dòng)指針查找到下一個(gè)startCode,來確定當(dāng)前數(shù)據(jù)集合的長度致开,并拷貝數(shù)據(jù)信息峰锁。

2、解析獲取的數(shù)據(jù)信息双戳,startCode之后的第一個(gè)字節(jié)保存的是NALU的類型信息虹蒋。將其轉(zhuǎn)為二進(jìn)制后:

第1位:值為1,表示語法出錯(cuò)飒货。
第2~3位:參考級(jí)別魄衅。
第4~8位:NALU類型。
NALU類型如下圖:


3塘辅、通過上一步解析出來的sps和pps的信息晃虫,創(chuàng)建視頻描述CMFormatDescriptionRef,再根據(jù)CMFormatDescriptionRef創(chuàng)建生成解碼會(huì)話VTDecompressionSessionRef扣墩。
4哲银、讀取到視頻數(shù)據(jù)信息后,進(jìn)行解碼呻惕。創(chuàng)建CMBlockBufferRef(存放視頻圖像數(shù)據(jù))荆责,使用解碼會(huì)話進(jìn)行解碼,獲取解碼后的信息存放到CVPixelBufferRef中蟆融,通過系統(tǒng)的AVSampleBufferDisplayLayer預(yù)覽草巡,或者生成圖像,通過imageView顯示,或者使用OpenGL顯示山憨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末查乒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子郁竟,更是在濱河造成了極大的恐慌玛迄,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚亩,死亡現(xiàn)場離奇詭異蓖议,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)讥蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門勒虾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘸彤,你說我怎么就攤上這事修然。” “怎么了质况?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵愕宋,是天一觀的道長。 經(jīng)常有香客問我结榄,道長中贝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任臼朗,我火速辦了婚禮邻寿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘依溯。我一直安慰自己老厌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布黎炉。 她就那樣靜靜地躺著枝秤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慷嗜。 梳的紋絲不亂的頭發(fā)上淀弹,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音庆械,去河邊找鬼薇溃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缭乘,可吹牛的內(nèi)容都是我干的沐序。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼策幼!你這毒婦竟也來了邑时?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤特姐,失蹤者是張志新(化名)和其女友劉穎晶丘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唐含,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浅浮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捷枯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滚秩。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铜靶,靈堂內(nèi)的尸體忽然破棺而出叔遂,到底是詐尸還是另有隱情他炊,我是刑警寧澤争剿,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站痊末,受9級(jí)特大地震影響蚕苇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凿叠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一涩笤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盒件,春花似錦蹬碧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翔始,卻和暖如春罗心,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背城瞎。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工渤闷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脖镀。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓飒箭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子弦蹂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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

  • 蘋果于北京時(shí)間2017年6月6日凌晨召開WWDC 2017大會(huì)漫萄,在此次發(fā)布會(huì)上按照慣例推出了iOS 11系統(tǒng),同時(shí)...
    金山視頻云閱讀 24,780評(píng)論 5 45
  • 硬件編碼相關(guān)知識(shí)(H264,H265) 閱讀人群:研究硬件編碼器應(yīng)用于iOS開發(fā)中,從0研究關(guān)于硬件編解碼盈匾,碼流中...
    小東邪啊閱讀 12,768評(píng)論 0 18
  • 前言 H.264是目前很流行的編碼層視頻壓縮格式腾务,目前項(xiàng)目中的協(xié)議層有rtmp與http,但是視頻的編碼層都是使用...
    落影l(fā)oyinglin閱讀 28,032評(píng)論 43 86
  • 在保證視頻圖像質(zhì)量的前提下削饵,HEVC通過增加一定的計(jì)算復(fù)雜度岩瘦,可以實(shí)現(xiàn)碼流在H.264/AVC的基礎(chǔ)上降低50%。...
    加劉景長閱讀 7,880評(píng)論 0 6
  • 打得贏窿撬,不變質(zhì) 說的對启昧,干的好 腐了爛,破的殘劈伴, 新夢想密末,好追求, 想的美跛璧,也是行严里, 我姓李。六六六追城, 歸家路遠(yuǎn)刹碾,...
    葡萄美酒閱讀 281評(píng)論 0 0