音視訊技術學習總結入門
生活中常見的音視訊
因為下載的電影檔案有不同的格式,用不同的字尾表示:avi,rmvb,mp4,flv,mkv等等(當然也使用不同的圖示)。在這裡需要注意的是,這些格式代表的是封裝格式。何為封裝格式?就是把視訊資料和音訊資料打包成一個檔案的規範。僅僅靠看檔案的字尾,很難能看出具體使用了什麼視音訊編碼標準。總的來說,不同的封裝格式之間差距不大,各有優劣
有些封裝格式支援的視音訊編碼標準十分廣泛,應該算比較優秀的封裝格式,比如MKV;而有些封裝格式支援的視音訊編碼標準很少,應該屬於落後的封裝格式,比如RMVB
舉個例子:
如下圖所示,“變形金剛預告片_h1080p.mov”採用MPEG4的QuickTime封裝格式(MOV),採用了H.264(AVC)的壓縮編碼標準
在這裡用到了一個檢視媒體資訊的工具:MediaInfo。MediaInfo是一個專門檢視視音訊格式的工具,軟體的詳細使用可參考:
原始碼分析可參考:
1. 視訊播放器原理
視音訊技術主要包含以下幾點:封裝技術,視訊壓縮編碼技術以及音訊壓縮編碼技術。如果考慮到網路傳輸的話,還包括流媒體協議技術。
視訊播放器的原始碼詳細解析(Media Player Classic - HC,Mplayer,FFplay,XBMC)可以參考系列文章:
Media Player Classic:Media Player Classic - HC原始碼分析 1:整體結構[系列文章]
XBMC: XBMC原始碼分析 1:整體結構以及編譯方法[系列文章]
在這裡不細說了,僅簡要說明一下視訊播放器的原理。
視訊播放器播放一個網際網路上的視訊檔案,需要經過以下幾個步驟:解協議,解封裝,解碼視音訊,視音訊同步。如果播放本地檔案則不需要解協議,為以下幾個步驟:解封裝,解碼視音訊,視音訊同步。他們的過程如圖所示。
解協議的作用,就是將流媒體協議的資料,解析為標準的相應的封裝格式資料。視音訊在網路上傳播的時候,常常採用各種流媒體協議,例如HTTP,RTMP,或是MMS等等。這些協議在傳輸視音訊資料的同時,也會傳輸一些信令資料。這些信令資料包括對播放的控制(播放,暫停,停止),或者對網路狀態的描述等。解協議的過程中會去除掉信令資料而只保留視音訊資料。例如,採用RTMP協議傳輸的資料,經過解協議操作後,輸出FLV格式的資料。
解封裝的作用,就是將輸入的封裝格式的資料,分離成為音訊流壓縮編碼資料和視訊流壓縮編碼資料。封裝格式種類很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是將已經壓縮編碼的視訊資料和音訊資料按照一定的格式放到一起。例如,FLV格式的資料,經過解封裝操作後,輸出H.264編碼的視訊碼流和AAC編碼的音訊碼流。
解碼的作用,就是將視訊/音訊壓縮編碼資料,解碼成為非壓縮的視訊/音訊原始資料。音訊的壓縮編碼標準包含AAC,MP3,AC-3等等,視訊的壓縮編碼標準則包含H.264,MPEG2,VC-1等等。解碼是整個系統中最重要也是最複雜的一個環節。通過解碼,壓縮編碼的視訊資料輸出成為非壓縮的顏色資料,例如YUV420P,RGB等等;壓縮編碼的音訊資料輸出成為非壓縮的音訊抽樣資料,例如PCM資料。
視音訊同步的作用,就是根據解封裝模組處理過程中獲取到的引數資訊,同步解碼出來的視訊和音訊資料,並將視訊音訊資料送至系統的顯示卡和音效卡播放出來。
接下來的幾節我們將會列出主要的流媒體協議,封裝格式,以及視音訊編碼標準。更詳細的比較可以參考:
視訊引數(流媒體系統,封裝格式,視訊編碼,音訊編碼,播放器)對比
有關本文中涉及到的協議資料、封裝格式資料、視訊編碼資料、音訊編碼資料、視訊畫素資料、音訊取樣資料的分析可以參考下面系列文章:
2. 流媒體協議
流媒體協議是伺服器與客戶端之間通訊遵循的規定。當前網路上主要的流媒體協議如表所示。
主要流媒體協議一覽
名稱 |
推出機構 |
傳輸層協議 |
客戶端 |
目前使用領域 |
RTSP+RTP |
IETF |
TCP+UDP |
VLC, WMP |
IPTV |
RTMP |
Adobe Inc. |
TCP |
Flash |
網際網路直播 |
RTMFP |
Adobe Inc. |
UDP |
Flash |
網際網路直播 |
MMS |
Microsoft Inc. |
TCP/UDP |
WMP |
網際網路直播+點播 |
HTTP |
WWW+IETF |
TCP |
Flash |
網際網路點播 |
RTSP+RTP經常用於IPTV領域。因為其採用UDP傳輸視音訊,支援組播,效率較高。但其缺點是網路不好的情況下可能會丟包,影響視訊觀看質量。因而圍繞IPTV的視訊質量的研究還是挺多的。
RTSP規範可參考:RTSP協議學習筆記
RTSP+RTP系統中衡量服務質量可參考:網路視訊傳輸的服務質量(QoS)
上海IPTV碼流分析結果可參考:IPTV視訊碼流分析
因為網際網路網路環境的不穩定性,RTSP+RTP較少用於網際網路視音訊傳輸。網際網路視訊服務通常採用TCP作為其流媒體的傳輸層協議,因而像RTMP,MMS,HTTP這類的協議廣泛用於網際網路視音訊服務之中。這類協議不會發生丟包,因而保證了視訊的質量,但是傳輸的效率會相對低一些。
此外RTMFP是一種比較新的流媒體協議,特點是支援P2P。
RTMP我做的研究相對多一些:比如RTMP規範簡單分析,或者RTMP流媒體播放過程
相關工具的原始碼分析:RTMPdump原始碼分析 1: main()函式[系列文章]
RTMP協議學習:RTMP流媒體技術零基礎學習方法
3. 封裝格式
封裝格式的主要作用是把視訊碼流和音訊碼流按照一定的格式儲存在一個檔案中。現如今流行的封裝格式如下表所示:
主要封裝格式一覽
名稱 |
推出機構 |
流媒體 |
支援的視訊編碼 |
支援的音訊編碼 |
目前使用領域 |
AVI |
Microsoft Inc. |
不支援 |
幾乎所有格式 |
幾乎所有格式 |
BT下載影視 |
MP4 |
MPEG |
支援 |
MPEG-2, MPEG-4, H.264, H.263等 |
AAC, MPEG-1 Layers I, II, III, AC-3等 |
網際網路視訊網站 |
TS |
MPEG |
支援 |
MPEG-1, MPEG-2, MPEG-4, H.264 |
MPEG-1 Layers I, II, III, AAC, |
IPTV,數字電視 |
FLV |
Adobe Inc. |
支援 |
Sorenson, VP6, H.264 |
MP3, ADPCM, Linear PCM, AAC等 |
網際網路視訊網站 |
MKV |
CoreCodec Inc. |
支援 |
幾乎所有格式 |
幾乎所有格式 |
網際網路視訊網站 |
RMVB |
Real Networks Inc. |
支援 |
RealVideo 8, 9, 10 |
AAC, Cook Codec, RealAudio Lossless |
BT下載影視 |
由表可見,除了AVI之外,其他封裝格式都支援流媒體,即可以“邊下邊播”。有些格式更“萬能”一些,支援的視音訊編碼標準多一些,比如MKV。而有些格式則支援的相對比較少,比如說RMVB。
這些封裝格式都有相關的文件,在這裡就不一一例舉了。
我自己也做過輔助學習的小專案:
4. 視訊編碼
視訊編碼的主要作用是將視訊畫素資料(RGB,YUV等)壓縮成為視訊碼流,從而降低視訊的資料量。如果視訊不經過壓縮編碼的話,體積通常是非常大的,一部電影可能就要上百G的空間。視訊編碼是視音訊技術中最重要的技術之一。視訊碼流的資料量佔了視音訊總資料量的絕大部分。高效率的視訊編碼在同等的位元速率下,可以獲得更高的視訊質量。
視訊編碼的簡單原理可以參考:視訊壓縮編碼和音訊壓縮編碼的基本原理
注:視訊編碼技術在整個視音訊技術中應該是最複雜的技術。如果沒有基礎的話,可以先買一些書看一下原理,比如說《現代電視原理》《數字電視廣播原理與應用》(本科的課本)中的部分章節。
主要視訊編碼一覽
名稱 |
推出機構 |
推出時間 |
目前使用領域 |
HEVC(H.265) |
MPEG/ITU-T |
2013 |
研發中 |
H.264 |
MPEG/ITU-T |
2003 |
各個領域 |
MPEG4 |
MPEG |
2001 |
不溫不火 |
MPEG2 |
MPEG |
1994 |
數字電視 |
VP9 |
|
2013 |
研發中 |
VP8 |
|
2008 |
不普及 |
VC-1 |
Microsoft Inc. |
2006 |
微軟平臺 |
由表可見,有兩種視訊編碼方案是最新推出的:VP9和HEVC。目前這兩種方案都處於研發階段,還沒有到達實用的程度。當前使用最多的視訊編碼方案就是H.264。
4.1 主流編碼標準
H.264僅僅是一個編碼標準,而不是一個具體的編碼器,H.264只是給編碼器的實現提供參照用的。
基於H.264標準的編碼器還是很多的,究竟孰優孰劣?可參考:MSU出品的 H.264編碼器比較(2011.5)
在學習視訊編碼的時候,可能會用到各種編碼器(實際上就是一個exe檔案),他們常用的編碼命令可以參考:各種視訊編碼器的命令列格式
學習H.264最標準的原始碼,就是其官方標準JM了。但是要注意,JM速度非常的慢,是無法用於實際的:H.264參考軟體JM12.2RC程式碼詳細流程
實際中使用最多的就是x264了,效能強悍(超過了很多商業編碼器),而且開源。其基本教程網上極多,不再贅述。編碼時候可參考:x264編碼指南——位元速率控制。編碼後統計值的含義:X264輸出的統計值的含義(X264 Stats Output)
Google推出的VP8屬於和H.264同一時代的標準。總體而言,VP8比H.264要稍微差一點。有一篇寫的很好的VP8的介紹文章:深入瞭解 VP8。除了在技術領域,VP8和H.264在專利等方面也是打的不可開交,可參考文章:WebM(VP8) vs H.264
此外,我國還推出了自己的國產標準AVS,效能也不錯,但目前比H.264還是要稍微遜色一點。不過感覺我國在視訊編解碼領域還算比較先進的,可參考:視訊編碼國家標準AVS與H.264的比較(節選)
近期又推出了AVS新一代的版本AVS+,具體的效能測試還沒看過。不過據說AVS+得到了國家政策上非常強力的支援。
4.2 下一代編碼標準
下一代的編解碼標準就要數HEVC和VP9了。VP9是Google繼VP8之後推出的新一代標準。VP9和HEVC相比,要稍微遜色一些。它們的對比可參考:(1)HEVC與VP9編碼效率對比 (2)HEVC,VP9,x264效能對比
HEVC在未來擁有很多大的優勢,可參考:HEVC將會取代H.264的原因
學習HEVC最標準的原始碼,就是其官方標準HM了。其速度比H.264的官方標準程式碼又慢了一大截,使用可參考:HEVC學習—— HM的使用
未來實際使用的HEVC開源編碼器很有可能是x265,目前該專案還處於發展階段,可參考:x265(HEVC編碼器,基於x264)介紹。x265的使用可以參考:HEVC(H.265)標準的編碼器(x265,DivX265)試用
主流以及下一代編碼標準之間的比較可以參考文章:視訊編碼方案之間的比較(HEVC,H.264,MPEG2等)
此外,在位元速率一定的情況下,幾種編碼標準的比較可參考:限制位元速率的視訊編碼標準比較(包括MPEG-2,H.263, MPEG-4,以及 H.264)
結果大致是這樣的:
HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2。
截了一些圖,可以比較直觀的瞭解各種編碼標準:
HEVC碼流簡析:HEVC碼流簡單分析
H.264碼流簡析:H.264簡單碼流分析
MPEG2碼流簡析:MPEG2簡單碼流分析
以上簡析使用的工具:視訊碼流分析工具
我自己做的小工具: H.264碼流分析器
5. 音訊編碼
音訊編碼的主要作用是將音訊取樣資料(PCM等)壓縮成為音訊碼流,從而降低音訊的資料量。音訊編碼也是網際網路視音訊技術中一個重要的技術。但是一般情況下音訊的資料量要遠小於視訊的資料量,因而即使使用稍微落後的音訊編碼標準,而導致音訊資料量有所增加,也不會對視音訊的總資料量產生太大的影響。高效率的音訊編碼在同等的位元速率下,可以獲得更高的音質。
音訊編碼的簡單原理可以參考:視訊壓縮編碼和音訊壓縮編碼的基本原理
主要音訊編碼一覽
名稱 |
推出機構 |
推出時間 |
目前使用領域 |
AAC |
MPEG |
1997 |
各個領域(新) |
AC-3 |
Dolby Inc. |
1992 |
電影 |
MP3 |
MPEG |
1993 |
各個領域(舊) |
WMA |
Microsoft Inc. |
1999 |
微軟平臺 |
由表可見,近年來並未推出全新的音訊編碼方案,可見音訊編碼技術已經基本可以滿足人們的需要。音訊編碼技術近期絕大部分的改動都是在MP3的繼任者——AAC的基礎上完成的。
這些編碼標準之間的比較可以參考文章:音訊編碼方案之間音質比較(AAC,MP3,WMA等)
結果大致是這樣的:
AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3
AAC格式的介紹:AAC格式簡介
AAC幾種不同版本之間的對比:AAC規格(LC,HE,HEv2)及效能對比
AAC專利方面的介紹:AAC專利介紹
此外杜比數字的編碼標準也比較流行,但是貌似比最新的AAC稍為遜色:AC-3技術綜述
我自己做的小工具: AAC格式分析器
6. 現有網路視音訊平臺對比
現有的網路視音訊服務主要包括兩種方式:點播和直播。點播意即根據使用者的需要播放相應的視訊節目,這是網際網路視音訊服務最主要的方式。絕大部分視訊網站都提供了點播服務。直播意即網際網路視音訊平臺直接將視訊內容實時傳送給使用者,目前還處於發展階段。直播在網路電視臺,社交視訊網站較為常見。
6.1 直播平臺引數對比
主流網際網路視音訊平臺直播服務的引數對比如表所示:
現有網路視音訊平臺引數對比
名稱 |
協議 |
封裝 |
視訊編碼 |
音訊編碼 |
播放器 |
CNTV |
私有 |
||||
華數TV |
RTMP |
FLV |
H.264 |
AAC |
Flash |
六間房 |
RTMP |
FLV |
H.264 |
AAC |
Flash |
中國教育電視臺 |
RTMP |
FLV |
H.264 |
AAC |
Flash |
北廣傳媒移動電視 |
RTMP |
FLV |
H.264 |
AAC |
Flash |
上海IPTV |
RTSP+RTP |
TS |
H.264 |
MP2 |
機頂盒 |
可以看出,直播服務普遍採用了RTMP作為流媒體協議,FLV作為封裝格式,H.264作為視訊編碼格式,AAC作為音訊編碼格式。採用RTMP作為直播協議的好處在於其被Flash播放器支援。而Flash播放器如今已經安裝在全球99%的電腦上,並且與瀏覽器結合的很好。因此這種流媒體直播平臺可以實現“無外掛直播”,極大的簡化了客戶端的操作。封裝格式,視訊編碼,音訊編碼方面,無一例外的使用了FLV + H.264 + AAC的組合。FLV是RTMP使用的封裝格式,H.264是當今實際應用中編碼效率最高的視訊編碼標準,AAC則是當今實際應用中編碼效率最高的音訊編碼標準。視訊播放器方面,都使用了Flash播放器。
6.2 點播平臺引數對比
主流網路視音訊平臺點播服務的引數對比如表所示:
現有網際網路視音訊平臺引數對比
名稱 |
協議 |
封裝 |
視訊編碼 |
音訊編碼 |
播放器 |
CNTV |
HTTP |
MP4 |
H.264 |
AAC |
Flash |
CNTV(部分) |
RTMP |
FLV |
H.264 |
AAC |
Flash |
華數TV |
HTTP |
MP4 |
H.264 |
AAC |
Flash |
優酷網 |
HTTP |
FLV |
H.264 |
AAC |
Flash |
土豆網 |
HTTP |
F4V |
H.264 |
AAC |
Flash |
56網 |
HTTP |
FLV |
H.264 |
AAC |
Flash |
音悅臺 |
HTTP |
MP4 |
H.264 |
AAC |
Flash |
樂視網 |
HTTP |
FLV |
H.264 |
AAC |
Flash |
新浪視訊 |
HTTP |
FLV |
H.264 |
AAC |
Flash |
可以看出,點播服務普遍採用了HTTP作為流媒體協議,H.264作為視訊編碼格式,AAC作為音訊編碼格式。採用HTTP作為點播協議有以下兩點優勢:一方面,HTTP是基於TCP協議的應用層協議,媒體傳輸過程中不會出現丟包等現象,從而保證了視訊的質量;另一方面,HTTP被絕大部分的Web伺服器支援,因而流媒體服務機構不必投資購買額外的流媒體伺服器,從而節約了開支。點播服務採用的封裝格式有多種:MP4,FLV,F4V等,它們之間的區別不是很大。視訊編碼標準和音訊編碼標準是H.264和AAC。這兩種標準分別是當今實際應用中編碼效率最高的視訊標準和音訊標準。視訊播放器方面,無一例外的都使用了Flash播放器。