Skip to main content

Overview

The E1.31 plugin implements the ANSI E1.31 (Streaming ACN) protocol for transmitting and receiving DMX512 data over Ethernet networks. E1.31 is a standardized protocol developed by ESTA (Entertainment Services and Technology Association) as an open alternative to Art-Net.
The plugin name as reported by QLC+ is “E1.31”

Capabilities

The E1.31 plugin supports:
  • Output - Send DMX data over network
  • Input - Receive DMX data from network sources
  • Infinite - Unlimited universes

Protocol Specifications

  • Protocol: ANSI E1.31 (Streaming ACN)
  • Port: 5568 (UDP, default)
  • Universe Range: 1-63999
  • Channels per Universe: 512
  • Multicast: Supported (239.255.x.x)
  • Unicast: Supported
#define E131_DEFAULT_PORT 5568

Network Interface Structure

The plugin creates a controller for each network interface:
typedef struct _eio
{
    QNetworkInterface iface;       // Network interface
    QNetworkAddressEntry address;  // IP address configuration  
    E131Controller* controller;    // Controller instance
} E131IO;

Configuration

Network Interface Detection

The plugin automatically detects all available network interfaces at startup:
#define SETTINGS_IFACE_WAIT_TIME "E131Plugin/ifacewait"

Custom Parameters

E1.31 supports extensive configuration through custom parameters:
#define E131_MULTICAST "multicast"         // Enable multicast mode
#define E131_MCASTIP "mcastIP"            // Multicast IP address
#define E131_MCASTFULLIP "mcastFullIP"    // Full multicast IP (no calculation)
#define E131_UCASTIP "ucastIP"            // Unicast IP address
#define E131_UCASTPORT "ucastPort"        // Unicast port
#define E131_UNIVERSE "universe"          // E1.31 universe number
#define E131_TRANSMITMODE "transmitMode"  // Full or Partial
#define E131_PRIORITY "priority"          // Packet priority (0-200)

Setting Parameters

void setParameter(quint32 universe, quint32 line,
                  Capability type, QString name, QVariant value);

Multicast vs Unicast

E1.31 supports both multicast and unicast transmission:

Multicast Mode

Automatically calculates multicast address from universe number:Formula: 239.255.{universe >> 8}.{universe & 0xFF}Examples:
  • Universe 1 → 239.255.0.1
  • Universe 256 → 239.255.1.0
  • Universe 512 → 239.255.2.0
Advantages:
  • Efficient for multiple receivers
  • Devices join specific multicast groups
  • Reduced network traffic
Configuration:
setParameter(universe, line, Output, "multicast", true);
setParameter(universe, line, Output, "universe", 1);

Universe Configuration

E1.31 universe structure:
typedef struct _uinfo
{
    bool inputMulticast;              // Input uses multicast
    QHostAddress inputMcastAddress;   // Input multicast address
    quint16 inputUcastPort;          // Input unicast port
    quint16 inputUniverse;           // E1.31 universe number for input
    QSharedPointer<QUdpSocket> inputSocket; // Input socket
    
    bool outputMulticast;            // Output uses multicast  
    QHostAddress outputMcastAddress; // Output multicast address
    QHostAddress outputUcastAddress; // Output unicast address
    quint16 outputUcastPort;        // Output unicast port
    quint16 outputUniverse;         // E1.31 universe number for output
    int outputTransmissionMode;     // Full or Partial
    int outputPriority;             // Priority (0-200, default 100)
    
    int type;                       // Input, Output, or both
} UniverseInfo;

Output Configuration

Opening an Output

bool openOutput(quint32 output, quint32 universe);

Transmission Modes

enum TransmissionMode { 
    Full,     // Always send full 512-channel universe
    Partial   // Send only up to highest non-zero channel
};

Full Mode

Sends all 512 channels every time.Best for: Maximum compatibility, devices requiring full universes

Partial Mode

Sends only channels up to the highest with data.Best for: Bandwidth optimization, fewer channels in use

Sending Data

void writeUniverse(quint32 universe, quint32 output,
                   const QByteArray& data, bool dataChanged);
The plugin:
  1. Retrieves the E1.31 controller for the output line
  2. Calls sendDmx() with universe and data
  3. Controller packetizes according to E1.31 specification
  4. Transmits via UDP (multicast or unicast)

Priority

E1.31 supports priority levels (0-200, default 100):
setParameter(universe, line, Output, "priority", 120);
Higher priority sources take precedence when multiple sources send to the same universe.
Priority is useful when you have backup systems or multiple controllers that might send to the same universe.

Input Configuration

Opening an Input

bool openInput(quint32 input, quint32 universe);

Multicast Input

