Network
Put the boards on one VLAN. A router won't pass PTP (which is sent with a TTL of 1) or mDNS.
For audio
- Turn on IGMP snooping, with a querier, on that VLAN. Each 2-channel stream is about 2.9 Mbit/s and the boards' ports are 100 Mbit/s, so without snooping every stream reaches every port. The boards repeat their memberships (PTP, SAP and the stream they play) every minute, so a switch without a querier keeps forwarding to them; a querier is still best, for the other devices on the VLAN.
- Turn off Energy Efficient Ethernet on the audio ports. It delays packets unpredictably, which costs PTP accuracy.
- Packets are marked the AES67 way, for switches that prioritize: PTP with DSCP 46 (EF), audio with DSCP 34 (AF41).
- Give the boards NTP: an NTP server named by DHCP (option 42), or
internet access for
pool.ntp.org. The clock master then keeps real time, which a computer sending audio to the boards (a web player) needs to follow it. See clocks.
Discovery
Each board advertises itself over mDNS as _etherjax._tcp, with its role,
name and current stream, and finds the others the same way. /api/peers
lists them, and the matrix uses this to find every
board.
Encoders also announce their streams with SAP, which decoders, Dante Controller and VLC listen for.
With Dante
The boards use AES67's PTP (UDP to 224.0.1.129, ports 319 and 320), so a
Dante device in AES67 mode shares their clock, whichever of them is
master. Dante's own PTPv1 is ignored. In Dante Controller, turn on AES67
mode for the device.
- Dante to EtherJax: decoders list the AES67 streams Dante devices announce, and apply each stream's media clock offset.
- EtherJax to Dante: encoder streams show up in Dante Controller as AES67 streams to subscribe to, in blue at the right of the Routing tab. Dante Controller lists them by multicast address. A subscription survives the encoder restarting, as its announcement keeps the same session.
- Decoders can't be routed in Dante Controller, which routes only to Dante receivers. Make an AES67 multicast flow on the Dante device in Dante Controller, then pick it on the decoder or in the matrix.
Dante gives its AES67 streams addresses in 239.69.0.0/16 by default, so
each encoder defaults to a group of its own outside it, in 239.200.0.0/16.
Some Dante receivers (Brooklyn II, Broadway, Dante HC, and Brooklyn 3 on
firmware up to 4.2) subscribe only to streams within their own AES67 range:
for those, set the encoder's Multicast group inside it, such as
239.69.200.1.
An encoder that finds another sender on its group moves to a free one (see encoders). Dante receivers don't follow the move: subscribe them again.
Tested with Dante hardware: an encoder stream shows up in Dante Controller and plays on a Dante receiver, with an EtherJax board as PTP grandmaster. Decoders playing a Dante stream, and a Dante device as grandmaster, haven't been tested yet.