-
先回顧一下視頻里面到底是什么
-
內容元素
1.圖像(image)
2.音頻(Audio)
3.元素信息(Meta-data) -
編碼格式
1.Video:H264
2.Audio:AAC(后面文章講)
3.容器封裝:MP4/MOV/FLV/RM/RMVB/AVI -
H264
當我們需要對發(fā)送的視頻文件進行編碼時,只要是H264文件状知,AVFoundation都提供視頻編解碼器支持秽五,這個標準被廣泛應用于消費者視頻攝像頭捕捉到的資源并成為網(wǎng)頁流媒體視頻最主要的格式。H264規(guī)范是MPEG4定義的一部分饥悴,H264遵循早期的MPEG-1/MPEG-2標準坦喘,但是在以更低比特率得到 更高圖片質量方面有了進步。
-
編碼的本質
編碼的本質示意圖 -
為什么要編碼西设?
舉個例子: (具體大小我沒數(shù)過瓣铣,只做講解參考)
你的老公,Helen贷揽,將于明天晚上6點零5份在重慶的江北機場接你
----------------------23 * 2 + 10 = 56個字符--------------------------
你的老公將于明天晚上6點零5分在江北機場接你
----------------------20 * 2 + 2 = 42個字符----------------------------
Helen將于明天晚上6點在機場接你
----------------------10 * 2 + 2 = 26個字符----------------------------
相信大家看了這個例子之后棠笑,心里應該大概明白編碼的本質:只要不接收方不會產(chǎn)生誤解,就可以產(chǎn)生數(shù)據(jù)的承載量禽绪,編碼視頻的本質也是如此蓖救,編碼的本質就是減少數(shù)據(jù)的冗余
-
在引入I(關鍵)幀洪规,B/P(參考)幀之前,我們先來了解一下人眼和視頻攝像頭的對幀的識別
我們人眼看實物的時候循捺,一般的一秒鐘只要是連續(xù)的16幀以上斩例,我們就會認為事物是動的,對于攝像頭來說从橘,一秒鐘所采集的圖片遠遠高于了16幀念赶,可以達到幾十幀,對于一些高質量的攝像頭洋满,一秒鐘可以達到60幀晶乔,對于一般的事物來說珍坊,你一秒鐘能改變多少個做動作牺勾?所以,當攝像頭在一秒鐘內采集視頻的時候阵漏,前后兩幀的圖片數(shù)據(jù)里有大量的相同數(shù)據(jù)驻民,對于這些數(shù)據(jù)我們該怎么處理了?當然前后兩幀也有不同的數(shù)據(jù)履怯,對于這些相同或者不同的數(shù)據(jù)的處理過程回还,就是編碼
幀 -
I幀(I-frames,也叫關鍵幀)
- 我們知道在視頻的傳輸過程中叹洲,它是分片段傳輸?shù)哪叮@個片段的第一幀,也就是第一張圖片运提,就是I幀蝗柔,也就是傳說中的關鍵幀
- I幀:也就是關鍵幀,幀內壓縮(也就是壓縮獨立視頻幀民泵,被稱為幀內壓縮)癣丧,幀內壓縮通過消除包含在每個獨立視頻幀內的色彩以及結構中的冗余信息來進行壓縮,因此可在不降低圖片適量的情況下盡可能的縮小尺寸栈妆,這類似于JEPG壓縮的原理胁编,幀內壓縮也可以稱為有損壓縮算法,但通常用于對原因圖片的一部分進行處理鳞尔,以生成極高質量的照片嬉橙,通過這一過程的創(chuàng)建的幀稱為I-frames;將第一幀完整的保存下來.如果沒有這個關鍵幀后面解碼數(shù)據(jù),是完成不了的.所以I幀特別關鍵.
-
P幀(P-frames寥假,又稱為預測幀)
- P幀:向前參考幀(在I幀(關鍵幀)后市框,P幀參考關鍵幀,保存下一幀和前一幀的不同數(shù)據(jù)).壓縮時只參考前一個幀.屬于幀間壓縮技術.
- 幀間壓縮技術:很多幀被組合在一起作為一組圖片(簡稱GOP)昧旨,對于GOP所存在的時間維度的冗余可以被消除拾给,如果想象視頻文件中的典型場景祥得,就會有一些特定的運動元素的概念,比如行駛中的汽車或者街道上行走的路人蒋得,場景的背景環(huán)信通道是固定的级及,或者在一定的時間內,有些元素的改變很小或者不變额衙,這些數(shù)據(jù)就稱為時間上的冗余饮焦,這些數(shù)據(jù)就可以通過幀間壓縮的方式進行消除,也就是幀間壓縮窍侧,視頻的第一幀會被作為關鍵幀完整保存下來.而后面的幀會向前依賴.也就是第二幀依賴于第一個幀.后面所有的幀只存儲于前一幀的差異.這樣就能將數(shù)據(jù)大大的減少.從而達到一個高壓縮率的效果.這就是P幀县踢,保存前后兩幀不通的數(shù)據(jù)
-
B幀(B-frames,又稱為雙向幀)
- B幀伟件,又叫雙向幀硼啤,它是基于使用前后兩幀進行編碼后得到的幀,幾乎不需要存儲空間斧账,但是解壓過程會消耗較長的時間谴返,因為它依賴周圍其他的幀
- B幀的特點:B幀使得視頻的壓縮率更高.存儲的數(shù)據(jù)量更小.如果B幀的數(shù)量越多,你的壓縮率就越高.這是B幀的優(yōu)點,但是B幀最大的缺點是,如果是實時互動的直播,那時與B幀就要參考后面的幀才能解碼,那在網(wǎng)絡中就要等待后面的幀傳輸過來.這就與網(wǎng)絡有關了.如果網(wǎng)絡狀態(tài)很好的話,解碼會比較快,如果網(wǎng)絡不好時解碼會稍微慢一些.丟包時還需要重傳.對實時互動的直播,一般不會使用B幀.如果在泛娛樂的直播中,可以接受一定度的延時,需要比較高的壓縮比就可以使用B幀.如果我們在實時互動的直播,我們需要提高時效性,這時就不能使用B幀了.
-
GOP一組幀的理解
如果在一秒鐘內,有30幀.這30幀可以畫成一組.如果攝像機或者鏡頭它一分鐘之內它都沒有發(fā)生大的變化.那也可以把這一分鐘內所有的幀畫做一組.
-
什么叫一組幀?
就是一個I幀到下一個I幀.這一組的數(shù)據(jù).包括B幀/P幀.我們稱為GOP
圖片來源于網(wǎng)絡
-
視頻花屏/卡頓原因
- 我們平常在觀看視頻的時候,出現(xiàn)視頻的花屏或者卡頓咧织,第一反應就是我們的網(wǎng)絡出現(xiàn)了問題嗓袱,其實我們的網(wǎng)絡沒有問題,是我們在解碼的時候I幀习绢,B/P幀出現(xiàn)了丟失
- 如果GOP分組中的P幀丟失就會造成解碼端的圖像發(fā)生錯誤.
- 為了避免花屏問題的發(fā)生,一般如果發(fā)現(xiàn)P幀或者I幀丟失.就不顯示本GOP內的所有幀.只到下一個I幀來后重新刷新圖像.
- 當這時因為沒有刷新屏幕.丟包的這一組幀全部扔掉了.圖像就會卡在哪里不動.這就是卡頓的原因.