commit 7f2b5577fc36acd5485702772a2a05ccc7022417 Author: thibaudk Date: Sat Feb 8 18:38:57 2025 +0000 [config] important config files diff --git a/aes67-proxy@.service b/aes67-proxy@.service new file mode 100644 index 0000000..51eb4a0 --- /dev/null +++ b/aes67-proxy@.service @@ -0,0 +1,10 @@ +[Unit] +Description=Call user's pipewire-aes67 after network +After=network-online.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/systemctl --user --machine=%i@ start pipewire-aes67 + +[Install] +WantedBy=multi-user.target diff --git a/ethernet-static b/ethernet-static new file mode 100644 index 0000000..f4ad12b --- /dev/null +++ b/ethernet-static @@ -0,0 +1,8 @@ +Description='A basic static ethernet connection' +Interface=end0 +Connection=ethernet +IP=static +Address='169.254.14.228/16' +#Routes=('192.168.0.0/24 via 192.168.1.2') +Gateway='169.254.14.254' +ForceConnect=yes diff --git a/linuxptp.ptp4l@.service b/linuxptp.ptp4l@.service new file mode 100644 index 0000000..a274752 --- /dev/null +++ b/linuxptp.ptp4l@.service @@ -0,0 +1,12 @@ +[Unit] +Description=Precision Time Protocol (PTP) service for %I +Documentation=man:ptp4l +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +ExecStart=/usr/sbin/ptp4l -f /etc/linuxptp/ptp4l.conf -i %I -p /dev/ptp0 -l6 -E -H -m --step_threshold 0.00000001 -4 --priority1 255 --priority2 255 --domainNumber 0 --dscp_event 46 + +[Install] +WantedBy=multi-user.target diff --git a/pipewire-aes67.conf b/pipewire-aes67.conf new file mode 100644 index 0000000..5ccbe05 --- /dev/null +++ b/pipewire-aes67.conf @@ -0,0 +1,165 @@ +# AES67 config file for PipeWire version "1.2.7" # +# +# Copy and edit this file in @PIPEWIRE_CONFIG_DIR@ for system-wide changes +# or in ~/.config/pipewire for local changes. +# +# It is also possible to place a file with an updated section in +# @PIPEWIRE_CONFIG_DIR@/pipewire-aes67.conf.d/ for system-wide changes or in +# ~/.config/pipewire/pipewire-aes67.conf.d/ for local changes. +# + + +context.properties = { + ## Configure properties in the system. + #mem.warn-mlock = false + #mem.allow-mlock = true + #mem.mlock-all = false + #log.level = 2 + + + #default.clock.quantum-limit = 8192 +} + + +context.spa-libs = { + support.* = support/libspa-support +} + + +context.objects = [ + # An example clock reading from /dev/ptp0. You can also specify the network interface name, + # pipewire will query the interface for the current active PHC index. Another option is to + # sync the ptp clock to CLOCK_TAI and then set clock.id = tai, keep in mind that tai may + # also be synced by a NTP client. + # The precedence is: device, interface, id + { factory = spa-node-factory + args = { + factory.name = support.node.driver + node.name = PTP0-Driver + node.group = pipewire.ptp0 + # This driver should only be used for network nodes marked with group + priority.driver = 100000 + clock.name = "clock.system.ptp0" + ### Please select the PTP hardware clock here + # Interface name is the preferred method of specifying the PHC + #clock.interface = "end0" + clock.device = "/dev/ptp0" + #clock.id = tai + # Lower this in case of periodic out-of-sync + resync.ms = 1.5 + object.export = true + } + } +] + + +context.modules = [ + { name = libpipewire-module-rt + args = { + nice.level = -11 + #rt.prio = @rtprio_client@ + #rt.time.soft = -1 + #rt.time.hard = -1 + } + flags = [ ifexists nofail ] + } + { name = libpipewire-module-protocol-native } + { name = libpipewire-module-client-node } + { name = libpipewire-module-spa-node-factory } + { name = libpipewire-module-adapter } + { name = libpipewire-module-rtp-sap + args = { + ### Please select the interface here + local.ifname = end0 + sap.ip = 239.255.255.255 + sap.port = 9875 + net.ttl = 32 + net.loop = false + # If you use another PTPv2 daemon supporting management + # messages over a UNIX socket, specify its path here + #ptp.management-socket = "/var/run/ptp4lro" + + + stream.rules = [ + { + matches = [ + { + rtp.session = "~.*" + } + ] + actions = { + create-stream = { + node.virtual = false + media.class = "Audio/Source" + device.api = aes67 + # You can adjust the latency buffering here. Use integer values only + sess.latency.msec = 2 + node.group = pipewire.ptp0 + } + } + }, + { + matches = [ + { + sess.sap.announce = true + } + ] + actions = { + announce-stream = {} + } + } + ] + } + }, + { name = libpipewire-module-rtp-sink + args = { + ### Please select the interface here + local.ifname = end0 + ### If you want to create multiple output streams, please copy the whole + ### module-rtp-sink block, but change this multicast IP to another unused + ### one keeping 239.69.x.x range unless you know you need another one + # source.ip = 0.0.0.0 + destination.ip = 239.69.1.8 + destination.port = 5004 + net.mtu = 1280 + net.ttl = 32 + net.loop = false + # These should typically be equal + # You can customize packet length, but 1 ms should work for every device + # Consult receiver documentation to ensure it supports the value you set + sess.min-ptime = 2 + sess.max-ptime = 2 + ### Please change this, especially if you create multiple sinks + sess.name = "0_to_7" + sess.media = "audio" + # This property is used if you aren't using ptp4l 4 + #sess.ts-refclk = "ptp=traceable" + #sess.ts-offset = 0 + # You can adjust the latency buffering here. Use integer values only + sess.latency.msec = 2 + audio.format = "S24BE" + audio.rate = 48000 + audio.channels = 8 + # These channel names will be visible both to applications and AES67 receivers + node.channel-names = ["0", "1", "2", "3", "4", "5", "6", "7"] + # Uncomment this and comment node.group in send/recv stream.props to allow + # separate drivers for the RTP sink and PTP sending (i.e. force rate matching on + # the AES67 node rather than other nodes) + #aes67.driver-group = "pipewire.ptp0" + + + stream.props = { + ### Please change the sink name, this is necessary when you create multiple sinks + node.name = "0_to_7" + media.class = "Audio/Sink" + node.virtual = false + device.api = aes67 + sess.sap.announce = true + node.always-process = true + node.group = pipewire.ptp0 + rtp.ntp = 0 + rtp.fetch-ts-refclk = true + } + } + }, +] diff --git a/pipewire-aes67.service b/pipewire-aes67.service new file mode 100644 index 0000000..48cf737 --- /dev/null +++ b/pipewire-aes67.service @@ -0,0 +1,10 @@ +[Unit] +Description=PipeWire Multimedia Service +Requires=pipewire.socket + +[Service] +Type=simple +ExecStart=/usr/bin/pipewire-aes67 + +[Install] +WantedBy=default.target diff --git a/ptp4l.conf b/ptp4l.conf new file mode 100644 index 0000000..6b9bddb --- /dev/null +++ b/ptp4l.conf @@ -0,0 +1,8 @@ +[global] +time_stamping hardware +tx_timestamp_timeout 10 +twoStepFlag 1 +delay_mechanism Auto +delay_response_timeout 10 +clientOnly 1 +