XCC API

TRTC

XSwitch 支持与腾讯 TRTC 互联互通。


TRTC 需要以下参数:

  • app_id:TRTC SDK App ID,字符串,不同 AppID 之间的数据不互通
  • room_id:房间 ID,字符串,加入同一个 room 的成员可以媒体互通
  • user_id:用户 ID,字符串,TRTC 不支持同一个 UserID (除非 SDKAppID 不同)在两个设备同时使用
  • user_sig:动态签名,详见 https://github.com/tencentyun/tls-sig-api 下面的 README.md

TRTC 在 XSwitch 内是一个 Endpoint,与 SIP 类似,呼叫字符串格式为:

{trtc_user_id=$user_id,trtc_user_sig=$user_sig}/trtc/$app_id/$room/$dest_number

TRTC 呼叫 SIP

  • Android/IOS 客户端加入room
  • TRTC 加入room,在 XSwitch 中生成一个 Channel
  • Bridge 到 SIP

有以下两种方式:

{
  "jsonrpc": "2.0",
  "id": "0",
  "method": "XNode.NativeAPI",
  "params": {
    "ctrl_uuid": "ctrl_uuid",
    "cmd": "trtc",
    "args": "call $app_id $user_id $user_sig $dest_number $cid_name $cid_number"
  }
}

其中:

  • app_id:TRTC App ID,必选
  • user_id:TRTC 用户 ID,必选
  • user_sig:TRTC 签名,必选
  • dest_nubmer:被叫号码,必选
  • cid_name:主叫名称,可选
  • cid_number:主叫号码,可选

该方法使用 Native API 发起呼叫,会到系统 Dialplan 中查找$dest_number,具体的 Context 可以在模块配置文件中配置。

此外,也可以直接使用 Dial 发起外呼(其中$相关的变量在真正使用时要以实际的值代替):

{
  "jsonrpc": "2.0",
  "id": "0",
  "method": "XNode.Dial",
  "params": {
    "ctrl_uuid": "ctrl_uuid",
    "destination": {
      "global_params": {},
      "call_params": [
        {
          "uuid": "uuid",
          "dial_string": "trtc/$app_id/$room/$dest_number",
          "params": {
            "trtc_user_id": "$user_id",
            "trtc_user_sig": "$user_sig"
          }
        }
      ]
    }
  }
}

其中:

  • dest_nubmer:被叫号码,如果为auto_answer,则 channel 会自动应答

呼通后,TRTC Channel 将会自动接听,然后就可以调用XNode.Bridge去 Bridge SIP 侧的 Channel 了。

上述两种方式都需要先将 TRTC SDK 加入room,如果想省钱,可以先呼叫 SIP,等 SIP 接通后再加入 TRTC room,如果 SIP 侧呼不通,就无需加入 TRTC room。呼叫流程如下:

  • XSwitch Dial SIP
  • XSwitch 执行trtc App 加入 TRTC room,或通过 Bridge 加入 TRTC room
  • 客户端 SDK 加入同一个room

SIP 呼叫 TRTC

SIP 呼叫 TRTC 也有两种方式,当 SIP Channel 到来后,可以先 Accept,然后 Bridge 到trtc/$app_id/$room/$dest_number即可,注意需要有trtc_user_idtrtc_user_sig参数。

另一种方式是直接调用一个NativeApp,如:

{
  "jsonrpc": "2.0",
  "id": "0",
  "method": "XNode.NativeApp",
  "params": {
    "ctrl_uuid": "ctrl_uuid",
    "cmd": "trtc",
    "args": "$appid $room $user_id $user_sig"
  }
}

注意:不管从哪个方向呼,TRTC 只有媒体层的协议支持,没有信令,因此,具体的信令由开发者自行实现,如:

  • 对于 SIP 来话,可以在 Accept 后,Bridge 到 TRTC room,并通过 Push Notification 通知移动客户端 SDK 加入某个room(具体先后顺序可以自行决定)。
  • 对于 TRTC 呼 SIP 的场景,移动客户端可以通过 REST API 或 Websocket 等方式通知 Ctrl 侧加个 room 并呼叫 SIP。

会议

暂未实现。

在会议模式下,Linux SDK 要以主播模式进入会议,FreeSWITCH 侧如果有多个用户,则先在 FreeSWITCH 侧混流,然后以一路流的方式跟 TRTC Cloud 交互。

由于客户端会有多个主播加入,所以收到的多路流需要适当混流。

参见:https://cloud.tencent.com/document/product/647/35429

WebRTC