WebRTC是最近幾年非常炙手可熱的應用技術,它的出現使得基於瀏覽器的應用場景實現瞭新的突破,通過瀏覽器和電腦設備之間的互聯互通,支持瞭文本,語言和視頻功能。從基礎概念來說,WebRTC基本通信形式是一種點對點的通信方式。我們知道,任何的通信都需要信令支持才能實現雙方的數據交互,狀態反饋,會話處理等控制。但是,目前WebRTC沒有標準化的信令支持,它隻能通過數據通道,http,WebSocket方式來實現信令支持。因此,WebSocket協議是常用的WebRTC信令之一。

此圖例以及以下圖例均來自於互聯網資源關於其它信令支持方式和WebRTC核心概念,ICE/SDP, Offer/answer模式和主要應用場景等,筆者在下面的鏈接中已經進行瞭比較詳細地分享說明。今天,我們重點對WebSocket 協議進行討論。

完整SIP/SDP媒體協商概論-WebRTC/ICE概覽

完整WebRTC架構ICE連接等技術詳解及應用場景分析

很多用戶可能對WebRTC和WebSocket的概念比較模糊。除瞭web相同以外,從簡單命名我們就可以看出其基本差異,一個是RTC-實現實時通信,一個是socket-實現連接。實際上,它們兩者之間存在很大不同,包括應用場景,傳輸方式, 技術實現目標都有著某些差別。網絡有很多這方面的資料,讀者可以進一步學習其差別。我們這裡主要討論的是基於WebRTC用戶場景中,使用WebSocket協議實現的SIP子信令的支持,特別重點強調的是RFC7188-The WebSocket Protocol as a Transport for the Session Initiation Protocol (SIP),包括其IP語音方案背景說明和RFC7188規范詳解。

1-背景說明

隨著WebRTC的部署應用越來越多,無論是基於瀏覽器的終端方面還是IP語音通信的服務器端方面發佈瞭很多的規范來支持WebRTC技術,並且重點強調瞭通過WebSocket實現對SIP協議的支持,例如,ETSI TS 124 371中規定的WIC (WebRTC IMS Client)。很多業務場景中,比如WebRTC-SIP或者WebSocket gateway網關,SBC,服務器端(例如Asterisk,FreeSWITCH,Kamailio/OpenSIPS和其它商業解決方案)客戶端(例如,JsSIP)等已經開始支持瞭WebSocket SIP子協議。

另外,很多的基於WebSocket的瀏覽器終端除瞭支持SIP協議以外,也支持瞭WebSocket,實現瞭RFC7188中規定的SIP WebRTC客戶端(例如jsSIP)的功能定義。

SIP WebSocket Client: A SIP entity capable of opening outbound