基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 报文设计 (二)


上一篇我们提到,常用的SIP 信令有:1注册、2振铃、3呼叫、4接听、5挂断、6取消

有了这几个报文,电话的呼入和呼出就可以基本实现,其他拒接、DTMF等类似。

如图所示:

基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 报文设计 (二)

约定:

  • 1.客户端和服务器端JSON格式交互;
    必传参数:
    msgtag 是消息唯一标志,
    userid 是谁触发的,
    appid 作为一个应用的标记,
    sign 签名加密(看情况)
  • 2.服务器返回的报文必须包括msgtag\appid\errcode
    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呼叫逻辑。

有兴趣的同学,快去试试吧。