Jitsi Meet 新增多屏(Multi-screen)支持

Jitsi Meet 新增多屏(Multi-screen)支持

💡 原文中文,约2900字,阅读约需7分钟。
📝

内容提要

Jitsi Meet 新增多屏支持,可将同一会议渲染到多块显示器,分别显示发言人、屏幕共享或白板,无需重复入会。该功能通过弹窗加 React portal 实现,共享同一状态与媒体流,仅克隆轨道,并可通过 iframe API 命令和事件控制,也可在应用内发送内容。目前仅支持 Chromium,需弹窗和窗口管理权限,默认关闭,可配置启用。

🔎

延伸解读

多屏与重复入会的本质区别

传统会议室常开两个标签页参会,但第二个标签页会被视为独立参会者,出现在名单中,并单独订阅、解码音频流,还需手动静音,且窗口间无同步。多屏功能则不同:第二屏幕只是同一会议的渲染界面,共享一个桥接连接和一套媒体订阅,没有额外音频路径,其他参会者无感知。这减少了资源消耗和管理负担。

实现机制:React portal 与轨道克隆

多屏功能通过 window.open 打开弹窗,并利用 React portal 将组件树挂载到弹窗中,共享同一个 Redux store 和组件。样式方面,每个窗口需要独立的 Emotion 缓存,否则 portal 内容无样式。媒体方面,跨窗口挂载视频流需克隆轨道,并用弹窗的构造函数包装成 MediaStream。克隆成本低,不增加解码,且随组件卸载自动停止。

控制方式:API 与界面触发

多屏功能主要面向无鼠标的会议室设备,因此通过 iframe External API 控制,提供 setSecondScreen 命令和三个事件(secondScreenSourceChanged、secondScreenClosed、secondScreenError)。同时,应用内也提供触发入口:参会者右键菜单、屏幕共享和共享视频缩略图的悬停按钮。应用内触发和 API 命令派发同一动作,嵌入方可通过事件感知应用内活动。

使用限制与注意事项

多屏功能目前仅支持 Chromium 浏览器(如 Chrome、Edge),因为它依赖 Window Management API。需要弹窗和窗口管理两项权限,若缺少后者,窗口仍会打开但位置由浏览器决定。窗口管理授权提示需要用户手势,因此 API 命令需预先通过策略授权。功能默认关闭,需部署方配置启用。此外,参会者掉线时窗口会延迟几秒关闭,避免短暂重连导致屏幕关闭。

❓

Q&A

Jitsi Meet 的多屏功能是什么?

多屏功能允许一个 Jitsi Meet 会话同时渲染到多块显示器上,每块屏幕可以独立显示不同内容,如当前发言人、屏幕共享或白板,而无需重复加入会议。

多屏功能可以显示哪些内容?

第二屏幕可以显示舞台(跟随当前发言人)、所有参会者的平铺网格、屏幕共享、白板以及共享视频(如 YouTube 或直链)。

多屏功能是如何实现的?

通过 window.open 打开弹窗,并使用 React portal 将组件树挂载到弹窗中,共享同一个 redux store 和组件。媒体流通过克隆轨道并包装到弹窗的 MediaStream 中实现。

如何通过 iframe API 控制多屏?

使用 setSecondScreen 命令,指定窗口 id 和 source(如 { role: 'stage' } 或 { role: 'screenshare' }),并可指定屏幕编号。省略 source 则关闭窗口。事件包括 secondScreenSourceChanged、secondScreenClosed 和 secondScreenError。

多屏功能有哪些使用限制?

仅支持基于 Chromium 的浏览器(如 Chrome 和 Edge),需要弹窗和窗口管理权限,且窗口管理授权提示需要用户手势触发。默认关闭,需配置启用。

如何在会议中把内容发送到第二屏幕?

在参会者右键菜单中选择“在第二屏幕显示”,或点击屏幕共享/共享视频缩略图上的按钮。再次点击可收回。发送会优先填充空闲的外接显示器。

🏷️

标签

➡️

继续阅读