一、視頻播放器原理
視音頻技術(shù)主要包含以下幾點:封裝技術(shù),視頻壓縮編碼技術(shù)以及音頻壓縮編碼技術(shù)。如果考慮到網(wǎng)絡(luò)傳輸?shù)脑挘€包括流媒體協(xié)議技術(shù)。
視頻播放器播放一個互聯(lián)網(wǎng)上的視頻文件,需要經(jīng)過以下幾個步驟:解協(xié)議,解封裝,解碼視音頻,視音頻同步。如果播放本地文件則不需要解協(xié)議,為以下幾個步驟:解封裝,解碼視音頻,視音頻同步。他們的過程如圖所示:

解協(xié)議的作用,就是將流媒體協(xié)議的數(shù)據(jù),解析為標(biāo)準(zhǔn)的相應(yīng)的封裝格式數(shù)據(jù)。視音頻在網(wǎng)絡(luò)上傳播的時候,常常采用各種流媒體協(xié)議,例如HTTP,RTMP,或是MMS等等。這些協(xié)議在傳輸視音頻數(shù)據(jù)的同時,也會傳輸一些信令數(shù)據(jù)。這些信令數(shù)據(jù)包括對播放的控制(播放,暫停,停止),或者對網(wǎng)絡(luò)狀態(tài)的描述等。解協(xié)議的過程中會去除掉信令數(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等等。解碼是整個系統(tǒng)中最重要也是最復(fù)雜的一個環(huán)節(jié)。通過解碼,壓縮編碼的視頻數(shù)據(jù)輸出成為非壓縮的顏色數(shù)據(jù),例如YUV420P,RGB等等;壓縮編碼的音頻數(shù)據(jù)輸出成為非壓縮的音頻抽樣數(shù)據(jù),例如PCM數(shù)據(jù)。
視音頻同步的作用,就是根據(jù)解封裝模塊處理過程中獲取到的參數(shù)信息,同步解碼出來的視頻和音頻數(shù)據(jù),并將視頻音頻數(shù)據(jù)送至系統(tǒng)的顯卡和聲卡播放出來。
二、相關(guān)知識點
1、幀率
是用于測量顯示幀數(shù)的量度。所謂的測量單位為每秒顯示的幀數(shù)。每秒顯示幀數(shù)或者幀率表示圖形處理器處理場時每秒能夠更新的次數(shù)。30fps就是可以接受的,60fps則可以明顯提升交互感和逼真感,但超過75fps就不容易察覺有明顯的流暢度提升了。如果幀率超過屏幕刷新率,則會浪費圖像的處理能力。
2、刷新率
刷新率是指屏幕每秒畫面被刷新的次數(shù),刷新率分為垂直刷新率和水平刷新率,一般提到的刷新率通常是指垂直刷新率。垂直刷新率表示屏幕上圖像每秒重繪多少次,也就是每秒屏幕刷新的次數(shù),以Hz為單位。刷新率越高,圖像就越穩(wěn)定,圖像顯示就越自然清晰,對眼睛的影響也越小。達到80Hz以上的刷新率就可以完全消除圖像閃爍和抖動感。
3、編碼格式
編碼的目的是壓縮數(shù)據(jù)量,采用編碼算法壓縮冗余數(shù)據(jù)。(MPEG、H.26X)
4、 封裝格式
把編碼后的音視頻數(shù)據(jù)以一定格式封裝到一個容器中,封裝格式有mkv、avi、ts等。
5、碼率
碼率也就是比特率,比特率是單位時間播放連續(xù)的媒體(如壓縮后的音頻或視頻)的比特數(shù)量。比特率越高,帶寬消耗得越多。比特(bit)0或1
文件大?。╞) = 碼率(b/s) * 時長(s)
6、畫質(zhì)與碼率
視頻質(zhì)量和碼率、編碼算法都有關(guān)系。
7、DTS 與 PTS
DTS: 即 Decode Time Stamp,是標(biāo)識讀入內(nèi)存中bit流在什么時候開始送入解碼器中進行解碼。也就是解碼順序的時間戳。
PTS: 即Presentation Time Stamp,主要用于度量解碼后的視頻幀什么時候被顯示出來
8、視頻幀和音頻幀
常見的視頻幀有I、P、B幀等
I 幀表示關(guān)鍵幀,可以理解為這一幀畫面的完整保留,解碼時只需要本幀數(shù)據(jù)就可以完成(因為包含完整畫面)
P 幀表示的是這一幀和之前的一個關(guān)鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別生成最終畫面。(也就是差別幀,P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差別的數(shù)據(jù))
B 幀是雙向差別幀,也就是B幀記錄的是本幀和前后幀的差別,通過前后畫面數(shù)據(jù)與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,但解碼時CPU比較吃力。
音頻幀的概念沒有那么清晰,跟音頻編碼格式相關(guān),它是各個編碼標(biāo)準(zhǔn)自己實現(xiàn)的。
PCM(未經(jīng)編碼的音頻數(shù)據(jù))來說,它根本就不需要幀的概念,根據(jù)采樣率和采樣精度就可以播放,比如采樣率為44.1kHz,采樣進度為16位的音頻,你可以算出比特率是4410016kb/s,每秒的音頻數(shù)據(jù)是固定的4410016/8字節(jié)。
AMR幀比較簡單,它規(guī)定每20ms的音頻為一幀,每一幀音頻都是獨立的,有可能采用不同的編碼算法以及不同的編碼參數(shù)。
MP3幀較復(fù)雜,包含更多信息,比如采樣率、比特率等各種參數(shù)。音頻數(shù)據(jù)幀個數(shù)由文件大小和幀長決定,每一幀的長度可能不固定,也可能固定,由比特率決定,每一幀又分為幀頭和數(shù)據(jù)實體兩部分,幀頭記錄了MP3的比特率、采樣率、版本等信息,每一幀之間相互獨立。
9、采樣率
每秒音頻采樣點個數(shù)(8000/44100Hz),采樣單位用Hz表示。
三、視頻封裝格式
| 格式 | 全名 | 開發(fā)商 | 初版年限 | 特點 |
|---|---|---|---|---|
| MP4 | MP4 | Moving Picture Experts Group,即 MPEG(動態(tài)圖像專家組) | 1998 | 常用有損壓縮格式,通用性強 |
| AVI | Audio Video Interleaved(音頻視頻交錯格式) | 微軟 | 1992 | 體積大算法簡單 |
| MOV | QuickTime 影片格式 | Apple | 1991 | 蘋果專屬格式對很多其他的播放器支持不是很友好 |
| WMV | Windows Media Video | 微軟 | 2003 | 微軟的專業(yè)視頻格式,兼容性并不是很好 |
| FLV | Adobe Flash 網(wǎng)絡(luò)流媒體格式 | Adobe | 2002 | 被淘汰的早期網(wǎng)絡(luò)視頻格式 |
| MKV | Matroska 多媒體容器 | Matroska.org | 2002 | 最有包容性的視頻格式,能容納無限量、多種不同類型編碼的視頻、音頻及字幕流 |
| WebM | WebM | 2010 | 谷歌推出的 HTML5 標(biāo)準(zhǔn)的網(wǎng)絡(luò)視頻標(biāo)準(zhǔn),以MKV容器格式為基礎(chǔ)開發(fā) | |
| RMVB | RMVB | Real Networks | 1997 | 根據(jù)不同的網(wǎng)絡(luò)傳輸速率,而制定出不同的壓縮比率,從而實現(xiàn)在低速率的網(wǎng)絡(luò)上進行影像數(shù)據(jù)實時傳送和播放,具有體積小,畫質(zhì)不錯的優(yōu)點。已過時。 |
四、視頻編碼格式
| 名稱 | 推出機構(gòu) | 推出時間 | 目前使用領(lǐng)域 |
|---|---|---|---|
| HEVC(H.265) | MPEG/ITU-T | 2013 | 研發(fā)中 |
| H.264 | MPEG/ITU-T | 2003 | 各個領(lǐng)域 |
| MPEG4 | MPEG | 2001 | 不溫不火 |
| MPEG2 | MPEG | 1994 | 數(shù)字電視 |
| VP9 | 2013 | 研發(fā)中 | |
| VP8 | 2008 | 不普及 | |
| VC-1 | Microsoft Inc. | 2006 | 微軟平臺 |
1. MPEG:(Moving Picture Experts Group, ISO旗下的組織)
MPEG是Moving Picture Experts Group的簡稱。這個名字本來的含義是指一個研究視頻和音頻編碼標(biāo)準(zhǔn)的“動態(tài)圖像專家組”組織,成立于1988年,致力開發(fā)視頻、音頻的壓縮編碼技術(shù)。
| 版本 | 用途 |
|---|---|
| MPEG - 1 | VCD |
| MPEG - 2 | DVD、數(shù)字有線電視信號 |
| MPEG - 4(第二部分) | 視頻電話、網(wǎng)絡(luò)傳輸、廣播和媒體存儲 |
2. H.26X: ITU-T VCEG(Visual Coding Experts Group,國際電聯(lián)旗下的標(biāo)準(zhǔn)化組織)制定
| 版本 | 用于 |
|---|---|
| H.261 | 老的視頻會議和視頻電話產(chǎn)品 |
| H.262 | DVD、數(shù)字有線電視信號(與MPEG共同制定,與MPEG-2完全一致) |
| H.263 | 視頻會議、視頻電話和網(wǎng)絡(luò)視頻 |
| H.264 | 高精度視頻的錄制、壓縮和發(fā)布格式(與MPEG-4第十部分完全一致),當(dāng)前主流 |
| H.265 | H.264的兩倍之壓縮率,可支持4K分辨率甚至到超高畫質(zhì)電視,最高分辨率可達到8192×4320(8K分辨率) |
3. H.264
當(dāng)前主流的編碼格式是H.264,這是由ITU-T VCEG和MPEG共同制定的標(biāo)準(zhǔn),MPEG - 4第十部分內(nèi)容也是H.264。
視頻封裝格式 & 視頻編碼格式
封裝格式是提供了一個容器,用于存放視頻、音頻以及其他配置信息,而編碼格式是指對視頻畫面內(nèi)容進行壓縮的一種標(biāo)準(zhǔn)
六、音頻格式
-
WAV:因其文件擴展名為wav,微軟和IBM聯(lián)合開發(fā)的標(biāo)準(zhǔn),數(shù)據(jù)本身的格式為PCM或壓縮型,屬于無損格式。 -
MP3: MP3是一種音頻壓縮技術(shù),其全稱是動態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面3(Moving Picture Experts Group Audio Layer III),簡稱為MP3。壓縮比4:1~10:1之間。 -
AAC:Advanced Audio Coding, 出現(xiàn)于1997年,由Fraunhofer IIS、杜比實驗室、AT&T、Sony、Nokia等公司共同開發(fā)。AAC壓縮比通常為18:1。相比MP3,采用更高效的編碼算法,音質(zhì)更佳,文件更小。 -
Opus:Opus格式是一個開放格式,使用上沒有任何專利或限制,比MP3、AAC、HE-AAC等常見格式,有更低的延遲和更好的聲音壓縮率。2012年7月2日,Opus被IETF批準(zhǔn)用于標(biāo)準(zhǔn)化。
七、H.264編碼介紹
IPB幀
I幀:幀內(nèi)編碼幀(intra picture),采用幀內(nèi)壓縮去掉空間冗余信息。
P幀:前向預(yù)測編碼幀(predictive-frame),通過將圖像序列中前面已經(jīng)編碼幀的時間冗余信息來壓縮傳輸數(shù)據(jù)量的編碼圖像。參考前面的I幀或者P幀。
B幀:雙向預(yù)測內(nèi)插編碼幀(bi-directional interpolated prediction frame),既考慮源圖像序列前面的已編碼幀,又顧及源圖像序列后面的已編碼幀之間的冗余信息,來壓縮傳輸數(shù)據(jù)量的編碼圖像,也稱為雙向編碼幀。參考前面一個的I幀或者P幀及其后面的一個P幀。
PTS和DTS
DTS(Decoding Time Stamp)是標(biāo)識讀入內(nèi)存中bit流在什么時候開始送入解碼器中進行解碼。也就是解碼順序的時間戳。
PTS(Presentation Time Stamp)用于度量解碼后的視頻幀什么時候被顯示出來。在沒有B幀的情況下,DTS和PTS的輸出順序是一樣的,一旦存在B幀,PTS和DTS則會不同。也就是顯示順序的時間戳。
GOP即Group of picture(圖像組),指兩個I幀之間的距離,Reference(參考周期)指兩個P幀之間的距離。
一個I幀所占用的字節(jié)數(shù)大于一個P幀,一個P幀所占用的字節(jié)數(shù)大于一個B幀。所以在碼率不變的前提下,GOP值越大,P、B幀的數(shù)量會越多,平均每個I、P、B幀所占用的字節(jié)數(shù)就越多,也就更容易獲取較好的圖像質(zhì)量;Reference越大,B幀的數(shù)量越多,同理也更容易獲得較好的圖像質(zhì)量。
簡而言之:
字節(jié)大小:I > P > B
解碼順序:I -> P -> B

