真实项目 博物馆

本文写的是我们实际交付过的项目,技术细节未作修改;客户主体按行业与规模做了脱敏处理。

某区级博物馆感应遮罩展项:人来视频露出,人走画面复位

博物馆里有很多这样的屏:一块屏,一段片子,从开馆循环播到闭馆。观众路过时它在播,没人的时候它也在播。

这个项目做的事情是给这样一块屏加一层「反应」——人来了,画面上的遮罩碎裂飞散,露出底下的视频;人走了,碎片收拢复位,回到待机画面

为什么不直接改播放器

最省事的做法看起来是:给播放软件加个感应模块,检测到人就切片子。

没这么做,原因是这会把两件性质完全不同的事捆在一起。

视频循环播放是个要求极度稳定、跑一整天不能出事的活;而互动感应是个需要频繁调参、经常要换动画效果的活。把它们塞进同一个程序,意味着每次调一下碎裂动画的参数,都要重启那个负责稳定播放的进程;而互动逻辑一旦有 bug 崩了,整块屏就黑了。

所以做成了两个独立进程:

负责什么
播控软件只做底层视频循环播放(待机片 / 正片),不做任何感应与动画处理
感应遮罩透明置顶窗、粒子动画、输入感知,再通过 UDP 命令通道调用播放器

两者完全解耦。遮罩这一层挂了,底下的视频照常播,观众看到的只是「今天这块屏没有互动」,而不是一块黑屏。

关键在于:播放器一行代码都没改

联动走的是播控软件本来就有的 UDP 命令通道(默认端口 7600)。

这意味着遮罩程序不需要知道播放器内部是怎么实现的,也不需要播放器为它开任何特殊接口——发标准报文就行。

这一点的价值超出这个项目本身:它证明了这条 UDP 通道是真正对外开放的。任何能发 UDP 报文的东西——你自己写的脚本、现场的中控主机、第三方程序——都可以驱动这个播放器。我们自己用它做了个感应遮罩,别人也可以用它做别的。

用的播控软件是企服君播控 SoftPlayer,这套外挂式扩展本身是企服君互动遮罩 InteractiveMask

遮罩层怎么做的

用的是透明置顶窗:一个没有背景、始终浮在最上层的窗口,盖在视频播放窗之上。

这样做的好处是不占额外屏幕、不干扰底层播放。缺点是对窗口层级和透明合成有要求,得处理好焦点和穿透——不能让这层透明窗把观众的操作全吃掉。

动画是图片碎裂飞散与收拢复位:待机时遮罩是完整的一张图,触发后它裂成许多切片向外飞散,露出下面正在播的视频;人离开后切片再飞回来拼合。整套基于 Godot 4.6.2 + GDScript 实现,动画和粒子表现可以按展项主题重新调。

触发方式:目前是什么,不是什么

这一点必须说清楚。

目前支持的输入是:鼠标位置触发,以及 TUIO 协议输入(可以对接雷达、触摸框那类互动引擎设备)。

摄像头人体检测在规划中,尚未实现。 产品的目标形态是「摄像头看到有人靠近就触发」,但当前版本还没有做到这一步。现场如果需要真正的人体感应,走的是 TUIO 那条路——用雷达或红外设备去感知,再把信号送给遮罩程序。

这个展项适合放在哪

从现场效果看,它最适合的是观众会路过、但不一定会停下来的位置:序厅迎宾屏、走廊上的视频墙、主题展项的待机唤醒。

它解决的是一个很具体的问题:一块一直在播的屏,观众很容易当它是背景板直接走过去。加了这层反应之后,画面会因为你的到来而发生变化——这个变化本身就是一个「停一下」的理由。

状态说明

这套感应遮罩目前仍是 Beta:核心互动与播放器联动已经跑通并在现场用上了,但安装包脚本、开机自启、看门狗这些生产化配套还在完善,所以暂未开放公开下载。要在项目上用,可以直接联系我们聊现场条件。