注意:集成提示:
注意:这篇档介绍基于 UI 组件 的观众观看方式(含完整交互 UI)。若你需通过 Core SDK 自行搭建观众端界面,请参考 观众观看 (Core SDK)。
一、功能概览
·直播观看:清晰、流畅观看主播实时直播画面。
·互动连麦:申请连麦,与主播进行音视频互动。
·直播信息:查看直播间标题、简介,及在线观众列表等信息。
·直播互动:送礼物(有动画特效,主播接收提示)、点赞(有动画及实时统计)、发弹幕互动。
| 直播观看 | 互动连麦 | 直播信息 | 直播互动 |
| | | | |
二、步骤1:开通服务
参考 开通服务 文档开通「体验版」或「大规模直播版」套餐。
三、步骤2:代码集成
参考 准备工作 接入 TUILiveKit。
四、步骤3:添加观众拉流页面
在你的观众视图控制器中 YourAudienceViewController 初始化添加 AudienceView 观众拉流视图:
Swiftimport UIKitimport SnapKitimport TUILiveKit// YourAudienceViewController 代表你观众观看页的视图控制器class YourAudienceViewController: UIViewController { // 1. 声明 audienceView 作为成员变量 private let audienceView: AudienceView // 2. 新增便利构造函数: // – roomId: 直播房间id public 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 in make.edges.equalToSuperview() } }}
五、步骤4:事件回调与数据源定制
除了 UI 样式定制外,AudienceView 还提供了以下三个可选扩展点,帮助你接入自定义的直播列表数据源、监听观众页生命周期事件、以及处理屏幕旋转:
| 扩展点 | 类型 | 说明 |
| delegate | AudienceViewDelegate | 监听观众页内的核心事件,包括直播视图的创建/展示/隐藏、点击悬浮窗、直播结束等回调。 |
| dataSource | AudienceViewDataSource | 自定义直播列表的拉取逻辑。若不设置,AudienceView 默认从 TUILiveKit 内置的直播列表拉取数据;设置后,观众滑动切换直播间时将改为调用你自己的直播间列表接口。 |
| rotateScreenDelegate | RotateScreenDelegate | 监听观众页横竖屏切换事件,用于同步你业务侧的 UI 布局。 |
import UIKitimport SnapKitimport TUILiveKitimport AtomicXCoreclass YourAudienceViewController: UIViewController { private let audienceView: AudienceView public init(roomId: String) { self.audienceView = AudienceView(roomId: roomId) super.init(nibName: nil, bundle: nil) // 设置回调与数据源 audienceView.delegate = self audienceView.dataSource = self audienceView.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 in make.edges.equalToSuperview() } }}// MARK: – AudienceViewDelegateextension YourAudienceViewController: AudienceViewDelegate { // 创建了某个直播间对应的播放视图 liveView 时回调,可在此处叠加自定义 UI func 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 = self view.addSubview(endView) endView.snp.makeConstraints { make in make.edges.equalToSuperview() } }}// MARK: – RotateScreenDelegateextension YourAudienceViewController: RotateScreenDelegate { // isPortrait: true 表示当前为竖屏,false 表示当前为横屏 func rotateScreen(isPortrait: Bool) { }}
六、步骤5:导航路由到观众拉流页面
通常在 直播列表 或者 点击主播开播推送通知 时,你需要导航跳转到观众观看页,可参考如下代码示例:
Swift// 1. 实例化你的观众观看视图控制器let audienceVC = YourAudienceViewController(roomId: "你的直播房间 id")audienceVC.modalPresentationStyle = .fullScreen// 2. 跳转到你的观众观看视图控制器present(audienceVC, animated: false)
七、自定义观众观看页界面
·参考 观众核心页面 进行观众界面定制,在 AudienceView 中修改 UI 样式,添加你的业务组件。
·参考 调整视频直播挂件 进行视频位挂件定制,在 AudienceView 中修改视频位上的名称、头像挂件等 UI。
八、文案定制
TUILiveKit 使用更为方便的 Apple Strings Catalog 工具来管理 UI 所需的文案显示,你可以很直观的通过 Xcode 视图化管理工具修改需要调整的文案:
注意:说明:
注意:Apple Strings Catalog (.xcstrings) 是在 Xcode 15 中引入的本地化格式。它增强了开发者管理本地化字符串的方式,支持处理复数、设备特定变体等的结构化格式。这种格式正成为管理 iOS 和 macOS 应用程序本地化的推荐方法。
九、图标定制
TUILiveKit 使用 TUILiveKit.xcassets 管理 UI 所需的图片资源,你可以借助 Xcode 图形化工具快速修改自定义界面所需的图标。
十、下一步
恭喜你,现在你已经成功集成了观众观看。接下来,你可以实现主播开播、直播列表等功能,可参考下表:
| 功能 | 描述 | 集成指引 |
| 主播开播 | 主播开播全流程功能,包括开播前的准备和开播后的各种互动 | 主播开播 |
| 直播列表 | 展示直播列表界面和功能,包含直播列表,房间信息展示功能 | 直播列表 |
| 礼物系统 | 实现自定义礼物素材配置、计费系统对接、PK 场景互动等功能 | 礼物系统 |
十一、观众选择视频连麦后,视频画面显示黑屏?
请前往手机设置 > App > 相机,检查摄像头权限是否开启,可参考下图:
十二、观众发送弹幕时,直播间内其他观众看不到弹幕内容?
·原因1:先检查网络连接,确保观众设备网络正常。
·原因2:该观众被主播禁言,无法发送弹幕。
·原因3:观众的弹幕内容涉及关键词屏蔽,请确认观众发送的弹幕内容是否符合直播间规则。