一直想把視音頻編解碼技術作一個簡單的總結,但是苦於時間不充裕,一直沒能完畢。今天有着很是大的空暇,最終可以總結一個有關視音頻技術的新手教程,可以方便不少其它的人學習從零開始學習視音頻技術。編程
需要注意的是。本文所說的視音頻技術,指的是理論層面的視音頻技術,並不涉及到編程相關的東西。瀏覽器
平時咱們打開電腦中本身存電影的文件夾的話,通常都會例如如下圖所看到的,一大堆五花八門的電影。網絡
(事實上專業的影視愛好者一律會把影視文件分門別類的。但我比較懶。一股腦把電影放在了一塊兒)less
因爲下載的來源不一樣。這些電影文件有不一樣的格式,用不一樣的後綴表示:avi,rmvb,mp4,flv。mkv等等(固然也使用不一樣的圖標)。ide
在這裏需要注意的是,這些格式表明的是封裝格式。函數
何爲封裝格式?就是把視頻數據和音頻數據打包成一個文件的規範。只靠看文件的後綴。很是難能看出具體使用了什麼視音頻編碼標準。工具
總的來講,不一樣的封裝格式之間差距不大,各有優劣。源碼分析
注:有些封裝格式支持的視音頻編碼標準十分普遍,應該算比較優秀的封裝格式,比方MKV;而有些封裝格式支持的視音頻編碼標準很是少。應該屬於落後的封裝格式。比方RMVB。post
下面演示一下怎樣使用視頻播放器查看一個視頻文件採用的視音頻技術:性能
注:在這裏使用Media Player Classic做爲演示,實際上暴風影音,KMplayer這些操做都差不太多。
1.打開一個視頻文件
2.在視頻畫面上右鍵單擊,選擇屬性。
3.在彈出的「屬性」對話框的「MediaInfo」選項卡中。就可以查看該視頻文件採用的視音頻技術了。例如如下圖所看到的。「變形金剛預告片_h1080p.mov」採用MPEG4的QuickTime封裝格式(MOV),採用了H.264(AVC)的壓縮編碼標準。
在這裏用到了一個查看媒體信息的工具:MediaInfo。MediaInfo是一個專門查看視音頻格式的工具,軟件的具體使用可參考:
源碼分析可參考:
生活中的視音頻技術到此爲止,下面介紹一下具體的視音頻技術。
視音頻技術主要包含下面幾點:封裝技術。視頻壓縮編碼技術以及音頻壓縮編碼技術。假設考慮到網絡傳輸的話,還包含流媒體協議技術。
視頻播放器的源碼具體解析(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數據。
視音頻同步的做用,就是依據解封裝模塊處理過程當中獲取到的參數信息,同步解碼出來的視頻和音頻數據。並將視頻音頻數據送至系統的顯卡和聲卡播放出來。
接下來的幾節咱們將會列出基本的流媒體協議,封裝格式。以及視音頻編碼標準。
更具體的比較可以參考:
視頻參數(流媒體系統,封裝格式,視頻編碼,音頻編碼。播放器)對照
有關本文中涉及到的協議數據、封裝格式數據、視頻編碼數據、音頻編碼數據、視頻像素數據、音頻採樣數據的分析可以參考下面系列文章:
流媒體協議是server與client之間通訊遵循的規定。
當前網絡上基本的流媒體協議如表所看到的。
主要流媒體協議一覽
名稱 |
推出機構 |
傳輸層協議 |
client |
眼下使用領域 |
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流媒體技術零基礎學習方法
封裝格式的主要做用是把視頻碼流和音頻碼流依照必定的格式存儲在一個文件裏。
現如今流行的封裝格式例如如下表所看到的:
主要封裝格式一覽
名稱 |
推出機構 |
流媒體 |
支持的視頻編碼 |
支持的音頻編碼 |
眼下使用領域 |
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 |
研發中 |
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。
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+獲得了國家政策上很是強力的支持。
下一代的編解碼標準就要數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碼流分析器
音頻編碼的主要做用是將音頻採樣數據(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格式分析器
現有的網絡視音頻服務主要包含兩種方式:點播和直播。點播意即依據用戶的需要播放對應的視頻節目,這是互聯網視音頻服務最基本的方式。絕大部分視頻站點都提供了點播服務。
直播意即互聯網視音頻平臺直接將視頻內容實時發送給用戶。眼下還處於發展階段。直播在網絡電視臺。社交視頻站點較爲常見。
主流互聯網視音頻平臺直播服務的參數對照方表所看到的:
現有網絡視音頻平臺參數對照
名稱 |
協議 |
封裝 |
視頻編碼 |
音頻編碼 |
播放器 |
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%的電腦上,而且與瀏覽器結合的很是好。所以這種流媒體直播平臺可以實現「無插件直播」。極大的簡化了client的操做。封裝格式,視頻編碼,音頻編碼方面,無一例外的使用了FLV + H.264 + AAC的組合。FLV是RTMP使用的封裝格式,H.264是當今實際應用中編碼效率最高的視頻編碼標準,AAC則是當今實際應用中編碼效率最高的音頻編碼標準。視頻播放器方面,都使用了Flash播放器。
主流網絡視音頻平臺點播服務的參數對照方表所看到的:
現有互聯網視音頻平臺參數對照
名稱 |
協議 |
封裝 |
視頻編碼 |
音頻編碼 |
播放器 |
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被絕大部分的Webserver支持,於是流媒體服務機構沒必要投資購買額外的流媒體server,從而節約了開支。點播服務採用的封裝格式有多種:MP4,FLV,F4V等,它們之間的差異不是很是大。視頻編碼標準和音頻編碼標準是H.264和AAC。這兩種標準各自是當今實際應用中編碼效率最高的視頻標準和音頻標準。
視頻播放器方面,無一例外的都使用了Flash播放器。