八、視頻像素數(shù)據(jù)格式 RGB、YUV
YUV
YUV顏色的表示方法 “Y”表示亮度,“ U”表示色度,“V”表示飽和度。視頻中常用的YUV格式有YUV420,YUV444,YUV422。這些個格式代表的是YUV分量的比例,下面還可以細(xì)分很多格式。像YUV420又可以分為兩種:YUV420P和YUV420SP,android的相機默認(rèn)圖像格式NV21屬于YUV420SP格式。
YUV 4:2:0采樣,每四個Y共用一組UV分量,一個YUV占1.5個字節(jié)。
YUV 4:2:2采樣,每兩個Y共用一組UV分量,一個YUV占 2個字節(jié)。
YUV 4:4:4采樣,每一個Y對應(yīng)一組UV分量,一個YUV占3個字節(jié)。
1.YUV420P:(YU12(Android平臺下叫I420格式)和YV12)一幀YUV420P(YU12)像素數(shù)據(jù),包含wh3/2 Byte的數(shù)據(jù),前wh Byte存儲Y分量,接著wh 1/4存儲U,最后wh1/4存儲的是V。一幀YUV420P的圖像Y:U:V = 4 :1:1
2.YUV444P:一幀YUV444P像素數(shù)據(jù)包含wh3 Byte的數(shù)據(jù)。前wh Byte存儲Y,接著的wh Byte存儲U,最后wh Byte存儲V。一幀YUV420P的圖像Y:U:V = 1:1:1
YUV420 數(shù)據(jù)存儲方式
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
U U U U U U V V V V V V U V U V U V V U V U V U
V V V V V V U U U U U U U V U V U V V U V U V U
(I420) (YV12) (N12) (NV21)
RGB
RGB相信大家都比較熟悉,他是顏色的三原色,“R”代表紅色,“G”代表綠色,“B”代表藍色,不同的分量顏色值搭配可以表示不同的顏色。
RGB24像素數(shù)據(jù),RGB的分量是怎樣存儲的呢。上述我們YUV420P的存儲分量是分開存儲的(平面方式),而RGB每個像素的三個分量是連續(xù)存儲的(打包方式)。一幀RGB24數(shù)據(jù)格式的圖像,包含wh3Byte的數(shù)據(jù),存儲的順序是第一個像素(8bit)R,(8bit)G,(8bit)B接著存儲下一個像素點(8bit)R,(8bit)G,(8bit)B這樣一次存儲下去的。
小結(jié):數(shù)據(jù)的存在格式可以分為packed(打包)和planar(平面)兩種,上述的YUV420P,YUV444P就是屬于平面的存儲方式,RGB24屬于打包的存儲方式。YUV420(NV12、NV21)的數(shù)據(jù)存儲既有平面又有打包,Y平面,UV打包,即Y信息存儲在一個數(shù)組中,UV信息存儲在一個矩陣中。了解了最基礎(chǔ)的像素數(shù)據(jù)格式以及存儲的分量的位置,便可以去處理操作圖像。
九、音頻采樣數(shù)據(jù)PCM
PCM它是由模擬信號經(jīng)過采樣、量化、編碼轉(zhuǎn)換成的標(biāo)準(zhǔn)數(shù)字音頻數(shù)據(jù)。
來了解一下PCM重要的屬性:
1.Sample Rate : 采樣率(一秒鐘采樣點的個數(shù))8kHz,44.1kHz(CD音質(zhì)),48kHz
2.Sample Size : 位寬度 8-bit,16-bit 一個點所占的bit位,位寬度越高聲音保真度越高
3.Channels : 通道個數(shù),包含立體聲和單聲道兩種類型,立體聲包含左聲道和右聲道
PCM數(shù)據(jù)存入的循序。如果是單聲道的音頻文件,采樣數(shù)據(jù)按時間的先后順序依次存入,如果是雙聲道的話就按照LRLRLR的方式存儲。
