注意:版本说明:
注意:云端录制接口(startRecording / stopRecording)自 tuikit-atomicx-vue3 6.4.0 和 tuikit-atomicx-react 6.2.0 起支持,请确认你使用的版本满足要求。
一、前提条件
·用户已通过 useLoginState 完成登录鉴权,请参考 接入概览。
·用户已通过 useRoomState 进入标准会议房间,请参考 房间管理。
·已完成云端录制套餐开通及存储配置:
·购买含云录制能力的视频会议 SDK 套餐。
·开通录制文件存储服务:录制文件支持存储至 云点播(VOD) 或 对象存储(COS),请在对应控制台完成开通并记录存储信息。
·提交工单,选择实时音视频产品,申请为你的 SDKAppID 配置云端录制存储信息。
二、录制效果
视频会议 SDK 默认采用合流录制模式,将房间内发布的音视频流混合为一份完整的录制文件。录制布局会随会中状态自动切换,切换过程中不重启录制任务:
| 会中状态 | 混流布局 | 画面数量上限 |
| 无屏幕分享 / 白板 | 九宫格布局 | 最多 25 路视频画面 |
| 有屏幕分享 / 白板 | 屏幕分享布局(共享为主画面) | 最多 1 路屏幕分享 + 16 路视频画面 |
| 仅音频 | – | — |
三、接口说明
视频会议 SDK 无 UI 集成通过 useRoomState() 提供录制控制与状态订阅能力,录制任务由服务端全程托管,客户端仅负责发起与停止。
| 类型 | 名称 | 说明 |
| 方法 | startRecording(): Promise<void> | 发起云端录制。仅房主或管理员可调用,须在进房成功后调用。 |
| 方法 | stopRecording(): Promise<void> | 停止云端录制。仅房主或管理员可调用。 |
| 状态 | currentRoom.recordingInfo | 当前房间的录制信息,含 status 字段(RecordingStatus.Recording 表示录制中)。 |
| 事件 | RoomEvent.onRecordingStarted | 录制任务启动成功时触发,回调参数为 { roomInfo, operator }。 |
| 事件 | RoomEvent.onRecordingStopped | 录制任务停止时触发,回调参数为 { roomInfo, operator, reason }。reason 可区分主动停止与异常中断。 |
四、权限要求
仅房主或管理员可调用 startRecording(),其他角色调用将抛出权限错误。同一房间内同时只能存在一个录制任务,重复调用也会返回错误。
五、示例代码
Vue3Reactimport { useRoomState } from 'tuikit-atomicx-vue3/room';const { startRecording } = useRoomState();await startRecording();import { useRoomState } from 'tuikit-atomicx-react/room';const { startRecording } = useRoomState();await startRecording();
六、错误处理
startRecording() 调用失败时会抛出错误,常见错误情况如下:
| 错误码 | 含义 | 处理建议 |
| 100001 | 后端系统错误。 | 稍后重试;若持续出现,请提交工单排查。 |
| 100004 | 房间不存在。 | 确认已通过 createAndJoinRoom() 或 joinRoom() 进房成功后再调用录制接口。 |
| 100006 | 没有权限,必须是房主或管理员。 | 检查当前用户角色,仅房主或管理员可发起录制。 |
| 101072 | 录制配置不存在或未启用。 | 确认已完成控制台套餐开通、工单配置及增值功能开关,参考这篇「前提条件」。 |
Vue3Reactimport { useRoomState } from 'tuikit-atomicx-vue3/room';const { startRecording } = useRoomState();try { await startRecording();} catch (error: any) { switch (error?.code) { case 100001: console.error('后端系统错误,请稍后重试。'); break; case 100004: console.error('房间不存在,请确认已进房后再发起录制。'); break; case 100006: console.error('权限不足,仅房主或管理员可发起录制。'); break; case 101072: console.error('录制配置不存在或未启用,请检查控制台开通配置。'); break; default: console.error('发起录制失败:', error); }}import { useRoomState } from 'tuikit-atomicx-react/room';const { startRecording } = useRoomState();try { await startRecording();} catch (error: any) { switch (error?.code) { case 100001: console.error('后端系统错误,请稍后重试。'); break; case 100002: console.error('参数错误,请检查传入参数。'); break; case 100004: console.error('房间不存在,请确认已进房后再发起录制。'); break; case 100006: console.error('权限不足,仅房主或管理员可发起录制。'); break; case 101072: console.error('录制配置不存在或未启用,请检查控制台开通配置。'); break; default: console.error('发起录制失败:', error); }}
七、前置条件
当前房间内有进行中的录制任务(RecordingStatus.Recording)。
八、权限要求
仅房主或管理员可调用 stopRecording()。
九、示例代码
Vue3Reactimport { useRoomState } from 'tuikit-atomicx-vue3/room';const { stopRecording } = useRoomState();try { await stopRecording();} catch (error: any) { console.error('停止录制失败:', error);}import { useRoomState } from 'tuikit-atomicx-react/room';const { stopRecording } = useRoomState();try { await stopRecording();} catch (error: any) { console.error('停止录制失败:', error);}
十、前置条件
·已进房成功。
·建议在进房后立即订阅事件,避免遗漏由其他端(例如移动端房主)发起的录制通知。
十一、示例代码
Vue3Reactimport { useRoomState, RecordingStatus, RecordingStopReason, RoomEvent } from 'tuikit-atomicx-vue3/room';const { currentRoom, subscribeEvent } = useRoomState();// 主动查询当前录制状态const isRecording = currentRoom.value?.recordingInfo?.status === RecordingStatus.Recording;// 监听录制开始subscribeEvent(RoomEvent.onRecordingStarted, ({ operator }) => { console.log('录制已开始,操作人:', operator.userId);});// 监听录制停止subscribeEvent(RoomEvent.onRecordingStopped, ({ operator, reason }) => { if (reason === RecordingStopReason.StoppedByUser) { console.log('录制已停止,操作人:', operator.userId); } else if (reason === RecordingStopReason.RecorderLeftRoom) { console.warn('录制异常中断,录制机器人已退出房间,请视需要重新发起录制。'); }});import { useRoomState, RecordingStatus, RecordingStopReason, RoomEvent } from 'tuikit-atomicx-react/room';const { currentRoom, subscribeEvent } = useRoomState();// 主动查询当前录制状态const isRecording = currentRoom?.recordingInfo?.status === RecordingStatus.Recording;// 监听录制开始subscribeEvent(RoomEvent.onRecordingStarted, ({ operator }) => { console.log('录制已开始,操作人:', operator.userId);});// 监听录制停止subscribeEvent(RoomEvent.onRecordingStopped, ({ operator, reason }) => { if (reason === RecordingStopReason.StoppedByUser) { console.log('录制已停止,操作人:', operator.userId); } else if (reason === RecordingStopReason.RecorderLeftRoom) { console.warn('录制异常中断,录制机器人已退出房间,请视需要重新发起录制。'); }});
十二、错误情况
onRecordingStopped 事件的 reason 字段标识录制停止原因:
| 枚举值 | 值 | 说明 |
| RecordingStopReason.StoppedByUser | 0 | 房主或管理员主动调用 stopRecording() 正常停止。 |
| RecordingStopReason.RecorderLeftRoom | 1 | 录制机器人异常退出房间,录制中断。建议提示用户并视业务需要决定是否重新发起录制。 |