即时通信 IM 云端录制

本篇文档旨在指导开发者在标准会议无 UI 集成方案中实现云端录制能力。可以以通过 RoomStore 提供的 startRecording / stopRecording控制录制的发起与停止,并通过 currentRoom.recordingInfo 与 RoomListener 实时监听录制状态变化。

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

注意:版本说明:

注意:云端录制接口(startRecording / stopRecording)自 rtc_room_engine 和 atomicx-core 的 4.2.3.74 版本起支持,请确认你使用的版本满足要求。

一、前提条件

·用户已通过 LoginStore 完成登录鉴权,请参考 接入概览。

·用户已通过 RoomStore 进入标准会议房间,请参考 房间管理。

·已完成云端录制套餐开通及存储配置:

·购买含云录制能力的视频会议 SDK 套餐。

·开通录制文件存储服务:录制文件支持存储至 云点播(VOD) 或 对象存储(COS),请在对应控制台完成开通并记录存储信息。

·提交工单,选择实时音视频产品,申请为你的 SDKAppID 配置云端录制存储信息。

二、录制效果

视频会议 SDK 默认采用合流录制模式,将房间内发布的音视频流混合为一份完整的录制文件。录制布局会随会中状态自动切换,切换过程中不重启录制任务:

会中状态 混流布局 画面数量上限
无屏幕分享 / 白板 九宫格布局 最多 25 路视频画面
有屏幕分享 / 白板 屏幕分享布局(共享为主画面) 最多 1 路屏幕分享 + 16 路视频画面
仅音频 – –

三、接口说明

视频会议 SDK 无 UI 集成通过 RoomStore 提供录制控制与状态订阅能力,录制任务由服务端全程托管,客户端仅负责发起与停止。

类型 名称 说明
方法 startRecording() 发起云端录制。仅房主或管理员可调用,须在进房成功后调用。
方法 stopRecording() 停止云端录制。仅房主或管理员可调用。
状态 currentRoom.recordingInfo 当前房间的录制信息,含 status 字段(RecordingStatus.RECORDING 表示录制中)。
事件 RoomListener.onRecordingStarted 录制任务启动成功时触发,回调参数为 (roomInfo, operator)。
事件 RoomListener.onRecordingStopped 录制任务停止时触发,回调参数为 (roomInfo, operator, reason) 可区分主动停止与异常中断。

四、权限要求

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

五、示例代码

import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomStoreprivate fun startRecording() { RoomStore.shared().startRecording(completion = object : CompletionHandler { override fun onSuccess() { Log.i("TAG", "录制成功") } override fun onFailure(code: Int, desc: String) { Log.i("TAG","录制失败:code=$code,desc=$desc") } })}

六、错误处理

startRecording() 调用失败时会抛出错误,常见错误情况如下:

错误码 含义 处理建议
100001 后端系统错误。 稍后重试;若持续出现,请提交工单排查。
100004 房间不存在。 确认已通过 createAndJoinRoom() 或 joinRoom() 进房成功后再调用录制接口。
100006 没有权限,必须是房主或管理员。 检查当前用户角色,仅房主或管理员可发起录制。
101072 录制配置不存在或未启用。 确认已完成控制台套餐开通、工单配置及增值功能开关,参考这篇 前提条件。

import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomStoreprivate fun startRecording() { RoomStore.shared().startRecording(completion = object : CompletionHandler { override fun onSuccess() { Log.i("TAG", "录制成功") } override fun onFailure(code: Int, desc: String) { when (code) { 100001 -> Log.e("TAG", "后端系统错误,请稍后重试。") 100004 -> Log.e("TAG", "房间不存在,请确认已进房后再发起录制。") 100006 -> Log.e("TAG", "权限不足,仅房主或管理员可发起录制") 101072 -> Log.e("TAG", "录制配置不存在或未启用,请检查控制台开通配置。") else -> Log.e("TAG", "发起录制失败:") } } })}

七、前置条件

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

八、权限要求

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

九、示例代码

import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomStoreprivate fun stopRecording() { RoomStore.shared().stopRecording(object : CompletionHandler { override fun onSuccess() { Log.i("TAG", "停止录制成功") } override fun onFailure(code: Int, desc: String) { Log.i("TAG", "停止录制失败:code=$code,desc=$desc") } })}

十、前置条件

·已进房成功。

·建议在进房前先订阅事件,避免遗漏由其他端(例如移动端房主)发起的录制通知。

十一、示例代码

import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RecordingStatusimport io.trtc.tuikit.atomicxcore.api.room.RecordingStopReasonimport io.trtc.tuikit.atomicxcore.api.room.RoomInfoimport io.trtc.tuikit.atomicxcore.api.room.RoomListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUserprivate fun observeRecordingState() { val roomStore = RoomStore.shared() // 主动查询当前录制状态 val currentRoom = roomStore.state.currentRoom.value val isRecording = currentRoom?.recordingInfo?.status == RecordingStatus.RECORDING // 监听录制事件 roomStore.addRoomListener(object : RoomListener() { override fun onRecordingStarted(roomInfo: RoomInfo, operator: RoomUser) { Log.i("TAG", "录制已开始,操作人:${operator.userID}") } override fun onRecordingStopped( roomInfo: RoomInfo, operator: RoomUser, reason: RecordingStopReason ) { when (reason) { RecordingStopReason.STOPPED_BY_USER -> { Log.i("TAG", "录制已停止,操作人:${operator.userID}") } RecordingStopReason.RECORDER_LEFT_ROOM -> { Log.w("TAG", "录制异常中断,录制机器人已退出房间,请视需要重新发起录制。") } } } })}

十二、错误情况

onRecordingStopped 事件的 reason 字段标识录制停止原因:

枚举值 说明
STOPPED_BY_USER 房主或管理员主动调用 stopRecording() 正常停止。
RECORDER_LEFT_ROOM 录制机器人异常退出房间,录制中断。建议提示用户并视业务需要决定是否重新发起录制。
赞 (0)
上一篇 4天前
下一篇 4天前