Artnet数据包结构

时间:2013-05-06 09:44:42

标签: udp byte dmx512

即使我找到了很多允许程序员使用Artnet / ArtnetDMX协议的库,但我还没有找到正确的结构来发送代码中的Artnet(到套接字)。

给出了结构但是,我只是无法弄清楚应该以什么顺序发送字节。 我是逐个向Universe发送一个字节,还是需要发送包含所有值的字节数组?

没有人有通过UDP发送Artnet的经验吗?

这是维基百科上给出的结构:http://i.stack.imgur.com/wUjzd.png

2 个答案:

答案 0 :(得分:2)

我将以下结构用于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 Licence上的文档。

我会遵循版本2 (14)规范,因为版本3在野外非常罕见。

答案 1 :(得分:0)

[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;
}