? ? ? ?今天很開心雀监,開始了我的第一篇技術(shù)博客了野哭,之前一直沒有寫博客在塔,一方面是感覺沒什么好寫的,自己也沒有什么好分享的拨黔,還有可能就是自己比較懶吧蛔溃;但是最近在一家新的公司學(xué)習(xí)到了好多,發(fā)現(xiàn)自己在總結(jié)方面的知識(shí)比較薄弱,所以為了鍛煉自己贺待,也給自己的技術(shù)做一個(gè)總結(jié)徽曲,上上周就做了個(gè)計(jì)劃一周寫一篇技術(shù)博客的,但是一直沒空寫麸塞,所以就拖到今天了秃臣,為什么是今天呢?因?yàn)镮G奪冠了哪工,哈哈奥此,好了,閑話不多說了雁比,開始我們今天的分享吧稚虎。
一、視頻的處理流程
視頻編碼的主要作用是將視頻像素?cái)?shù)據(jù)(RGB偎捎,YUV等)壓縮成為視頻碼流蠢终,從而降低視頻的數(shù)據(jù)量
當(dāng)前使用最多的視頻編碼方案就是H.264,因?yàn)檫@個(gè)編碼標(biāo)準(zhǔn)是當(dāng)前視頻編碼效率最高的
H.264僅僅是一個(gè)編碼標(biāo)準(zhǔn)鸭限,而不是一個(gè)具體的編碼器
下一代的編解碼標(biāo)準(zhǔn)就要數(shù)HEVC和VP9了蜕径。VP9是Google繼VP8之后推出的新一代標(biāo)準(zhǔn)。VP9和HEVC相比败京,要稍微遜色一些兜喻。
音頻編碼的主要作用是將音頻采樣數(shù)據(jù)(PCM等)壓縮成為音頻碼流,從而降低音頻的數(shù)據(jù)量
音頻編碼技術(shù)近期絕大部分的改動(dòng)都是在MP3的繼任者——AAC的基礎(chǔ)上完成的赡麦。
AAC是當(dāng)前音頻編碼效率最高的音頻編碼標(biāo)準(zhǔn)
現(xiàn)有網(wǎng)絡(luò)音視頻平臺(tái)視頻編碼基本都是用h.264 ,音頻編碼基本都是用AAC朴皆,點(diǎn)播平臺(tái)也是這樣
封裝格式就是把視頻數(shù)據(jù)和音頻數(shù)據(jù)打包成一個(gè)文件的規(guī)范(就是把視頻碼流和音頻碼流合成一個(gè)文件)
有些封裝格式支持的視音頻編碼標(biāo)準(zhǔn)十分廣泛,應(yīng)該算比較優(yōu)秀的封裝格式泛粹,比如MKV遂铡;而有些封裝格式支持的視音頻編碼標(biāo)準(zhǔn)很少,應(yīng)該屬于落后的封裝格式晶姊,比如RMVB扒接。
流媒體協(xié)議是服務(wù)器與客戶端之間通信遵循的規(guī)定,主要有HTTP们衙?钾怔、RTMP、RTSP蒙挑、RTMFP
HTTP將所有的數(shù)據(jù)作為文件做處理宗侦。http協(xié)議不是流媒體協(xié)議。
RTMP和RTSP協(xié)議是流媒體協(xié)議忆蚀。
這是現(xiàn)在直播平臺(tái)使用的參數(shù)對(duì)比矾利,流媒體協(xié)議為什么使用rtmp呢姑裂?
采用RTMP作為直播協(xié)議的好處在于其被Flash播放器支持。而Flash播放器如今已經(jīng)安裝在全球99%的電腦上男旗,并且與瀏覽器結(jié)合的很好舶斧。因此這種流媒體直播平臺(tái)可以實(shí)現(xiàn)“無插件直播”,極大的簡化了客戶端的操作剑肯。封裝格式捧毛,視頻編碼,音頻編碼方面让网,無一例外的使用了FLV + H.264 + AAC的組合。FLV是RTMP使用的封裝格式师痕,H.264是當(dāng)今實(shí)際應(yīng)用中編碼效率最高的視頻編碼標(biāo)準(zhǔn)溃睹,AAC則是當(dāng)今實(shí)際應(yīng)用中編碼效率最高的音頻編碼標(biāo)準(zhǔn)。視頻播放器方面胰坟,都使用了Flash播放器因篇。
可以看出,點(diǎn)播服務(wù)普遍采用了HTTP作為流媒體協(xié)議笔横,H.264作為視頻編碼格式竞滓,AAC作為音頻編碼格式。采用HTTP作為點(diǎn)播協(xié)議有以下兩點(diǎn)優(yōu)勢:一方面吹缔,HTTP是基于TCP協(xié)議的應(yīng)用層協(xié)議商佑,媒體傳輸過程中不會(huì)出現(xiàn)丟包等現(xiàn)象,從而保證了視頻的質(zhì)量厢塘;另一方面茶没,HTTP被絕大部分的Web服務(wù)器支持,因而流媒體服務(wù)機(jī)構(gòu)不必投資購買額外的流媒體服務(wù)器晚碾,從而節(jié)約了開支抓半。點(diǎn)播服務(wù)采用的封裝格式有多種:MP4,F(xiàn)LV格嘁,F(xiàn)4V等笛求,它們之間的區(qū)別不是很大。視頻編碼標(biāo)準(zhǔn)和音頻編碼標(biāo)準(zhǔn)是H.264和AAC糕簿。這兩種標(biāo)準(zhǔn)分別是當(dāng)今實(shí)際應(yīng)用中編碼效率最高的視頻標(biāo)準(zhǔn)和音頻標(biāo)準(zhǔn)探入。視頻播放器方面,無一例外的都使用了Flash播放器冶伞。
視頻播放器播放一個(gè)互聯(lián)網(wǎng)上的視頻文件新症,需要經(jīng)過以下幾個(gè)步驟:解協(xié)議,解封裝响禽,解碼視音頻徒爹,視音頻同步荚醒。如果播放本地文件則不需要解協(xié)議,為以下幾個(gè)步驟:解封裝隆嗅,解碼視音頻界阁,視音頻同步。他們的過程如圖所示胖喳。
解協(xié)議的作用泡躯,就是將流媒體協(xié)議的數(shù)據(jù),解析為標(biāo)準(zhǔn)的相應(yīng)的封裝格式數(shù)據(jù)丽焊。視音頻在網(wǎng)絡(luò)上傳播的時(shí)候较剃,常常采用各種流媒體協(xié)議,例如HTTP技健,RTMP写穴,或是MMS等等。這些協(xié)議在傳輸視音頻數(shù)據(jù)的同時(shí)雌贱,也會(huì)傳輸一些信令數(shù)據(jù)啊送。這些信令數(shù)據(jù)包括對(duì)播放的控制(播放,暫停欣孤,停止)馋没,或者對(duì)網(wǎng)絡(luò)狀態(tài)的描述等。解協(xié)議的過程中會(huì)去除掉信令數(shù)據(jù)而只保留視音頻數(shù)據(jù)降传。例如篷朵,采用RTMP協(xié)議傳輸?shù)臄?shù)據(jù),經(jīng)過解協(xié)議操作后搬瑰,輸出FLV格式的數(shù)據(jù)款票。
解封裝的作用,就是將輸入的封裝格式的數(shù)據(jù)泽论,分離成為音頻流壓縮編碼數(shù)據(jù)和視頻流壓縮編碼數(shù)據(jù)艾少。封裝格式種類很多,例如MP4翼悴,MKV缚够,RMVB,TS鹦赎,F(xiàn)LV谍椅,AVI等等,它的作用就是將已經(jīng)壓縮編碼的視頻數(shù)據(jù)和音頻數(shù)據(jù)按照一定的格式放到一起古话。例如雏吭,F(xiàn)LV格式的數(shù)據(jù),經(jīng)過解封裝操作后陪踩,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流杖们。
解碼的作用悉抵,就是將視頻/音頻壓縮編碼數(shù)據(jù),解碼成為非壓縮的視頻/音頻原始數(shù)據(jù)摘完。音頻的壓縮編碼標(biāo)準(zhǔn)包含AAC姥饰,MP3,AC-3等等孝治,視頻的壓縮編碼標(biāo)準(zhǔn)則包含H.264列粪,MPEG2,VC-1等等谈飒。解碼是整個(gè)系統(tǒng)中最重要也是最復(fù)雜的一個(gè)環(huán)節(jié)岂座。通過解碼,壓縮編碼的視頻數(shù)據(jù)輸出成為非壓縮的顏色數(shù)據(jù)步绸,例如YUV420P掺逼,RGB等等;壓縮編碼的音頻數(shù)據(jù)輸出成為非壓縮的音頻抽樣數(shù)據(jù)瓤介,例如PCM數(shù)據(jù)。
視音頻同步的作用赘那,就是根據(jù)解封裝模塊處理過程中獲取到的參數(shù)信息刑桑,同步解碼出來的視頻和音頻數(shù)據(jù),并將視頻音頻數(shù)據(jù)送至系統(tǒng)的顯卡和聲卡播放出來募舟。