Float Window
功能介绍
悬浮窗功能允许主播和观众在不退出直播间的情况下,进入到小窗口模式,小窗口悬浮在屏幕上,您可以自由拖拽到合适的位置,悬浮窗内可以显示直播画面。在悬浮窗模式下,App 可以切换到别的场景或者退后台,点击悬浮窗还可以恢复到正常全屏直播界面。
使用说明
原理简介
悬浮窗的原理是,在 rootWindow 上添加视频直播的视图作为悬浮窗的内容。
快速接入
悬浮窗功能核心代码:
// 文件位置:iOS/TUILiveKit/Sources/Component/FloatWindowFloatWindow // 悬浮窗核心功能的实现目录├── FloatWindow.swift // 悬浮窗功能对外接口└── FloatView.swift // 悬浮窗View
悬浮窗数据源:
展示悬浮窗的 ViewController 需要实现如下数据源,以便悬浮窗可以拿到正确的视图数据。
protocol FloatWindowDataSource: {func getRoomId() -> String // 当前直播间的Idfunc getCoreView() -> LiveCoreView() // 悬浮窗上展示的视频Viewfunc relayoutCoreView() // 当从悬浮窗状态恢复到视图原ViewController时会触发该函数,在此重新设置视频View的布局}
使用场景及示例:
展示悬浮窗:
class ExampleViewController: UIViewController {override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {// 展示悬浮窗,当前ViewController需要实现FloatWindowDataSource// 在展示悬浮窗时,会退出当前ViewControllerFloatWindow.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
对象,以保证直播过程正常进行。