tencent cloud

实时音视频

动态与公告
产品动态
产品近期公告
关于 TRTC Live 正式上线的公告
关于TRTC Conference 正式版上线的公告
Conference 商业化版本即将推出
关于多人音视频 Conference 开启内测公告
关于音视频通话 Call 正式版上线的公告
关于腾讯云音视频终端 SDK 播放升级及新增授权校验的公告
关于 TRTC 应用订阅套餐服务上线的相关说明
产品简介
产品概述
基本概念
产品功能
产品优势
应用场景
性能数据
购买指南
计费概述
免费时长说明
月订阅
现收现付
TRTC 逾期与暂停政策
常见问题解答
退款说明
新手指引
Demo 体验
视频通话 SDK
组件介绍
开通服务
跑通 Demo
快速接入
离线唤醒
会话聊天
云端录制
AI 降噪
界面定制
Chat 集成通话能力
更多特性
无 UI 集成
服务端 API
客户端 API
解决方案
错误码表
发布日志
常见问题
视频会议 SDK
组件介绍(TUIRoomKit)
开通服务(TUIRoomKit)
跑通 Demo(TUIRoomKit)
快速接入(TUIRoomKit)
屏幕共享(TUIRoomKit)
预定会议(TUIRoomKit)
会中呼叫(TUIRoomKit)
界面定制(TUIRoomKit)
虚拟背景(TUIRoomKit)
会议控制(TUIRoomKit)
云端录制(TUIRoomKit)
AI 降噪(TUIRoomKit)
会中聊天(TUIRoomKit)
机器人推流(TUIRoomKit)
更多特性(TUIRoomKit)
客户端 API(TUIRoomKit)
服务端 API(TUIRoomKit)
常见问题(TUIRoomKit)
错误码 (TUIRoomKit)
SDK更新日志(TUIRoomKit)
直播与语聊 SDK
Live 视频直播计费说明
组件介绍
开通服务(TUILiveKit)
跑通 Demo
无 UI 集成
UI 自定义
直播监播
视频直播
语聊房
高级功能
客户端 API
服务端 API
错误码
发布日志
常见问题
RTC Engine
开通服务
SDK 下载
API-Example
接入指引
API-参考手册
高级功能
AI 集成
概述
MCP 配置
Skills 配置
集成指南
常见问题
RTC RESTFUL API
History
Introduction
API Category
Room Management APIs
Stream mixing and relay APIs
On-cloud recording APIs
Data Monitoring APIs
Pull stream Relay Related interface
Web Record APIs
AI Service APIs
Cloud Slicing APIs
Cloud Moderation APIs
Making API Requests
Call Quality Monitoring APIs
Usage Statistics APIs
Data Types
Appendix
Error Codes
控制台指南
应用管理
套餐包管理
用量统计
监控仪表盘
开发辅助
解决方案
实时合唱
常见问题
迁移指南
计费相关
功能相关
UserSig 相关
应对防火墙限制相关
缩减安装包体积相关
Andriod 与 iOS 相关
Web 端相关
Flutter 相关
Electron 相关
TRTCCalling Web 相关
音视频质量相关
其他问题
旧版文档
RTC RoomEngine SDK(旧)
集成 TUIRoom (Web)
集成 TUIRoom (Android)
集成 TUIRoom (iOS)
集成 TUIRoom (Flutter)
集成 TUIRoom (Electron)
TUIRoom API 查询
实现云端录制与回放(旧)
监控仪表盘计费(旧)
协议与策略
安全合规认证
安全白皮书
信息安全说明
服务等级协议
苹果隐私策略:PrivacyInfo.xcprivacy
TRTC 政策
隐私协议
数据处理和安全协议
词汇表

开启一场直播

PDF
聚焦模式
字号
最后更新时间: 2025-09-18 17:05:20
本文档主要介绍如何使用 RoomEngine SDK 开启一场直播。

前提条件

在使用 RoomEngine SDK 前,您需要先登录 SDK,以便后续功能正常使用。

开播准备

为确保直播效果达到预期,建议您在正式开播前完成以下准备工作:首先打开本地摄像头预览,检查画面构图是否合理,确保镜头角度适宜;接着打开麦克风采集,调整合适的拾音距离。全部做好准备之后,正式开始直播。

打开摄像头预览

1. 请您先创建本地摄像头视频预览控件,将其添加到界面中,并完成布局设置,然后调用 setLocalVideoView 设置好本地视频预览控件。
2. 然后,请您调用 openLocalCamera 接口开启摄像头预览,该接口需要传入 isFrontquality 两个参数。
isFront 选择前后摄像头,是一个布尔值,true 为打开前置摄像头,false 为打开后置摄像头。
quality 视频质量。该参数是 TUIVideoQuality 类型的枚举,建议您选择 quality720P 或者 quality1080P
下面以打开前置摄像头、视频质量为 1080P为例,打开本地摄像头预览。
Swift
Java
Web
import RTCRoomEngine

