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 加入 TRTCroom
,或通过 Bridge 加入 TRTCroom
- 客户端 SDK 加入同一个
room
SIP 呼叫 TRTC
SIP 呼叫 TRTC 也有两种方式,当 SIP Channel 到来后,可以先 Accept,然后 Bridge 到trtc/$app_id/$room/$dest_number
即可,注意需要有trtc_user_id
和trtc_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 交互。
由于客户端会有多个主播加入,所以收到的多路流需要适当混流。