c# - 如何在 DMX Controller 中预缓冲 ArtNet3 数据包?

标签 c# .net udp wireshark dmx512

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

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

我认为问题在于 OpCode 未被识别。当我使用 Wireshark 观察流量时,ArtDmx 数据包的 OpCode 被识别为“ArtDmx (0x5000)”。另一方面,ArtSync 数据包显示为“未知 (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 数据包将被缓冲 [...]”,在引用多个 Controller 时在语法上是正确的,当复数化“数据包”时,但在引用一个 Controller 时不正确。我使用的 ArtNet3 兼容 Controller 只会在我发送 ArtSync 数据包后渲染最后发送的 ArtDmx 数据包。

关于c# - 如何在 DMX Controller 中预缓冲 ArtNet3 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287426/

相关文章:

c# - asp.net core dbcontext 在计时器结束时被释放

c# - 如何为 Twitter 更新编码变音符号?

c# - Socket.ConnectAsync收到400错误请求,而Socket.Connect获得200正常

c# - 读取文件中的第一行和最后一行

c++ - UDP 服务器停止接收数据

c++ - UDP套接字端口分配失败

sockets - 为什么绑定(bind)返回相同的临时端口?

c# - STM.NET 与 Clojure STM

C# - : String. Contains() 或 Regex.isMatch() 哪个更快?

c# - 在 NHibernate 中审核多对多关系