// 第一步:设置本地视频预览控件
let videoView = UIView()
// ...将 videoView 添加到您的视图上并对其进行布局
TUIRoomEngine.sharedInstance().setLocalVideoView(view: videoView)

// 第二步:打开前置摄像头预览
let isFrontCamera = true
let videoQuality: TUIVideoQuality = .quality1080P
TUIRoomEngine.sharedInstance().openLocalCamera(isFront: isFrontCamera, quality: videoQuality) {
// 打开前置摄像头成功
} onError: { code, message in
// 打开前置摄像头失败
}
// 第一步:设置本地视频预览控件
TUIVideoView videoView = new TUIVideoView(context);
// ...将 videoView 添加到您的视图上并对其进行布局
TUIRoomEngine.sharedInstance().setLocalVideoView(videoView);

// 第二步:打开前置摄像头预览
boolean isFrontCamera = true;
TUIRoomDefine.VideoQuality videoQuality = TUIRoomDefine.VideoQuality.Q_1080P;
TUIRoomEngine.sharedInstance().openLocalCamera(isFrontCamera, videoQuality, new TUIRoomDefine.ActionCallback() {
@Override
public void onSuccess() {
// 打开前置摄像头成功
}
@Override
public void onError(TUICommonDefine.Error error, String message) {
// 打开前置摄像头失败
}
});
TUIRoomEngine.once('ready', () => {
const roomEngine = TUIRoomEngine.getInstance();
await roomEngine.setLocalVideoView({
streamType: TUIVideoStreamType.kCameraStream,
view: 'preview-camera', // view 为播放本地用户流的 div 元素的 id
});
await roomEngine.updateVideoQuality({ quality: TUIVideoQuality.kVideoQuality_1080p });
await roomEngine.openLocalCamera();
});

打开麦克风采集

请您调用 openLocalMicrophone 接口打开麦克风采集,该接口需要传入音频质量参数 quality 。该参数是TUIAudioQuality 类型的枚举值,建议您选择 default 模式。下面以音频质量为 default为例,打开本地麦克风采集。
Swift
Java
Web
import RTCRoomEngine

// 打开本地麦克风
let audioQuality: TUIAudioQuality = .default
TUIRoomEngine.sharedInstance().openLocalMicrophone(audioQuality) {
// 打开麦克风成功
} onError: { code, message in
// 打开麦克风失败
}
// 打开本地麦克风
TUIRoomDefine.AudioQuality audioQuality = TUIRoomDefine.AudioQuality.DEFAULT;
TUIRoomEngine.sharedInstance().openLocalMicrophone(audioQuality, new TUIRoomDefine.ActionCallback() {
@Override
public void onSuccess() {
// 打开麦克风成功
}
@Override
public void onError(TUICommonDefine.Error error, String message) {
// 打开麦克风失败
}
});
TUIRoomEngine.once('ready', () => {
const roomEngine = TUIRoomEngine.getInstance();
await roomEngine.updateAudioQuality({ quality: TUIAudioQuality.kAudioProfileDefault });
await roomEngine.openLocalMicrophone();
});

开启 unlimitedRoom 参数

视频直播场景中,我们强烈建议您开启 unlimitedRoom参数,视频预览、秒开、混流多模板等直播高级功能,均需在开启该参数后才能使用。
Swift
Java
Web
var jsonObject = [String: Any]()
jsonObject["api"] = "enableUnlimitedRoom"
var params = [String: Any]()
params["enable"] = true
jsonObject["params"] = params
if let jsonData = try? JSONSerialization.data(withJSONObject: jsonObject, options: []),
let jsonString = String(data: jsonData, encoding: .utf8) {
TUIRoomEngine.callExperimentalAPI(jsonStr: jsonString)
}
JSONObject jsonObject = new JSONObject();
JSONObject params = new JSONObject();
try {
jsonObject.put("api", "enableUnlimitedRoom");
params.put("enable", true);
jsonObject.put("params", params);
TUIRoomEngine.sharedInstance().callExperimentalAPI(jsonObject.toString());
} catch (JSONException e) {
}
await TUIRoomEngine.callExperimentalAPI(JSON.stringify({
api: 'enableUnlimitedRoom',
params: {
enable: true,
},
}));
注意:
通过上述示例代码开启 unlimitedRoom 参数后,您还需开通 TUILiveKit 服务才能生效。请参考 开通指引 完成 TUILiveKit 服务开通。

创建直播间

在开播前您需要填写关键参数 TUILiveInfo,接下来进行详细介绍:

参数:TUILiveInfo

TUILiveInfo 由很多的字段构成,但通常您只需要关心如下几个字段的填写:
参数名称
字段含义
补充说明
数据类型
填写示例
roomId
房间 ID
只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符。
该字段为创建房间时必填参数,最大支持48个字节。
字符串
"live_100001"
name
房间名称
字符串类型的房间名称。(未填写时和 roomId 一致)
字符串
"live room"
isSeatEnabled
是否开启麦位控制
布尔类型的麦位控制使能标志符。
布尔值
true
seatMode
上麦模式
该字段只有开启麦位控制后生效。
分为 freeToTake 和 applyToTake 。freeToTake 模式下台下观众可以自由上麦,无需申请。applyToTake 模式下台下观众上麦需要房主或同意后才能上麦。
枚举值

