1没讲、涉及的系統(tǒng)框架:AVFoundation、VideoToolbox礁苗、CoreMedia爬凑、CoreVideo
2、主要對(duì)象:AVCaptureDevice试伙、AVCaptureSession嘁信、AVCaptureDeviceInput、AVCaptureVideoDataOutput疏叨、AVCaptureConnection潘靖、AVCaptureVideoPreviewLayer
3、關(guān)鍵C函數(shù):VTCompressionSessionCreate蚤蔓、CMVideoFormatDescriptionGetH264ParameterSetAtIndex(SPS卦溢、PPS)、CMBlockBufferGetDataPointer
4秀又、數(shù)據(jù)格式: header/sps + header/pps + header/NALU...
5单寂、編碼流程:創(chuàng)建session -> 設(shè)置編碼相關(guān)參數(shù)?->開始編碼?->循環(huán)獲取采集數(shù)據(jù)?->?獲取編碼后數(shù)據(jù) ?->?將數(shù)據(jù)寫入H264文件
6、相關(guān)屬性
kVTCompressionPropertyKey_RealTime:設(shè)置是否實(shí)時(shí)編碼
kVTProfileLevel_H264_Baseline_AutoLevel:表示使用H264的Profile規(guī)格,可以設(shè)置Hight的AutoLevel規(guī)格.
kVTCompressionPropertyKey_AllowFrameReordering:表示是否使用產(chǎn)生B幀數(shù)據(jù)(因?yàn)锽幀在解碼是非必要數(shù)據(jù),所以開發(fā)者可以拋棄B幀數(shù)據(jù))
kVTCompressionPropertyKey_MaxKeyFrameInterval: 表示關(guān)鍵幀的間隔,也就是我們常說的gop size.
kVTCompressionPropertyKey_ExpectedFrameRate: 表示設(shè)置幀率
kVTCompressionPropertyKey_AverageBitRate/kVTCompressionPropertyKey_DataRateLimits設(shè)置編碼輸出的碼率.
7吐辙、IPB幀及GOP概念
I幀: 幀內(nèi)編碼幀(intra picture),I幀通常是每個(gè)GOP(MPEG所使用的一種視頻壓縮技術(shù))的第一幀.經(jīng)過適度的壓縮.作為隨機(jī)訪問的參考點(diǎn),可以當(dāng)做靜態(tài)圖像.I幀可以看做一個(gè)圖像經(jīng)過壓縮后的產(chǎn)物.I幀壓縮可以得到6:1的壓縮比而不會(huì)產(chǎn)生任何可察覺的模糊現(xiàn)象.I幀壓縮去除了視頻空間的冗余信息.
P幀: 前后預(yù)測(cè)編碼幀(predictive-frame),通過將圖像序列中前面已編碼幀的時(shí)間冗余信息充分去除來壓縮傳輸數(shù)據(jù)量的編碼圖像.
B幀: 雙向預(yù)測(cè)編碼幀(bi-directional interpolated prediction frame),既要考慮源圖像序列前面已編碼幀,又要顧及源圖像序列后面的已編碼幀之間的時(shí)間冗余信息,來壓縮傳輸數(shù)據(jù)量的編碼圖像.
GOP:兩個(gè)I幀之間形成的一組圖片,就是GOP(Group of Picture).
通常在編碼器設(shè)置參數(shù)時(shí),必須會(huì)設(shè)置gop_size的值.其實(shí)就是代表2個(gè)I幀之間的幀數(shù)目. 在一個(gè)GOP組中容量最大的就是I幀.所以相對(duì)而言,gop_size設(shè)置的越大,整個(gè)視頻畫面質(zhì)量就會(huì)越好.但是解碼端必須從接收的第一個(gè)I幀開始才可以正確解碼出原始圖像.否則無法正確解碼.
8宣决、SPS/PPS
SPS/PPS實(shí)際上就是存儲(chǔ)GOP的參數(shù).
SPS: (Sequence Parameter Set,序列參數(shù)集)存放幀數(shù),參考幀數(shù)目,解碼圖像尺寸,幀場(chǎng)編碼模式選擇標(biāo)識(shí)等.
一組幀的參數(shù)集.
PPS:(Picture Parameter Set,圖像參數(shù)集).存放熵編碼模式選擇標(biāo)識(shí),片組數(shù)目,初始量化參數(shù)和去方塊濾波系數(shù)調(diào)整標(biāo)識(shí)等.(與圖像相關(guān)的信息)
熵編碼模式,片組數(shù)目等這些我們會(huì)在后面的內(nèi)容講解到.大家在這里主要了解到SPS/PPS即可.
大家只要記住,在一組幀之前我們首先收到的是SPS/PPS數(shù)據(jù).如果沒有這組參數(shù)的話,我們是無法解碼.
如果我們?cè)诮獯a時(shí)發(fā)生錯(cuò)誤,首先要檢查是否有SPS/PPS.如果沒有,是因?yàn)閷?duì)端沒有發(fā)送過來還是因?yàn)閷?duì)端在發(fā)送過程中丟失了.
SPS/PPS數(shù)據(jù),我們也把其歸類到I幀.這2組數(shù)據(jù)是絕對(duì)不能丟的.
參考文章:1、http://www.reibang.com/p/eccdcf43d7d2? ?2昏苏、http://www.reibang.com/p/6f4cc979169e?