1.音視頻的基本概念
1.1視頻基本概念
視頻:靜止的畫(huà)面叫圖像(picture)。連續(xù)的圖像變化每秒超過(guò)24幀(frame)畫(huà)面以上時(shí),根椐視覺(jué)暫留原理,人眼無(wú)法辨別每幅單獨(dú)的靜態(tài)畫(huà)面,看上去是平滑連續(xù)的視覺(jué)效果。這樣的連續(xù)畫(huà)面叫視頻。當(dāng)連續(xù)圖像變化每秒低于24幀畫(huà)面時(shí),人眼有不連續(xù)的感覺(jué)叫動(dòng)畫(huà)(cartoon)。
幀率:幀/秒(frames per second)的縮寫(xiě),也稱(chēng)為幀速率,測(cè)量用于保存、顯示動(dòng)態(tài)視頻的信息數(shù)量。每一幀都是靜止的圖象,快速連續(xù)地顯示幀便形成了運(yùn)動(dòng)的假象。每秒鐘幀數(shù) (fps) 愈多,所顯示的動(dòng)作就會(huì)愈流暢,可理解為秒鐘時(shí)間里刷新的圖片的幀數(shù),也可以理解為圖形處理器每秒鐘能夠刷新幾次,也就是指每秒鐘能夠播放(或者錄制)多少格畫(huà)面。
分辨率:一個(gè)表示平面圖像精細(xì)程度的概念,通常它是以橫向和縱向點(diǎn)的數(shù)量來(lái)衡量的,表示成水平點(diǎn)數(shù)垂直點(diǎn)數(shù)的形式,在計(jì)算機(jī)顯示領(lǐng)域我們也表示成“每英寸像素”(ppi)。在一個(gè)固定的平面內(nèi),分辨率越高,意味著可使用的點(diǎn)數(shù)越多,圖像越細(xì)致。
1.2音頻基本概念
聲音:由物體振動(dòng)產(chǎn)生的聲波。因此也有頻率和振幅的特征,頻率對(duì)應(yīng)于時(shí)間軸線(xiàn),振幅對(duì)應(yīng)于電平軸線(xiàn)。
采樣:波是無(wú)限光滑的,采樣的過(guò)程就是從波中抽取某些點(diǎn)的頻率值,即把模擬信號(hào)數(shù)字化。如下圖所示:


采樣率:錄音設(shè)備在一秒鐘內(nèi)對(duì)聲音信號(hào)的采樣次數(shù),采樣頻率越高聲音的還原就越真實(shí)越自然。采樣頻率一般共分為22.05KHz、44.1KHz、48KHz三個(gè)等級(jí)。8KHz - 電話(huà)所用采樣率, 對(duì)于人的說(shuō)話(huà)已經(jīng)足夠,22.05KHz只能達(dá)到FM廣播的聲音品質(zhì),44.1KHz則是理論上的CD音質(zhì)界限,48KHz則更加精確一些。
采樣位數(shù):記錄每次采樣值數(shù)值大小的位數(shù)。采樣位數(shù)通常有8bits或16bits兩種,采樣位數(shù)越大,所能記錄聲音的變化度就越細(xì)膩,相應(yīng)的數(shù)據(jù)量就越大。
聲道數(shù):聲道數(shù)是指支持能不同發(fā)聲的音響的個(gè)數(shù),它是衡量音響設(shè)備的重要指標(biāo)之一。
單聲道的聲道數(shù)為1個(gè)聲道;雙聲道的聲道數(shù)為2個(gè)聲道;立體聲道的聲道數(shù)默認(rèn)為2個(gè)聲道;立體聲道(4聲道)的聲道數(shù)為4個(gè)聲道。
碼率:碼率 = 采樣率 * 采樣位數(shù) * 聲道數(shù)
如果是CD音質(zhì),采樣率44.1KHz,采樣位數(shù)16bit,立體聲(雙聲道),碼率 = 44.1 * 16 * 2 = 1411.2Kbps = 176.4KBps,那么錄制一分鐘的音樂(lè),大概10.34MB。
音頻幀:音頻數(shù)據(jù)是流式的,本身沒(méi)有明確的一幀幀的概念,在實(shí)際的應(yīng)用中,為了音頻算法處理/傳輸?shù)姆奖?,一般約定俗成取2.5ms~60ms為單位的數(shù)據(jù)量為一幀音頻。這個(gè)時(shí)間被稱(chēng)之為“采樣時(shí)間”,其長(zhǎng)度沒(méi)有特別的標(biāo)準(zhǔn),它是根據(jù)編解碼器和具體應(yīng)用的需求來(lái)決定的。
1.3流的基本概念
流特征:隨著網(wǎng)絡(luò)的發(fā)展,人們對(duì)在線(xiàn)收聽(tīng)音樂(lè)提出了要求,因此也要求音頻文件能夠一邊讀一邊播放,而不需要把這個(gè)文件全部讀出后然后回放,這樣就可以做到不用下載就可以實(shí)現(xiàn)收聽(tīng)了。也可以做到一邊編碼一邊播放,正是這種特征,可以實(shí)現(xiàn)在線(xiàn)的直播,架設(shè)自己的數(shù)字廣播電臺(tái)成為了現(xiàn)實(shí)。
流媒體:指采用流式傳輸?shù)姆绞皆贗nternet / Intranet播放的媒體格式.流媒體的數(shù)據(jù)流隨時(shí)傳送隨 時(shí)播放,只是在開(kāi)始時(shí)有些延遲邊下載邊播入的流式傳輸方式不僅使啟動(dòng)延時(shí)大幅度地縮短,而且對(duì)系統(tǒng)緩存容量的需求也大大降低,極大地減少用戶(hù)用在等待的時(shí)間。
2.視頻播放基本流程

