Recording from the Wing via Dante - without DVS, from Linux!

Everything to do with the Dante Audio Networking aspect of the digital eco-system
Post Reply
User avatar
thunfisch
Posts: 48
Joined: Wed Apr 21, 2021 7:18 am
Location: NRW, Germany

Recording from the Wing via Dante - without DVS, from Linux!

Post by thunfisch »

Just a heads up for people who might not know this is possible: Usually, when you try to do a multitrack from a Dante device, you're pretty much forced to use Dante Virtual Soundcard. Now, that's fine if you use Windows/MacOS and have no problem with the ridiculous DRM from Audinate [1], but as soon as you're a Linux user, you are pretty much screwed.

Now, the Wing Dante card (and pretty much all Dante enabled devices with a Dante 4+ firmware version) is capable of speaking AES67. Getting useful tools for AES67 is quite tricky, there's not much out there, but in essence it's a open standard - effectively PTP+RTP with a bunch of signaling around it.

Gstreamer[2] supports all the required components to "speak" AES67, you just have to fumble it together quite manually. Luckily, some people from the CCC VOC were annoyed enough with the manual fumbling that they hacked a small interface on top of it: https://github.com/voc/aes67-recorder

Now, it's really, really rough around the edges. There's not a lot of documentation, a lot of it was hacked together while on the 35C3 [3]. But it works well enough.

Rough steps to get this stuff working:

You need a Windows/MacOS machine for the initial setup of your Dante Device. Sadly there's no real way around this. A VM should do the trick I think, as you only need to use the Dante Controller. After you've made the settings, the Dante device should keep them, at least my Wing did.

Open the Dante Controller, open the device settings for your Dante device, enable the AES67 Mode, and create Multicast flows. The Brooklyn II Module in the Wing Dante supports exactly 8 Multicast flows with 8 channels each. 8x8=64 - exactly what we need.

My Tip: use manual IP & Port adressing for the Multicast flows. If you can't do that, or you have another device you want to record, take a look at aes67.app [4], it's able to listen in on the AES67 signalling and detect most of the multicast flows on your network.

Now, for the AES67-recorder, you need to generate a config file: Essentially you need to define your multicast flows as input sources. Here's where you put the same IP addresses & ports that you used while configuring the multicast flows on the Dante device. The rest should be sort of explanatory from the comments in the example config file.

My config looked like this:

Code: Select all

source:
  format: S24BE
  rate: 48000

sources:
- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5001

- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5002

- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5003

- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5004

- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5005

- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5006

- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5007

- type: udp
  channels: 8
  address: 239.1.1.1
  iface: enp5s0
  port: 5008

clocking:
  source: system

  # this can work, on my system it threw a bunch of errors (I don't think i had a ptp-compatible nic)
  #source: ptp
  #ptp_domain: 0
  #ptp_interfaces: ['enp5s0']

  # in Seconds
  jitterbuffer: 20

# name of each channel. unnamed channels will issue a warning and will be named "unnamed/XX"
# channel-names can contains slashes, denoting folders. a wall-clock-timestamp and the filetype suffix will be added to the name
# channel-name "s1/mics/head1" might result in a filename like "s1/mics/head1/2018-01-01_10-00-00.wav
# to *not* record a channel, set its name to the special value "!discard".
channelmap:
  1: "1"

capture:
  # can also be specified via command-line arg
  folder: /tmp/aes67

  # length of a segment in seconds
  segment-length: 5

  # desired capture-format, check supported with `gst-inspect-1.0 wavenc`
  format: S24LE

status_server:
  port: 9999
  bind: '::'
  level_interval_ms: 250
  system_health_report_interval_ms: 1000

watchdog:
  enabled: true
  check_interval_ms: 1000
  warn_after_missing_signal_for_ms: 2000
  restart_after_missing_signal_for_ms: 5000
  mqtt:
    enabled: false
    host: mng.c3voc.de
    port: 1883
    username: 'aes67-backup'
    password: 'xxx'
Attention: The config file is in the YAML format, which is a whitespace sensitive format. The spaces and indents matter a lot. If the application screams at you, double check the formatting.

Now, start the server (main.py) and webgui, and you should be able to see the signal metering live on http://localhost:8080 :)

I have to make a few more experiments to possibly get PTP working, but if that all is fine I will probably throw all this on a tiny mini-itx machine [5] and be able to quickly hook it up along side my wing and just let it record everything that's going on over AES67. Very interested in trying to combine this setup with Riedel Bolero intercom, which we often use.

Anyways, just a dump of my experiences in that regard, maybe it's useful for some! Would love to hear your experiences if you try this as well.

---
[1]: Learned that the hard way: Did a fresh install on my show laptop before a festival, installed DVS with the intention of multitracking straight from the RIO, and DVS refused to take my paid license. Why? Because you get 5 activations. No, not parallel - total. After putting in your license 5 times over the total lifespan, your license is done for. What the... Who came up with this stuff?!

[2]: https://gstreamer.freedesktop.org/

[3]: 35th Chaos Communication Congress, see https://events.ccc.de/

[4]: https://aes67.app/ windows/macos/linux

[5]: DIY soundgrid server that never got to see live action due to the pandemic: i7 4790 with stock cooler, 8gigs ram, GA-H81N, Chieftec IX-03B-OP with 90 watt PicoPSU and a 120watt china 12VDC brick bolted on the top - it all _just so_ fits together.
wing+dante, xr18, midas dl16+dl32
systems engineer by day, live sound, streaming & video by night
User avatar
pvannatto
Posts: 1330
Joined: Wed Apr 14, 2021 3:48 pm
Location: Ontario, Canada

Re: Recording from the Wing via Dante - without DVS, from Linux!

Post by pvannatto »

Very cool @thunfisch . Thanks for posting those details for us linux users. Hopefully Audinate will eventually get their act together and provide linux tools as well (since Microsoft is now supporting it).
Paul Vannatto
Global Moderator
Post Reply

Return to “Dante Audio Networking”