# RTC SDK 会议控制动作参考 Web 的 `performRoomAction(action, payload)`、Android 的 `performRoomAction(action, JSONObject, RoomCallback)`、iOS 的 `performRoomAction(_:payload:)` 和 UniApp 原生桥的 `roomAction` 共用这组**白名单动作**。这里的动作是 SDK 给宿主的稳定入口;宿主不要自行拼接 `/api/v2/rtc/session/...`、WHIP/WHEP 或 WebSocket 地址。`roomId`、当前成员、设备令牌由已入会 SDK 提供,不放在 `payload` 中。 ```js const room = await client.performRoomAction('snapshot') await client.performRoomAction('transferHost', { targetParticipantId: room.members[1].participantId, keepPreviousHostAsCohost: true }) ``` HTTP 成功只表示动作已被服务端接受;发布、录制和外部源等操作还要查询实际状态。动作执行时重新校验当前角色、设备和权限。主持移交、踢出、关会后,旧页面不能凭之前的按钮可见性继续操作。Android 回调的 `success` 与 `httpFailure`、iOS `async throws`、Web Promise、UniApp `roomActionResult` 都要按各端实际结果处理;UniApp 的桥接 ACK 不是最终成功。 ## 房间与成员 | 动作 | payload 字段 | 返回/核对 | 权限与特殊情况 | |---|---|---|---| | `snapshot` | 无 | 房间、成员、录制策略与当前设备能力 | 普通成员可读;等候室状态应另查 `admission/status`。 | | `updateAccessPolicy` | `accessMode`=`Open/InviteOnly`、`waitingRoomEnabled`、`isLocked` | 更新后的策略;再读 `snapshot` | 主持或获准治理者;锁定不等于关闭既有连接。 | | `createInvitation` | `subjectIssuer`、`subjectId`、`displayName`、`role`、`capabilities`、`expiresInMinutes`、`bypassWaitingRoom` | 只返回一次的邀请票据摘要 | 仅有邀请权者;不要将票据写进日志或公共 URL。 | | `reviewAdmission` | `participantId`、`admit`、可选 `reason` | 等候成员状态变化 | 成员可能已超时/离会;拒绝后旧票据不能直接重试。 | | `moderateMember` | `participantId`、`action`;按动作可带 `role`、`micEnabled`、`cameraEnabled`、`screenSharing`、`kick`、`reason` | 成员/媒体状态事件 | 服务端约束动作及操作者,不能通过 payload 的 `operatorId` 冒充他人。 | | `setCohost` | `participantId`、`enabled`、可选 `reason` | 领导权状态 | 当前主持人授予/收回;目标必须是本会议有效成员。 | | `claimHost` | 可选 `reason` | 当前主持身份 | 仅符合组织者/管理接管条件时成功;不能抢占仍有效的主持人。 | | `transferHost` | `targetParticipantId`、可选 `keepPreviousHostAsCohost`、`reason` | 新主持与旧主持角色 | 必须由当前主持人执行;旧主持人随后失去主持专属录制控制。 | | `extendMeeting` | `minutes`、可选 `reason` | 预约结束时间 | 不能越过会议硬截止;房间须允许主持延长。 | | `closeRoom` | 无 | 会议关闭事件 | 当前主持人结束所有设备会话;此后不得用旧设备令牌重连。 | `reviewAdmission`、`moderateMember`、`setCohost` 和 `reviewWhiteboard` 的目标成员字段均为 `participantId`。不要把用户显示名、设备会话 ID 或 Publication ID 当作成员 ID。 ## 媒体、外部源和协作 | 动作 | payload 字段 | 返回/核对 | 权限与特殊情况 | |---|---|---|---| | `publicationStats` | 无 | 当前可见 Publication 与统计 | 统计采样不保证每一秒都有值;摄像头与屏幕独立。 | | `getEndpointInfo` / `reportEndpointInfo` | 读取无参;上报使用 SDK 收集的终端参数 | 近 90 秒终端参数 / 上报结果 | 终端报告不接受硬件唯一标识;普通宿主不手填他人参数。 | | `setVideoQuality` | `targetParticipantId`(单成员或显式全体)、`quality`(宽、高、帧率) | 目标质量策略与后续实际值 | 主持目标不保证设备立即达到;用质量事件或统计看实际。 | | `externalSourceCandidates` | 无 | 已授权、可加入的通道及 `grantId` | 只列业务方授权范围,不返回 RTSP 密码或源 URL。 | | `externalSources` | 无 | 本会议当前外部源绑定 | 外部源不算真人参会者;离线时保留状态供页面解释。 | | `addExternalSource` | `grantId` | 绑定 ID、后续媒体状态 | 主持人仅能加入业务方已授权的源,`allowRecording` 仍由授权决定。 | | `removeExternalSource` | `bindingId` | 绑定移除事件 | 只移出本会议,不停止集群原通道或其他会议。 | | `requestWhiteboard` | `requestAccess`、可选 `reason` | `Pending`/已取消申请 | 普通成员申请书写权;提出申请不代表可立即绘制。 | | `reviewWhiteboard` | `participantId`、`allow`、可选 `reason` | 成员书写权限事件 | 主持审批或收回;上传素材最终提交时仍复核权限。 | | `lockWhiteboard` | `locked` | 白板锁定状态 | 锁定后普通成员只读;历史白板事件不被删除。 | `externalSourceCandidates` 返回的是业务授权候选,而不是整个集群可随意入会的摄像头。要创建/撤销候选授权,由可信业务后端调用[RTC 管理 API](../development/api-rtc.md);参会 SDK 只能在授权范围内选择。 ## 录制与状态 | 动作 | payload 字段 | 返回/核对 | 权限与特殊情况 | |---|---|---|---| | `currentContinuousRecording` | 无 | 当前任务或 `null` | 已准入成员可查询;`null` 不代表没有历史录像。 | | `startContinuousRecording` | 无 | `recordingId`、`Starting/Recording` 等状态 | 房间须已允许录制,启停仅当前主持人;重复开始返回当前任务。 | | `stopContinuousRecording` | `recordingId` | `Stopping`,之后查询最终 `Stopped` | 只停止指定任务;`Stopping` 时文件可能尚未封口。 | | `recordingTargets` | 无 | 逐 Publication 可录目标 | 供旧逐流录制兼容入口使用,不能当成整场任务清单。 | | `startRecording` / `stopRecording` | 按目标可带 `publicationId`、`mediaKind`、`participantId`、`screen` 等 | 逐流状态 | **旧逐流接口**;整场回放请用上面的持续录制动作。 | 会后目录、播放和下载不使用会中 `performRoomAction`:业务后端签发独立 `view/play/download` 档案票据,再用[档案 SDK](archive-api.md)。完整 HTTP 路径、请求/响应与权限见[RTC API 对接参考](../development/api-rtc.md)。