chris-ritsen / network-audio-controller

Control Audinate Dante network audio devices without Dante Controller
The Unlicense
191 stars 21 forks source link

Subscribe to AES67 #22

Open marcnnn opened 1 week ago

marcnnn commented 1 week ago

Since Pipewire support AES67 https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/AES67

It would be amazing to patch that to devices with only Linux.

@chris-ritsen Do you have information about how the packets need to look for that?

Thanks

Mo-way commented 1 week ago

@marcnnn If I understand correctly,you want to: "Pipewire" ---AES67----> "Dante Device as sink".

First you need to enable AES67 mode. Chris already merged the PR to enable AES67 mode.

I didn't work on subscribing to AES67 devices, but you could simply create a wireshark dump to see the packets.

That's how I'm working on the "Dante Device as source" ---AES67---> "AES67-sink": But development on Creating the flows is stuck at the moment, because I have no access to Dante devices (or Network captures at least) with more than 2 channels. You can check out the fork here: https://github.com/Mo-way/network-audio-controller/tree/feat/create-aes67-multicast-channels.

bfranske commented 1 week ago

@Mo-way If there are people working on open source projects around Dante and/or AES67 I am happy to setup a remotely accessible equipment lab with my equipment attached to work on. I can provide up to 3 AH DT168 units, a dedicated PTP clock (Brainstorm DXD-8), an AH SQ5, and an X32 all with Dante interfaces as well as both Windows (with Dante Controller) and Linux client systems all on Cisco switches in a remote late setup. I have stuff that goes out on rental occasionally but mostly is sitting around and a day job in IT where remotely accessible lab stuff is easy enough to do. The first time will probably take a couple weeks to sort out. Reach out to me if interested.

marcnnn commented 1 week ago

I thought about creating a lab as well, since the pipewire Wiki says @dsseng hardware is missing to implement redundancy. I have got access to some M32/X32 and Neutrik and Amphenol. @Mo-way I will try to find the right packets in the data stream... If someone want's to work interactive with me with hardware, drop me a private Mastodon message.

dsseng commented 1 week ago

If nothing sensitive in there you can post Wireshark dumps here. You should typically find AES67-relevant packets by a Wireshark filter like rtp || sap || sdp, and maybe also || igmp to see multicast join/leave. Make sure your switch forwards packets to you as it might not do so and disallow you from dumping traffic not coming to your PC.

Mo-way commented 1 week ago

@dsseng Good points. Looking for Dante control traffic though, so guess the filter is rather:

udp.port == 4440 || udp.port == 8700

Chris wrote about it on gearspace.

@marcnnn I'd also say: post here, if you need any help. Ideally, dump the UDP payload here. Then we can analyse together. Also created a mastodon account Mo_way@mastodon.social if you prefer it.

If you don't see any messages, try filtering out all other protocols. Dug out the filter I used to filter for dante controller messages, though it was very clumsy:

((!(ip.dst == 224.0.0.233) && !ptp && !mdns && !dhcp && !arp && !ssdp) && !(ip.dst == 224.0.0.231)) && !(ip.src = $DANTE_DEV_IP) && !(udp.port == 8800) && !dhcpv6 && !icmpv6
Mo-way commented 6 days ago

@marcnnn @bfranske @all If you'd like to, please test AES67 multicast stream creation:

git clone https://github.com/Mo-way/network-audio-controller.git
# cd and checkout feat/create-aes67-multicast-channels
poetry install
 poetry run netaudio config --aes67-enable
# Reboot, if device wasn't already in aese67 mode
poetry run netaudio config --aes67-activate-multicast 1234

For 1234 use any combination of RX channels your device has. It works for an AVIO with 1,2 and 12, but will probably break for greater values, I'd like to know how.

What settings does Dante controller show for a device with >= 3 channels, after running the above command?

marcnnn commented 6 days ago

@Mo-way It created a Multicast Flow, but not an AES67 Multicast Flow. If 1234 is used. It created an AES67 Flow if 12 is used. And the command overwrites the flow form before.