尽管我找到了这么多允许程序员使用 Artnet/ArtnetDMX 协议的库,但我还没有找到正确的结构来在代码中发送 Artnet(到套接字)。
给出了结构,但是我只是不知道应该以什么顺序发送字节。我是一个接一个地向宇宙发送一个字节,还是需要发送一个包含所有值的字节数组?
有没有人有通过 UDP 发送 Artnet 的经验?
这是维基百科上给出的结构:http: //i.stack.imgur.com/wUjzd.png
尽管我找到了这么多允许程序员使用 Artnet/ArtnetDMX 协议的库,但我还没有找到正确的结构来在代码中发送 Artnet(到套接字)。
给出了结构,但是我只是不知道应该以什么顺序发送字节。我是一个接一个地向宇宙发送一个字节,还是需要发送一个包含所有值的字节数组?
有没有人有通过 UDP 发送 Artnet 的经验?
这是维基百科上给出的结构:http: //i.stack.imgur.com/wUjzd.png
我将以下结构用于 Art-Net v2
typedef struct {
char ID[8]; //"Art-Net"
UInt16 OpCode; // See Doc. Table 1 - OpCodes eg. 0x5000 OpOutput / OpDmx
UInt16 version; // 0x0e00 (aka 14)
UInt8 seq; // monotonic counter
UInt8 physical; // 0x00
UInt8 subUni; // low universe (0-255)
UInt8 net; // high universe (not used)
UInt16 length; // data length (2 - 512)
uint8_t data[512]; // universe data
} ArtnetDmx;
如果你想编写一个 Art-Net 应用程序,你真的应该阅读位于Artistic License上的文档。
我会遵循版本 2 (14)规范,因为版本 3 在野外非常罕见。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Artnet
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string id;
public short opCode;
public byte protocolHi;
public byte protocolLo;
public byte sequence;
public byte physical;
public short universe;
public short length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
public byte[] data;
}