3.名詞解釋
3.1解協(xié)議
解協(xié)議:將流媒體協(xié)議的數(shù)據(jù)解析為標(biāo)準(zhǔn)的相應(yīng)的封裝格式數(shù)據(jù)。
常見(jiàn)的流媒體協(xié)議有HTTP,RTMP。
播放網(wǎng)絡(luò)視頻文件需要解協(xié)議,播放本地視頻文件不需要解協(xié)議。
3.2封裝與解封裝
封裝:將視頻流、音頻流甚至是字幕流捆綁到一個(gè)單獨(dú)的文件中,作為一個(gè)信號(hào)進(jìn)行傳輸。
解封裝:將輸入的封裝格式的數(shù)據(jù),分離成為音頻流壓縮編碼數(shù)據(jù)和視頻流壓縮編碼數(shù)據(jù)以及字幕數(shù)據(jù)。
封裝與解封裝整個(gè)過(guò)程,都不對(duì)原來(lái)的視頻、音頻或字幕重新編碼?;炝鳎ǚ庋b、打包)后的文件,可以通過(guò)分離(分解、解包)操作,獲得與原始素材一模一樣的獨(dú)立的視頻、音頻和字幕文件。
常見(jiàn)的封裝格式:AVI、MP4、TS、FLV、MKV、RMVB。
FLV封裝格式是由一個(gè)FLV Header文件頭和一個(gè)一個(gè)的Tag組成的。Tag中包含了音頻數(shù)據(jù)以及視頻數(shù)據(jù)。FLV的結(jié)構(gòu)如下圖所示:

3.3編碼與解碼
編碼:通過(guò)一定協(xié)議或規(guī)則把一段聲音或圖像轉(zhuǎn)化成計(jì)算機(jī)數(shù)字文件的過(guò)程。
視頻編碼:將視頻像素?cái)?shù)據(jù)(RGB,YUV等)壓縮成為視頻碼流,從而降低視頻的數(shù)據(jù)量。
當(dāng)前使用最多的視頻編碼方案是H.264。H.264原始碼流(又稱(chēng)為“裸流”)是由一個(gè)一個(gè)的NALU組成的。他們的結(jié)構(gòu)如下圖所示:

