iOS中H264的編碼原理 - 音視頻總結(jié)

I幀: 關(guān)鍵幀, 采用幀內(nèi)壓縮技術(shù)

舉個(gè)栗子, 如果攝像頭對(duì)著一個(gè)蝸牛拍攝, 1秒鐘之內(nèi), 這個(gè)蝸牛發(fā)生的變化是非常少的, 攝像機(jī)一般一秒鐘會(huì)抓取幾十幀的數(shù)據(jù), 我們看這個(gè)蝸牛這一秒鐘的幾十幀數(shù)據(jù), 會(huì)感覺(jué)每一幀都幾乎是一樣的, 蝸牛在一秒鐘里的變化實(shí)在太小了, 以至于肉眼幾乎感覺(jué)不到有變化.

像動(dòng)畫(huà), 是25幀/s, 一般視頻文件都是在30幀/s左右, 對(duì)于一些要求比較高的, 對(duì)動(dòng)作的精細(xì)有要求, 想要捕捉到完整的動(dòng)作的, 高級(jí)的攝像機(jī)一般是60幀/s, 比如100米短跑時(shí)拍攝運(yùn)動(dòng)員的動(dòng)作. 而對(duì)于像蝸牛這樣一組幀它的變化很小, 為了壓縮數(shù)據(jù)變小, 可以將第一幀完整的保存下來(lái), 作為后面的幀的依賴, 這樣后面的第二幀存儲(chǔ)第一幀的差異就可以了, 以此類(lèi)推. 如果沒(méi)有這個(gè)關(guān)鍵幀, 后面要解碼數(shù)據(jù)是完成不了的, 所以I幀特別關(guān)鍵.

P幀: 向前參考幀, 壓縮時(shí)只參考前一個(gè)幀, 采用幀間壓縮技術(shù)

視頻的第一幀會(huì)被作為關(guān)鍵幀保存下來(lái). 而后面的幀會(huì)向前依賴, 也就是第二幀依賴于第一幀, 后面所有的幀只存儲(chǔ)前一幀的差異. 這樣就能將數(shù)據(jù)大大的減少, 從而達(dá)到一個(gè)高壓縮率的效果.

B幀: 雙向參考幀, 壓縮時(shí)既參考前一幀也參考后一幀, 采用幀間壓縮技術(shù)

  • B幀, 即參考前一幀, 也參考后一幀, 這樣使得它的壓縮率更高, 存儲(chǔ)的數(shù)據(jù)量更小, 因?yàn)榍耙粠秃笠粠械臄?shù)據(jù), 都可以不用存儲(chǔ)了, 所以為了數(shù)據(jù)更小, 可以使用B幀. 使用B幀的數(shù)量越多, 你的壓縮率就越高, 這是B幀的優(yōu)點(diǎn).

  • B幀的缺點(diǎn)就是, 在實(shí)時(shí)互動(dòng)直播中, B幀要參考后面的幀才能解碼, 那在網(wǎng)絡(luò)傳輸中就要等待后面的幀傳輸過(guò)來(lái). 這樣子的話, 解碼的快慢就跟網(wǎng)絡(luò)有關(guān)了, 如果網(wǎng)絡(luò)好, 解碼就快一些, 如果網(wǎng)絡(luò)不好解碼就慢一些, 丟包時(shí)還要等待重傳, 等待時(shí)間的長(zhǎng)短,就要看當(dāng)時(shí)的網(wǎng)絡(luò)情況了, 這對(duì)于實(shí)時(shí)互動(dòng)直播是無(wú)法忍受的, 所以對(duì)于實(shí)時(shí)互動(dòng)直播, 一般不會(huì)使用B幀.

  • 有了B幀, 我們就可以根據(jù)情況選擇使用了, 比如在泛娛樂(lè)直播中, 可以接受一定程度的延時(shí), 又需要比較高的壓縮比就可以使用B幀.

GOF(Group of Frame)或者說(shuō)GOP(Group of Picture)一組幀

如果在一秒鐘內(nèi), 有30幀, 這30幀可以畫(huà)成一組, 如果攝像機(jī)或者鏡頭它一分鐘內(nèi)都沒(méi)有發(fā)生變化, 那也可以把這一分鐘內(nèi)所有的幀畫(huà)做一組.

什么叫一組幀?
就是一個(gè)I幀到下一個(gè)I幀, 這一組的數(shù)據(jù), 包括B幀/P幀, 我們稱為GOF.

GOF

SPS/PPS

SPS/PPS 實(shí)際上就是存儲(chǔ) GOP 的參數(shù), 存儲(chǔ)著GOP的相關(guān)信息, 沒(méi)有這些信息, 我們的解碼工作就無(wú)法順利做好

SPS(Sequence Parameter Set, 序列參數(shù)集)存放幀數(shù), 參考幀數(shù)目, 解碼圖像尺寸, 幀場(chǎng)編碼模式選擇標(biāo)識(shí)等.

PPS(Picture Parameter Set, 圖像參數(shù)集), 存放熵編碼模式選擇標(biāo)識(shí), 片組數(shù)目, 初始量化參數(shù)和去方塊濾波系數(shù)調(diào)整標(biāo)識(shí)等(與圖像相關(guān)的信息)

