enterPictureInPicture(container, options?)popOutToWindow(container, options?)closePopOutWindow(container)ChannelEventType.TRACK_PIP_ENTER / TRACK_PIP_EXITChannelEventType.TRACK_POPOUT_OPEN / TRACK_POPOUT_CLOSE
场景一:双屏布局
典型需求:- 显示器 A 展示远端共享桌面
- 显示器 B 展示本地摄像头或远端人物视频
- 主页面仍使用
addPlayView(container)维持视频卡片结构 - 用户点击“弹出窗口”后,调用
popOutToWindow - 将浏览器弹出的新窗口拖到第二块显示器
hideOriginView默认为true。对于独立窗口模式,通常建议保留默认值,避免主页面和弹出窗口同时渲染同一路视频。
场景二:共享桌面时保留摄像头浮窗
典型需求:- 用户发起桌面共享
- 浏览器主窗口可能被最小化或被其他应用遮挡
- 仍希望右上角保留自己的摄像头小窗,便于确认出镜状态
- 使用
LocalScreenTrack负责共享桌面 - 使用
LocalCameraTrack.enterPictureInPicture(...)将摄像头放入画中画
如果当前浏览器支持Document PiP,SDK 会优先使用它;否则会降级到传统video PiP。传统video PiP依赖原始video元素,因此不会隐藏原始视图。
用频道事件同步 UI 状态
PiP / 弹窗通常需要同步按钮文字、角标状态或浮层提示,建议统一使用频道事件而不是自己维护分散状态。共享结束时的清理建议
如果用户点击了浏览器原生“停止共享”,SDK 会触发TRACK_ENDED。此时至少应清理共享轨道本身:
对于同一个track,removePlayView(container)和removeAllPlayViews()会自动清理该轨道自身关联的画中画 / 弹出窗口状态,因此不需要再额外调用一次该轨道的exitPictureInPicture或closePopOutWindow。 如果你的产品希望“共享结束时,连摄像头浮窗也一起关闭”,那属于业务层联动策略,可以再额外关闭localCameraTrack的画中画状态;但这不是 SDK 资源清理所必需的步骤。
实践建议
画中画更适合“随时查看”的小尺寸视频,如本地摄像头、自我预览弹出窗口更适合双屏协作、大尺寸展示,如远端共享桌面或演讲人视频- 若 UI 需要自动恢复按钮状态,优先监听
TRACK_PIP_*和TRACK_POPOUT_*事件