如何在 DMX 控制器中预缓冲 ArtNet3 数据包?

How does one prebuffer ArtNet3 packets in a DMX controller?

我正在创建一个库,旨在通过本地网络将 UDP 数据包发送到一串 100 个兼容 ArtNet3 的 DMX 控制器。

我已成功发送和渲染 ArtDmx 数据包。现在我正在尝试预先缓冲 DMX 控制器中的数据以帮助解决网络延迟问题。文档说发送一个 ArtSync 数据包来告诉控制器渲染之前收到的 ArtDmx 数据包,这就是我已经实现的。我还在 ArtDmx 数据包之前发送一个 ArtSync 数据包,以告诉控制器缓冲数据而不是渲染它们。这些 ArtDmx 数据包的序列 属性 填充了从 1 开始的每个 universe/controller 增量值。

我认为问题在于操作码未被识别。当我使用 Wireshark 观察流量时,ArtDmx 数据包的 OpCode 被识别为 'ArtDmx (0x5000)'。另一方面,ArtSync 数据包显示为 'Unknown (0x5200)',即使该值与文档相符。有什么我想念的吗?这里是 documentation.

我认为我的 WireShark 版本根本不支持 ArtSync 操作代码,并且不可避免地无关紧要。可能是 WireShark 仅本地支持早期版本的 ArtNet,可能是 ArtNet 或 ArtNet 2,它们可能不支持该功能。 ArtNet3 专为大型网络显示而开发。

就缓冲而言,可能是我误解了 ArtNet 3 文档。

When a node receives an ArtSync packet it should transfer to synchronous operation. This means that received ArtDmx packets will be buffered and output when the next ArtSync is received.

哪里说“[...] 接收到的 ArtDmx 数据包将被缓冲 [...]”,在引用多个控制器时在语法上是正确的,在复数化 'packet' 时,但在引用时不正确一个控制器。我使用的 ArtNet3 兼容控制器只会在我发送 ArtSync 数据包后渲染最后发送的 ArtDmx 数据包。