For multicast input:
  1. Plugin joins the multicast group for the specified universe
  2. Listens on the multicast address
  3. Processes E1.31 packets matching the universe number
// Example: Listen for universe 1 on 239.255.0.1
setParameter(universe, line, Input, "multicast", true);
setParameter(universe, line, Input, "universe", 1);

Unicast Input

For unicast input:
  1. Plugin listens on specified port (default 5568)
  2. Accepts packets from any sender
  3. Filters by universe number
setParameter(universe, line, Input, "multicast", false);
setParameter(universe, line, Input, "ucastPort", 5568);
setParameter(universe, line, Input, "universe", 1);

Receiving Data

When E1.31 packets arrive:
  1. UDP socket receives the datagram
  2. Controller validates E1.31 packet structure
  3. Extracts universe number and DMX data
  4. Emits valueChanged() for changed channels
signal void valueChanged(quint32 universe, quint32 input,
                        quint32 channel, uchar value);

Network Configuration

Multicast Configuration

1

Enable multicast on your network

Ensure switches and routers support IGMP (Internet Group Management Protocol)
2

Configure IGMP snooping

Prevents multicast flooding by intelligently forwarding to interested parties only
3

Set appropriate TTL

Multicast TTL (Time To Live) determines how far packets can travel across routers
4

Join multicast groups

Receiving devices automatically join the appropriate 239.255.x.x address

Firewall Configuration

Allow E1.31 traffic:
# Linux (iptables)
sudo iptables -A INPUT -p udp --dport 5568 -j ACCEPT
sudo iptables -A OUTPUT -p udp --sport 5568 -j ACCEPT

# Linux (firewalld)  
sudo firewall-cmd --permanent --add-port=5568/udp
sudo firewall-cmd --reload
Allow multicast:
# Linux - allow multicast group joins
sudo iptables -A INPUT -d 239.255.0.0/16 -j ACCEPT
sudo iptables -A OUTPUT -d 239.255.0.0/16 -j ACCEPT

Network Interface Configuration

Recommended setup:
Interface: eth1
IP Address: 192.168.1.10
Subnet Mask: 255.255.255.0
Gateway: (none for dedicated E1.31 network)
For multicast to work properly, your network switch must support IGMP snooping. Without it, multicast packets may be flooded to all ports or blocked entirely.

E1.31 vs Art-Net

FeatureE1.31Art-Net
StandardANSI/ESTAProprietary (open)
Port55686454
MulticastBuilt-in (239.255.x.x)Optional
Universe Range1-639990-32767
PriorityYes (0-200)No
SyncBuilt-in sync packetsArtSync packets
DiscoveryNoArtPoll/ArtPollReply
E1.31 is preferred for new installations due to being an open ANSI standard. Art-Net has wider legacy device support.

Performance Optimization

Bandwidth Optimization

  • Use Partial transmission mode when possible
  • Use multicast instead of multiple unicast streams
  • Reduce refresh rate for static scenes
  • Patch only required universes

Multicast Best Practices

  1. Use IGMP v3 for better multicast management
  2. Limit multicast scope with appropriate TTL values
  3. Monitor multicast traffic to detect flooding
  4. Configure switch priorities for E1.31 traffic

Multiple Network Interfaces

Distribute universes across multiple NICs:
  • NIC 1: Universes 1-16 → 239.255.0.1 - 239.255.0.16
  • NIC 2: Universes 17-32 → 239.255.0.17 - 239.255.0.32
This load balances across physical interfaces.

Troubleshooting

No Output

Verify multicast is enabled on network switches and receiving devices are joining the correct multicast group
E1.31 universes must match between sender and receiver (1-63999)
Unicast is simpler to troubleshoot than multicast - verify basic connectivity first
Ensure UDP port 5568 is open and multicast addresses (239.255.x.x) are allowed

No Input

  1. Verify the sender is using the correct universe number
  2. Check that multicast group is joined (for multicast input)
  3. Use Wireshark to capture and verify E1.31 packets
  4. Confirm port numbers match (default 5568)

Multicast Not Working

1

Verify IGMP support

Check if your switch supports IGMP snooping
2

Enable IGMP snooping

Enable on all switches in the path
3

Check multicast routing

Ensure multicast is routed correctly between VLANs (if applicable)
4

Test with broadcast

Temporarily use unicast/broadcast to isolate the issue

Packet Analysis with Wireshark

Filter for E1.31 traffic:
udp.port == 5568
Filter for specific multicast address:
ip.dst == 239.255.0.1 && udp.port == 5568

Protocol Details

For full E1.31 protocol specifications:

Art-Net

Alternative Ethernet DMX protocol

OSC

Open Sound Control protocol

Plugin Overview

Learn about the plugin architecture

Build docs developers (and LLMs) love