Float Window

功能介绍

悬浮窗功能允许主播和观众在不退出直播间的情况下,进入到小窗口模式,小窗口悬浮在屏幕上,您可以自由拖拽到合适的位置,悬浮窗内可以显示直播画面。在悬浮窗模式下,App 可以切换到别的场景或者退后台,点击悬浮窗还可以恢复到正常全屏直播界面。




使用说明

原理简介

悬浮窗的原理是,在 rootWindow 上添加视频直播的视图作为悬浮窗的内容。

快速接入

悬浮窗功能核心代码:
// 文件位置:iOS/TUILiveKit/Sources/Component/FloatWindow
FloatWindow // 悬浮窗核心功能的实现目录
├── FloatWindow.swift // 悬浮窗功能对外接口
└── FloatView.swift // 悬浮窗View
悬浮窗数据源:
展示悬浮窗的 ViewController 需要实现如下数据源,以便悬浮窗可以拿到正确的视图数据。
protocol FloatWindowDataSource: {
func getRoomId() -> String // 当前直播间的Id
func getCoreView() -> LiveCoreView() // 悬浮窗上展示的视频View
func relayoutCoreView() // 当从悬浮窗状态恢复到视图原ViewController时会触发该函数,在此重新设置视频View的布局
}

使用场景及示例:

展示悬浮窗:
class ExampleViewController: UIViewController {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// 展示悬浮窗,当前ViewController需要实现FloatWindowDataSource
// 在展示悬浮窗时,会退出当前ViewController
FloatWindow.shared.showFloatWindow(controller: self)
}
}
观众点击进入房间列表的某直播间:
if FloatWindow.shared.isShowingFloatWindow() {
if FloatWindow.shared.getCurrentRoomId() == liveInfo.roomInfo.roomId {
// 切回到悬浮窗所在的视频直播间
FloatWindow.shared.resumeLive(atViewController: self.navigationController ?? self)
return
} else {
// 切换到其他的视频直播间
FloatWindow.shared.releaseFloatWindow()
}
}
主播开播:
主播暂不支持悬浮窗功能,因此在开播前需要关闭已存在的悬浮窗。
if FloatWindow.shared.isShowingFloatWindow() {
FloatWindow.shared.releaseFloatWindow()
}

模式切换

直播场景里,模式切换过程中,您需要使用同一个 LiveCoreView 对象,用于在两种模式下展示直播内容,这样不但可以共享视图,还可以共享直播数据和状态。



如上图所示,正常模式是LiveViewController场景,悬浮窗模式是LiveFloatWindow场景,在模式切换过程中,可以使用同一个 LiveCoreView 对象,以保证直播过程正常进行。