多媒體屬性簡(jiǎn)介
1鳄厌、音頻
1.1 音頻基礎(chǔ)知識(shí)
1.1.1 聲學(xué)的物理特征
聲音信號(hào)通常是一種連續(xù)的波形來(lái)表示岂贩。波形的最大位移稱為振幅A,反應(yīng)音量个扰。波形中兩個(gè)連續(xù)波峰(或波谷)之間的距離稱為周期T瓷炮。周期的倒數(shù)即為頻率f,以赫茲(Hz)為單位递宅。頻率反應(yīng)了聲音的音調(diào)娘香。
聲音可按頻率分為三類:
- 次聲波:頻率低于20Hz。
- 音頻恐锣;頻率在20-20kHz茅主。
- 超聲:頻率高于20kHz舞痰。
1.1.2 音頻屬性
音頻(Audio)指頻率在20Hz-20kHz范圍內(nèi)的可聽(tīng)聲音土榴,是多媒體信息中的一種媒體類型 - 可聽(tīng)類媒體。
目前多媒體計(jì)算機(jī)中的音頻主要由波形音頻响牛、CD音頻和MIDE音樂(lè)3種形式玷禽。重點(diǎn)應(yīng)該是波形音頻。
1呀打、波形音頻
波形音頻是由外部聲音源通過(guò)數(shù)字化過(guò)程采集到多媒體計(jì)算機(jī)的所有聲音形式矢赁。語(yǔ)音是波形聲音中人說(shuō)話的聲音,具有內(nèi)在的語(yǔ)言學(xué)贬丛、語(yǔ)音學(xué)的內(nèi)涵撩银。多媒體計(jì)算機(jī)可以利用特殊的方法分析、研究豺憔、抽取語(yǔ)音的相關(guān)特征额获,實(shí)現(xiàn)對(duì)不同語(yǔ)音的分辨、識(shí)別以及通過(guò)文字合成語(yǔ)音波形等恭应。
2抄邀、CD音頻
CD音頻(CD-Audio)是存儲(chǔ)在音樂(lè)CD光盤(pán)中的數(shù)字音頻,可以通過(guò)CD-ROM驅(qū)動(dòng)器讀取并采集到多媒體計(jì)算機(jī)系統(tǒng)中昼榛,并以波形音頻的相應(yīng)形式存儲(chǔ)和處理境肾。
3、MIDI
MIDI音頻(musical instrument digital interface),它將音樂(lè)符號(hào)化并保存在MIDI文件中奥喻,通過(guò)因?yàn)楹铣善鳟a(chǎn)生相應(yīng)的聲音波形來(lái)還原播放偶宫。
音頻是時(shí)間的函數(shù),具有很強(qiáng)的前后相關(guān)性环鲤,所以實(shí)時(shí)性是音頻處理的基本要求读宙。
1.1.3 音頻的數(shù)字化
計(jì)算機(jī)處理音頻信號(hào)前,必須將模擬的聲音信號(hào)數(shù)字化楔绞,產(chǎn)生數(shù)字音頻结闸。具體過(guò)程包括采樣、量化與編碼酒朵。圖示基本如下桦锄;
[站外圖片上傳中...(image-5f9f10-1598062459460)]
1、采樣與采樣頻率
采樣就是每間隔一段時(shí)間讀取一次聲音信號(hào)幅度蔫耽,使聲音信號(hào)在時(shí)間上被離散化结耀。
采樣頻率就是將模擬聲音波形數(shù)字化時(shí),每秒鐘抽取聲波幅度樣本的次數(shù)匙铡,其計(jì)算單位是kHz(千赫茲)图甜。一般來(lái)說(shuō),采樣頻率越高鳖眼,聲音失真越小黑毅,用于存儲(chǔ)的數(shù)字音頻的數(shù)據(jù)量也越大。
乃奎斯特(Nyquist)采樣理論:采樣頻率不應(yīng)低于聲音信號(hào)最高頻率的兩倍钦讳。這樣就能把以數(shù)字表達(dá)的聲音還原成原來(lái)的聲音矿瘦。例如:電話話音的信號(hào)頻率約為 3.4 kHz,采樣頻率一般選用 8 kHz愿卒。
音頻抽樣率有:8kHz缚去、11.025kHz、22.05kHz琼开、16kHz易结、37.8kHz、44.1kHz柜候、48kHz搞动。
2、量化與量化位數(shù)
量化就是把采樣得到的信號(hào)幅度轉(zhuǎn)化為數(shù)字值改橘,是聲音信號(hào)在幅度上被離散化滋尉。量化位數(shù)(位深)是每個(gè)采樣點(diǎn)能夠表示的數(shù)據(jù)范圍,常用的有8位飞主、12位和16位狮惜。圖示一個(gè):
[圖片上傳失敗...(image-c9ebfd-1598062459460)]
3高诺、聲道
反映音頻數(shù)字化質(zhì)量的另一個(gè)因素是聲道個(gè)數(shù)。記錄音頻時(shí)碾篡,如果每次生成一個(gè)聲波的數(shù)據(jù)虱而,稱為單聲道;每次記錄兩個(gè)聲波數(shù)據(jù)开泽,稱為雙聲道(立體聲)牡拇;每次生成二個(gè)以上的聲波數(shù)據(jù),稱為多聲道(環(huán)繞立體聲)穆律。
4惠呼、音頻采樣的數(shù)據(jù)量
數(shù)字音頻的采樣數(shù)據(jù)量主要取決兩方面的因素:
- 音質(zhì)因素:采樣頻率、量化位數(shù)和聲道數(shù)三個(gè)參數(shù)決定峦耘。
- 時(shí)間:采樣時(shí)間長(zhǎng)短剔蹋。
單位時(shí)間的數(shù)據(jù)量可用下面的公式表示:
v=f*b*s/8
v:?jiǎn)挝粫r(shí)間的數(shù)據(jù)量(KB/s)。
f:采樣頻率(kHz)辅髓。
b:量化位數(shù)(bit)泣崩。
s:聲道數(shù)。
auf=audio/L16;rate=16000
40ms的單聲道洛口、16Khz矫付、量化位數(shù)為16的數(shù)據(jù):(16*16*1)/8 * 40 =1280B
1.1.4 音頻的編碼
音頻數(shù)據(jù)壓縮編碼的方法有多種,可分為無(wú)損壓縮和有損壓縮兩大類第焰。無(wú)損壓縮主要包含各種熵編碼买优;有損壓縮則分為波形編碼、參數(shù)編碼樟遣、感知編碼和混合編碼而叼。
-
波形編碼:模擬音頻數(shù)字化(抽樣和量化)的過(guò)程中,根據(jù)人耳的聽(tīng)覺(jué)特性進(jìn)行編碼豹悬,并使編碼后的音頻信號(hào)與原始信號(hào)的波形盡可能匹配,實(shí)現(xiàn)數(shù)據(jù)壓縮液荸。
- PCM (Pulse Code Modulation)瞻佛、脈沖編碼調(diào)制。
- DPCM (Differential Pulse Code Modulation)娇钱。
- APCM (Adaptive Pulse Code Modulation)伤柄。
- ADPCM (Adaptive Differential Pulse Code Modulation)。
參數(shù)編碼:把音頻信號(hào)表示成模型的輸出文搂,利用特征的方法抽取必要的模型參數(shù)和激勵(lì)信號(hào)的信息适刀,且對(duì)這些信息編碼,最后在輸出端合成原始信號(hào)煤蹭。
這里可以看這篇文章了解下:音頻處理的狗屋笔喉,可能需要翻個(gè)墻取视。
音頻開(kāi)發(fā)基礎(chǔ)知識(shí)簡(jiǎn)介
1.2 常見(jiàn)音頻格式
1.3 音頻后處理概念
NS(Noise Suppression):噪音抑制。
NLP(Nonlinear Procession):去除殘留的回音和背景噪聲常挚。
NC(Noise Controller):噪音控制作谭。
CC(Clarity Controller):清晰度控制。
VAD(Voice Activity Detection):靜音檢測(cè)奄毡,將檢測(cè)被編碼的音頻數(shù)據(jù)是語(yǔ)音還是靜音或背景噪音折欠。這個(gè)特性在用變比特率(VBR)進(jìn)行編碼是總是開(kāi)啟的,所以選項(xiàng)設(shè)置只對(duì)非變比特率(VBR)起作用吼过。
DRC(Dynamic Range Controller)
AGC(Automatic Gain Controller):自動(dòng)增益控制锐秦。
VBR(Variable Bit-Rate):變比特率,變比牲率(VBR)允許編解碼器動(dòng)態(tài)調(diào)整比特率以適應(yīng)的音頻解碼的“難度”,拿Speex來(lái)說(shuō)盗忱,像元音和瞬間高音則需較高比特率(Bit-rate)來(lái)達(dá)到最佳效果农猬,而摩擦音則用較少的比特(bits)即可完成編碼。
CBR(Constant Bit-Rate):平均比特率(ABR)通過(guò)動(dòng)態(tài)調(diào)整變比特率(VBR)的質(zhì)量來(lái)獲得一個(gè)特定目標(biāo)的比特率售淡,解決了VBR中存在的問(wèn)題之一斤葱。
CNG(Comfort Noise Generator):舒適噪音生成。在非變比特率的情況下揖闸,檢測(cè)非語(yǔ)音周期并對(duì)用足夠的比特?cái)?shù)重新生成的背景噪聲進(jìn)行編碼揍堕。這個(gè)叫“舒適噪聲生成(CNG)。
-
postprocess:后處理汤纸。
- punctuation process:標(biāo)點(diǎn)處理衩茸。
- smooth process:順滑處理。
- number process:數(shù)字處理贮泞。 對(duì)應(yīng)模塊:nlp.dll楞慈。
- replace process:替換處理。
- pargraph process:段落處理啃擦。
- language type:處理語(yǔ)言囊蓝,0 - 中文,1 - 粵語(yǔ)令蛉,2 - 英語(yǔ)聚霜,3 - 維語(yǔ),4 - 藏語(yǔ)珠叔。
- output type:0 - next-g聽(tīng)寫(xiě)引擎JSON格式, 1 - 常規(guī)(文本格式), 2 - next-g聽(tīng)寫(xiě)引擎JSON格式,帶cm
- useAttribute:根據(jù)詞性優(yōu)化標(biāo)點(diǎn)蝎宇。
語(yǔ)音處理檢測(cè)技術(shù)中的熱點(diǎn)--端點(diǎn)檢測(cè)、降噪和壓縮
2祷安、視頻
2.1 視頻基礎(chǔ)知識(shí)
2.1.1 視頻簡(jiǎn)介
視頻(Video)泛指將一系列靜態(tài)影像以電信號(hào)的方式加以捕捉姥芥、紀(jì)錄、處理汇鞭、儲(chǔ)存凉唐、傳送與重現(xiàn)的各種技術(shù)庸追。連續(xù)的圖像變化每秒超過(guò)24幀(frame)畫(huà)面以上時(shí),根據(jù)視覺(jué)暫留原理熊榛,人眼無(wú)法辨別單幅的靜態(tài)畫(huà)面锚国;看上去是平滑連續(xù)的視覺(jué)效果,這樣連續(xù)的畫(huà)面叫做視頻玄坦。視頻與電影屬于不同的技術(shù)血筑,后者是利用照相術(shù)將動(dòng)態(tài)的影像捕捉為一系列的靜態(tài)照片。
人眼在觀察景物時(shí)煎楣,光信號(hào)傳入大腦神經(jīng)豺总,需經(jīng)過(guò)一段短暫的時(shí)間,光的作用結(jié)束后择懂,視覺(jué)形象并不立即消失喻喳,這種殘留的視覺(jué)稱“后像”,視覺(jué)的這一現(xiàn)象則被稱為“視覺(jué)暫留”困曙。
2.1.2 視頻屬性
1表伦、幀率
幀率(Frame rate)是用于測(cè)量顯示幀數(shù)的量度。所謂的測(cè)量單位為每秒顯示幀數(shù)(Frames per Second慷丽,F(xiàn)PS)或“赫茲”(Hz)蹦哼。
幀率表示圖形處理器處理時(shí)每秒鐘能夠更新的次數(shù)。高的幀率可以得到更流暢要糊、更逼真的動(dòng)畫(huà)纲熏。一般來(lái)說(shuō)30fps就是可以接受的,但是將性能提升至60fps則可以明顯提升交互感和逼真感锄俄,但是一般來(lái)說(shuō)超過(guò)75fps一般就不容易察覺(jué)到有明顯的流暢度提升了局劲。如果幀率超過(guò)屏幕刷新率只會(huì)浪費(fèi)圖形處理的能力,因?yàn)楸O(jiān)視器不能以這么快的速度更新奶赠,這樣超過(guò)刷新率的幀率就浪費(fèi)掉了鱼填。
我們可以根據(jù)幀率得出連續(xù)兩幀的時(shí)間間隔。比如幀率為30FPS,那么相鄰兩幀的時(shí)間間隔為33ms车柠。
屏幕刷新率是指電子束對(duì)屏幕上的圖像重復(fù)掃描的次數(shù)剔氏。
刷新率越高,所顯示的圖象(畫(huà)面)穩(wěn)定性就越好竹祷。刷新率高低將直接決定其價(jià)格,但是由于刷新率與分辨率兩者相互制約羊苟,因此只有在高分辨率下達(dá)到高刷新率這樣的顯示器才能稱其為性能優(yōu)秀塑陵。
2、分辨率
像素:每張圖片都是由色點(diǎn)組成的蜡励,每個(gè)色點(diǎn)稱為一個(gè)像素令花。
一張圖片由30萬(wàn)個(gè)色點(diǎn)組成阻桅,這個(gè)圖片的像素就是30W。我們常說(shuō)相機(jī)是多少像素兼都,這個(gè)像素就是說(shuō)這款照相機(jī)的感光器件有多少個(gè)嫂沉,有100W個(gè)感光器件的相機(jī)就是100W像素的相機(jī)。一臺(tái)100W像素的相機(jī)拍攝的照片洗成5寸的照片會(huì)比洗成6寸清晰一點(diǎn)扮碧。
分辨率=畫(huà)面水平方向的像素值 * 畫(huà)面垂直方向的像素值趟章。
分辨率可以分為兩方面:屏幕分辨率和圖像分辨率。
屏幕分辨率:屏幕分辨率是屏幕每行的像素點(diǎn)數(shù)每列的像素點(diǎn)數(shù)慎王,每個(gè)屏幕有自己的分辨率蚓土。*
屏幕分辨率是1024×768,也就是說(shuō)設(shè)備屏幕的水平方向上有1024個(gè)像素點(diǎn)赖淤,垂直方向上有768個(gè)像素點(diǎn)蜀漆。像素的大小是沒(méi)有固定長(zhǎng)度的,不同設(shè)備上一個(gè)單位像素色塊的大小是不一樣的咱旱。例如确丢,尺寸面積大小相同的兩塊屏幕,分辨率大小可以是不一樣的吐限,分辨率高的屏幕上面像素點(diǎn)(色塊)就多鲜侥,所以屏幕內(nèi)可以展示的畫(huà)面就更細(xì)致,單個(gè)色塊面積更小毯盈。而分辨率低的屏幕上像素點(diǎn)(色塊)更少剃毒,單個(gè)像素面積更大,可以顯示的畫(huà)面就沒(méi)那么細(xì)致搂赋。
由于屏幕上的點(diǎn)赘阀、線和面都是由像素組成的,顯示器可顯示的像素越多脑奠,畫(huà)面就越精細(xì)基公,同樣的屏幕區(qū)域內(nèi)能顯示的信息也越多,所以分辨率是個(gè)非常重要的性能指標(biāo)之一宋欺『涠梗可以把整個(gè)圖像想象成是一個(gè)大型的棋盤(pán),而分辨率的表示方式就是所有經(jīng)線和緯線交叉點(diǎn)的數(shù)目齿诞。顯示分辨率一定的情況下酸休,顯示屏越小圖像越清晰,反之祷杈,顯示屏大小固定時(shí)斑司,顯示分辨率越高圖像越清晰。
常見(jiàn)的分辨率有: 1080P(1920 x 1080) 但汞、720P(1280 x 720) 宿刮、480P(640 x 480)互站、360P,外語(yǔ)字母P意為逐行掃描(progressive scanning)
圖像分辨率:指每英寸圖像內(nèi)的像素點(diǎn)數(shù)僵缺。圖像分辨率是有單位的胡桃,叫像素每英寸。
分辨率越高磕潮,像素的點(diǎn)密度越高翠胰,圖像越逼真。一張圖片分辨率是500x200揉抵,也就是說(shuō)這張圖片在屏幕上按1:1放大時(shí)亡容,水平方向有500個(gè)像素點(diǎn)(色塊),垂直方向有200個(gè)像素點(diǎn)(色塊)冤今。在同一臺(tái)設(shè)備上闺兢,圖片分辨率越高,這張圖片1:1放大時(shí)戏罢,圖片面積越大屋谭;圖片分辨率越低,這張圖片1:1縮放時(shí)龟糕,圖片面積越小桐磁。但是,在屏幕上把圖片超過(guò)100%放大時(shí)讲岁,為什么圖片上像素色塊也變的越大我擂,其實(shí)是設(shè)備通過(guò)算法對(duì)圖像進(jìn)行了像素補(bǔ)足,我們把圖片放的很大后看到的一塊一塊的方格子缓艳,雖然理解為一個(gè)圖像像素校摩,但是其實(shí)是已經(jīng)補(bǔ)充了很多個(gè)屏幕像素;同理阶淘,把圖片小于100%縮小時(shí)衙吩,也是通過(guò)算法將圖片像素進(jìn)行減少。
3溪窒、碼率(比特率)
由于保存完整的一幀一幀圖片的視頻原文件太大坤塞,必須要通過(guò)某種視頻壓縮算法將視頻中的圖片壓縮,以減小視頻文件大小澈蚌,那么壓縮比越大摹芙,解壓縮還原后用來(lái)播放的視頻就會(huì)有越嚴(yán)重的失真,因?yàn)閴嚎s的同時(shí)不可避免的丟失了視頻中原來(lái)圖像的數(shù)據(jù)信息宛瞄。
碼率又稱比特率bps(bit per second)瘫辩,是指視頻文件在單位時(shí)間內(nèi)使用的數(shù)據(jù)流量,即用平均每秒多少bit來(lái)衡量一個(gè)視頻大小坛悉。
4伐厌、計(jì)算視頻碼率
我們可以根據(jù)一個(gè)視頻的長(zhǎng)度和大小來(lái)推斷該視頻的碼率是多少。
一段1080P的視頻長(zhǎng)度為100min裸影,大小為1G挣轨,該視頻碼率?
100min = 100 * 60 = 6000s
1G = 1024M = 1024 * 1024KB = 1024 * 1024 * 1024KB = 1024 * 1024 * 1024 * 8 bit = 8589934592bit
比特率 = 8589934592/6000s = 1431655b/s = 1.4Mbit/s
2.1.3 音視頻同步
音視頻混合一起播放轩猩,就呈現(xiàn)了我們常尘戆纾看到的廣義的視頻。在音頻一起播放的時(shí)候均践,我們通常還要面臨一個(gè)問(wèn)題:怎么進(jìn)行同步晤锹,以免出現(xiàn)畫(huà)不同聲的情況。
要實(shí)現(xiàn)因頻頻同步彤委,通常要選擇一個(gè)參考時(shí)鐘鞭铆,參考時(shí)鐘的時(shí)間上是線性增長(zhǎng)的。編碼音視頻流時(shí)依據(jù)參考時(shí)鐘上的時(shí)間給每幀數(shù)據(jù)打上一個(gè)時(shí)間戳焦影。在播放時(shí)车遂,讀物數(shù)據(jù)幀上的時(shí)間戳,同時(shí)參考當(dāng)時(shí)參考時(shí)鐘上的時(shí)間來(lái)安排播放斯辰。
這里說(shuō)的時(shí)間戳即下文會(huì)提到的PTS舶担,實(shí)踐中,我們可以選擇:同步視頻到音頻彬呻、同步音頻到視頻或同步音視頻到外部時(shí)鐘衣陶。
1、DTS/PTS
DTS(decoding time stamp):解碼時(shí)間戳闸氮,是解碼器進(jìn)行解碼時(shí)相對(duì)于SCR(系統(tǒng)參考時(shí)間)的時(shí)間戳剪况,它主要標(biāo)識(shí)讀入內(nèi)存bit流在什么時(shí)刻開(kāi)始送入解碼器中進(jìn)行解碼。
PTS(presentation time stamp):顯示時(shí)間戳湖苞。PTS主要用于視頻的tongue和輸出拯欧,在display的時(shí)候使用。在沒(méi)有B幀的情況下财骨,DTS和PTS的輸出順序是一致的镐作。
DTS 時(shí)間戳決定了解碼器在SCR時(shí)間等于DTS時(shí)間時(shí)進(jìn)行解碼招拙,PTS時(shí)間戳也是類似的洞斯。通常台盯,DTS/PTS時(shí)間戳指示的是晚于音視頻包中的SCR的一個(gè)時(shí) 間报慕。例如赚瘦,如果一個(gè)視頻數(shù)據(jù)包的SCR是100ms(意味著此包是播放100ms以后從磁盤(pán)中讀取的)缘回,那么DTS/PTS值就差不多是200 /280ms秽誊,表明當(dāng)SCR到200ms時(shí)這個(gè)視頻數(shù)據(jù)應(yīng)該被解碼并在80ms以后被顯示出來(lái)(視頻數(shù)據(jù)在一個(gè)buffer中一直保存到開(kāi)始解碼)
下 溢通常發(fā)生在設(shè)置的視頻數(shù)據(jù)流相關(guān)mux率太高错览。如果mux率是1000000bits/sec(意味著解碼器要以1000000bits/sec的速率 讀取文件),可是視頻速率是2000000bits/sec(意味著需要以2000000bits/sec的速率顯示視頻數(shù)據(jù))逞力,從磁盤(pán)中讀取視頻數(shù)據(jù)時(shí) 速度不夠快以至于1秒鐘內(nèi)不能夠讀取足夠的視頻數(shù)據(jù)這種情況下DTS/PTS時(shí)間戳就會(huì)指示視頻在從硬盤(pán)中讀出來(lái)之前進(jìn)行解碼或顯示(DTS/PTS時(shí)間戳就要比包含它們的數(shù)據(jù)包中的SCR時(shí)間要早了)曙寡。
如今依靠解碼器,著基本已經(jīng)不是什么問(wèn)題了(盡管MPEG文件因?yàn)閼?yīng)該沒(méi)有下溢而并不完全符合MPEG標(biāo)準(zhǔn))寇荧。一些解碼器(很多著名的基于PC的播放器)盡可能快的讀取文件以便顯示視頻举庶,可以的話直接忽略SCR。
注意在你提供的列表中揩抡,平均的視頻流速率為~3Mbps(3000000bits/sec)但是它的峰值達(dá)到了14Mbps(相當(dāng)大户侥,DVD限制在 9.8Mbps內(nèi))。這意味著mux率需要調(diào)整足夠大以處理14Mbps的部分峦嗤, bbMPEG計(jì)算出來(lái)的mux率有時(shí)候太低而導(dǎo)致下溢蕊唐。
你計(jì)劃讓視頻流速率這么高么?這已經(jīng)超過(guò)了DVD的說(shuō)明了烁设,而且很可能在大多數(shù)獨(dú)立播放其中都不能播放替梨。如果你不是這么計(jì)劃,我會(huì)從1增加mquant的值并且在視頻設(shè)置中將最大碼流設(shè)置為9Mbps以保持一個(gè)小一點(diǎn)的碼流署尤。
如果你確實(shí)想讓視頻
那么高耙替,你需要增大mux率。從提供的列表可以得出bbMPEG使用14706800bits/sec或者1838350bytes /sec的mux率(總數(shù)據(jù)速率為:1838350bytes/sec(14706800bits/sec)行)曹体。你在強(qiáng)制mux率字段設(shè)置的值應(yīng)該是以 bytes/sec為單位并被50整除俗扇。所以我會(huì)從36767(1838350/50)開(kāi)始,一直增加直到不會(huì)再出現(xiàn)下溢錯(cuò)誤為止箕别;
DTS主要用于視頻的解碼铜幽,PTS主要用于視頻的同步和輸出。在display的時(shí)候使用串稀,在沒(méi)有B frame情況下除抛,DTS和PTS的輸出順序是一致的。
舉個(gè)栗子:
下為GOP為15的例子母截,其解碼的參數(shù)frame及解碼的順序都在上面:
[圖片上傳失敗...(image-a70084-1598062459460)]
如上圖到忽,I frame的解碼不依賴于其它任何的幀,而P幀的解碼則依賴前面的I幀或P幀清寇。B幀的解碼則依賴于其前的最近的一個(gè)I幀或P幀即其后最近的P幀喘漏。
2.2 視頻解碼
2.2.1 解碼概念
- 解協(xié)議:流媒體協(xié)議的數(shù)據(jù),解析為標(biāo)準(zhǔn)的相應(yīng)的封裝格式數(shù)據(jù)华烟。
- 解封裝:將輸入的封裝格式的數(shù)據(jù)翩迈,分離成音頻流和視頻流壓縮編碼數(shù)據(jù)。
- 解碼:將視頻和音頻壓縮編碼數(shù)據(jù)盔夜,解碼稱為非壓縮的音頻/視頻原始數(shù)據(jù)负饲。
- 音視頻同步:根據(jù)封裝模塊處理過(guò)程中獲取到的參數(shù)信息堤魁,同步解碼出來(lái)的視頻和音頻數(shù)據(jù),并將音視頻數(shù)據(jù)傳送至系統(tǒng)的顯卡和聲卡播放出來(lái)返十。
2.2.1.1 軟解碼
軟解碼:使用CPU進(jìn)行解碼妥泉。時(shí)間直接,簡(jiǎn)單吧慢,參數(shù)調(diào)整方便涛漂,升級(jí)容器,但CPU負(fù)載重检诗,性能相對(duì)較低,低碼率情況下通常較硬編碼好些瓢剿。
2.2.1.2 硬解碼
硬解碼:使用顯卡GPU逢慌,專用的DSP、FPGA间狂、ASIC芯片等硬件進(jìn)行解碼攻泼。性能好。
典型應(yīng)用來(lái)說(shuō)明如何使用硬件解碼接口鉴象,該應(yīng)用場(chǎng)景是從網(wǎng)絡(luò)處傳來(lái)H264編碼后的視頻碼流忙菠,最后顯示在手機(jī)屏幕上。
場(chǎng)景:network -> compressed video samples -> phone
2.2.2 H.264編碼原理
2.2.2.1 編碼原理概念介紹
H.264/MPEG-4AVC(H.264)是1995年字MPEG-2視頻壓縮標(biāo)準(zhǔn)之后發(fā)布的最新纺弊、最優(yōu)前途的視頻壓縮標(biāo)準(zhǔn)牛欢。它是ITU-T和ISO/IEC的聯(lián)合開(kāi)發(fā)組共同開(kāi)發(fā)的最新國(guó)際視頻編碼標(biāo)準(zhǔn)。通過(guò)該標(biāo)準(zhǔn)淆游,在同等圖像質(zhì)量的壓縮效率比以前的標(biāo)準(zhǔn)提高了2倍以上傍睹。
國(guó)際上制定視頻編解碼技術(shù)的組織有兩個(gè),一個(gè)是國(guó)際電聯(lián)(ITU-T)犹菱,它制定的標(biāo)準(zhǔn)有H.261拾稳、H.263、H.263+等腊脱,另一個(gè)是國(guó)際標(biāo)準(zhǔn)化組織(ISO)访得。它制定的標(biāo)準(zhǔn)有MPEG-1、MPEG-2陕凹、MPEG-4等悍抑。而H.264則是由兩個(gè)組織聯(lián)合組建的聯(lián)合視頻組(JVT)共同制定的新數(shù)字視頻編碼標(biāo)準(zhǔn),所以它既是ITU-T的H.264捆姜,又是ISO/IEC的MPEG-4高級(jí)視頻編碼(Advanced Video Coding传趾,AVC)的第10 部分。因此泥技,不論是MPEG-4 AVC浆兰、MPEG-4 Part 10磕仅,還是ISO/IEC 14496-10,都是指H.264簸呈。
1榕订、H.264的高級(jí)技術(shù)背景
H.264標(biāo)準(zhǔn)的主要目標(biāo)是在于現(xiàn)有的視頻編解碼標(biāo)準(zhǔn)相比,在相同的帶寬下提供更加優(yōu)秀的圖像質(zhì)量蜕便。
而H.264與以前的國(guó)際保準(zhǔn)如H.263和MPEG-4相比劫恒,主要優(yōu)勢(shì)體現(xiàn)在下面幾個(gè)部分:
- 將每個(gè)視頻分離成有像素組成的快,因此視頻幀的編碼處理過(guò)程可以到達(dá)塊的級(jí)別轿腺。
- 采用空間冗余方法两嘴,對(duì)視頻幀的一些原始快進(jìn)行空間預(yù)測(cè)、轉(zhuǎn)換族壳、優(yōu)化和熵編碼(可變長(zhǎng)編碼)憔辫。
- 對(duì)連續(xù)幀不同塊采用的臨時(shí)存放的方法,這樣仿荆,只需對(duì)連續(xù)幀中有改變的部分進(jìn)行編碼贰您。該算法采用動(dòng)態(tài)預(yù)測(cè)和運(yùn)動(dòng)補(bǔ)償來(lái)完成。對(duì)于特定的塊拢操,在一個(gè)或多個(gè)已經(jīng)進(jìn)行了編碼的幀進(jìn)行搜索來(lái)決定塊的運(yùn)動(dòng)向量锦亦,并由此在后面的編碼和解碼中預(yù)測(cè)主塊。
2令境、H.264的特征和高優(yōu)先級(jí)
H.264是國(guó)際標(biāo)準(zhǔn)化組織和國(guó)際電信聯(lián)盟共同提出的及MPEG4新一代數(shù)字視頻壓縮格式杠园,它既保留了以往壓縮技術(shù)的有點(diǎn)和精華,又具有其他壓縮技術(shù)無(wú)法比擬的許多優(yōu)點(diǎn)展父。
- 低碼流(low bit rate):在同等圖像質(zhì)量下返劲,采用H.264技術(shù)壓縮后的數(shù)據(jù)量只有MPEG2的1/8,MPWG的1/3栖茉。顯然篮绿,H.264壓縮技術(shù)的采用將大大節(jié)省用戶的下載時(shí)間和數(shù)據(jù)流量收費(fèi)。
- 高質(zhì)量圖像:H.264能提供連續(xù)吕漂、流暢的高質(zhì)量圖像亲配。
- 容錯(cuò)能力強(qiáng):H.264能提供解決在不穩(wěn)定網(wǎng)絡(luò)環(huán)境下容易發(fā)生丟包等錯(cuò)誤的必要工具。
- 網(wǎng)絡(luò)適應(yīng)性強(qiáng):H.264提供了網(wǎng)絡(luò)適應(yīng)層(network adaptation layer)惶凝,使得H.264的文件能容器地在不同的網(wǎng)絡(luò)上傳輸吼虎。
3、H.264標(biāo)準(zhǔn)的關(guān)鍵技術(shù)
a苍鲜、幀內(nèi)預(yù)測(cè)編碼
幀內(nèi)編碼用來(lái)縮減圖像空間的冗余度思灰。相鄰的宏塊通常含有相似的屬性。在對(duì)一給定宏塊編碼時(shí)混滔,可以根據(jù)周?chē)暮陦K預(yù)測(cè)洒疚,然后對(duì)預(yù)測(cè)值與實(shí)際值的差值進(jìn)行編碼歹颓。
b、幀間預(yù)測(cè)編碼
幀間預(yù)測(cè)編碼利用連續(xù)幀的時(shí)間冗余來(lái)進(jìn)行運(yùn)動(dòng)估計(jì)和補(bǔ)償油湖。除了P幀巍扛,B幀外,還支持一種新的流間傳送幀 - SP幀乏德,碼流包含SP幀后后撤奸,能在有類似內(nèi)容但碼率不同的碼流見(jiàn)快速切換,同時(shí)支持隨機(jī)接入和快速回放的模式喊括。
c胧瓜、整數(shù)變換
H.264使用以證書(shū)為基礎(chǔ)的空間變換。
d瘾晃、量化
H.264有32種不同的量化步長(zhǎng)贷痪,且以12.5%的復(fù)合率遞增,不是一個(gè)常數(shù)蹦误。
e、熵編碼
兩種不同的熵編碼方法:通過(guò)可變長(zhǎng)的編碼和基于文本的自適應(yīng)二進(jìn)制算術(shù)編碼肉津。
2.2.2.2 通俗理解
H.264為新一代編碼標(biāo)準(zhǔn)强胰,以高壓縮質(zhì)量和支持多種網(wǎng)絡(luò)的流媒體傳輸著稱,其編碼理論依據(jù)可以白話如下:參照一段時(shí)間內(nèi)圖像的統(tǒng)計(jì)結(jié)果妹沙,在相鄰幾幅圖像畫(huà)中偶洋,一般有差別的像素只有10%以內(nèi)的點(diǎn),量度差值不超過(guò)2%距糖,而色度差值只有1%內(nèi)玄窝。所以對(duì)一段變化不大圖像畫(huà)面,我們可以先編碼一個(gè)完整的圖像幀A悍引,隨后的B幀就不編碼全部圖像恩脂,只寫(xiě)入A幀的差別,這樣B幀的大小就只有完整幀的1/10甚至更小趣斤。B幀之后C幀如果變化不大俩块,我們可以繼續(xù)參考B的方式編碼C幀,這樣循環(huán)下去浓领。這段圖像我們稱之為一個(gè)序列(序列就是有相同特點(diǎn)的一段數(shù)據(jù))玉凯,當(dāng)某個(gè)圖像與之前的圖像差別很大時(shí),無(wú)法參考之前的幀來(lái)生成联贩,那我們結(jié)束上一個(gè)序列漫仆,開(kāi)始下一個(gè)序列。
H.264中定義三種幀泪幌,完整編碼的幀叫I幀盲厌,參考之前生成的I幀只包含差異部分叫做P幀署照,還有一種參考前后編碼的幀叫做B幀。
1狸眼、對(duì)序列的說(shuō)明
在H.264中圖像以序列為單位進(jìn)行組織藤树,一個(gè)序列是一段圖像編碼后的數(shù)據(jù)流,以I幀開(kāi)始到下一個(gè)I幀結(jié)束拓萌。
一個(gè)序列的第一個(gè)圖像叫做IDR圖像(立即刷新圖像)岁钓,IDR都是I幀圖像。H.264引入IDR圖像為了解碼的重同步微王,當(dāng)解碼器解碼到IDR圖像時(shí)屡限,立即將參考幀隊(duì)列清空,將已編碼的數(shù)據(jù)全部輸出或拋棄炕倘,重新查找參數(shù)集钧大,開(kāi)始一個(gè)新的序列。這樣罩旋,當(dāng)前一個(gè)序列出現(xiàn)重大錯(cuò)誤時(shí)啊央,這里可以獲得重新同步的機(jī)會(huì)。IDR圖像永遠(yuǎn)不會(huì)使用IDR之前的圖像的數(shù)據(jù)來(lái)解碼涨醋。
一個(gè)序列就是一段內(nèi)容差異不太大的圖像編碼后生成的一串?dāng)?shù)據(jù)流瓜饥。當(dāng)運(yùn)動(dòng)變化比較少時(shí),一個(gè)序列可以很長(zhǎng)浴骂,因?yàn)檫\(yùn)動(dòng)變化少就代表圖像畫(huà)面的內(nèi)容變動(dòng)很小乓土,所以就可以編一個(gè)I幀,然后一直P(pán)幀溯警、B幀了趣苏。當(dāng)運(yùn)動(dòng)變化多時(shí),可能一個(gè)序列就比較短了梯轻,比如就包含一個(gè)I幀和3食磕、4個(gè)P幀。
2檩淋、對(duì)三種幀的介紹
a芬为、I幀
為了更好的理解I幀,這里羅列兩種解釋:
- 幀內(nèi)編碼幀蟀悦,I幀表示關(guān)鍵幀媚朦,你可以理解為這一陣畫(huà)面的完整保留,解碼時(shí)只需要本幀數(shù)據(jù)就可以完成日戈。
- 幀內(nèi)編碼幀询张,intra frame,I幀通常是每個(gè)GOP(MPEG所使用的一種視頻壓縮技術(shù))的第一個(gè)幀浙炼,經(jīng)過(guò)適度的進(jìn)行壓縮份氧,作為隨機(jī)訪問(wèn)的參考點(diǎn)唯袄,可以當(dāng)成圖像。I幀可以看成是一個(gè)圖像經(jīng)過(guò)壓縮后的產(chǎn)物蜗帜。
I幀的特點(diǎn):
- 它是一個(gè)全幀壓縮編碼幀恋拷。它將全幀圖像信息進(jìn)行JPEG壓縮編碼及傳輸。
- 解碼時(shí)僅用I幀的數(shù)據(jù)就可以重構(gòu)完整圖像厅缺。
- I幀描述了圖像背景和運(yùn)動(dòng)主體的詳情蔬顾。
- I幀不需要參考其它畫(huà)面而生成。
- I幀是B幀和P幀的參考幀(其質(zhì)量直接影響通序列其它幀的質(zhì)量)湘捎。
- I幀是幀組GOP的基礎(chǔ)幀(第一幀)诀豁,在一組中只有一個(gè)I幀。
- I幀不需要考慮運(yùn)動(dòng)矢量窥妇。
- I幀所占據(jù)的信息量比較大舷胜。
b、P幀
為了更好的了解P幀活翩,這里同樣羅列兩種解釋:
- 前項(xiàng)預(yù)測(cè)編碼幀烹骨。P著呢表示的這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別,解碼時(shí)需要用之前緩存的畫(huà)面疊加上本幀定義的差別材泄,生成最終畫(huà)面展氓。
- 前項(xiàng)預(yù)測(cè)編碼幀,predictive frame脸爱,通過(guò)充分將低于圖像序列中前面已編碼幀的時(shí)間冗余信息來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫預(yù)測(cè)幀未妹。
P幀的預(yù)測(cè)和重構(gòu):P幀是以I幀為參考幀簿废,在I幀中找出P幀某點(diǎn)的預(yù)測(cè)值和運(yùn)動(dòng)矢量,取預(yù)測(cè)差值和運(yùn)動(dòng)矢量一起傳送络它。在接收端根據(jù)根據(jù)運(yùn)動(dòng)矢量從I幀中找出P幀的某點(diǎn)的預(yù)測(cè)值并與差值相加得到P幀某點(diǎn)樣值族檬,從而得到完整的P幀。
- P幀是I幀后相隔1-2幀的編碼幀化戳。
- P幀采用運(yùn)動(dòng)補(bǔ)償?shù)姆椒▊魉退c前面的I或P幀的差值及運(yùn)動(dòng)矢量单料。
- 解碼時(shí)必須將I幀中的預(yù)測(cè)值與預(yù)測(cè)誤差求和才能完整重構(gòu)P幀圖像。
- P幀屬于前項(xiàng)預(yù)測(cè)的幀間編碼点楼,它只參考前面最靠近的I幀或P幀扫尖。
- P幀可以是其后面的P幀的參考幀,也可以是其前后的B幀的參考幀掠廓。
- 由于P幀是參考幀换怖,它可能造成編解碼錯(cuò)誤的擴(kuò)散。
- 由于是差值傳輸蟀瞧,P幀的壓縮比比較高沉颂。
c条摸、B幀
為了更好的了解B幀,這里同樣羅列兩種解釋:
- 雙向預(yù)測(cè)內(nèi)插編碼幀铸屉。B幀是雙向差別幀钉蒲,也就是B幀記錄的是本幀與前后幀的差別。換言之彻坛,要解碼B幀顷啼,不僅要取得之前的緩存畫(huà)面,還要解碼后面的畫(huà)面小压,通過(guò)前后畫(huà)面與本幀數(shù)據(jù)的疊加取得最終畫(huà)面线梗。B幀的壓縮率比較高,但是解碼會(huì)比較累怠益。
- 雙向預(yù)測(cè)內(nèi)插編碼幀仪搔,bi-directional interpolated prediction frame,既考慮與源圖像序列前面的已編碼幀蜻牢,也估計(jì)源圖像序列后面的已編碼幀之間的時(shí)間冗余信息來(lái)壓縮傳輸數(shù)據(jù)量的源碼圖像烤咧。
B幀的特點(diǎn):
- B幀是由前面的I或P幀和后面的P幀來(lái)進(jìn)行預(yù)測(cè)的。
- B幀傳送的是與它前面的I幀或P幀和后面P幀之間的預(yù)測(cè)誤差及運(yùn)動(dòng)矢量抢呆。
- B幀是雙向預(yù)測(cè)幀煮嫌。
- B幀壓縮比最高,因?yàn)樗环从硡⒖紟g運(yùn)動(dòng)主體的變化情況抱虐,預(yù)測(cè)比較準(zhǔn)確昌阿。
- B幀不是參考幀,不會(huì)造成解碼錯(cuò)誤的擴(kuò)散恳邀。
I懦冰、B、P各幀是根據(jù)壓縮算法的需要谣沸,是人為定義的刷钢,他們都是實(shí)實(shí)在在的物理幀。一般來(lái)說(shuō)乳附,I幀的壓縮率是7内地,P幀是20,B幀可以達(dá)到50赋除。
3阱缓、對(duì)壓縮算法的說(shuō)明
H.264的壓縮算法:
- 分組:把幾幀圖像分為一組(GOP,也是一個(gè)序列)贤重,為防止運(yùn)動(dòng)變化茬祷,幀數(shù)不宜過(guò)多。
- 定義幀:將每組內(nèi)的各幀圖像定義為三種類型,I祭犯、P秸妥、B幀。
- 預(yù)測(cè)幀:以I幀與基礎(chǔ)幀沃粗,I幀預(yù)測(cè)P幀粥惧,再有I幀和P幀預(yù)測(cè)B幀。
- 數(shù)據(jù)傳輸:最后將I幀數(shù)據(jù)和預(yù)測(cè)的差值信息進(jìn)行存儲(chǔ)和傳送最盅。
幀內(nèi)壓縮及空間壓縮突雪,當(dāng)壓縮一幀圖像是,僅考慮本幀的數(shù)據(jù)而不考慮相鄰幀之間的冗余信息涡贱,與靜態(tài)壓縮類似咏删。
幀間壓縮是相鄰幾幀的數(shù)據(jù)有很大的相關(guān)性,即連續(xù)的視頻其相鄰幀之間有冗余信息问词,根據(jù)這一特性督函,壓縮相鄰幀之間的冗余量就可以提高壓縮量。
幀間壓縮也稱為時(shí)間壓縮激挪,它通過(guò)比較本幀與相鄰幀之間的差異辰狡, 僅記錄本幀與其它相鄰幀的差值。
有損(Lossy )壓縮和無(wú)損(Lossy less)壓縮垄分。無(wú)損壓縮也即壓縮前和解壓縮后的數(shù)據(jù)完全一致宛篇。多數(shù)的無(wú)損壓縮都采用RLE行程編碼算法。有損壓縮意味著解壓縮后的數(shù)據(jù)與壓縮前的數(shù)據(jù)不一致薄湿。在壓縮的過(guò)程中要丟失一些人眼和人耳所不敏感的圖像或音頻信息,而且丟失的信息不可恢復(fù)叫倍。幾乎所有高壓縮的算法都采用有損壓縮,這樣才能達(dá)到低數(shù)據(jù)率的目標(biāo)。
2.2.3 H.264碼流結(jié)構(gòu)
存疑部分
H.264編碼器輸出的bit流中豺瘤,每個(gè)bit都屬于某個(gè)句法元素段标。句法元素被組織成有層次的結(jié)構(gòu),分別面熟各個(gè)層次的信息炉奴。
H.263中,句法元素被組織成序列蛇更、圖像瞻赶、片、宏塊派任、子宏塊五個(gè)層次砸逊。這樣的結(jié)構(gòu)中,每一層頭部和它的數(shù)據(jù)部分形成管理和被管理的強(qiáng)依賴關(guān)系掌逛,頭部的句法元素是該層數(shù)據(jù)的核心师逸,而一旦頭部丟失,數(shù)據(jù)部分的信息幾乎不可能再被正確的解碼出來(lái)豆混,尤其在序列層和圖像層篓像。
[圖片上傳失敗...(image-bb418c-1598062459460)]
[圖片上傳失敗...(image-e96aa6-1598062459460)]
刷新圖像概念:實(shí)際生活中动知,一張圖片就是一張圖像,而在H.264中圖像是個(gè)集合的概念员辩。
幀盒粮、頂場(chǎng)、底場(chǎng)都可以成為圖像奠滑。一幀就是一幅完整的圖像丹皱。當(dāng)采集視頻信號(hào)時(shí),如果采用逐行掃描宋税,則每次掃描到的信號(hào)就是一幅圖像摊崭,也就是一幀。當(dāng)采集視頻信號(hào)時(shí)杰赛,如果采用隔行掃描呢簸,則掃描下來(lái)的一幀圖像就被分為了兩個(gè)部分,這每部分就稱為場(chǎng)淆攻。根據(jù)次序分為頂場(chǎng)和底場(chǎng)阔墩。幀和場(chǎng)的概念又帶來(lái)了不同的編碼方式:幀編碼、場(chǎng)編碼瓶珊。逐行掃描適合運(yùn)動(dòng)圖像啸箫,故對(duì)運(yùn)動(dòng)圖像采用幀編碼更好;隔行掃描適合非運(yùn)動(dòng)圖像伞芹,故對(duì)非運(yùn)動(dòng)圖像采用場(chǎng)編碼更好忘苛。
H.264原始碼流
-
結(jié)構(gòu):由一個(gè)接一個(gè)的NALU組成的,而它的功能分為兩層唱较,VCL(視頻編碼層)和NAL(網(wǎng)絡(luò)提取層)扎唾。
- VCL:包括核心壓縮引擎和塊,宏塊和片的語(yǔ)法級(jí)別定義南缓,設(shè)計(jì)目標(biāo)是盡可能地獨(dú)立于網(wǎng)絡(luò)進(jìn)行高效的編碼胸遇。
- NAL:負(fù)責(zé)將VCL產(chǎn)生的比特字符串適配到各個(gè)的網(wǎng)絡(luò)和多元環(huán)境中,覆蓋了所有片級(jí)以上的語(yǔ)法級(jí)別汉形。
- 組成:NALU(nal unit) = NALU頭 + RBSP
NALU頭部類型
enum nal_unit_type_e
{
NAL_UNKNOWN = 0, // 未使用
NAL_SLICE = 1, // 不分區(qū)纸镊、非 IDR 圖像的片(片的頭信息和數(shù)據(jù))
NAL_SLICE_DPA = 2, // 片分區(qū) A
NAL_SLICE_DPB = 3, // 片分區(qū) B
NAL_SLICE_DPC = 4, // 片分區(qū) C
NAL_SLICE_IDR = 5, / ref_idc != 0 / // IDR 圖像中的片
NAL_SEI = 6, / ref_idc == 0 / // 補(bǔ)充增強(qiáng)信息單元
-
參數(shù)集是 H.264 標(biāo)準(zhǔn)的一個(gè)新概念,是一種通過(guò)改進(jìn)視頻碼流結(jié)構(gòu)增強(qiáng)錯(cuò)誤恢復(fù)能力的方法概疆。
NAL_SPS = 7, // 序列參數(shù)集 (包括一個(gè)圖像序列的所有信息逗威,即兩個(gè) IDR 圖像間的所有圖像信息,如圖像尺寸岔冀、視頻格式等)
NAL_PPS = 8, // 圖像參數(shù)集 (包括一個(gè)圖像的所有分片的所有相關(guān)信息凯旭, 包括圖像類型、序列號(hào)等,解碼時(shí)某些序列號(hào)的丟失可用來(lái)檢驗(yàn)信息包的丟失與否)
-
NAL_AUD = 9, // 分界符
NAL_FILLER = 12, // 填充(啞元數(shù)據(jù)罐呼,用于填充字節(jié))
/ ref_idc == 0 for 6,9, 10 (表明下一圖像為 IDR 圖像),11(表明該流中已沒(méi)有圖像),12 /
};
ps: 以上括號(hào)()中的為類型描述
在VCL數(shù)據(jù)傳輸或存儲(chǔ)之前鞠柄,這些編碼的VCL數(shù)據(jù),先被映射或封裝進(jìn)NAL單元(簡(jiǎn)稱NALU nal unit)弄贿。每個(gè)NALU包括一個(gè)原始字節(jié)序列負(fù)荷(RBSP春锋,raw nyte sequence payload),一組對(duì)應(yīng)于視頻編碼的NALU信息差凹。
RBSP的基本結(jié)構(gòu)是在原始編碼數(shù)據(jù)后面添加了結(jié)尾比特期奔。一個(gè)bit 1 若干個(gè)比特0,以便對(duì)齊字節(jié)危尿。
一個(gè)原始的H.264 NALU單元常由StartCode呐萌、NALU Header、NALU Payload三部分組成谊娇。
- StartCode表示一個(gè)NALU單元的開(kāi)始肺孤,必須是“00 00 00 01”或“00 00 01”。
- 每個(gè)NALU之間通過(guò)startcode(起始碼)進(jìn)行分隔济欢,起始碼分成兩種:0x000001(3Byte)或者0x00000001(4Byte)赠堵。如果NALU對(duì)應(yīng)的Slice為一幀的開(kāi)始就用0x00000001,否則就用0x000001法褥。
- NALU Header Type
RBSP:NAL包將其負(fù)載數(shù)據(jù)存儲(chǔ)在RBSP中茫叭,RBSP是系列SODB(string of data bits)。
- 一幀圖片和NALU的關(guān)聯(lián)
NALU是H.264在網(wǎng)絡(luò)上傳輸?shù)慕Y(jié)構(gòu),一幀圖片經(jīng)過(guò)H.264編碼之后,就被編碼為一個(gè)或多個(gè)片(slice)势就,而裝著這些片的載體,就是NALU了莽囤。
片(slice)與幀(frame)是不同的概念,幀(frame)是用作描述一張圖片的切距,一幀(frame)對(duì)應(yīng)一張圖片朽缎,而片是H.264提出的新概念,是通過(guò)編碼圖片后切分通過(guò)高效的方式整合出來(lái)的概念谜悟,一張圖片至少有一個(gè)片或多個(gè)片饵沧。片都是由NALU裝載并進(jìn)行網(wǎng)絡(luò)傳輸,但NALU并不一定是切片赌躺,它可能還包含其它用作描述視頻的信息。
上圖可以看出羡儿,每個(gè)分片包含片頭和數(shù)據(jù)兩部分?jǐn)?shù)據(jù)礼患。
-
切片,片的作用主要是用作宏塊(macroblock)的再提。片之所以被創(chuàng)造出來(lái)缅叠,主要目的就是限制誤碼的擴(kuò)散和傳輸悄泥。
- 分片頭中包含分片類型、分片中的宏塊類型肤粱,分片幀的數(shù)量弹囚、分片屬于哪個(gè)圖像及對(duì)應(yīng)幀的設(shè)置和參數(shù)等信息。
- 分頻數(shù)據(jù)中則是宏塊领曼,就是存儲(chǔ)像素?cái)?shù)據(jù)的地方鸥鹉。
-
宏塊(macroblock)
- 宏塊是視頻信息的主要承載著,它包含每個(gè)像素的亮度和色度信息庶骄。視頻編碼的主要工作就是提高高校的方式從碼流中獲取宏塊的像素陣列毁渗。
- 宏塊的組成:一個(gè)宏塊由16x6 亮度像素和附加的8x8CB和一個(gè)8x8Cr彩色像素塊組成,每個(gè)圖像中单刁,若干宏塊被排列成片的形式灸异。
- 切片與宏塊的關(guān)系
- I片:只包 I宏塊,I 宏塊利用從當(dāng)前片中已解碼的像素作為參考進(jìn)行幀內(nèi)預(yù)測(cè)(不能取其它片中的已解碼像素作為參考進(jìn)行幀內(nèi)預(yù)測(cè))羔飞。
- P片:可包 P和I宏塊肺樟,P 宏塊利用前面已編碼圖象作為參考圖象進(jìn)行幀內(nèi)預(yù)測(cè),一個(gè)幀內(nèi)編碼的宏塊可進(jìn)一步作宏塊的分割:即 16×16逻淌、16×8么伯、8×16 或 8×8 亮度像素塊(以及附帶的彩色像素);如果選了 8×8 的子宏塊,則可再分成各種子宏塊的分割恍风,其尺寸為 8×8蹦狂、8×4、4×8 或 4×4 亮度像素塊(以及附帶的彩色像素)朋贬。
- B片:可包 B和I宏塊凯楔,B 宏塊則利用雙向的參考圖象(當(dāng)前和 來(lái)的已編碼圖象幀)進(jìn)行幀內(nèi)預(yù)測(cè)。
- SP片(切換P):用于不同編碼流之間的切換锦募,包含 P 和/或 I 宏塊
- SI片:擴(kuò)展檔次中必須具有的切換摆屯,它包含了一種特殊類型的編碼宏塊,叫做 SI 宏塊糠亩,SI 也是擴(kuò)展檔次中的必備功能虐骑。
H.264的碼流結(jié)構(gòu)并沒(méi)有那么復(fù)雜,編碼后視頻的每一組圖像(GOP赎线, 圖片組)都給與傳輸序列(PPS)和本身這個(gè)幀的圖像參數(shù)(SPS)廷没,故如下。