在線直播可以說從去年開始變成了一個火爆的創(chuàng)業(yè)領域,一下子出來了很多做視頻直播的公司伪嫁。但說實話這方面的技術書籍實在是非常的少,網(wǎng)上的資料也很零散,所以我決定寫一些列介紹視頻技術的文章爱只。今天這篇文章先對視頻技術中的基礎概念做一些簡單的總結。
你所能看到的視頻
現(xiàn)在可能大部分人都直接用瀏覽器在視頻網(wǎng)站上看視頻了招刹,已經(jīng)不太能看到視頻的后綴名之類的東西了恬试。但是如果是把視頻下載到本地觀看的話,是可以看到視頻文件的后綴的疯暑。這也就是我們平時所說的視頻格式训柴。目前比較主流的視頻格式有下面這幾種:avi,rmvb,mp4,flv尼夺,mkv等等。這里面作為的視頻格式實際上是指視頻的封裝格式指的是以什么方式把視頻和音頻數(shù)據(jù)打包成一個文件仗嗦,所一個這個封裝格式其實與視頻和音頻采用什么方式編碼沒有什么關系「势荆總的來說稀拐,不同的封裝格式之間差距不大,各有優(yōu)劣对蒲。
注:有些封裝格式支持的視音頻編碼標準十分廣泛钩蚊,應該算比較優(yōu)秀的封裝格式贡翘,比如MKV;而有些封裝格式支持的視音頻編碼標準很少砰逻,應該屬于落后的封裝格式鸣驱,比如RMVB。
封裝格式
封裝格式的主要作用是把視頻碼流和音頻碼流按照一定的格式存儲在一個文件中◎鹋兀現(xiàn)如今流行的封裝格式如下表所示:
| 格式 | 推出機構 | 流媒體 |支持的視頻編碼|支持音頻編碼格式|應用領域|
|:----|:----|:----|:----|:----|
|AVI|Mirosoft Inc.|不支持|幾乎所有|幾乎所有|下載的視頻文件(現(xiàn)在可能很少見到)|
|MP4|MPEG|支持|MPEG-2踊东、MPEG-4、H.264|AAC刚操,MPEG-1 Layers I, II, III闸翅、AC-3等|互聯(lián)網(wǎng)視頻|
|TS|MPEG|支持|MPEG-2、MPEG-4菊霜、H.264|AAC坚冀,MPEG-1 Layers I, II, III|互聯(lián)網(wǎng)視頻、IPTV鉴逞、數(shù)字電視|
|FLV|Adobe Inc.|支持|Sorenson记某、VP6、H264|MP3构捡,ADPCM液南,Linear PCM、AAC等|互聯(lián)網(wǎng)視頻
|MKV|CoreCodec Inc.|支持|幾乎所有|幾乎所有|互聯(lián)網(wǎng)視頻|
|RMVB|Real Networks Inc.|支持|RealVideo 8勾徽,9滑凉,10|AAC、Cook Codec喘帚、RealAudio Lossless|下載的視頻文件|
除了AVI之外畅姊,幾乎所有的封裝格式都支持流媒體播放,也就是“邊下邊播放”啥辨。什么叫封裝可能現(xiàn)在理解起來比較抽象涡匀,下面我會詳細講解什么是封裝以及什么是編碼,以及他們之間的關系溉知。
視頻編碼格式
了解了視頻的封裝格式后,如果剝離視頻的封裝格式后腕够,就可以看到真正的視頻數(shù)據(jù)级乍,這些視頻數(shù)據(jù)會有不同的編碼格式。什么是編碼格式呢帚湘?
我們平時所看到的視頻玫荣,理論上就是一幀幀的圖片連續(xù)的播放,形成動畫效果大诸。那么完整的保存所有圖片捅厂,一部電影可能就要上百G的空間贯卦。視頻編碼就是為了壓縮這些圖片,以節(jié)省空間焙贷。我先講一下簡單的理論撵割,比如一秒鐘的視頻通常有24幀,這24張圖畫大部分區(qū)域可能都比較相近辙芍,那么我們是不是可以找到一種方法啡彬,只保存一張完整圖片(我們稱為關鍵幀),不保存其他圖片故硅,只保存和這個完整圖片的不同(通過某種數(shù)學建模表達)庶灿,這樣就會節(jié)省很多空間,在播放的時候吃衅,通過和關鍵幀與每一幀的不同逆向恢復成一張完整的圖片往踢,這樣就得到了24張完整的圖片。(這里只是舉例徘层,實際應用中并不一定是每24幀圖像被設定一個關鍵幀)菲语。OK,那么所謂編碼格式就指的一種壓縮視頻圖像的算法惑灵。主流的視頻編碼格式一覽表如下:
格式 | 推出機構 | 推出時間 | 發(fā)展狀況 |
---|---|---|---|
HEVC(H265) | MPEG/ITU-T | 2013 | 不普及 |
H264 | MPEG/ITU-T | 2003 | 各個領域 |
MPEG4 | MPEG | 2003 | 不溫不火 |
MPEG2 | MPEG | 2001 | 數(shù)字電視 |
VP9 | 2013 | 不普及 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft Inc. | 2006 | 微軟平臺 |
其實這里H264已經(jīng)成為事實的視頻領域的行業(yè)編碼標準山上。目前主流的視頻都采用H264格式進行視頻編碼,H265可能對目前的計算機硬件資源來說計算量還是過大英支,還沒有普及(只是猜測)佩憾。MPEG4、MPEG2和H264都師出同門干花,只不過H264在圖像質量和壓縮率上更勝一籌妄帘,其他幾種編碼格式基本跟H264差不多,只是出自不同公司或者組織池凄,并且沒有H264普及抡驼。
音頻編碼
這里在稍微講一下音頻編碼吧。同樣音頻編碼和視頻編碼一樣肿仑,指的是通過一定的手段將音頻數(shù)據(jù)進行壓縮致盟。音頻數(shù)據(jù)在視頻文件中占用空間跟視頻數(shù)據(jù)比非常的小,我們這里就不重討論尤慰,目前主要的音頻編碼格式有AAC馏锡、AC-3、MP3伟端、WMA杯道。其中AAC應該是視頻文件中最主流的編碼格式。
視頻播放原理
比如我們在網(wǎng)站上看一個視頻的時候责蝠,需要經(jīng)過這幾個步驟:解協(xié)議党巾,解封裝萎庭,解碼視音頻,視音頻同步齿拂。如果播放本地文件則不需要解協(xié)議驳规,為以下幾個步驟:解封裝,解碼視音頻创肥,視音頻同步达舒。他們的過程如圖所示。
這張圖表示的是從網(wǎng)絡流媒體下載到播放的整個過程叹侄,流媒體的協(xié)議有很多種巩搏,比如HTTP,RTMP或者MMS等趾代,這里我們先不展開討論(以后抽時間專門寫一篇流媒體協(xié)議的文章介紹)贯底。我們從解協(xié)議的結果封裝格式數(shù)據(jù)開始討論。
解封裝的作用撒强,就是將輸入的封裝格式的數(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編碼的音頻碼流。
解碼的作用半抱,就是將視頻/音頻壓縮編碼數(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)的顯卡和聲卡播放出來钙畔。
為什么要分封裝格式和視頻編碼格式呢? 這個其實跟網(wǎng)絡分七層模型一個原理金麸。解耦和擎析,降低依賴,底層給上層提供基礎功能挥下,底層和上層都都可以單獨擴展揍魂,可以以多種方案組合編碼與封裝,比如MP4與H264棚瘟、MP4與MPEG现斋、TS與H264等等。比如這里面的這邊文章的編碼就只負責將最原始的音頻和視頻數(shù)據(jù)就行壓縮偎蘸,而壓縮完的數(shù)據(jù)要怎么組織就拜托給上層的封裝庄蹋,封裝接到視頻音頻數(shù)據(jù)負責給數(shù)據(jù)編號,指定同步協(xié)議禀苦,加入字幕等操作蔓肯。經(jīng)過封裝后,得到的就是可以播放的上面提到的視頻文件MP4或者MKV等等振乏。把這個過程反過來就是上圖描述的視頻播放的過程蔗包。
本文大部分內容抄自[總結]視音頻編解碼技術零基礎學習方法,一部分來源于自己的總結《[總結]視音頻編解碼技術零基礎學習方法》應該是國內視頻領域最系統(tǒng)的學習資料了慧邮。有興趣的朋友可以去仔細閱讀一下调限。