一直想把視音頻編解碼技術做一個簡單的總結,,可是苦于時間不充裕,一直沒能完成,。今天有著很大的空閑,,終于可以總結一個有關視音頻技術的入門教程,可以方便更多的人學習從零開始學習視音頻技術,。需要注意的是,,本文所說的視音頻技術,指的是理論層面的視音頻技術,,并不涉及到編程相關的東西,。
0. 生活中的視音頻技術平時我們打開電腦中自己存電影的目錄的話,一般都會如下圖所示,,一大堆五花八門的電影,。(其實專業(yè)的影視愛好者一概會把影視文件分門別類的,但我比較懶,,一股腦把電影放在了一起) 因為下載的來源不同,,這些電影文件有不同的格式,用不同的后綴表示:avi,,rmvb,,mp4,flv,,mkv等等(當然也使用不同的圖標),。在這里需要注意的是,這些格式代表的是封裝格式,。何為封裝格式,?就是把視頻數(shù)據(jù)和音頻數(shù)據(jù)打包成一個文件的規(guī)范。僅僅靠看文件的后綴,,很難能看出具體使用了什么視音頻編碼標準,。總的來說,,不同的封裝格式之間差距不大,,各有優(yōu)劣。 注:有些封裝格式支持的視音頻編碼標準十分廣泛,,應該算比較優(yōu)秀的封裝格式,,比如MKV;而有些封裝格式支持的視音頻編碼標準很少,,應該屬于落后的封裝格式,,比如RMVB。
下面演示一下如何使用視頻播放器查看一個視頻文件采用的視音頻技術: 注:在這里使用Media Player Classic作為演示,實際上暴風影音,,KMplayer這些操作都差不太多,。 1.打開一個視頻文件 2.在視頻畫面上右鍵單擊,選擇屬性,。 3.在彈出的“屬性”對話框的“MediaInfo”選項卡中,,就可以查看該視頻文件采用的視音頻技術了。如下圖所示,,“變形金剛預告片_h1080p.mov”采用MPEG4的QuickTime封裝格式(MOV),,采用了H.264(AVC)的壓縮編碼標準。 在這里用到了一個查看媒體信息的工具:MediaInfo,。MediaInfo是一個專門查看視音頻格式的工具,,軟件的詳細使用可參考: 源代碼分析可參考: 生活中的視音頻技術到此為止,下面介紹一下具體的視音頻技術,。
1. 視頻播放器原理視音頻技術主要包含以下幾點:封裝技術,,視頻壓縮編碼技術以及音頻壓縮編碼技術。如果考慮到網絡傳輸?shù)脑?,還包括流媒體協(xié)議技術,。 視頻播放器的源代碼詳細解析(Media Player Classic - HC,Mplayer,,F(xiàn)Fplay,,XBMC)可以參考系列文章: Media Player Classic:Media Player Classic - HC源代碼分析 1:整體結構[系列文章] XBMC: XBMC源代碼分析 1:整體結構以及編譯方法[系列文章] 在這里不細說了,,僅簡要說明一下視頻播放器的原理,。 視頻播放器播放一個互聯(lián)網上的視頻文件,需要經過以下幾個步驟:解協(xié)議,,解封裝,,解碼視音頻,視音頻同步,。如果播放本地文件則不需要解協(xié)議,,為以下幾個步驟:解封裝,解碼視音頻,,視音頻同步,。他們的過程如圖所示。
解協(xié)議的作用,,就是將流媒體協(xié)議的數(shù)據(jù),,解析為標準的相應的封裝格式數(shù)據(jù)。視音頻在網絡上傳播的時候,,常常采用各種流媒體協(xié)議,,例如HTTP,RTMP,或是MMS等等,。這些協(xié)議在傳輸視音頻數(shù)據(jù)的同時,,也會傳輸一些信令數(shù)據(jù)。這些信令數(shù)據(jù)包括對播放的控制(播放,,暫停,,停止),或者對網絡狀態(tài)的描述等,。解協(xié)議的過程中會去除掉信令數(shù)據(jù)而只保留視音頻數(shù)據(jù),。例如,采用RTMP協(xié)議傳輸?shù)臄?shù)據(jù),,經過解協(xié)議操作后,,輸出FLV格式的數(shù)據(jù)。 解封裝的作用,,就是將輸入的封裝格式的數(shù)據(jù),,分離成為音頻流壓縮編碼數(shù)據(jù)和視頻流壓縮編碼數(shù)據(jù)。封裝格式種類很多,,例如MP4,,MKV,RMVB,,TS,,F(xiàn)LV,AVI等等,,它的作用就是將已經壓縮編碼的視頻數(shù)據(jù)和音頻數(shù)據(jù)按照一定的格式放到一起,。例如,F(xiàn)LV格式的數(shù)據(jù),,經過解封裝操作后,,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流。 解碼的作用,,就是將視頻/音頻壓縮編碼數(shù)據(jù),,解碼成為非壓縮的視頻/音頻原始數(shù)據(jù)。音頻的壓縮編碼標準包含AAC,,MP3,,AC-3等等,視頻的壓縮編碼標準則包含H.264,,MPEG2,,VC-1等等。解碼是整個系統(tǒng)中最重要也是最復雜的一個環(huán)節(jié),。通過解碼,,壓縮編碼的視頻數(shù)據(jù)輸出成為非壓縮的顏色數(shù)據(jù),,例如YUV420P,RGB等等,;壓縮編碼的音頻數(shù)據(jù)輸出成為非壓縮的音頻抽樣數(shù)據(jù),,例如PCM數(shù)據(jù)。 視音頻同步的作用,,就是根據(jù)解封裝模塊處理過程中獲取到的參數(shù)信息,,同步解碼出來的視頻和音頻數(shù)據(jù),并將視頻音頻數(shù)據(jù)送至系統(tǒng)的顯卡和聲卡播放出來,。 接下來的幾節(jié)我們將會列出主要的流媒體協(xié)議,,封裝格式,以及視音頻編碼標準,。更詳細的比較可以參考: 視頻參數(shù)(流媒體系統(tǒng),,封裝格式,視頻編碼,,音頻編碼,,播放器)對比 2. 流媒體協(xié)議流媒體協(xié)議是服務器與客戶端之間通信遵循的規(guī)定。當前網絡上主要的流媒體協(xié)議如表所示,。 主要流媒體協(xié)議一覽
RTSP+RTP經常用于IPTV領域,。因為其采用UDP傳輸視音頻,支持組播,,效率較高,。但其缺點是網絡不好的情況下可能會丟包,影響視頻觀看質量,。因而圍繞IPTV的視頻質量的研究還是挺多的,。 RTSP規(guī)范可參考:RTSP協(xié)議學習筆記 RTSP+RTP系統(tǒng)中衡量服務質量可參考:網絡視頻傳輸?shù)姆召|量(QoS) 上海IPTV碼流分析結果可參考:IPTV視頻碼流分析 因為互聯(lián)網網絡環(huán)境的不穩(wěn)定性,RTSP+RTP較少用于互聯(lián)網視音頻傳輸,?;ヂ?lián)網視頻服務通常采用TCP作為其流媒體的傳輸層協(xié)議,因而像RTMP,,MMS,HTTP這類的協(xié)議廣泛用于互聯(lián)網視音頻服務之中,。這類協(xié)議不會發(fā)生丟包,,因而保證了視頻的質量,但是傳輸?shù)男蕰鄬Φ鸵恍?/p> 此外RTMFP是一種比較新的流媒體協(xié)議,,特點是支持P2P,。 RTMP我做的研究相對多一些:比如RTMP規(guī)范簡單分析,或者RTMP流媒體播放過程 相關工具的源代碼分析:RTMPdump源代碼分析 1: main()函數(shù)[系列文章] RTMP協(xié)議學習:RTMP流媒體技術零基礎學習方法 3. 封裝格式封裝格式的主要作用是把視頻碼流和音頻碼流按照一定的格式存儲在一個文件中?,F(xiàn)如今流行的封裝格式如下表所示: 主要封裝格式一覽
由表可見,,除了AVI之外,其他封裝格式都支持流媒體,,即可以“邊下邊播”,。有些格式更“萬能”一些,支持的視音頻編碼標準多一些,,比如MKV,。而有些格式則支持的相對比較少,比如說RMVB,。 這些封裝格式都有相關的文檔,,在這里就不一一例舉了。 我自己也做過輔助學習的小項目:
4. 視頻編碼視頻編碼的主要作用是將視頻像素數(shù)據(jù)(RGB,,YUV等)壓縮成為視頻碼流,,從而降低視頻的數(shù)據(jù)量。如果視頻不經過壓縮編碼的話,,體積通常是非常大的,,一部電影可能就要上百G的空間。視頻編碼是視音頻技術中最重要的技術之一,。視頻碼流的數(shù)據(jù)量占了視音頻總數(shù)據(jù)量的絕大部分,。高效率的視頻編碼在同等的碼率下,可以獲得更高的視頻質量,。 視頻編碼的簡單原理可以參考:視頻壓縮編碼和音頻壓縮編碼的基本原理 注:視頻編碼技術在整個視音頻技術中應該是最復雜的技術,。如果沒有基礎的話,可以先買一些書看一下原理,,比如說《現(xiàn)代電視原理》《數(shù)字電視廣播原理與應用》(本科的課本)中的部分章節(jié),。 主要視頻編碼一覽
由表可見,有兩種視頻編碼方案是最新推出的:VP9和HEVC,。目前這兩種方案都處于研發(fā)階段,,還沒有到達實用的程度。當前使用最多的視頻編碼方案就是H.264,。 4.1 主流編碼標準H.264僅僅是一個編碼標準,,而不是一個具體的編碼器,H.264只是給編碼器的實現(xiàn)提供參照用的,。 基于H.264標準的編碼器還是很多的,,究竟孰優(yōu)孰劣?可參考:MSU出品的 H.264編碼器比較(2011.5) 在學習視頻編碼的時候,,可能會用到各種編碼器(實際上就是一個exe文件),,他們常用的編碼命令可以參考:各種視頻編碼器的命令行格式 學習H.264最標準的源代碼,就是其官方標準JM了,。但是要注意,,JM速度非常的慢,,是無法用于實際的:H.264參考軟件JM12.2RC代碼詳細流程 實際中使用最多的就是x264了,性能強悍(超過了很多商業(yè)編碼器),,而且開源,。其基本教程網上極多,不再贅述,。編碼時候可參考:x264編碼指南——碼率控制,。編碼后統(tǒng)計值的含義:X264輸出的統(tǒng)計值的含義(X264 Stats Output) Google推出的VP8屬于和H.264同一時代的標準??傮w而言,,VP8比H.264要稍微差一點。有一篇寫的很好的VP8的介紹文章:深入了解 VP8,。除了在技術領域,,VP8和H.264在專利等方面也是打的不可開交,可參考文章:WebM(VP8) vs H.264 此外,,我國還推出了自己的國產標準AVS,,性能也不錯,但目前比H.264還是要稍微遜色一點,。不過感覺我國在視頻編解碼領域還算比較先進的,,可參考:視頻編碼國家標準AVS與H.264的比較(節(jié)選) 近期又推出了AVS新一代的版本AVS+,具體的性能測試還沒看過,。不過據(jù)說AVS+得到了國家政策上非常強力的支持,。 4.2 下一代編碼標準下一代的編解碼標準就要數(shù)HEVC和VP9了。VP9是Google繼VP8之后推出的新一代標準,。VP9和HEVC相比,,要稍微遜色一些。它們的對比可參考:(1)HEVC與VP9編碼效率對比 (2)HEVC,,VP9,,x264性能對比 HEVC在未來擁有很多大的優(yōu)勢,可參考:HEVC將會取代H.264的原因 學習HEVC最標準的源代碼,,就是其官方標準HM了,。其速度比H.264的官方標準代碼又慢了一大截,使用可參考:HEVC學習—— HM的使用 未來實際使用的HEVC開源編碼器很有可能是x265,,目前該項目還處于發(fā)展階段,,可參考: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. 音頻編碼音頻編碼的主要作用是將音頻采樣數(shù)據(jù)(PCM等)壓縮成為音頻碼流,從而降低音頻的數(shù)據(jù)量,。音頻編碼也是互聯(lián)網視音頻技術中一個重要的技術,。但是一般情況下音頻的數(shù)據(jù)量要遠小于視頻的數(shù)據(jù)量,因而即使使用稍微落后的音頻編碼標準,,而導致音頻數(shù)據(jù)量有所增加,,也不會對視音頻的總數(shù)據(jù)量產生太大的影響。高效率的音頻編碼在同等的碼率下,,可以獲得更高的音質,。 音頻編碼的簡單原理可以參考:視頻壓縮編碼和音頻壓縮編碼的基本原理 主要音頻編碼一覽
由表可見,近年來并未推出全新的音頻編碼方案,,可見音頻編碼技術已經基本可以滿足人們的需要,。音頻編碼技術近期絕大部分的改動都是在MP3的繼任者——AAC的基礎上完成的。 這些編碼標準之間的比較可以參考文章:音頻編碼方案之間音質比較(AAC,,MP3,,WMA等) 結果大致是這樣的: AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3 AAC格式的介紹:AAC格式簡介 AAC幾種不同版本之間的對比:AAC規(guī)格(LC,HE,,HEv2)及性能對比 AAC專利方面的介紹:AAC專利介紹 此外杜比數(shù)字的編碼標準也比較流行,,但是貌似比最新的AAC稍為遜色:AC-3技術綜述 我自己做的小工具: AAC格式分析器 6. 現(xiàn)有網絡視音頻平臺對比現(xiàn)有的網絡視音頻服務主要包括兩種方式:點播和直播。點播意即根據(jù)用戶的需要播放相應的視頻節(jié)目,,這是互聯(lián)網視音頻服務最主要的方式,。絕大部分視頻網站都提供了點播服務。直播意即互聯(lián)網視音頻平臺直接將視頻內容實時發(fā)送給用戶,,目前還處于發(fā)展階段,。直播在網絡電視臺,社交視頻網站較為常見,。 6.1 直播平臺參數(shù)對比主流互聯(lián)網視音頻平臺直播服務的參數(shù)對比如表所示: 現(xiàn)有網絡視音頻平臺參數(shù)對比
可以看出,,直播服務普遍采用了RTMP作為流媒體協(xié)議,F(xiàn)LV作為封裝格式,,H.264作為視頻編碼格式,,AAC作為音頻編碼格式。采用RTMP作為直播協(xié)議的好處在于其被Flash播放器支持,。而Flash播放器如今已經安裝在全球99%的電腦上,,并且與瀏覽器結合的很好,。因此這種流媒體直播平臺可以實現(xiàn)“無插件直播”,極大的簡化了客戶端的操作,。封裝格式,,視頻編碼,音頻編碼方面,,無一例外的使用了FLV + H.264 + AAC的組合,。FLV是RTMP使用的封裝格式,H.264是當今實際應用中編碼效率最高的視頻編碼標準,,AAC則是當今實際應用中編碼效率最高的音頻編碼標準,。視頻播放器方面,都使用了Flash播放器,。 6.2 點播平臺參數(shù)對比主流網絡視音頻平臺點播服務的參數(shù)對比如表所示: 現(xiàn)有互聯(lián)網視音頻平臺參數(shù)對比
可以看出,,點播服務普遍采用了HTTP作為流媒體協(xié)議,H.264作為視頻編碼格式,,AAC作為音頻編碼格式,。采用HTTP作為點播協(xié)議有以下兩點優(yōu)勢:一方面,HTTP是基于TCP協(xié)議的應用層協(xié)議,,媒體傳輸過程中不會出現(xiàn)丟包等現(xiàn)象,,從而保證了視頻的質量;另一方面,,HTTP被絕大部分的Web服務器支持,,因而流媒體服務機構不必投資購買額外的流媒體服務器,從而節(jié)約了開支,。點播服務采用的封裝格式有多種:MP4,,F(xiàn)LV,F(xiàn)4V等,,它們之間的區(qū)別不是很大,。視頻編碼標準和音頻編碼標準是H.264和AAC。這兩種標準分別是當今實際應用中編碼效率最高的視頻標準和音頻標準,。視頻播放器方面,,無一例外的都使用了Flash播放器。
|
|