帮你快速理解、总结文档立即下载

云端录制(Web)

最近更新时间:2026-07-17 20:31:03

我的收藏
本篇文档旨在指导开发者在标准会议无 UI 集成方案中实现云端录制能力。您可以通过 useRoomState() 提供的 startRecording() / stopRecording() 控制录制的发起与停止,并通过 currentRoom.recordingInfoRoomEvent 实时监听录制状态变化。
版本说明:
云端录制接口(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 可区分主动停止与异常中断。

步骤1:发起云端录制

权限要求

房主或管理员可调用 startRecording(),其他角色调用将抛出权限错误。同一房间内同时只能存在一个录制任务,重复调用也会返回错误。

示例代码

Vue3
React
import { 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
录制配置不存在或未启用。
确认已完成控制台套餐开通、工单配置及增值功能开关,参考本文「前提条件」。
Vue3
React
import { 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);
}
}

步骤2:停止云端录制

前置条件

当前房间内有进行中的录制任务(RecordingStatus.Recording)。

权限要求

房主或管理员可调用 stopRecording()

示例代码

Vue3
React
import { 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);
}

步骤3:监听录制状态变化

前置条件

已进房成功。
建议在进房后立即订阅事件,避免遗漏由其他端(例如移动端房主)发起的录制通知。

示例代码

Vue3
React
import { 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
录制机器人异常退出房间,录制中断。建议提示用户并视业务需要决定是否重新发起录制。
注意:
云端录制功能需提前完成套餐购买、存储服务开通及工单配置,请确认已完成本文前提条件中的全部步骤。
录制文件存储在您配置的云点播(VOD)或对象存储(COS)中,请前往对应控制台查看和管理。