網絡視頻開發?你需要了解這些知識
本文轉載自微信公眾號「活在信息時代」,作者活在信息時代 。轉載本文請聯活在信息時代公眾號。
隨著網絡帶寬的日益擴大,基于網絡的視頻流越來越成為很多應用內置的功能。因此,對于視頻相關開發的技術需求也越來越多。因此,對于很多程序員來說,掌握一些基礎的視頻流開發知識,就成為了解決很多問題的關鍵。但是視頻開發相關的知識很多,一些開發人員,尤其是中途轉行的技術人員,不知道如何開始,因此,本文就為大家介紹一些視頻開發的基礎知識,從而讓大家少走些彎路。
在國內,視頻開發所需要了解的基礎知識,總結起來,可以歸納為:一標準五協議二類庫。下面我們就分別看看他們都指什么。
一、標準
一標準指得是是國家標準GB/T 28181—2016《公共安全視頻監控聯網系統信息傳輸、交換、控制技術要求》,該標準規定了公共安全視頻監控聯網系統的互聯結構, 傳輸、交換、控制的基本要求和安全性要求,以及控制、傳輸流程和協議接口等技術要求,是視頻監控領域的國家標準。
GB28181協議信令層面使用的是SIP(Session Initiation Protocol)協議,流媒體傳輸層面使用的是實時傳輸協議(Real-time Transport Protocol,RTP)協議。
GB28181可以理解為在國際通用標準的基礎之上進行了私有化定制以滿足視頻監控聯網系統互聯傳輸的標準化需求。它的協議會話通道實際上使用的是SIP協議,并且在SIP協議的基礎之上做了些私有化處理。
GB28181標準中具體通信協議結構圖如下圖所示:
二、協議
五協議指得是SIP、RTP、RTCP、RTSP和RTMP。
1、SIP
SIP(Session initialization Protocol,會話初始協議)是一個由IETF MMUSIC工作組開發的協議,作為標準被提議用于創建,修改和終止包括視頻,語音,即時通信,在線游戲和虛擬現實等多種多媒體元素在內的交互式用戶會話。
SIP中一個比較重要的概念是用戶代理(User Agent),指的是一個SIP邏輯網絡端點,用于創建、發送、接收SIP消息并管理一個SIP會話。
SIP用戶代理又可分為用戶代理客戶端UAC(User Agent Client)和用戶代理服務端UAS(User Agent Server)。UAC創建并發送SIP請求,UAS接收處理SIP請求,發送SIP響應。SIP協議會與許多其它的協議協同工作,如SIP報文內容發送會話描述協議(Session Description Protocol,SDP),SDP協議描述了會話所使用流媒體細節,如:使用哪個IP端口,采用哪種編解碼器等等。
SIP的一個典型用途是:SIP會話傳輸一些簡單的經過報文的實時傳輸協議流,RTP本身才是語音或視頻的載體。
在前文所述的GB28181協議中,聯網系統在進行視音頻傳輸及控制時應建立兩個傳輸通道: 會話通道和媒體流通道。會話通道用于在設備之間建立會話并傳輸系統控制命令; 媒體流通道用于傳輸視音頻數據,經過壓縮編碼的視音頻流采用流媒體協議RTP/RTCP傳輸。
2、RTP
RTP(Real-time Transport Protocol)實時傳輸協議是用于Internet上針對多媒體數據流的一種傳輸層協議。
RTP協議和RTP控制協議RTCP一起使用,而且它是建立在UDP協議上的。
和UDP一樣,RTP并不提供任何傳輸可靠性的保證和流量的擁塞控制機制,無法保證實時業務的服務質量。在實際應用中,RTP協議和UDP兩者共同完成傳輸層協議傳輸。UDP只是負責傳輸數據包,RTP提供時間標志戳及其他技術來保證流媒體在實時傳輸時的時間正確性。RTP具有延時低和支持多播兩個特點。
多播功能在網絡視頻會議方面有著很廣泛的應用,它主要應用于這樣一種環境
假設紅色的圓為存放有視頻數據的流媒體服務器,其他的圓為連接到該服務器的各個客戶端,當所有的綠色的客戶端要求同時觀看紅色服務器上的某一個視頻時,如果服務器為每一路客戶端單獨建立連接進行數據的傳輸,這樣明顯不太合理浪費帶寬,因此,多播技術可以很好地解決這種問題,即同一份數據,由服務器發送到公共的多播地址,各個客戶端均監聽同一個多播地址來獲取數據,這樣,既節省了帶寬,同時也保證了各個客戶端所觀看的視頻的同步。RTP協議在最初就是為了實現類似的視頻會議的應用而誕生的。
3、RTCP
RTCP(Real-time ControlProtocol,實時傳輸控制協議)與RTP共同定義在1996年提出的RFC 1889中,它是和 RTP一起工作的控制協議。RTCP單獨運行在低層協議上,由低層協議提供數據與控制包的復用。在RTP會話期間,每個會話參與者周期性地向所有其他參與者發送RTCP控制信息包。
4、RTSP
RTSP(RealTime Streaming Potocol,實時流協議),是傳輸層之上的應用層協議(RTP是傳輸層),它可選擇UDP、組播UDP、TCP、RTP為傳輸機制。RTSP定義了雙向多應用程序如何有效地通過IP網絡傳送多媒體數據。
RTSP充當多媒體服務器的網絡遠程控制,使實時數據如音頻與視頻的快進快退、中止、播放成為可能。
和RTP相比,應用場景上RTSP是一種雙向實時數據傳輸協議,它允許客戶端向服務器端發送請求,如回放、快進、倒退等操作。協議上,RTSP是應用層協議,可基于RTP來傳送數據,還可以選擇TCP、UDP、組播UDP等通道來發送數據,具有很好的擴展性。這里就比較清晰了,運營商的IPTV直播業務,沒有任何回放、倒退等操作,所以可以直接采用UDP+RTP+組播實現。
5、RTMP
RTMP(Real Time Messaging Protocol,實時消息傳送協議)是Adobe Systems公司為Flash播放器和服務器之間音頻、視頻和數據傳輸開發的開放協議。
RTMP協議從屬于應用層,被設計用來在適合的傳輸協議(如TCP)上復用和打包多媒體傳輸流(如音頻、視頻和互動內容)。RTMP提供了一套全雙工的可靠的多路復用消息服務,類似于TCP協議[RFC0793],用來在一對結點之間并行傳輸帶時間戳的音頻流,視頻流,數據流。通常情況下,不同類型的消息會被分配不同的優先級,當網絡傳輸能力受限時,優先級用來控制消息在網絡底層的排隊順序。
除了以上五種協議之外,直播協議HLS、SRT以及蘋果公司的HLS協議也是經常會用到的技術。
三、類庫
二類庫是指Google開源的WebRTC、以騰訊的視頻SDK為代表的在線視頻SDK。
1、WebRTC
2010年5月,Google以6820萬美元收購VoIP軟件開發商Global IP Solutions的GIPS引擎,并改為名為“WebRTC”。
WebRTC可通過簡單的 API 為瀏覽器和移動應用程序提供實時通信(RTC)功能。WebRTC 組件已經過優化,可以最好地滿足此目的。
借助 WebRTC,用戶可以在基于開放標準的應用程序中添加實時通信功能。它支持在同級之間發送視頻,語音和通用數據,從而使開發人員能夠構建功能強大的語音和視頻通信解決方案。該技術可在所有現代瀏覽器以及所有主要平臺的本機客戶端上使用。WebRTC 背后的技術被實現為一個開放的 Web 標準,并在所有主要瀏覽器中均以常規 JavaScript API 的形式提供。國內提供音視頻PaaS和SaaS服務的廠商都是基于WebRTC開發的,包括QQ、微信,以及從騰訊和YY出來創業的各種團隊。
2、騰訊直播SDK
直播 SDK 是騰訊云視立方產品家族的子產品之一。騰訊直播 SDK 支持直播推流、拉流、主播觀眾互動連麥、主播跨房 PK 等能力。
除了騰訊直播SDK以外,YY的聲網、釘釘的vidyo等,也提供類似的在線直播平臺SDK??梢圆挥米约鹤鎏嗟拈_發。
四、視頻形式及常見解決方案
從交互方式來看,流媒體分為點播(VOD)和直播(LIVE)兩種。
直播(LIVE):HLS,RTMP,http+MP4,http+flv,RTP+RTSP
點播(VOD):http+MP4,http+flv,HLS,DASH
從業務場景來看,常見的應用方案可以歸納為以下幾種。
直播:RTMP,HLS,http+flv
音視頻通話:webrtc(RTP),SIP+RTP
視頻點播:http+MP4,http+flv,hls
IPTV:RTSP(信令)+RTP(媒體)
會議電視:RTP(媒體)+SIP(信令),H323(信令)+RTP(媒體)
視頻監控:國標SIP(信令)+RTP(媒體),RTSP(媒體)+RTP(媒體)
VOIP:SIP(信令)+RTP(媒體)
當然,以上只是一個簡單的介紹,具何如何應用,還要看自己的業務需求。