其中每個(gè)NALU之間通過(guò)startcode(起始碼)進(jìn)行分隔,起始碼分成兩種:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU對(duì)應(yīng)的Slice為一幀的開(kāi)始就用0x00000001,否則就用0x000001。
H.264碼流解析的步驟就是首先從碼流中搜索0x000001和0x00000001,分離出NALU;然后再分析NALU的各個(gè)字段。
音頻編碼:將音頻采樣數(shù)據(jù)(PCM等)壓縮成為音頻碼流,從而降低音頻的數(shù)據(jù)量。常見(jiàn)的音頻編碼方案有AAC、MP3、WMA。
AAC原始碼流(又稱(chēng)為“裸流”)是由一個(gè)一個(gè)的ADTS frame組成的。他們的結(jié)構(gòu)如下圖所示:

其中每個(gè)ADTS frame之間通過(guò)syncword(同步字)進(jìn)行分隔。同步字為0xFFF(二進(jìn)制“111111111111”)。AAC碼流解析的步驟就是首先從碼流中搜索0x0FFF,分離出ADTS frame;然后再分析ADTS frame的首部各個(gè)字段。
××ps: AAC存在兩種格式音頻格式:ADIF 和 ADTS。
直播服務(wù)普遍采用了RTMP作為流媒體協(xié)議,F(xiàn)LV作為封裝格式,H.264作為視頻編碼格式,AAC作為音頻編碼格式。采用RTMP作為直播協(xié)議的好處在于其被Flash播放器支持。
解碼:編碼的逆過(guò)程,把編碼過(guò)的媒體文件重新轉(zhuǎn)化成聲音或圖像。
用來(lái)執(zhí)行編碼工作的軟件叫“編碼器”(Coder 或 Encoder),
用來(lái)執(zhí)行解碼工作的軟件叫“解碼器”(Decoder),
“編碼器”與“解碼器”合稱(chēng)“編解碼器”(“Codec”)。
用來(lái)編碼音頻流的軟件叫作“音頻編碼器”(Audio Encoder)
用來(lái)編碼視頻流的軟件叫作“視頻編碼器”(Video Encoder)
用來(lái)解碼音頻流的軟件叫作“音頻解碼器”(Audio Decoder)
用來(lái)解碼視頻流的軟件叫作“視頻解碼器”(Video Decoder)
音頻流與視頻流的處理必須分別進(jìn)行,即:
“音頻編碼器”編碼出單個(gè)音頻文件,
“視頻編碼器”編碼出單個(gè)視頻文件,
“音頻解碼器”單獨(dú)對(duì)音頻文件進(jìn)行解碼還原,
“視頻解碼器”單獨(dú)對(duì)視頻文件進(jìn)行解碼還原。
3.4視音頻同步
視音頻同步:根據(jù)解封裝模塊處理過(guò)程中獲取到的參數(shù)信息,同步解碼出來(lái)的視頻和音頻數(shù)據(jù),并將視頻音頻數(shù)據(jù)送至系統(tǒng)的顯卡和聲卡播放出來(lái)。
視頻和音頻的同步實(shí)際上是一個(gè)動(dòng)態(tài)的過(guò)程,同步是暫時(shí)的,不同步則是常態(tài)。以選擇的播放速度量為標(biāo)準(zhǔn),快的等待慢的,慢的則加快速度,是一個(gè)你等我趕的過(guò)程。
播放速度標(biāo)準(zhǔn)量的的選擇一般來(lái)說(shuō)有以下三種:
將視頻同步到音頻上:以音頻的播放速度為基準(zhǔn)來(lái)同步視頻。視頻比音頻播放慢了,加快其播放速度;快了,則延遲播放(FFmpeg采用這種方式)。
將音頻同步到視頻上:以視頻的播放速度為基準(zhǔn)來(lái)同步音頻。
將視頻和音頻同步外部的時(shí)鐘上:選擇一個(gè)外部時(shí)鐘為基準(zhǔn),視頻和音頻的播放速度都以該時(shí)鐘為標(biāo)準(zhǔn)。
參考:
http://www.itdecent.cn/p/0627dd2eb272
http://www.codexiu.cn/android/blog/13575/
http://blog.csdn.net/haomcu/article/details/7072707
http://blog.csdn.net/leixiaohua1020/article/details/18893769