Skip to main content
SMeeting 的模型围绕三类状态组织:会议状态成员状态媒体状态。各端 SDK 的接口和事件都是在同步这三类状态,理解这一点之后大部分 API 都会变得自然。

房间与会议

两个词经常同时出现,含义不同: 日常接入中你主要打交道的是会议 ID:创建会议拿到它,之后的进入、会控、录制都用它。房间号更多用于对外分发(把号码发给参会者)。

生命周期

  • 登录之后才能调用会议管理接口
  • 进入会议之后才能调用会中接口(媒体控制、会控、消息)
  • 退出会议不影响登录状态,可以接着进下一场
各端 SDK 都会在调用时机不对时返回明确的错误(未登录 / 不在会议中),不用自己维护状态机去猜。

成员与角色

SMeeting 内置了一套会中角色,三档,覆盖大多数会议场景,不需要你自己设计。接口和各端 SDK 里的 role 字段默认就是这三个取值: 另有观众(入会时的 is_audience),它不是角色而是入会形态:只收流、不参与互动、不出现在成员列表里,与上面三档相互独立。它对应的是底层 SRTC 的「听众」——注意 SRTC 也有个 role 字段(普通成员 / 听众),和会议层这三档不是一回事。 如果业务上还要区分「讲师 / 助教 / 学员」这类身份,最省事的做法是:会控权限仍用上面三档承载,业务身份放在成员的扩展字段(extend_info)里,由你自己的界面按需渲染。身份体系差异大到三档装不下时,内置角色可以整套换掉,见下面的「自定义角色」。 会控动作大多是请求 - 批准的形态:成员举手申请开麦,主持人批准;主持人邀请成员开麦,成员同意或拒绝。这样设计是因为开摄像头麦克风涉及用户隐私,不能由主持人单方面强开。

自定义角色

内置的三档角色可以整套不启用,换成完全由你定义的角色体系。有些项目的角色和「主持人 / 联席主持人 / 普通成员」根本不是一回事:典型的是招投标,专家、澄清人、见证人、监督人各是一类身份,谁能看到谁的画面、谁听到的是真声谁听到的是变声,都按身份来。
招投标这个场景我们已经做过:有一套角色定制好的标准招投标会议产品,对接时直接用,不需要你自己实现这套角色和界面。其他需要自定义角色的场景,你可以自己开发,也可以委托我们定制开发——都请联系我们。
自己开发时,开启外部角色模式(服务端配置项 app.enable_role,默认关闭,需要私有化部署,联系我们开启),role 就变成一个业务自己定义的字段:
  • 取值和含义完全由你定义,服务端只存储和透传,不再解释它。自定义值从 1 开始编号,0 表示未设置(按普通成员处理)
  • 角色只认成员登记表:建会 / 改会时用 conferee_details[].role 预设,会中用「主持人更新用户会中角色」接口调整(会中改的也会落库,重新入会依然生效)。不再从 creator / co_hosts 推导,没有登记过的人不会有角色
  • 服务端不再按角色做会控判定:内置的那些「普通成员不许自行解除静音 / 开视频 / 发起共享」限制全部跳过,谁能干什么由你定制的客户端界面决定
  • 没有内置主持人概念:转移主持人接口在这个模式下直接返回错误
  • 聊天禁用对所有人一视同仁:全体禁言 / 单人禁言照常生效,服务端不会再给主持人留例外
一个必须先想清楚的点:「谁听得到谁、谁看得到谁」不由服务端按角色分发。SMeeting 服务端不做按角色的选择性下发,它给你的只是 role 这个字段。差异化的收听收看要在客户端实现——拿到成员列表里的 role 后,自己决定订阅哪些人的流、把哪些人静音、哪些画面不渲染;变声这类音频处理同理,由业务侧自行实现。

三条消息通道

SMeeting 里有三种「消息」,接口和适用场景都不同。开发者最常搞混的是后两者:
「IM」这个名字容易被误解。 它不是聊天工具,也不是第三方即时通讯云服务的替代品 —— 它是一条独立于会议的通知通道,作用是在用户还没进会议时也能把消息推给他。不提供:好友关系、会话列表、聊天记录、消息漫游、群组、已读回执、离线消息队列。用户长时间离线时的兜底(存库、转推送、短信)要你自己的业务系统做。要在会议里做文字交流,用会中聊天,不是 IM。
三者的关系可以这样记:会中聊天给人看,自定义消息给程序看,IM 在会议之外找人。 底层上,会中的两种消息走的是 SRTC 的频道内消息,会议外消息走 SRTC 的频道外 IM 通道 —— 但你用 SMeeting 时不需要直接接触这一层。

一个用户,多端同时在线

SMeeting 内置了多端在线的支持:同一个用户在手机和电脑上同时进会,会被识别成两个参会身份(按设备类型区分),互不顶替。 这一层映射由 SMeeting 自动完成 —— 底层每个设备各占一个 RTC 身份,但在会议语义上它们属于同一个用户。你不需要自己拼 uid。

与 RTC 层的术语差异

SMeeting 建在 SRTC 之上,两层的名词不通用。混用会让你在读接口文档时反复卡壳: 在 SMeeting 的接口里你只会看到会议语义的命名。
少数地方会看到 RTC 层的说法,那不是笔误:错误码里带「频道」字样的(如「该会话不在频道中」)确实来自底层 RTC,原样透传给你便于排查。

与 SRTC 的关系

用 SMeeting 时底层 SRTC 仍在工作,只是被包在里面,正常接入不需要直接调它。 如果你发现自己在反复绕过会议层去操作底层,通常说明选型需要重新考虑 —— 见 选 SRTC 还是 SMeeting

下一步