一段时间以来,我一直在使用 Flash + Zinc为直播电视节目创建简单的交互式软件,主要用于问答节目、现场选举结果和其他无法预先准备视觉效果并需要对正在进行的情况做出反应的场景。然后,视频信号将从视频输出端口或 VGA 到视频转换器输出,并通过视频混合器进行亮度或色度键控。在此设置下,应用程序的控件将位于输出到视频的区域下方。
此设置的唯一问题是没有 Alpha 通道,并且使用亮度和色度键控非常有限。
为了解决这个问题,我开始使用Caspar CG。据我所知,该软件系统获取 SWF 并在 ActiveX Flash Player 中播放它,它能够从中提取颜色和 alpha 通道,并将它们发送到支持分离颜色和 alpha 通道的专业 DeckLink 卡。整个过程在视觉上运行得非常好,但由于 ActiveX 控件在播放期间不可见,因此我的 SWF 无法捕获鼠标或键盘事件。
我试图让 SWF 轮询本地 Web 服务器以获取输入,但它在 Adobe Flash 中测试时工作,但在 Caspar CG 服务器托管的 ActiveX 中播放时失败。从我读到的内容来看,这与 Flash Player 中嵌入的安全策略有关,对此我无能为力。
我最终让 SWF 以 100 毫秒的间隔轮询本地文件以获取新命令。同时,一个简单的控制应用程序(本地 XAMPP 服务器中的 JS + PHP - 只是因为我对 Web 开发非常熟悉)会将命令写入与按下的按钮相对应的文本文件中。
当文件由 Flash 或 PHP 打开时,这会导致一些问题,我通过让双方重试读/写直到他们成功来解决这个问题。
总而言之,设置有效,但我觉得它不能比这更优雅。一方面,我发现 SWF 无法写入本地文本文件以报告其状态,因此许多高级功能无法实现(即使是基本的 ui 内容,例如在某些情况下禁用控制器端的按钮)动画正在 SWF 上播放)。
我的问题甚至不清楚,但在这里:
- 本地播放的 SWF 是否可以写入光盘?
- 任何人都可以提出一种更好的方式来完成整个通信吗?