本文轉載自雷霄驊大神的一篇博客:[總結]音視頻編解碼技術零基礎學習方法,只是做了一些符合個人習慣的小修改,另外在這致敬雷神,望其在天堂安好。
0、生活中的音視頻技術
平時我們打開電腦中自己存電影的目錄的話,一般都會如下圖所示,一大堆五花八門的電影。
因為下載的來源不同,這些電影文件有不同的格式,用不同的后綴表示:avi,rmvb,mp4,flv,mkv等等(當然也使用不同的圖標)。在這里需要注意的是,這些格式代表的是封裝格式。
何為封裝格式?
就是把視頻數據和音頻數據打包成一個文件的規范。僅僅靠看文件的后綴,很難能看出具體使用了什么音視頻編碼標准。總的來說,不同的封裝格式之間差距不大,各有優劣。
注:有些封裝格式支持的音視頻編碼標准十分廣泛,應該算比較優秀的封裝格式,比如 MKV;而有些封裝格式支持的音視頻編碼標准很少,應該屬於落后的封裝格式,比如 RMVB。
下面演示一下如何使用視頻播放器查看一個視頻文件采用的音視頻技術:
- 打開一個視頻文件;
- 在視頻畫面上右鍵單擊,選擇屬性;
- 在彈出的“屬性”對話框的 “MediaInfo” 選項卡中,就可以查看該視頻文件采用的視音頻技術了。如下圖所示,“變形金剛預告片_h1080p.mov” 采用 MPEG4 的 QuickTime封裝格式(MOV),采用了 H.264(AVC)的壓縮編碼標准。
在這里用到了一個查看媒體信息的工具:MediaInfo。MediaInfo 是一個專門查看音視頻格式的工具,軟件的詳細使用可參考:
源代碼分析可參考:
生活中的音視頻技術到此為止,下面介紹一下具體的音視頻技術。
一、視頻播放器原理
視頻播放器播放一個互聯網上的視頻文件,需要經過以下幾個步驟:解協議,解封裝,解碼音視頻,音視頻同步。如果播放本地文件則不需要解協議,為以下幾個步驟:解封裝,解碼音視頻,音視頻同步。他們的過程如下圖所示。
解協議的作用,就是將流媒體協議的數據,解析為標准的相應的封裝格式數據。音視頻在網絡上傳播的時候,常常采用各種流媒體協議,例如 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數據。
音視頻同步的作用,就是根據解封裝模塊處理過程中獲取到的參數信息,同步解碼出來的視頻和音頻數據,並將視頻和音頻數據送至系統的顯卡和聲卡播放出來。
接下來的幾節我們將會列出主要的流媒體協議,封裝格式,以及音視頻編碼標准。更詳細的比較可以參考:
視頻參數(流媒體系統,封裝格式,視頻編碼,音頻編碼,播放器)對比
有關本文中涉及到的協議數據、封裝格式數據、視頻編碼數據、音頻編碼數據、視頻像素數據、音頻采樣數據的分析可以參考下面系列文章:
二、流媒體協議
流媒體協議是服務器與客戶端之間通信遵循的規定。當前網絡上主要的流媒體協議如下表所示。
名稱 | 推出機構 | 傳輸層協議 | 客戶端 | 目前使用領域 |
---|---|---|---|---|
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+RTP 較少用於互聯網視音頻傳輸。互聯網視頻服務通常采用 TCP 作為其流媒體的傳輸層協議,因而像 RTMP,MMS,HTTP 這類的協議廣泛用於互聯網視音頻服務之中。這類協議不會發生丟包,因而保證了視頻的質量,但是傳輸的效率會相對低一些。
此外 RTMFP 是一種比較新的流媒體協議,特點是支持 P2P。
RTMP協議學習:RTMP流媒體技術零基礎學習方法
三、封裝格式
封裝格式的主要作用是把視頻碼流和音頻碼流按照一定的格式存儲在一個文件中。現如今流行的封裝格式如下表所示:
名稱 | 推出機構 | 流媒體 | 支持的視頻編碼 | 支持的音頻編碼 | 目前使用領域 |
---|---|---|---|---|---|
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。
這些封裝格式都有相關的文檔,在這里就不一一例舉了。
四、視頻編碼
視頻編碼的主要作用是將視頻像素數據(RGB,YUV等)壓縮成為視頻碼流,從而降低視頻的數據量。如果視頻不經過壓縮編碼的話,體積通常是非常大的,一部電影可能就要上百 G 的空間。視頻編碼是視音頻技術中最重要的技術之一。視頻碼流的數據量占了視音頻總數據量的絕大部分。高效率的視頻編碼在同等的碼率下,可以獲得更高的視頻質量。
視頻編碼的簡單原理可以參考:視頻壓縮編碼和音頻壓縮編碼的基本原理
注:視頻編碼技術在整個視音頻技術中應該是最復雜的技術。如果沒有基礎的話,可以先買一些書看一下原理,比如說《現代電視原理》《數字電視廣播原理與應用》(本科的課本)中的部分章節。
名稱 | 推出機構 | 推出時間 | 目前使用領域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 研發中 |
AVC(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。
此外,在碼率一定的情況下,幾種編碼標准的比較可參考:限制碼率的視頻編碼標准比較(包括MPEG-2,H.263, MPEG-4,以及 H.264)
結果大致是這樣的:
HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2
。
五、音頻編碼
音頻編碼的主要作用是將音頻采樣數據(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格式分析器
六、現有網絡視音頻平台對比
現有的網絡視音頻服務主要包括兩種方式:點播和直播。點播意即根據用戶的需要播放相應的視頻節目,這是互聯網視音頻服務最主要的方式。絕大部分視頻網站都提供了點播服務。直播意即互聯網視音頻平台直接將視頻內容實時發送給用戶。
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 播放器。
參考: