天天看點

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

上一篇我們提到,常用的SIP 信令有:1注冊、2振鈴、3呼叫、4接聽、5挂斷、6取消

有了這幾個封包,電話的呼入和呼出就可以基本實作,其他拒接、DTMF等類似。

如圖所示:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

約定:

1、 用戶端和伺服器端JSON格式互動;

  • 必傳參數:
    • msgtag 是消息唯一标志,
    • userid是誰觸發的,
    • appid 作為一個應用的标記。
    • sign 簽名加密 (看情況)

2、 伺服器傳回的封包必須包括msgtag appiderrcode

  • errcode=1 說明有錯誤 errmsg就會有值 ;
  • 如果errcode=0 說明傳回結果正确;
  • 一般是傳回的msgtag 是請求的msgtag+”_res”做為區分

3、 roomID 是房間号對應聲網的管道号,每個通話封包必須包括roomID 用途是什麼自己想。

4、 callType 是video audio 前者代表視訊呼叫,後者代表語音呼叫

5、 direction 呼叫方向

  • in 呼入 (SIP Server 把呼叫送到聲網的SDK)
  • out 呼出(SDK把呼叫送到SIP Server)

6、 isSIP yes no 代表這通呼叫是内部呼叫(聲網用戶端實作) 還是SIP呼叫(走落地)

這篇文章我隻是簡單列出核心的封包DEMO格式。

信令1:注冊封包:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

響應封包:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

信令2:呼叫封包:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)
基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

信令3:振鈴封包:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)
基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

信令4:接聽封包:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)
基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

信令5:挂斷封包:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)
基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

信令6:取消封包:

基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)
基于聲網的音視訊SDK和FreeSWITCH開發WebRTC2SIP Gateway 封包設計 (二)

如圖上面設計的封包非常簡單,相信大家都看得明白。不需要過多言語說明,供大家參考吧。

不論用戶端還是WebRTC2SIP connector 本質上都是聲網的音視訊SDK用戶端,然後內建了自定義的封包,是以他們初始化的時候,需要調用一個專門的的接口暫時叫做initSIP,調用這個接口的時候傳遞type 類型參數;如果是手機端或者電腦端、網頁端調用,傳回TCP Server位址和端口,供他們建立連接配接; 如果是connector轉接伺服器請求的話,除了傳回TCP Server 位址和端口外,還要傳回SIP Server位址及端口,以及呼叫送号字首。不然SDK發起電話呼叫的時候,connector 不知道電話要轉送到哪裡。這個開發一個http接口就可以實作。

APP初始化,調用initSIP接口,建立TCP連接配接,或者呼叫的時候在建立TCP連接配接;

TCP Server維持所有終端的狀态及網絡位置做Session Manager 角色

主叫輸入的号碼編輯封裝calling封包,通過tcp socket 發給伺服器,同時UI呈現撥号等待頁面;

被叫收到calling封包,就封裝ringing封包,通過tcp socket 發給伺服器,伺服器查詢Session Manager 查詢主被叫的IP和端口,實作消息的路由轉發,主叫收到就顯示振鈴頁面,同時 WebRTC2SIP connector 啟動media coder線程去解析和resample 讀取到的音頻流。就這樣一個個的封包互動串起來,就可以實作整個SIP呼叫邏輯。

有興趣的同學,快去試試吧。