在一組幀之前我們首先收到的是SPS/PPS數(shù)據(jù), 如果沒(méi)有這2組數(shù)據(jù)我們是無(wú)法解碼的, 如果我們?cè)诮獯a時(shí)發(fā)生錯(cuò)誤, 首先要檢查是否有SPS/PPS, 如果沒(méi)有, 可能是因?yàn)闆](méi)有發(fā)送過(guò)來(lái), 或者是發(fā)送過(guò)程中丟失了. SPS/PPS數(shù)據(jù), 我們也將其歸類(lèi)到I幀, 這2組數(shù)據(jù)是絕對(duì)不能丟的.

視頻花屏/卡頓的原因

我們?cè)谟^看視頻時(shí), 如果遇到花屏/卡頓現(xiàn)象, 一般都是GOF的問(wèn)題

  • 如果GOF分組中的P幀丟失, 就會(huì)造成解碼端的圖像發(fā)生錯(cuò)誤.
  • 為了避免發(fā)生花屏, 一般發(fā)現(xiàn)P幀或I幀丟失, 就不顯示本GOF內(nèi)的所有幀, 等到下一個(gè)I幀過(guò)來(lái)后才重新刷新圖像
  • 這是因?yàn)闆](méi)有刷新屏幕, 而且丟包的這一組幀全部扔掉了, 圖像就會(huì)卡住那里不動(dòng), 這就是卡頓的原因.

所以總結(jié)起來(lái)就是, 花屏是因?yàn)閬G失了數(shù)據(jù). 而卡頓是因?yàn)榕禄ㄆ? 而主動(dòng)把數(shù)據(jù)丟了, 從而產(chǎn)生了卡頓.

視頻都有哪些視頻編解碼器

x264/x265
x264是目前使用最廣泛的編解碼器, 它的性能非常優(yōu)秀, 如果使用軟編的話, 基本上都是用的x264. x265也在走向成熟, 在直播系統(tǒng)里, 因?yàn)樗膲嚎s比非常高, 所以占用的CPU也非常高, 就目前來(lái)說(shuō), 在直播系統(tǒng)里是不可用的. 在點(diǎn)播系統(tǒng)里可以嘗試使用x265了.

openH264
相對(duì)于X264性能要低一些, 但是它有一個(gè)特點(diǎn), 支持SVC視頻技術(shù), 就是將視頻分層傳輸, 將視頻數(shù)據(jù)分為小中大三個(gè)部分, 如果網(wǎng)絡(luò)差, 就只傳輸最小的內(nèi)核視頻幀. 如果網(wǎng)絡(luò)稍微好點(diǎn)就將中間的一層也傳輸過(guò)去, 如果網(wǎng)絡(luò)很好, 就把全部的三層都傳輸過(guò)去, 然后可以將三層數(shù)據(jù)疊加在一起就形成了原來(lái)的視頻. 如果只有最小的內(nèi)核層, 只能看到圖像的大概信息, 這是不清晰的, 每加一層就清晰一些.

缺點(diǎn)是SVC在移動(dòng)端不是一個(gè)標(biāo)準(zhǔn), 很多硬件都不支持, 如果使用SVC就不能使用硬編碼, 只能使用軟編碼, 這對(duì)CPU的消耗相當(dāng)大, 就會(huì)造成手機(jī)容易發(fā)燙罪治、耗電等問(wèn)題.

vp8/vp9
由谷歌退出, vp8對(duì)應(yīng)的是x264, vp9對(duì)應(yīng)的是x265.

H.265(H.264的升級(jí)版)

H.265是一種新的視頻壓縮標(biāo)準(zhǔn), 核心價(jià)值是在原來(lái)帶寬條件下傳輸更高質(zhì)量的網(wǎng)絡(luò)視頻. 只需要原先一半左右的帶寬即可播放相同質(zhì)量的視頻.

H.265編碼后的結(jié)果是我們想要的, 但是在編碼過(guò)程中, H.265比H.264的復(fù)雜度高很多, 所需要功耗更大, 耗時(shí)更長(zhǎng), 也就對(duì)設(shè)備要求更高, 而且還有目前的主流瀏覽器不支持H.265, 這就導(dǎo)致了即使H.265有著很大的優(yōu)勢(shì), 也沒(méi)有取代H.264成為主流.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異囤屹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逢渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)肋坚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肃廓,你說(shuō)我怎么就攤上這事冲簿。” “怎么了亿昏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵峦剔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我角钩,道長(zhǎng)吝沫,這世上最難降的妖魔是什么呻澜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮惨险,結(jié)果婚禮上羹幸,老公的妹妹穿的比我還像新娘。我一直安慰自己辫愉,他們只是感情好栅受,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著恭朗,像睡著了一般屏镊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痰腮,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天而芥,我揣著相機(jī)與錄音,去河邊找鬼膀值。 笑死棍丐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沧踏。 我是一名探鬼主播歌逢,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼翘狱!你這毒婦竟也來(lái)了秘案?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盒蟆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后师骗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體历等,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年辟癌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寒屯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡黍少,死狀恐怖寡夹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厂置,我是刑警寧澤菩掏,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站昵济,受9級(jí)特大地震影響智绸,放射性物質(zhì)發(fā)生泄漏野揪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一瞧栗、第九天 我趴在偏房一處隱蔽的房頂上張望斯稳。 院中可真熱鬧,春花似錦迹恐、人聲如沸挣惰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)憎茂。三九已至,卻和暖如春找都,著一層夾襖步出監(jiān)牢的瞬間唇辨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工能耻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赏枚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓晓猛,卻偏偏與公主長(zhǎng)得像饿幅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戒职,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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