AES67
AES67 is a very flexible protocol for transmitting audio data via Ethernet (AoIP). The protocol uses PTP (precision time protocol) for synchronising. AES67 is used in the Ravenna Network but is also an independent protocol on its own. Unlike AES50 and AVB, AES67 is not limited to a specific medium, it can be transmitted through any IP-based medium. The transmission itself is isochronous, which means that a minimum bandwidth is provided. AES67 can also be used in mixed networks, the QoS (Quality of Service) is provided by DiffServ, which, unlike IntServ, classifies the packages, so that clock-, audio- and controlsignals can be prioritized differently. The maximum transmission distance depends on the medium. AES67 doesn’t need any special networks requirements. The maximum samplingrate is 96 kHz. AES67 uses five layers of the OSI model: IP on Layer 3, UDP on Layer 4 and RTP on Layer 5. RTP provides a flexible buffer, timestramps of the individual data packages as well as identification for the different data formats and streams. RTP does not provide a timely transmission in the right order and packages won’t be resent. AES67 features a low latency (less than 5 ms) and thus can be used in live audio situations. The maximum number of channels is dependent from the network architecture.

AES70:
The Open Control Architecture (OCA) is a communications protocol architecture for control, monitoring, and connection management of networked audio and video devices. Such networks are referred to as "media networks".
https://en.wikipedia.org/wiki/Open_Control_Architecture
javascript implementation: https://github.com/DeutscheSoft/OCA.js/tree/master/


The standards:
    Are freely downloadable by AES (audio engineering society) members

    AES70 (control) http://www.aes.org/publications/standards/search.cfm?docID=103

General info:
    https://www.ravenna-network.com/aes67/demystifying-discovery/
    https://www.ravenna-network.com/aes67/aes67-practical-guide-web-copy/
    http://medianetworkingalliance.com/wp-content/uploads/2015/04/MNA_AES67_NAB2015_16_9.pdf
    http://jack-audio.10948.n7.nabble.com/Jack-Devel-AES67-SMPTE-ST-2110-30-td19699.html
    https://tech.ebu.ch/docs/events/opensource17/presentations/SMPTE2110-ffmpeg.pdf  
    https://support.dhd.audio/doku.php?id=aes67:sync
How to signal SDP:
    ravenna: zeroconf  and rtsp/http
    dante: SAP

Standards + gstreamer implementations:
  IEEE 1588-2008 - IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems, IEEE
    https://gstreamer.freedesktop.org/documentation/application-development/advanced/clocks.html
    https://github.com/pexip/gstreamer/blob/master/tests/examples/ptp/ptp-print-times.c
    https://sdroege.github.io/rustdoc/gstreamer/gstreamer_net/struct.PtpClock.html
    https://en.wikipedia.org/wiki/Precision_Time_Protocol
    https://github.com/ptpd/ptpd.git
    http://code.centricular.com/ptp-clock-reflector/

  RFC 3190  RTP Payload Format for 12-bit DAT Audio and 20- and 24-bit Linear Sampled Audio, IETF
    https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-rtpL24pay.html

  RFC 3261 - SIP: Session Initiation Protocol, IETF
  
  RFC 3264 - An Offer/Answer Model with the Session Description Protocol (SDP), IETF

  RFC 3550  RTP: A Transport Protocol for Real-Time Applications, IETF

  RFC 4566  Session Description Protocol, IETF

  RFC 7273  RTP Clock Source Signalling, IETF
    https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--rfc7273-sync


Has some code:
    ffmpeg implementation: https://github.com/cbcrc/FFmpeg
    https://github.com/piense/aes67-SAP
    https://github.com/sfc-arch/esp32_aes67_receiver.git
    https://github.com/sfc-arch/esp32_aes67_sender
    https://github.com/markmcconnell/mai (talks with jack)
    https://github.com/dholroyd/trimsoul (gstreamer)
    https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPtpClock.html
    https://github.com/GStreamer/gstreamer/tree/master/tests/examples/ptp
    https://archive.fosdem.org/2016/schedule/event/synchronised_gstreamer/attachments/slides/889/export/events/attachments/synchronised_gstreamer/slides/889/synchronised_multidevice_media_playback_with_GStreamer.pdf (on gst clocks)
    https://github.com/luisbg/synchronised_media_playback.git


No code but info:
    https://coaxion.net/blog/2017/04/rtp-for-broadcasting-over-ip-use-cases-in-gstreamer-ptp-rfc7273-for-ravenna-aes67-smpte-2022-smpte-2110/
    https://github.com/SimonTait/alsa67
    https://github.com/kylophone/xplay/blob/master/xplay.py (just pipes the multicast stream in a player)
    https://github.com/masche842/rs_sixty_seven

Windows / mac software for interop testing:
  Audio:
    https://www.ravenna-network.com/2013/09/13/free-version-of-ravenna-virtual-sound-card-for-windows-now-available-for-download/ (free, but registration)
    https://www.lawo.de/vsc.html  (not sure, probably paid?)
    https://www.merging.com/products/aes67-vad-standard (free, but registration)

    https://www.audinate.com/products/software/dante-virtual-soundcard

For avb:
If you have a Windows machine you can use the ALC Windows virtual sound 
card if you have a supported Intel NIC with hardware timestamp support, or 
you can use the Lawo Windows virtual sound card which supports software 
timestamping and will work on any network card.  I tried out the demo 
version of the Lawo card and was able to transfer audio from one Windows 
machine to another (using an external master clock created by transferring 
NTP time using linuxptp on a small linux machine). 
The demo version of the Lawo software only runs for 15 minutes at a time 
and has to be restarted.  The paid version costs about 200 dollars/euros. 


  Discovery / management:
    https://www.audinate.com/content/dante-controller-v4105-windows
    https://www.qsc.com/resources/software-and-firmware/q-sys-designer-software/
    https://portal.atterotech.com/downloads/Unify_Control_Panel/unIFYControlPanel_Setup_v3_2_1.exe

Network stuff:
    http://www.ieee802.org/1/pages/802.1as.html (not necassary, and probably only on very fancy switches)
    IGMP (not necassary, asuming there is enough bandwith to send all channels networkwide)
    DiffSRV https://en.wikipedia.org/wiki/Differentiated_services (not necassary, only to prioritise different traffic)
    stream reservation: https://1.ieee802.org/tsn/802-1qcc/ (not sure for what)
    intel I210 network card support hardware timestamping (for AVB)



AVB (some ethernet audio thingie):
    https://github.com/AVnu/OpenAvnu
 
