本文列举一些接入过程中的常见问题及其解决方案。
如何获取房间 ID 和录制 ID
房间 ID 统⼀由 MRTC 后台房间管理系统 RoomServer 产⽣,端创建房间时,RoomServer 会产生⼀个房间 ID,以及录制 ID 给到端(如果创建房间的时候指定需要录制)。OnSessionEvent(RtcEvent event)
接口中,在 event.type == CREATE_ROOM && event.code == SUCCESS
的情况下, event.ext(JSON 字符串)中存放了房间 ID、房间密码以及录制 ID。例如:event.ext = {"recordId":"xxx","roomId:"yyy","token":"zzz"}
。
如何指定录制
如果业务需要录制,可以通过以下两种方式来指定录制。
方法一:创建房间时,
CreatRoomParam
里面的 ext(JSON 字符串)字段可以用来指定录制,比如param.ext = R"({"defaultRecord":true,"recordStrongDepend":false})"
。其中defaultRecord
指定是否开启录制,recordStrongDepend
指定房间的创建成功是否要考虑录制服务的状态,假设房间服务器在创建房间的时候,发现录制服务器异常,而如果这里指定了录制强相关的话,创建房间会失败,否则房间还是会创建成功,只不过这个房间没有启动录制。方法二:创建房间时,默认不启动录制,等到对端加入房间以后,再调用
StartRecord
接口启动录制。这样做的好处是可以避免录制资源的浪费,假设对方拒绝加入房间,那么录制服务就不会提前启动。
如何单独指定音频或者视频
发布或者订阅参数 PublishParam/SubscribeParam
里面的 enableVideo/enableAudio
可以指定是否发布音频和视频与是否订阅音频和视频。
如何开启 P2P 模式
P2P 模式指的是客户端和 Linux 之间的媒体数据不经过服务器中转,直接点到点打通。如果业务不需要录制,同时 Linux 端的部署满足全国各地用户的就近接入,可以考虑开启 P2P 模式。追求极致的时延体验,开启 P2P 模式需要注意以下两点:
在创建房间或者加入房间时,设置
param.engine = ENGINE_P2P
。收到对方加入房间的事件通知(OnNewJoiner)以后,再做 Publish 操作。
如何传递文本消息
Linux-SDK 提供了两种文本消息的传递模式:
P2P 场景:推荐 DataChannel 传递,调用 Session -> SendData 方法(高频消息,能保证按顺序收发)。
其他场景:使用 Room 中转的模式,调用 Session -> SendText 方法(低频消息可能会乱序)。