本文档主要介绍如何使用
RoomEngine
SDK 开启一场直播。前提条件
开播准备
为确保直播效果达到预期,建议您在正式开播前完成以下准备工作:首先打开本地摄像头预览,检查画面构图是否合理,确保镜头角度适宜;接着打开麦克风采集,调整合适的拾音距离。全部做好准备之后,正式开始直播。
打开摄像头预览
1. 首先,请您创建本地摄像头视频预览控件,将其添加到界面中,并完成布局设置,然后调用
setLocalVideoView
设置好本地视频预览控件。2. 然后,请您调用
openLocalCamera
接口开启摄像头预览,该接口需要传入 isFront
和 quality
两个参数。isFront
选择前后摄像头,是一个布尔值,true 为打开前置摄像头,false 为打开后置摄像头。quality
视频质量。该参数是 TUIVideoQuality
类型的枚举,建议您选择 quality720P 或者 quality1080P 。下面以打开前置摄像头、视频质量为
1080P
为例,打开本地摄像头预览。import RTCRoomEngine// 第一步:设置本地视频预览控件let videoView = UIView()// ...将 videoView 添加到您的视图上并对其进行布局TUIRoomEngine.sharedInstance().setLocalVideoView(view: videoView)// 第二步:打开前置摄像头预览let isFrontCamera = truelet videoQuality: TUIVideoQuality = .quality1080PTUIRoomEngine.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() {@Overridepublic void onSuccess() {// 打开前置摄像头成功}@Overridepublic void onError(TUICommonDefine.Error error, String message) {// 打开前置摄像头失败}});
说明:
打开麦克风采集
请您调用
openLocalMicrophone
接口打开麦克风采集,该接口需要传入音频质量参数 quality
。该参数是TUIAudioQuality
类型的枚举值,建议您选择 default 模式。下面以音频质量为 default
为例,打开本地麦克风采集。import RTCRoomEngine// 打开本地麦克风let audioQuality: TUIAudioQuality = .defaultTUIRoomEngine.sharedInstance().openLocalMicrophone(audioQuality) {// 打开麦克风成功} onError: { code, message in// 打开麦克风失败}
// 打开本地麦克风TUIRoomDefine.AudioQuality audioQuality = TUIRoomDefine.AudioQuality.DEFAULT
;TUIRoomEngine.sharedInstance().openLocalMicrophone(audioQuality, new TUIRoomDefine.ActionCallback() {@Overridepublic void onSuccess() {// 打开麦克风成功}@Overridepublic void onError(TUICommonDefine.Error error, String message) {// 打开麦克风失败}});
说明:
开启 unlimitedRoom 参数
视频直播场景中,我们强烈建议您开启
unlimitedRoom
参数,视频预览、秒开、混流多模板等直播高级功能,均需在开启该参数后才能使用。var jsonObject = [String: Any]()jsonObject["api"] = "enableUnlimitedRoom"var params = [String: Any]()params["enable"] = truejsonObject["params"] = paramsif 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) {}
注意:
创建直播间
在开播前,您需要填写房间信息参数
TUILiveInfo
,该结构体包含多个字段,但通常只需关注以下几个关键字段的填写。参数名称 | 字段含义 | 补充说明 | 数据类型 | 填写示例 |
roomId | 房间 ID | 只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符。 该字段为创建房间时必填参数,最大支持48个字节。 | 字符串 | "live_100001" |
name | 房间名称 | 字符串类型的房间名称。(未填写时和 roomId 一致) | 字符串 | "denny's room" |
isSeatEnabled | 是否开启麦位控制 | 布尔类型的麦位控制使能标志符。 | 布尔值 | true |
seatMode | 上麦模式 | 该字段只有开启麦位控制后生效。 分为“自由上麦模式(freeToTake)”和“申请上麦模式(applyToTake)”。自由上麦模式下台下观众可以自由上麦,无需申请。申请上麦模式下台下观众上麦需要房主的同意后才能上麦。 | 枚举值 | .applyToTake |
maxSeatCount | 最大麦位数 | 数字类型的最大麦位数,这里指最多 maxSeatCount 个人同时在麦上。 | 数字 | 10 |
isPublicVisible | 直播间是否公开 | 布尔值 | true | |
keepOwnerOnSeat | 房主开播后是否自动上麦 | 如果您是视频直播场景, 强烈建议您将 keepOwnerOnSeat 设置为 true,否则您还需要先 takeSeat 才能正常开播。 | 布尔值 | true |
准备好房间信息参数后,就可以调用
TUILiveListManager
插件的 startLive
接口开始直播了。import RTCRoomEnginelet liveInfo = TUILiveInfo()liveInfo.roomId = "video_100001" // 请替换成您自己的房间IDliveInfo.name = "denny`s room" // 请替换成您自己的房间名称liveInfo.seatMode = .applyToTake // 通常视频直播场景下连麦都采用申请上麦模式,若您的业务中观众无需申请才能上麦时,此处可改写为freeToTakeliveInfo.maxSeatCount = 10 // 请替换成您购买的 Live 套餐包的最大麦位数liveInfo.isSeatEnabled = true // 如果您不需要麦位控制,可以将 isSeatEnabled 置为falseliveInfo.isPublicVisible = true // 控制直播间是否公开,建议您设置为 trueliveInfo.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"; // 请替换成您自己的房间IDliveInfo.name = "denny`s room"; // 请替换成您自己的房间名称liveInfo.seatMode = TUIRoomDefine.SeatMode.APPLY_TO_TAKE; // 通常视频直播场景下连麦都采用申请上麦模式,若您的业务中观众无需申请才能上麦时,此处可改写为freeToTakeliveInfo.maxSeatCount = 10; // 请替换成您购买的 Live 套餐包的最大麦位数liveInfo.isSeatEnabled = true; // 如果您不需要麦位控制,可以将 isSeatEnabled 置为falseliveInfo.isPublicVisible = true; // 控制直播间是否公开,建议您设置为 trueliveInfo.keepOwnerOnSeat = true; // 如果您是视频直播场景,强烈建议您设置为 true,否则您还需要先 takeSeat 才能正常开播TUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);liveListManager.startLive(liveInfo, new TUILiveListManager.LiveInfoCallback() {@Overridepublic void onSuccess(TUILiveListManager.LiveInfo liveInfo) {// 开播成功}@Overridepublic void onError(TUICommonDefine.Error error, String message) {// 开播失败}});
结束直播
若您想要结束直播,请您调用
TUILiveListManager
插件的 stopLive
接口来结束直播。import RTCRoomEngineguard 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() {@Overridepublic void onSuccess(TUILiveListManager.LiveStatisticsData statisticData) {// 关播成功}@Overridepublic void onError(TUICommonDefine.Error error, String message) {// 关播失败}});