TUILiveKit 的观众观看页为用户提供了丰富且便捷的直播观看与互动功能,能快速集成到您的应用中,满足观众多样化的需求。
集成提示:
功能概览
直播观看:清晰、流畅观看主播实时直播画面。
互动连麦:申请连麦,与主播进行音视频互动。
直播信息:查看直播间标题、简介,及在线观众列表等信息。
直播互动:送礼物(有动画特效,主播接收提示)、点赞(有动画及实时统计)、发弹幕互动。
直播观看 | 互动连麦 | 直播信息 | 直播互动 |
![]() |
![]() | ![]() | ![]() |
快速接入
步骤1:开通服务
步骤2:代码集成
步骤3:添加观众拉流页面
在您的观众视图控制器中
YourAudienceViewController 初始化添加 AudienceView 观众拉流视图:import UIKitimport SnapKitimport TUILiveKit// YourAudienceViewController 代表您观众观看页的视图控制器class YourAudienceViewController: UIViewController {// 1. 声明 audienceView 作为成员变量private let audienceView: AudienceView// 2. 新增便利构造函数:// - roomId: 直播房间idpublic init(roomId: String) {// 3. 初始化 AudienceView 组件self.audienceView = AudienceView(roomId: roomId)super.init(nibName: nil, bundle: nil)}@available(*, unavailable)required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}public override func viewDidLoad() {super.viewDidLoad()// 4. 将 audienceView 添加到视图上view.addSubview(audienceView)audienceView.snp.makeConstraints { make inmake.edges.equalToSuperview()}}}
步骤4:事件回调与数据源定制
除了 UI 样式定制外,
AudienceView 还提供了以下三个可选扩展点,帮助您接入自定义的直播列表数据源、监听观众页生命周期事件、以及处理屏幕旋转:扩展点 | 类型 | 说明 |
delegate | AudienceViewDelegate | 监听观众页内的核心事件,包括直播视图的创建/展示/隐藏、点击悬浮窗、直播结束等回调。 |
dataSource | AudienceViewDataSource | 自定义直播列表的拉取逻辑。若不设置, AudienceView 默认从 TUILiveKit 内置的直播列表拉取数据;设置后,观众滑动切换直播间时将改为调用您自己的直播间列表接口。 |
rotateScreenDelegate | RotateScreenDelegate | 监听观众页横竖屏切换事件,用于同步您业务侧的 UI 布局。 |
import UIKitimport SnapKitimport TUILiveKitimport AtomicXCoreclass YourAudienceViewController: UIViewController {private let audienceView: AudienceViewpublic init(roomId: String) {self.audienceView = AudienceView(roomId: roomId)super.init(nibName: nil, bundle: nil)// 设置回调与数据源audienceView.delegate = selfaudienceView.dataSource = selfaudienceView.rotateScreenDelegate = self}@available(*, unavailable)required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}public override func viewDidLoad() {super.viewDidLoad()view.addSubview(audienceView)audienceView.snp.makeConstraints { make inmake.edges.equalToSuperview()}}}// MARK: - AudienceViewDelegateextension YourAudienceViewController: AudienceViewDelegate {// 创建了某个直播间对应的播放视图 liveView 时回调,可在此处叠加自定义 UIfunc audienceView(_ audienceView: AudienceView, onCreateLiveView liveView: AudienceLiveView, for liveInfo: LiveInfo) {}// 观众滑动切换到某个直播间,其播放视图 liveView 已展示到屏幕上func audienceView(_ audienceView: AudienceView, liveViewDidAppear liveView: AudienceLiveView, for liveInfo: LiveInfo) {}// 观众已滑离某个直播间,其播放视图 liveView 已从屏幕上移除func audienceView(_ audienceView: AudienceView, liveViewDidDisappear liveView: AudienceLiveView, for liveInfo: LiveInfo) {}// 用户点击了悬浮窗func onClickFloatWindow() {FloatWindow.shared.showFloatWindow(controller: self, provider: audienceView)}// 直播已结束(主播下播/房间被解散等)func onLiveEnded(roomId: String, ownerName: String, ownerAvatarUrl: String) {// 展示直播结束的结算页(含主播头像/昵称、"直播已结束"提示等)let endView = AudienceEndStatisticsView(roomId: roomId, avatarUrl: ownerAvatarUrl, userName: ownerName)endView.delegate = selfview.addSubview(endView)endView.snp.makeConstraints { make inmake.edges.equalToSuperview()}}}// MARK: - RotateScreenDelegateextension YourAudienceViewController: RotateScreenDelegate {// isPortrait: true 表示当前为竖屏,false 表示当前为横屏func rotateScreen(isPortrait: Bool) {}}
步骤5:导航路由到观众拉流页面
// 1. 实例化您的观众观看视图控制器let audienceVC =YourAudienceViewController(roomId: "您的直播房间 id")audienceVC.modalPresentationStyle = .fullScreen// 2. 跳转到您的观众观看视图控制器present(audienceVC, animated: false)
自定义您的界面布局
自定义观众观看页界面
参考 观众核心页面 进行观众界面定制,在
AudienceView 中修改 UI 样式,添加您的业务组件。参考 调整视频直播挂件 进行视频位挂件定制,在
AudienceView 中修改视频位上的名称、头像挂件等 UI。文案定制
说明:
Apple Strings Catalog (.xcstrings) 是在 Xcode 15 中引入的本地化格式。它增强了开发者管理本地化字符串的方式,支持处理复数、设备特定变体等的结构化格式。这种格式正成为管理 iOS 和 macOS 应用程序本地化的推荐方法。

图标定制
TUILiveKit 使用
TUILiveKit.xcassets 管理 UI 所需的图片资源,您可以借助 Xcode 图形化工具快速修改自定义界面所需的图标。
下一步
恭喜您,现在您已经成功集成了观众观看。接下来,您可以实现主播开播、直播列表等功能,可参考下表:
常见问题
观众选择视频连麦后,视频画面显示黑屏?
请前往手机设置 > App > 相机,检查摄像头权限是否开启,可参考下图:

观众发送弹幕时,直播间内其他观众看不到弹幕内容?
原因1:先检查网络连接,确保观众设备网络正常。
原因2:该观众被主播禁言,无法发送弹幕。
原因3:观众的弹幕内容涉及关键词屏蔽,请确认观众发送的弹幕内容是否符合直播间规则。