TUISeatMode
.applyToTake
maxSeatCount
最大麦位数
数字类型的最大麦位数,这里指最多 maxSeatCount 个人同时在麦上。
最大麦位数和购买的套餐包连麦人数上限一致。
数字
10
isPublicVisible
直播间是否公开
设置为 true 后可以在房间列表中显示
布尔值
true
keepOwnerOnSeat
房主开播后是否自动上麦
如果您是视频直播场景, 强烈建议您将 keepOwnerOnSeat 设置为 true,否则您还需要先 takeSeat 才能正常开播。
布尔值
true
准备好房间信息参数后,就可以调用 TUILiveListManager 插件的 startLive 接口开始直播了。
Swift
Java
Web
import RTCRoomEngine

let liveInfo = TUILiveInfo()
liveInfo.roomId = "video_100001" // 请替换成您自己的房间ID
liveInfo.name = "denny`s room" // 请替换成您自己的房间名称
liveInfo.seatMode = .applyToTake // 通常视频直播场景下连麦都采用申请上麦模式,若您的业务中观众无需申请才能上麦时,此处可改写为freeToTake
liveInfo.maxSeatCount = 10 // 请替换成您购买的 Live 套餐包的最大麦位数
liveInfo.isSeatEnabled = true // 如果您不需要麦位控制,可以将 isSeatEnabled 置为false
liveInfo.isPublicVisible = true // 控制直播间是否公开,建议您设置为 true
liveInfo.keepOwnerOnSeat = true // 如果您是视频直播场景,强烈建议您设置为 true,否则您还需要先 takeSeat 才能正常开播

guard let liveListManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .liveListManager) as? TUILiveListManager else {
return
}
liveListManager.startLive(liveInfo: liveInfo, onSuccess: { liveInfo in
// 开播成功
}, onError: { code, message in
// 开播失败
})
TUILiveListManager.LiveInfo liveInfo = new TUILiveListManager.LiveInfo();
liveInfo.roomId = "video_100001"; // 请替换成您自己的房间ID
liveInfo.name = "denny`s room"; // 请替换成您自己的房间名称
liveInfo.seatMode = TUIRoomDefine.SeatMode.APPLY_TO_TAKE; // 通常视频直播场景下连麦都采用申请上麦模式,若您的业务中观众无需申请才能上麦时,此处可改写为freeToTake
liveInfo.maxSeatCount = 10; // 请替换成您购买的 Live 套餐包的最大麦位数
liveInfo.isSeatEnabled = true; // 如果您不需要麦位控制,可以将 isSeatEnabled 置为false
liveInfo.isPublicVisible = true; // 控制直播间是否公开,建议您设置为 true
liveInfo.keepOwnerOnSeat = true; // 如果您是视频直播场景,强烈建议您设置为 true,否则您还需要先 takeSeat 才能正常开播

TUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);
liveListManager.startLive(liveInfo, new TUILiveListManager.LiveInfoCallback() {
@Override
public void onSuccess(TUILiveListManager.LiveInfo liveInfo) {
// 开播成功
}

@Override
public void onError(TUICommonDefine.Error error, String message) {
// 开播失败
}
});
TUIRoomEngine.once('ready', () => {
const liveInfo = {
roomId: 'live_100001',
roomType: TUIRoomType.kLivingRoom,
name: 'live room',
isSeatEnabled: true,
seatMode: TUISeatMode.kApplyToTake,
maxSeatCount: 10,
keepOwnerOnSeat: true,
};

const roomEngine = TUIRoomEngine.getInstance();
const liveListManager = roomEngine.getLiveListManager();
const resultLiveInfo = await liveListManager.startLive(liveInfo);
console.log('直播开始成功,CDN流地址:', resultLiveInfo.cdnStreamUrl);
});

结束直播

若您想要结束直播,请您调用 TUILiveListManager 插件的 stopLive 接口来结束直播。
Swift
Java
Web
import RTCRoomEngine

guard let liveListManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .liveListManager) as? TUILiveListManager else {
return
}
liveListManager.stopLive { TUILiveStatisticsData in
// 关播成功
} onError: { code, message in
// 关播失败
}
TUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);
liveListManager.stopLive(new TUILiveListManager.StopLiveCallback() {
@Override
public void onSuccess(TUILiveListManager.LiveStatisticsData statisticData) {
// 关播成功
}

@Override
public void onError(TUICommonDefine.Error error, String message) {
// 关播失败
}
});
TUIRoomEngine.once('ready', () => {
const roomEngine = TUIRoomEngine.getInstance();
const liveListManager = roomEngine.getLiveListManager();
const statistics = await liveListManager.stopLive();
console.log('直播结束,统计数据:', {
观众人数: statistics.totalViewers,
礼物总数: statistics.totalGiftsSent,
点赞总数: statistics.totalLikesReceived
});
});


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