本文档主要介绍如何使用
RoomEngine
SDK 观看一场直播。前提条件
拉取直播列表
您可以调用
TUILiveListManager
插件的 fetchLiveList
接口获取当前直播间的列表,然后选择预览或加入观看。该接口采用分页拉取的方式返回数据,需要传递以下两个参数:cursor:分页拉取游标,首次调用请传递空字符串,后续调用请使用前一次返回的
nextCursor
值。count:建议将每次分页请求的条数设置为20。
import RTCRoomEngineguard let liveListManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .liveListManager) as? TUILiveListManager else {return}let cursor = "" // 分页拉取游标,首次调用请传递空字符串,后续调用请使用前一次返回的nextCursor
let count = 20 // 推荐每次分页拉取 20 条记录liveListManager.fetchLiveList(cursor: cursor, count: count) { nextCursor, liveInfoList in// 拉取直播间列表成功// nextCursor:续拉游标// liveInfoList:直播间列表} onError: { code, message in// 拉取直播间列表失败}
String cursor = ""; // 分页拉取游标,首次调用请传递空字符串,后续调用请使用前一次返回的nextCursor,即
result.cursorint count = 20; // 推荐每次分页拉取 20 条记录TUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);liveListManager.fetchLiveList(cursor, count, new TUILiveListManager.LiveInfoListCallback() {@Overridepublic void onSuccess(TUILiveListManager.LiveInfoListResult result) {// 拉取直播间列表成功// result.cursor:续拉游标// result.liveInfoList:直播间列表}@Overridepublic void onError(TUICommonDefine.Error error, String message) {// 拉取直播间列表失败}});
预览直播间画面
在获取直播间列表后,您可以在加入前预览直播画面,选择感兴趣的直播间后再正式进入。
开始预览
要预览直播间画面,可以调用
TUILiveListManager
插件的 startPreloadVideoStream
接口,该接口需要传递以下 3 个参数:roomId:您可以直接从获取的直播间列表中找到直播间 roomId。
isMuteAudio:是否静音,预览直播间画面时,通常关闭音频播放,建议您设置为 true。
videoView: 请提前创建视频预览控件,并将其添加到界面中,同时完成布局设置。
import RTCRoomEngineguard let liveListManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .liveListManager) as? TUILiveListManager else {return}let roomId = "video_100001" // 请替换成您自己的房间 IDlet muteAudio = true // 预览直播间画面时,通常关闭音频播放,建议您设置为 truelet preloadVideoView = UIView()// ...将 preloadVideoView 添加到您的视图上并对其进行布局liveListManager.startPreloadVideoStream(roomId: roomId, isMuteAudio: muteAudio, view: preloadVideoView) { roomId in// 开始预览播放} onLoading: { roomId in} onError: { roomId, code, message in// 预览失败}
String roomId = "video_100001"; // 请替换成您自己的房间 IDboolean muteAudio = true; // 预览直播间画面时,通常关闭音频播放,建议您设置为 trueTUIVideoView preloadVideoView = new TUIVideoView(context);// ...将 preloadVideoView 添加到您的视图上并对其进行布局TUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);liveListManager.startPreloadVideoStream(roomId, muteAudio, preloadVideoView, new TUIRoomDefine.PlayCallback() {@Overridepublic void onPlaying(String roomId) {// 开始预览播放}@Overridepublic void onLoading(String roomId) {}@Overridepublic void onPlayError(String roomId, TUICommonDefine.Error error, String message) {// 预览失败}});
关闭预览
您可以调用
TUILiveListManager
插件的 stopPreloadVideoStream
并传入直播间 ID 来结束直播间画面预览。import RTCRoomEngineguard let liveListManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .liveListManager) as? TUILiveListManager else {return}let roomId = "video_100001" // 请替换成您自己的房间 IDliveListManager.stopPreloadVideoStream(roomId);
String roomId = "video_100001"; // 请替换成您自己的房间 IDTUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);liveListManager.stopPreloadVideoStream(roomId);
进入直播间
请调用
TUILiveListManager
插件的 joinLive
接口并传入直播间 ID 加入直播间。加入成功后,请调用 TUIRoomEngine
的 muteRemoteAudioStream
接口开启主播音频播放。import RTCRoomEnginelet roomId = "video_100001"guard let liveListManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .liveListManager) as? TUILiveListManager else {return}liveListManager.joinLive(roomId: roomId, onSuccess: { liveInfo in// 加入直播间成功let sdkAppId = "xxxx" // 请替换成您自己 App 的 sdkAppIDlet userId = "livekit_" + sdkAppId + "_feedback_" + roomId // 固定格式:"livekit_sdkAppId_feedback_roomId"TUIRoomEngine.sharedInstance().muteRemoteAudioStream(userId, isMute: false)}, onError: { code, message in// 加入直播间失败})
String roomId = "video_100001";TUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);liveListManager.joinLive(roomId , new TUILiveListManager.LiveInfoCallback() {@Overridepublic void onSuccess(TUILiveListManager.LiveInfo liveInfo) {// 加入直播间成功,String sdkAppId = "xxxx"; // 请替换成您自己 App 的 sdkAppIDString userId = "livekit_" + sdkAppId + "_feedback_" + roomId;// 固定格式:"livekit_sdkAppId_feedback_roomId"TUIRoomEngine.sharedInstance().muteRemoteAudioStream(userId, false);}@Overridepublic void onError(TUICommonDefine.Error error, String message) {// 加入直播间失败}});
注意:
如果您在预览直播间时已开启音频播放,加入直播间成功后无需再次调用
muteRemoteAudioStream
。调用
muteRemoteAudioStream
时,第一个参数 userId
的格式为 livekit_sdkAppId_feedback_roomId
,其中 sdkAppId
需替换为您当前应用的 SDK AppID,roomId
为当前直播间的房间 ID。离开直播间
您可以通过调用
TUILiveListManager
插件的 leaveLive
接口,传入直播间 ID 来离开直播间并结束观看。import RTCRoomEngineguard let liveListManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .liveListManager) as? TUILiveListManager else {return}liveListManager.leaveLive { TUILiveStatisticsData inprint("success")} onError: { code, message inprint("failure, code:\\(code), message:\\(message)")}
TUILiveListManager liveListManager = (TUILiveListManager)TUIRoomEngine.sharedInstance().getExtension(TUICommonDefine.ExtensionType.LIVE_LIST_MANAGER);liveListManager.leaveLive(new TUILiveListManager.StopLiveCallback() {@Overridepublic void onSuccess(TUILiveListManager.LiveStatisticsData statisticData) {Log.i("sdk", "success");}@Overridepublic void onError(TUICommonDefine.Error error, String message) {Log.i("sdk", "failure code:" + error + ",message:" + message);}});
注意:
如何实现滑动播放?
滑动播放是直播类 App 中备受欢迎的功能,能显著提升用户体验。滑动播放的前提条件有两个:
您已通过调用
TUILiveListManager
插件的 fetchLiveList
接口获取到当前活跃的直播间列表 liveInfoList
。您已按照前述步骤成功加入一个直播间。
如下图所示,典型的滑动播放流程可分为三个阶段:开始滑动、滑动中、滑动完成。实现滑动播放,您需要在 App 的界面层监听用户的滑动事件。下面以从当前播放的直播间 A 滑动切换到直播间 B 为例,详细介绍滑动播放的接入流程。

开始滑动
开始滑动时,直播间 A 的界面向上滑动开始移出可视区域,直播间 B 的界面向上滑动开始移入可视区域。在此阶段,请完成下面两步操作,加载直播间 B 的视频画面,提前开始预览。
从直播间列表
liveInfoList
里获取到下一个直播间 B 的 TUILiveInfo
房间信息;按照前述 “预览直播间画面” 里的步骤,调用
TUILiveListManager
插件的 startPreloadVideoStream
接口,传入直播间 B 的 roomId,加载预览直播间 B 的视频画面。滑动中
滑动过程中,直播间 B 的视频画面已开始播放预览。在此阶段,您需要在界面层继续完成滑动动画。
滑动完成
滑动完成时,直播间 A 的界面已经完全移出可视区域,请您执行以下两步操作,完全退出直播间 A;
按照 “结束预览直播间画面” 里的步骤, 调用
TUILiveListManager
插件的 stopPreloadVideoStream
接口,传入直播间 A 的 roomId,结束直播间 A 的预览;按照 “离开直播间” 里的步骤,调用
TUILiveListManager
插件的 leaveLive
接口,传入直播间 A 的 roomId,退出直播间 A;同时,直播间 B 的界面已经完全移入可视区域,请您按照 “加入直播间” 里的步骤,加入直播间 B ,并打开音频的播放。
调用
TUILiveListManager
插件的 joinLive
接口,传入直播间 B 的 roomId,加入直播间 B;调用
TUIRoomEngine
的 muteRemoteAudioStream
接口,开启主播音频播放。