Atrocious latency when using pipewire over network (via pulse's tcp)
Hi I recently switched to Fedora 36 using the systems default pipewire installation
pipewire
Compiled with libpipewire 0.3.56
Linked with libpipewire 0.3.56
The connection works fine, however, the latency is unbareable also it stutters and pops frequently. Coming from Ubuntu with pulseaudio it used to work just fine using tsched=0 .
I have setup networked audio using this configuration (default template with added discover and zeroconf):
cat /etc/pipewire/pipewire-pulse.conf
# PulseAudio config file for PipeWire version "0.3.56" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire-pulse.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire-pulse.conf.d/ for local changes.
#
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
{ name = libpipewire-module-rt
args = {
nice.level = -19
rt.prio = 95
}
flags = [ ifexists nofail ]
}
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-metadata }
{ name = libpipewire-module-zeroconf-discover }
{ name = libpipewire-module-protocol-pulse
args = {
# contents of pulse.properties can also be placed here
# to have config per server.
server.address = [
"unix:native"
"tcp:192.168.178.227:4713" # IPv4 on a single address
]
pulse.min.req = 256/48000 # 5ms
pulse.default.req = 960/48000 # 20 milliseconds
pulse.min.frag = 256/48000 # 5ms
pulse.default.frag = 96000/48000 # 2 seconds - 96000
pulse.default.tlength = 96000/48000 # 2 seconds
pulse.min.quantum = 256/48000 # 5ms
pulse.default.format = F32
pulse.default.position = [ FL FR ]
# These overrides are only applied when running in a vm.
vm.overrides = {
pulse.min.quantum = 1024/48000 # 22ms
}
}
}
]
# Extra modules can be loaded here. Setup in default.pa can be moved here
context.exec = [
{ path = "pactl" args = "load-module module-always-sink" }
]
Am I doing something wrong?
Journalctl output:
journalctl --user -u pipewire --user -u wireplumber --user -u pipewire-pulse -f
Aug 13 15:56:28 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:28 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:28 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:28 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:28 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:29 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:29 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:29 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:29 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:29 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:30 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:30 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:30 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:30 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:30 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:31 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:31 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:31 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:31 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow
Aug 13 15:56:31 fedora pipewire-pulse[2149]: mod.pulse-tunnel: underflow