一、視頻播放器原理
音視頻技術主要包含以下幾點:封裝技術?、?視頻壓縮編碼技術? 以及 ?音頻壓縮編碼技術。
如果考慮到網(wǎng)絡傳輸?shù)脑挘€包括流媒體協(xié)議技術。
簡要說明一下視頻播放器的原理。
視頻播放器播放一個互聯(lián)網(wǎng)上的視頻文件,需要經(jīng)過以下幾個步驟:解協(xié)議,解封裝,解碼視音頻,視音頻同步。
如果播放本地文件則不需要解協(xié)議,為以下幾個步驟:解封裝,解碼視音頻,視音頻同步。
他們的過程如圖所示。
1.1 解協(xié)議
解協(xié)議的作用,就是將流媒體協(xié)議的數(shù)據(jù),解析為標準的相應的封裝格式數(shù)據(jù)。
視音頻在網(wǎng)絡上傳播的時候,常常采用各種流媒體協(xié)議,例如HTTP,RTMP,或是MMS等等。
這些協(xié)議在傳輸視音頻數(shù)據(jù)的同時,也會傳輸一些信令數(shù)據(jù)。
這些信令數(shù)據(jù)包括對播放的控制(播放,暫停,停止),或者對網(wǎng)絡狀態(tài)的描述等。
解協(xié)議的過程中會去除掉信令數(shù)據(jù)而只保留視音頻數(shù)據(jù)。
例如,采用RTMP協(xié)議傳輸?shù)臄?shù)據(jù),經(jīng)過解協(xié)議操作后,輸出FLV格式的數(shù)據(jù)。
1.2 解封裝
解封裝的作用,就是將輸入的封裝格式的數(shù)據(jù),分離成為音頻流壓縮編碼數(shù)據(jù)和視頻流壓縮編碼數(shù)據(jù)。
封裝格式種類很多,例如MP4,MKV,RMVB,TS,F(xiàn)LV,AVI等等,它的作用就是將已經(jīng)壓縮編碼的視頻數(shù)據(jù)和音頻數(shù)據(jù)按照一定的格式放到一起。
例如,F(xiàn)LV格式的數(shù)據(jù),經(jīng)過解封裝操作后,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流。
1.3 解碼
解碼的作用,就是將視頻/音頻壓縮編碼數(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ù)。
1.4 視音頻同步
視音頻同步的作用,就是根據(jù)解封裝模塊處理過程中獲取到的參數(shù)信息,同步解碼出來的視頻和音頻數(shù)據(jù),并將視頻音頻數(shù)據(jù)送至系統(tǒng)的顯卡和聲卡播放出來。
領取音視頻開發(fā)學習資料:音視頻開發(fā)(資料文檔+視頻教程)(
FFmpegWebRTCRTMPRTSPHLSRTP)
二、流媒體協(xié)議
流媒體協(xié)議是服務器與客戶端之間通信遵循的規(guī)定。
當前網(wǎng)絡上主要的流媒體協(xié)議如表所示:
RTSP+RTP 經(jīng)常用于IPTV領域 因為其采用UDP傳輸視音頻,支持組播,效率較高。但其缺點是網(wǎng)絡不好的情況下可能會丟包,影響視頻觀看質(zhì)量。 因而圍繞IPTV的視頻質(zhì)量的研究還是挺多的。
因為互聯(lián)網(wǎng)網(wǎng)絡環(huán)境的不穩(wěn)定性,RTSP+RTP較少用于互聯(lián)網(wǎng)視音頻傳輸。
互聯(lián)網(wǎng)視頻服務通常采用TCP作為其流媒體的傳輸層協(xié)議,因而像RTMP,MMS,HTTP這類的協(xié)議廣泛用于互聯(lián)網(wǎng)視音頻服務之中。
這類協(xié)議不會發(fā)生丟包,因而保證了視頻的質(zhì)量,但是傳輸?shù)男蕰鄬Φ鸵恍?/p>
RTMFP是一種比較新的流媒體協(xié)議,特點是支持P2P
三、封裝格式
封裝格式的主要作用是把視頻碼流和音頻碼流按照一定的格式存儲在一個文件中。
現(xiàn)如今流行的封裝格式如下表所示:
由表可見,除了AVI之外,其他封裝格式都支持流媒體,即可以“邊下邊播”。
有些格式更“萬能”一些,支持的視音頻編碼標準多一些,比如MKV。而有些格式則支持的相對比較少,比如說RMVB。
這些封裝格式都有相關的文檔,在這里就不一一例舉了。
四、封裝格式
視頻編碼的主要作用是將視頻像素數(shù)據(jù)(RGB,YUV等)壓縮成為視頻碼流,從而降低視頻的數(shù)據(jù)量。
如果視頻不經(jīng)過壓縮編碼的話,體積通常是非常大的,一部電影可能就要上百G的空間。
視頻編碼是視音頻技術中最重要的技術之一。
視頻碼流的數(shù)據(jù)量占了視音頻總數(shù)據(jù)量的絕大部分。高效率的視頻編碼在同等的碼率下,可以獲得更高的視頻質(zhì)量。
主要視頻編碼一覽:
4.1 主流編碼標準
H.264僅僅是一個編碼標準,而不是一個具體的編碼器,H.264只是給編碼器的實現(xiàn)提供參照用的。
基于H.264標準的編碼器還是很多的,究竟孰優(yōu)孰劣?
在學習視頻編碼的時候,可能會用到各種編碼器(實際上就是一個exe文件),
實際中使用最多的就是x264了,性能強悍(超過了很多商業(yè)編碼器),而且開源。
其基本教程網(wǎng)上極多,不再贅述。
編碼時候可參考:《x264編碼指南——碼率控制》
編碼后統(tǒng)計值的含義:《X264 輸出的統(tǒng)計值的含義(X264 Stats Output)》
google推出的VP8屬于和H.264同一時代的標準。
總體而言,VP8比H.264要稍微差一點。
有一篇寫的很好的VP8的介紹文章:《深入了解 VP8》
除了在技術領域,VP8和H.264在專利等方面也是打的不可開交,可參考文章:《WebM(VP8) vs H.264》
此外,我國還推出了自己的國產(chǎn)標準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碼流分析器》
五、音頻編碼
音頻編碼的主要作用是將音頻采樣數(shù)據(jù)(PCM等)壓縮成為音頻碼流,從而降低音頻的數(shù)據(jù)量。
音頻編碼也是互聯(lián)網(wǎng)視音頻技術中一個重要的技術。
但是一般情況下音頻的數(shù)據(jù)量要遠小于視頻的數(shù)據(jù)量,因而即使使用稍微落后的音頻編碼標準,而導致音頻數(shù)據(jù)量有所增加,也不會對視音頻的總數(shù)據(jù)量產(chǎn)生太大的影響。
高效率的音頻編碼在同等的碼率下,可以獲得更高的音質(zhì)。
音頻編碼的簡單原理可以參考:《視頻壓縮編碼和音頻壓縮編碼的基本原理》
主要音頻編碼一覽:
由表可見,近年來并未推出全新的音頻編碼方案,可見音頻編碼技術已經(jīng)基本可以滿足人們的需要。
音頻編碼技術近期絕大部分的改動都是在MP3的繼任者——AAC的基礎上完成的。
這些編碼標準之間的比較可以參考文章:《音頻編碼方案之間音質(zhì)比較(AAC,MP3,WMA等)》
結果大致是這樣的:
AAC+ > MP3PRO > AAC > RealAudio > WMA > MP3
AAC格式的介紹:《AAC格式簡介》
AAC幾種不同版本之間的對比:《AAC規(guī)格(LC,HE,HEv2)及性能對比》
AAC專利方面的介紹:《AAC專利介紹》
此外杜比數(shù)字的編碼標準也比較流行,但是貌似比最新的AAC稍為遜色:《AC-3技術綜述》
六、現(xiàn)有網(wǎng)絡視音頻平臺對比
現(xiàn)有的網(wǎng)絡視音頻服務主要包括兩種方式:點播和直播。
點播意即根據(jù)用戶的需要播放相應的視頻節(jié)目,這是互聯(lián)網(wǎng)視音頻服務最主要的方式。絕大部分視頻網(wǎng)站都提供了點播服務。
直播意即互聯(lián)網(wǎng)視音頻平臺直接將視頻內(nèi)容實時發(fā)送給用戶,目前還處于發(fā)展階段。直播在網(wǎng)絡電視臺,社交視頻網(wǎng)站較為常見。
6.1 直播平臺參數(shù)對比
主流互聯(lián)網(wǎng)視音頻平臺直播服務的參數(shù)對比如表所示:
可以看出,直播服務普遍采用了RTMP作為流媒體協(xié)議,F(xiàn)LV作為封裝格式,H.264作為視頻編碼格式,AAC作為音頻編碼格式。采用RTMP作為直播協(xié)議的好處在于其被Flash播放器支持。而Flash播放器如今已經(jīng)安裝在全球99%的電腦上,并且與瀏覽器結合的很好。因此這種流媒體直播平臺可以實現(xiàn)“無插件直播”,極大的簡化了客戶端的操作。封裝格式,視頻編碼,音頻編碼方面,無一例外的使用了FLV + H.264 + AAC的組合。FLV是RTMP使用的封裝格式,H.264是當今實際應用中編碼效率最高的視頻編碼標準,AAC則是當今實際應用中編碼效率最高的音頻編碼標準。視頻播放器方面,都使用了Flash播放器。
6.2 點播平臺參數(shù)對比
主流網(wǎng)絡視音頻平臺點播服務的參數(shù)對比如表所示:
現(xiàn)有互聯(lián)網(wǎng)視音頻平臺參數(shù)對比
可以看出,點播服務普遍采用了HTTP作為流媒體協(xié)議,H.264作為視頻編碼格式,AAC作為音頻編碼格式。
領取音視頻開發(fā)學習資料:音視頻開發(fā)(資料文檔+視頻教程)(
FFmpegWebRTCRTMPRTSPHLSRTP)
采用HTTP作為點播協(xié)議有以下兩點優(yōu)勢:
一方面,HTTP是基于TCP協(xié)議的應用層協(xié)議,媒體傳輸過程中不會出現(xiàn)丟包等現(xiàn)象,從而保證了視頻的質(zhì)量;
另一方面,HTTP被絕大部分的Web服務器支持,因而流媒體服務機構不必投資購買額外的流媒體服務器,從而節(jié)約了開支。
點播服務采用的封裝格式有多種:MP4,F(xiàn)LV,F(xiàn)4V等,它們之間的區(qū)別不是很大。
視頻編碼標準和音頻編碼標準是H.264和AAC。
這兩種標準分別是當今實際應用中編碼效率最高的視頻標準和音頻標準。視頻播放器方面,無一例外的都使用了Flash播放器。
《[總結]視音頻編解碼技術零基礎學習方法》
《[總結]FFMPEG視音頻編解碼零基礎學習方法》
《視音頻數(shù)據(jù)處理入門:RGB、YUV像素數(shù)據(jù)處理》
《視頻壓縮編碼和音頻壓縮編碼的基本原理》