2018年7月23日

RTSP/RTP vs RTMP vs WebRTC vs HLS vs SIP/RTP

多媒體資料包含了語音及影像,因為原始資料不同,壓縮格式也有差異,在一個影音資料中,通常包含了這兩種獨立的媒體,如果遇到多國語言的狀況,也可能會看到一個影片中夾帶了多個語音。當多媒體資料放到網路上,為了達到一邊下載,一邊觀看的功能,我們需要 streaming media 的網路協定,幫助我們將影音資料壓縮後,搭配協定傳送到收視端,透過媒體播放器解壓縮,並播放出來。

串流 streaming 的意思就是將影音資料壓縮後,切割成多個區塊的網路資料,分開但連續地發送給客戶端,客戶端不需要一次將整個多媒體資料下載完成後,才能播放影片,而是透過即時下載的分塊資料,先暫存在 buffer 中,只要客戶端有了幾秒鐘的影音 buffer,就可以一邊繼續下載,一邊播放影片。

骨灰級的使用者,可能有聽過 MMS(Microsoft Media Server),或是 RM(Real Media) 這兩種串流多媒體的標準,但現在幾乎都已經消失了,取而代之的是 RTSP, RTMP, WebRTC, HLS 及 SIP 這些協定。

RTSP

RTSP(Real Time Streaming Protocol) 是用來控制遠端多媒體的播放、錄製、暫停的控制協定,有點像是遠端遙控錄放影機的感覺,我們在網路的遠端,發送 RTSP 的控制指令,告訴 Server 我們想要看哪一個影片,找到後,就開始播放影片,也可以暫停。RTSP 協定中,看不到影音資料的內容,因為真正的影音資料是透過另一個協定 RTP(Real-time Transport Protocol) 發送的,在 RTSP 中,Server 會以 SDP(Session Description Protocol) 的形式,將 RTP 影音的資訊,包含 UDP Port,影音的壓縮格式等等資訊,告訴 client 端。

SIP

跟 RTSP 功能比較相近的是 SIP(Session Initiation Protocol),SIP 也是一種多媒體的控制協定,RTSP 像是個網路影音播放器,但 SIP 卻是一種網路電話,SIP 本身也只負責處理通訊的對談建立以及掛斷的處理,真正的影音多媒體資料,也同樣是由 SIP 以 SDP 的方式描述 RTP 影音資料的資訊,透過 RTP 將影音資料傳送到另一端,因為 SIP 是建立雙向對談的協定,因此 RTP 影音會是雙向的串流。

同樣的 RTP 的影像以及語音是分開在不同的 UDP Port,這個 Port 是透過 SDP 在通訊建立時,即時雙向建立起來的。因為電話這種應用必須要一邊講一邊聽,這是最常見的一種串流媒體的應用。

SIP 跟 RTSP 的基本差異在於,SIP 是雙向影音,而 RTSP 是單向點播,雖然說是這樣,但 RTSP 還是可以做到雙向視訊通話,不過那已經不是該協定的應用本意。目前 RTSP 最常見的應用場景是網路攝影機。

RTMP

RTMP(Real Time Messaging Protocol) 是由 adobe flash player 引領的串流媒體協定,因為 flash player 在過去的網頁曾經霸佔了很長一段黃金時代,只要裝了 flash player,不僅可以看串流影片,還可以存取電腦的麥克風及 webcam,還能玩一堆網頁遊戲。

不過 flash player 的時代已經走入歷史,但在裡面應用的 RTMP 串流協定還持續存活著,原因在於網路直播,因為 RTMP 有低延遲的特性,適合用在網路影音直播中,目前的原生 APP 網路影音直播都是採用 RMTP 協定,除非要轉到網頁瀏覽器播放,才會轉換到 HTML5 或是 HLS 的協定。

RTMP 跟 RTSP 與 SIP 不同的地方在於,RTMP 將媒體控制指令跟多媒體資料放在同一個協定中,標準是使用 TCP Port 1935,而不像是 RTP 一樣是使用 UDP,每一種媒體資料使用一個 UDP Port。

而且 RTMP 裡面還有著網路頻寬偵測的能力,因應著不同的網路速度,可以動態調整影音資料內容的解析度,以低解析度的影片應付低頻寬的網路環境。

WebRTC

WebRTC(Web Real-Time Communication) 是 google 開放的標準,目前已經提交成為 W3C 標準,專門支援在網頁瀏覽器中進行影音對談的 API。

不同於 Flash Player 的 plugin 機制,WebRTC 需要瀏覽器原生的支援,也就是內建於瀏覽器的影音對談 API,雖然 WebRTC 已經解除了 flash player 的窘境,不需要安裝 plugin,但這個協定/API 本身的能力跟等級,跟 RTMP 還是有落差。

如果要做少量的視訊會議對談,用 WebRTC 是可以做到的,但如果要做大量的 APP 影音直播,瞬間有上千或上萬個人在觀看的直播影音,目前還是要走 RTMP 搭配 HLS 的解決方案。

HLS

HLS (HTTP Live Streaming) 是 Apple 提出的基於 HTTP 延伸的串流媒體傳輸協定,在媒體播放過程中,允許客戶端因應網路速度動態調整不同解析度的媒體資料,在串流媒體一開始,客戶端會下載 m3u8 playlist,用來取得可以使用的媒體資料流。

HLS 跟 RTP 的差異在於 HLS 可穿過所有允許 HTTP 通過的 firewall 或 proxy,非常適合搭配 CDN 發布媒體串流。因此網路 APP 影音直播,才會以 RTMP 發布,在雲端轉換為 HLS,再提供給大量客戶端觀看這樣的機制。

ONVIF

ONVIF (Open Network Video Interface Forum) 是 Axis、Bosch Security System 及 Sony 在 2008 成立的標準論壇,目的在於讓不同品牌的網路影音設備能夠有共通的標準,能夠互通,幫助硬體生產及網路開發商能夠透過標準整合出各種不同的網路影音監視系統。

ONVIF 有五種 profile

  • Profile S for encompasses video streaming 網路監視系統
  • Profile G for video storage 視訊儲存及重播
  • Profile C for access control 門禁控制
  • Profile Q for Out-of-the-box interoperability 開箱即用,更簡便的操作介面
  • Profile A for Physical Access Control System (PACS) 跟 Profile C 很類似,但 Profile C 用於基本的門禁控制,Profile A 則是擴充,有比較複雜的控制邏輯

以往在網路攝影機的市場,大多是以 RTSP/RTP 的方式提供影音,但現在已經有支援 RTMP 的網路攝影機出現了。

References

即時串流通信協定 RTSP

直播終端技術比較:Native vs H5 vs WebRTC vs 小程序

網絡視頻監控:ONVIF標準協議6個常見問題

什麼是Onvif協議,誰開啟了Onvif時代?

ONVIF -- Profiles (S,G,C,Q,A)

Which protocol is best for a video live streaming from a server to an Android: RTSP, RTMP, HTTP or something else?

Streaming 通訊協定 RTP RTCP RTSP RTMP HLS 介紹

Streaming 通訊協定 RTP RTCP RTSP RTMP HLS 介紹

RTMP vs RTSP/RTP: Which to choose for an interactive livestream?

RTSP協議詳解

[RTSP]rtsp和sip的區別和聯繫

SDP (Session Description Protocol) 閱讀心得

可以用WebRTC來做視頻直播嗎?