沒有找到轉載的功能在哪。。。。。。所以只能複製過來了。
一直想把視音頻編解碼技術做一個簡單的總結,可是苦於時間不充裕,一直沒能完成。今天有著很大的空閑,終於可以總結一個有關視音頻技術的入門教程,可以方便更多的人學習從零開始學習視音頻技術。需要注意的是,本文所說的視音頻技術,指的是理論層面的視音頻技術,並不涉及到編程相關的東西。
0. 生活中的視音頻技術
平時我們開啟電腦中自己存電影的目錄的話,一般都會如下圖所示,一大堆五花八門的電影。(其實專業的影視愛好者一概會把影視檔案分門別類的,但我比較懶,一股腦把電影放在了一起)
因為下載的來源不同,這些電影檔案有不同的格式,用不同的尾碼表示:avi,rmvb,mp4,flv,mkv等等(當然也使用不同的表徵圖)。在這裡需要注意的是,這些格式代表的是封裝格式。何為封裝格式。就是把視頻資料和音頻資料打包成一個檔案的規範。僅僅靠看檔案的尾碼,很難能看出具體使用了什麼視音頻編碼通訊協定。總的來說,不同的封裝格式之間差距不大,各有優劣。
註:有些封裝格式支援的視音頻編碼通訊協定十分廣泛,應該算比較優秀的封裝格式,比如MKV;而有些封裝格式支援的視音頻編碼通訊協定很少,應該屬於落後的封裝格式,比如RMVB。
下面示範一下如何使用視頻播放器查看一個視頻檔案採用的視音頻技術:
註:在這裡使用Media Player Classic作為示範,實際上暴風影音,KMplayer這些操作都差不太多。
1.開啟一個視頻檔案
2.在視頻畫面上按右鍵,選擇屬性。
3.在彈出的“屬性”對話方塊的“MediaInfo”選項卡中,就可以查看該視頻檔案採用的視音頻技術了。如下圖所示,“變形金剛預告片_h1080p.mov”採用MPEG4的QuickTime封裝格式(MOV),採用了H.264(AVC)的壓縮編碼通訊協定。
在這裡用到了一個查看媒體資訊的工具:MediaInfo。MediaInfo是一個專門查看視音頻格式的工具,軟體的詳細使用可參考:
MediaInfo使用簡介(新版本支援HEVC)
原始碼分析可參考:
MediaInfo原始碼分析 1:整體結構[系列文章]
生活中的視音頻技術到此為止,下面介紹一下具體的視音頻技術。
1. 視頻播放器原理
視音頻技術主要包含以下幾點:封裝技術,視頻壓縮編碼技術以及音頻壓縮編碼技術。如果考慮到網路傳輸的話,還包括流媒體協議技術。
視頻播放器的原始碼詳細解析(Media Player Classic - HC,Mplayer,FFplay,XBMC)可以參考系列文章:
Media Player Classic:Media Player Classic - HC原始碼分析 1:整體結構[系列文章]
Mplayer:MPlayer原始碼分析
FFplay: FFplay原始碼分析:整體流程圖
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資料。
視音頻同步的作用,就是根據解鎖裝模組處理過程中擷取到的參數資訊,同步解碼出來的視頻和音頻資料,並將視頻音頻資料送至系統的顯卡和音效卡播放出來。
接下來的幾節我們將會列出主要的流媒體協議,封裝格式,以及視音頻編碼通訊協定。更詳細的比較可以參考:
視頻參數(流媒體系統,封裝格式,視頻編碼,音頻編碼,播放器)對比
有關本文中涉及到的協議資料、封裝格式資料、視頻編碼資料、音頻編碼資料、視頻像素資料、音頻採樣資料的分析可以參考下面系列文章:
視音頻資料處理入門:RGB、YUV像素資料處理
視音頻資料處理入門:PCM音頻採樣資料處理
視音頻資料處理入門:H.264視頻碼流解析
視音頻資料處理入門:AAC音頻碼流解析
視音頻資料處理入門:FLV封裝格式解析
視音頻資料處理入門:UDP-RTP協議解析
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. |
支援 |