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

云端录制(Android)

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

步骤1:发起云端录制

权限要求

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

示例代码

import android.util.Log
import io.trtc.tuikit.atomicxcore.api.CompletionHandler
import io.trtc.tuikit.atomicxcore.api.room.RoomStore

private 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.Log
import io.trtc.tuikit.atomicxcore.api.CompletionHandler
import io.trtc.tuikit.atomicxcore.api.room.RoomStore

private 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", "发起录制失败:")
}
}
})
}

步骤2:停止云端录制

前置条件

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

权限要求

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

示例代码

import android.util.Log
import io.trtc.tuikit.atomicxcore.api.CompletionHandler
import io.trtc.tuikit.atomicxcore.api.room.RoomStore

private 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")
}
})
}

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

前置条件

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

示例代码

import android.util.Log
import io.trtc.tuikit.atomicxcore.api.room.RecordingStatus
import io.trtc.tuikit.atomicxcore.api.room.RecordingStopReason
import io.trtc.tuikit.atomicxcore.api.room.RoomInfo
import io.trtc.tuikit.atomicxcore.api.room.RoomListener
import io.trtc.tuikit.atomicxcore.api.room.RoomStore
import io.trtc.tuikit.atomicxcore.api.room.RoomUser

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