2023-4-4 前端達人
搜索“視頻傳輸協(xié)議”,一般會搜出來RTP,RTSP,UDP等等。光看這些協(xié)議,可能有些人會覺得奇怪為什么要把udp也往上放一起,rtp不是可以基于udp?!同時,很多文章主要去講解各個協(xié)議之間的差異,而沒有從更為宏觀的角度來考慮。本文將結(jié)合OSI的分層思路,將不同協(xié)議之間的關系都梳理清楚;同時也從視頻傳輸與組網(wǎng)角度進行介紹。
再者,視頻有很多封裝格式,比如m3u8,mp4等;也有很多音視頻編碼格式,比如h264,h265等,那為何有這么多的封裝格式類型和音視頻編碼格式類型呢?一方面是解決存儲的問題;另一方面是支持不同播放器的解析;但更重要的是不同的傳輸協(xié)議可以支持的音視頻編碼格式有差異,這也是由于不同的應用場景下形成的歷史原因。
流媒體(streaming media),是指將一連串的媒體數(shù)據(jù)包從服務器端發(fā)送到客戶端,可以實現(xiàn)邊下邊播,此技術使得數(shù)據(jù)包可以像流水一樣發(fā)送。傳統(tǒng)的方式需要在使用前下載整個文件,存儲到本地后才能進行播放;而流媒體只允許下載一小部分(存在視頻關鍵幀)就能進行播放。
流媒體技術不是一種單一的技術,它將網(wǎng)絡技術、音視頻技術還有終端緩存技術等有機地結(jié)合。也就是說,在網(wǎng)絡上要實現(xiàn)流媒體技術,必須要先制作、發(fā)布、傳輸和播放等,這需要服務器端、終端以及網(wǎng)絡都要能支持。當前很多的視頻軟件或者網(wǎng)站都是用到了這種技術。歸結(jié)下來是:
1.內(nèi)容的產(chǎn)生。這里是指將視頻源制作成為可以對外發(fā)布的視頻格式,以及適合在網(wǎng)絡上傳播的分辨率和碼率。這主要用到了視頻的編解碼技術??紤]的輸出參數(shù),如分辨率、碼率、音視頻編碼格式、封裝格式等都需要結(jié)合應用場景和傳輸方式統(tǒng)一考慮。
2.對外發(fā)布。這里主要是指能夠支撐服務器對外輸出視頻資源的技術,常見的有各種流媒體網(wǎng)絡傳輸協(xié)議技術及其需要服務器端支撐的技術。這里的流媒體網(wǎng)絡傳輸協(xié)議比如:
3.組網(wǎng)和傳輸。
這里的傳輸還得考慮一個概念,是服務器對外主動推數(shù)據(jù),還是等待終端到服務器端拉數(shù)據(jù),這是兩個完全相反的處理方式。對于組播或者廣播的組網(wǎng)方式,往往采用的是服務器主動對外推送數(shù)據(jù);而對于單播來說主要是終端向服務器端主動拉數(shù)據(jù)。
這里涉及到的IP組網(wǎng)方式中的傳輸類型有:廣播、單播、組播。
不管是什么類型的組網(wǎng)方式,在傳輸層就有UDP和TCP。下面也將從OSI等層面講講這些底層傳輸協(xié)議之間的關系。
4.視頻播放。這里主要是從終端側(cè)角度說,在不同操作系統(tǒng)中能夠進行播放視頻的播放器,比如vlc等,不同的播放器支持對不同類型的視頻數(shù)據(jù)進行播放。
從圖中也可以看到IP層(網(wǎng)絡層)的上層是傳輸層,通過TCP和UDP等方式進行數(shù)據(jù)包的傳輸。
(PS:下圖為網(wǎng)絡中所找https://blog.csdn.net/yaopeng_2005/article/details/7064869)
結(jié)合上圖,再補一個wiki上的互聯(lián)網(wǎng)協(xié)議套組圖,一看就更明白了。
從上面兩個圖中也可以很清楚地看到,TCP和UDP在接下去的內(nèi)容有很重要的地位,這里也簡單介紹下,深度知識請自行搜索。
組播(multicast)
又稱為多點廣播或群播,或多播,主要是指將信息同時傳遞給一組目的地址。消息在每個網(wǎng)絡鏈路上只需傳遞一次,而且只有在鏈路分叉時,消息才會被復制,使用的效率是最高的。也正是因為這個原因,以前的廣電網(wǎng)絡中,針對直播多采用組播方式,流量的傳輸成本明顯降低很多。
單播:
其實是組播的一種特殊方式,即常規(guī)的點到點信息傳遞。如果所有傳輸中是以單播的方式傳遞給多個接收方,必須向每個接收者都發(fā)送一份數(shù)據(jù)副本這么多。
廣播
其實也算是組播的一種特殊方式,就是一對所有的通信方式,對每一臺主機發(fā)出的信號都進行無條件復制并轉(zhuǎn)發(fā),所有的接收點都可以收到所有信息。
注意,組播一般指的是IP組播,常與RTP等音視頻協(xié)議相結(jié)合。雖然組播的設計理念很好,但是它需要對網(wǎng)絡內(nèi)部的狀態(tài)比單播要多得多。實際商用中,組播主要應用在較為簡單的、只有單個源斷的情況,如之前提到廣電網(wǎng)絡內(nèi)部用到的組播方式,UDP組播。
以上是不同類型的IP組播方式,實際在采用中要結(jié)合具體情況進行調(diào)整。比如,如果非要使用廣播,但是采用的場景不合適,也有可能產(chǎn)生廣播風暴。
組播、廣播、單播也介紹了基本的概念,但是他們與視頻傳輸有什么關系呢?
文章上面也提到了,組播是從IP層面的傳輸策略,而所有的視頻傳輸協(xié)議其數(shù)據(jù)包大部分都經(jīng)過UDP和TCP,經(jīng)由IP層進行傳輸?shù)侥康牡?。因此不同的IP傳輸策略與傳輸協(xié)議進行結(jié)合,就能夠落地到具體的應用場景。
同時需要注意的是,采用組播方式可以通過設置網(wǎng)卡為混雜模式或為多播模式,具體也是根據(jù)網(wǎng)卡的特性進行差異處理。如果處理方式不當,比如設置成了廣播,可能會導致在同網(wǎng)絡下,你在播放視頻,然后其他相同網(wǎng)絡下接收端也將有相應的流量,而導致他們的對外服務網(wǎng)口的流量被占滿。
從下圖中可以看到,標紅色的就是大家經(jīng)常說的視頻傳輸協(xié)議。但是從圖中可以看到他們其實是有基于的關系,比如HLS都是基于HTTP進行傳輸,而HTTP在傳輸層都是依賴tcp數(shù)據(jù)包,再經(jīng)由ip層進行分發(fā)。
1)UDP
基于UDP傳輸?shù)囊曨l數(shù)據(jù),比如udp://238.123.45.1:3001,在網(wǎng)絡可達的情況下,即可進行播放??梢圆捎胿lc等播放器進行播放。
UDP視頻數(shù)據(jù)傳輸可以采用單播,組播或廣播的方式,具體采用哪種方式根據(jù)具體的組網(wǎng)情況進行控制。
上面也有提到過,廣電網(wǎng)絡中多采用組播的方式進行直播數(shù)據(jù)傳輸,這也是得益于廣電網(wǎng)絡的專網(wǎng)特性以及視頻源輸出可以控制到單一等特性。
UDP的組播大部分是采用MPEG TS流,廣電網(wǎng)絡中很多視頻,其視頻編碼格式也大部分是mepg2
2)RTP
整個RTP協(xié)議包括RTP數(shù)據(jù)協(xié)議和RTP控制協(xié)議(RTCP)。此外,這里也將經(jīng)常一起提的RTSP介紹下。
RTP(實時傳輸協(xié)議,Real-time Transport Protocol),是一種網(wǎng)絡傳輸協(xié)議
RTP協(xié)議說明了傳遞音頻和視頻的標準數(shù)據(jù)包的格式。最早是作為多播協(xié)議的,后來主要應用在單播中。RTP是創(chuàng)建在UDP協(xié)議之上的,主要應用于流媒體、視頻會議等系統(tǒng)業(yè)務上。
RTP為端到端的數(shù)據(jù)傳輸提供了時間信息和流同步,但不保證服務質(zhì)量,而是由服務質(zhì)量由RTCP。
在RTP的數(shù)據(jù)包封裝中,包含了時間戳、標記位、同步源標識等信息。
RTP從上層接收到流媒體的數(shù)據(jù)(如H264),封裝成RTP數(shù)據(jù)包,并將其發(fā)往UDP端口中的偶數(shù)端口。
RTCP(實時傳輸控制協(xié)議,Real-time Transport Control Protocol或RTP Control Protocol)
RTP的姐妹協(xié)議。RTP使用的是偶數(shù)UDP端口,RTCP采用的是RTP下一個端口,也就是下一個奇數(shù)的端口。RTCP也是基于UDP進行傳輸?shù)摹?
RTCP本身不做數(shù)據(jù)傳輸,主要與RTP協(xié)作,將視頻媒體數(shù)據(jù)打包和發(fā)送,并定期在流媒體會話參與者之間傳輸控制數(shù)據(jù),并為RTP提供QoS反饋,簡單點說是主要保證音視頻的同步。
RTCP接收到控制信息后,封裝為RTCP控制包,并發(fā)往RTP端口下一個偶數(shù)端口。
RTSP(實時流協(xié)議,Real Time Streaming Protocol)
RTSP是一種網(wǎng)絡應用協(xié)議,主要來創(chuàng)建和控制流媒體服務器與終端之間的會話。控制類的請求主要走TCP協(xié)議。
通過RTSP對流媒體數(shù)據(jù)進行控制和播放,比如進行播放、暫停、快進等操作,它定義了具體的控制消息、操作方法和狀態(tài)碼等。
與RTP、RTCP配合,在廣電網(wǎng)絡內(nèi)部主要應用在點播場景比較多,而直播主要走UDP組播。在互聯(lián)網(wǎng)場景下,也有用于直播和點播的,但是相對來說使用較少。
請求的url為:rtsp://testdomain/test.mp4/streamid=0
需要服務器端和客戶端都能夠支持RTSP的控制。一般客戶端采用vlc即可,而服務器端采用Darwin Streaming Server,ffmpeg等建立流媒體服務。
3)RTMP(實時消息協(xié)議,Real-Time Messaging Protocol)
包括RTMP、RTMPT等一系列的協(xié)議,Adobe為flash播放器和服務器之間音視頻數(shù)據(jù)傳輸?shù)膮f(xié)議。
4)HTTP
而基于HTTP協(xié)議的就更多了,如上圖。如果服務器部署了流媒體的服務,如Nginx等,就可以對外提供視頻播放服務了。
這里也需要說明,視頻的播放一般分為點播和直播,有些協(xié)議作為直播的傳輸協(xié)議反而是更好的,比如RTMP,時延就比較低,但RTMP做CDN成本相對較高。CDN支持很好的HTTP如果能支持直播,當前也有很多協(xié)議能支持通過HTTP的方式實現(xiàn)直播流媒體。
自適性流媒體(adaptive bitrate streaming,ABS)也叫碼流自適應,是流媒體服務器準備各種碼流的視頻流,所有的視頻碼流都是相同時段完全統(tǒng)一圖像的音視頻數(shù)據(jù),客戶端根據(jù)網(wǎng)絡情況和CPU使用情況等進行動態(tài)調(diào)整。
主要有MPEG-DASH、HLS、HDS、MSS等技術方案,這幾個也是上圖中最上層的流媒體傳輸協(xié)議技術。通過這些傳輸協(xié)議封裝的視頻源,可以支持有多種碼率,并支持播放器客戶端在播放時,根據(jù)帶寬情況自動調(diào)整碼率以適應用戶的最佳觀看效果——不卡頓,不重新加載等。
這里也僅僅對碼流自適應技術做了簡單介紹,由于現(xiàn)在這種技術應用相當廣泛,后面將詳細介紹這種技術。
【說明】
文章轉(zhuǎn)自,華為云社區(qū),作者Higeeon,相關版權(quán)解釋權(quán)歸原作者所有。https://bbs.huaweicloud.com/blogs/fed3df04b1e011e9b759fa163e330718
藍藍設計建立了UI設計分享群,每天會分享國內(nèi)外的一些優(yōu)秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯(lián)系01063334945。
分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。
藍藍設計( bouu.cn )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網(wǎng)站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數(shù)據(jù)可視化設計公司、UI交互設計公司、高端網(wǎng)站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。
藍藍設計的小編 http://bouu.cn