視頻的編碼、封裝,視頻流協(xié)議
前兩節(jié)我們講了帶寬的計(jì)算方式、實(shí)時(shí)視頻帶寬的計(jì)算方式,同時(shí)還穿插著講了視頻的碼流等。今天來講講視頻的編碼、封裝及視頻流的協(xié)議,講完這些,其實(shí)實(shí)時(shí)視頻方面軟件層的大部分概念就能串起來了,硬件方面我們可以后面慢慢開展。
1.視頻編碼
我們先來看看什么是視頻編碼,根據(jù)《實(shí)時(shí)視頻帶寬的計(jì)算過程》一文中的描述,1920 * 1080、24FPS的視頻每秒142MB,這顯然太大了,所以需要視頻編碼來進(jìn)行壓縮。
我們通常提到的視頻編碼的格式有如下幾種:H264 , VP8, AVS, RMVB,WMV,QuickTime(mov)等。
這些不同的格式有什么區(qū)別,這個(gè)我們暫時(shí)不用太糾結(jié),因?yàn)槲覀兘裉斓哪康氖峭ㄟ^理解將概念和流程串起來,所以我們只要知道我們平時(shí)看到的這些格式是編碼,目的是為了視頻壓縮就可以了。
2.視頻封裝
什么是封裝?通常單一路的視頻或者音頻是不需要封裝的,只要播放端和服務(wù)器以相同的平均速度一收一發(fā)就可以了。但是如果視頻+音頻就會變的復(fù)雜,這時(shí)候兩者需要同步,也就是我們說的嘴和聲音得對的上,這時(shí)候就需要封裝。換言之,封裝是按照一定的規(guī)則把編碼后的視頻+音頻封裝起來,提供容器,便于播放、同步和存儲等。
我們常見的視頻封裝格式包括MP4、AVI等。
那這么多的編碼格式和封裝格式有什么區(qū)別嗎?當(dāng)然是有的。
封裝格式對視音頻編碼格式的支持程度是不一樣的。比如說MKV支持比較多,RMVB則主要支持Real公司的視音頻編碼格式。(詳細(xì)的我們就不講了,大家可以自行百度)
封裝格式和專利是有關(guān)系的,關(guān)系到推出封裝格式的公司的盈利,所以格式眾多。
封裝格式對文件體積影響比較小,但是有一點(diǎn)影響。比如說MPEG2-TS格式會稍微大一點(diǎn)。
當(dāng)然除了以上區(qū)別還有很多其他的區(qū)別,我們不多贅述,因?yàn)閷ξ覀兌?,我們只要從宏觀上理解即可,暫時(shí)不需要縱向深入。
3.傳輸協(xié)議
我們不對協(xié)議本身去做深入的研究,我們先來解釋一下協(xié)議是什么,協(xié)議本身就是為了約定一些規(guī)則,便于大家使用,不同的規(guī)則有不同的特點(diǎn)和使用方式,我們來看看常見的RTSP、RTMP、HLS這三種協(xié)議在視頻傳輸方面的應(yīng)用吧。
3.1 HLS
HLS ( HTTP Live Streaming)蘋果公司提出的流媒體協(xié)議,直接把流媒體切片成一段段,信息保存到m3u列表文件中,可以將不同速率的版本切成相應(yīng)的片;播放器可以直接使用http協(xié)議請求流數(shù)據(jù),可以在不同速率的版本間自由切換,實(shí)現(xiàn)無縫播放;省去使用其他協(xié)議的煩惱。缺點(diǎn)是延遲大小受切片大小影響,不適合直播,適合視頻點(diǎn)播。
3.2 RTSP
RTSP (Real-Time Stream Protocol)由Real Networks 和 Netscape共同提出的,基于文本的多媒體播放控制協(xié)議。RTSP定義流格式,流數(shù)據(jù)經(jīng)由RTP傳輸;RTSP實(shí)時(shí)效果非常好,適合視頻聊天,視頻監(jiān)控等方向。
3.3 RTMP
RTMP(Real Time Message Protocol) 有 Adobe 公司提出,用來解決多媒體數(shù)據(jù)傳輸流的多路復(fù)用(Multiplexing)和分包(packetizing)的問題,優(yōu)勢在于低延遲,穩(wěn)定性高,支持所有攝像頭格式,瀏覽器加載 flash插件就可以直接播放。
3.4 總結(jié)
RTSP、RTMP、HLS都是在應(yīng)用層的協(xié)議。 理論上RTSP 、RTMP、 HLS都可以做直播和點(diǎn)播,但一般做直播用RTSP RTMP,做點(diǎn)播用HLS。做視頻會議的時(shí)候原來用SIP協(xié)議,現(xiàn)在基本上被RTMP協(xié)議取代了。 RTMP協(xié)議是Adobe的私有協(xié)議,未完全公開,RTSP協(xié)議和HTTP協(xié)議是共有協(xié)議,并有專門機(jī)構(gòu)做維護(hù)。 RTMP協(xié)議一般傳輸?shù)氖莊lv,f4v格式流,RTSP協(xié)議一般傳輸?shù)氖莟s,mp4格式的流。 RTSP傳輸一般需要2-3個(gè)通道,命令和數(shù)據(jù)通道分離,HTTP和RTMP一般在TCP一個(gè)通道上傳輸命令和數(shù)據(jù)。 RTSP+RTP主要用于IPTV或低延遲場景,比如監(jiān)控?cái)z像頭,傳輸數(shù)據(jù)使用的是UDP或TCP,在網(wǎng)絡(luò)環(huán)境比較穩(wěn)定的情況下,傳輸效率是比較高的。 RTMP主要用于互聯(lián)網(wǎng)音視頻傳輸,它使用的是TCP傳輸,因?yàn)榛ヂ?lián)網(wǎng)環(huán)境相對較差,采用RTMP保證了視頻的傳輸質(zhì)量,但是其傳輸延遲相對較高,傳輸效率相對較低。 HLS主要是延時(shí)比較大,RTMP主要優(yōu)勢在于延時(shí)低。HLS可以用在IOS系統(tǒng)的APP上,微信公眾號、小程序等也只能使用HLS。
4.思路串聯(lián)
我們再回憶一下我們在《實(shí)時(shí)視頻帶寬的計(jì)算過程》一文中提到的,通常一段視頻從錄制到播放需要經(jīng)過的過程:
攝像機(jī)錄像
預(yù)處理(A/D轉(zhuǎn)換)
預(yù)處理(YUV轉(zhuǎn)換等)
壓縮編碼
數(shù)據(jù)封裝及傳輸
解碼
圖像格式變換
播放
在此基礎(chǔ)上我們再解釋一下,我們本文講了編碼、封裝、傳輸,而編碼之前有預(yù)處理等動(dòng)作,所謂預(yù)處理其實(shí)就是把攝像機(jī)拍到的物理畫面轉(zhuǎn)換成數(shù)字信號,還記得我們之前提過計(jì)算視頻的帶寬的環(huán)節(jié)嗎,通過二進(jìn)制的數(shù)字將視頻表示出來,這就是預(yù)處理在做的是視頻。到這一步位置,視頻已經(jīng)封裝成了可以傳輸?shù)男盘柫?,那么接下來就是解碼、圖像格式轉(zhuǎn)換和播放了,相信大家已經(jīng)初步理解了這個(gè)過程的全流程,更細(xì)致更深入的研究就交給有需要的小伙伴吧,對于我們只是偶爾接觸視頻或需要購買供應(yīng)商視頻設(shè)備的產(chǎn)品同學(xué),這些了解已經(jīng)非常非常足夠啦。
