[pulseaudio-discuss] Latency/lag with tcp tunnel
Matt Garman
matthew.garman at gmail.com
Tue Jan 26 21:37:02 UTC 2021
On Mon, Jan 25, 2021 at 10:58 PM Sean Greenslade
<sean at seangreenslade.com> wrote:
> As a data point, I routinely use networked TCP streams with pulse, and
> on wired ethernet links I tend to see only ~50 ms of delay.
>
> One avenue to investigate is to see what pulseaudio thinks the latency
> is. If you run the command "pactl list sink_inputs" on the device with
> the sound card, you'll get something like this:
>
> [sean at bailey ~]$ pactl list sink-inputs
> Sink Input #2
> Driver: protocol-native.c
> Owner Module: 9
> Client: 17
> Sink: 3
> Sample Specification: float32le 2ch 48000Hz
> Channel Map: front-left,front-right
> Format: pcm, format.sample_format = "\"float32le\"" format.rate = "48000" format.channels = "2" format.channel_map = "\"front-left,front-right\""
> Corked: no
> Mute: no
> Volume: front-left: 60293 / 92% / -2.17 dB, front-right: 60293 / 92% / -2.17 dB
> balance 0.00
> Buffer Latency: 226791 usec
> Sink Latency: 16780 usec
> Resample method: speex-float-1
>
> Note the reported "Sink Latency" of ~16 ms (in my setup, I saw it vary
> from 4 ms to 25 ms). What does your setup report? And what is the
> reported latency of your audio device itself (pactl list sinks).
Thank you for the suggestion. Here are the two sink-inputs on the RPI
server. They are the tcp and unix domain sockets, respectively. In
both cases, the sink latency is around 10ms, which is roughly the same
as you. That's the "Sink Latency", is the "Buffer Latency" important?
root at dietpi-ma12070p:~# pactl list sink-inputs
Sink Input #0
Driver: protocol-native.c
Owner Module: 7
Client: 1
Sink: 0
Sample Specification: s32le 2ch 44100Hz
Channel Map: front-left,front-right
Format: pcm, format.sample_format = "\"s32le\"" format.rate =
"44100" format.channels = "2" format.channel_map =
"\"front-left,front-right\""
Corked: yes
Mute: no
Volume: front-left: 65536 / 100% / 0.00 dB, front-right:
65536 / 100% / 0.00 dB
balance 0.00
Buffer Latency: 139841 usec
Sink Latency: 9718 usec
Resample method: n/a
Properties:
media.name = "Built-in Audio for matt at sewage"
media.role = "abstract"
application.name = "pulseaudio"
native-protocol.peer = "TCP/IP client from 10.18.51.34:46968"
native-protocol.version = "34"
application.id = "org.PulseAudio.PulseAudio"
application.version = "14.0"
application.process.id = "947578"
application.process.user = "matt"
application.process.host = "sewage"
application.process.binary = "pulseaudio"
application.language = "en_US.UTF-8"
window.x11.display = ":0"
application.process.machine_id =
"31d757b445f140b1b50278a35a34a1e5"
application.process.session_id = "2"
module-stream-restore.id = "sink-input-by-media-role:abstract"
Sink Input #2
Driver: protocol-native.c
Owner Module: 6
Client: 5
Sink: 0
Sample Specification: s16le 2ch 44100Hz
Channel Map: front-left,front-right
Format: pcm, format.sample_format = "\"s16le\"" format.rate =
"44100" format.channels = "2" format.channel_map =
"\"front-left,front-right\""
Corked: no
Mute: no
Volume: front-left: 65536 / 100% / 0.00 dB, front-right:
65536 / 100% / 0.00 dB
balance 0.00
Buffer Latency: 446349 usec
Sink Latency: 9846 usec
Resample method: copy
Properties:
media.name = "ALSA Playback"
application.name = "ALSA plug-in [mpd]"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "32"
application.process.id = "504"
application.process.user = "mpd"
application.process.host = "dietpi-ma12070p"
application.process.binary = "mpd"
application.language = "C"
application.process.machine_id =
"1000380a73144486937defb00927c831"
module-stream-restore.id =
"sink-input-by-application-name:ALSA plug-in [mpd]"
Here's the sink latency, also looks reasonable to my untrained eyes:
root at dietpi-ma12070p:~# pactl list sinks
Sink #0
State: RUNNING
Name: alsa_output.default
Description: Built-in Audio
Driver: module-alsa-sink.c
Sample Specification: s32le 2ch 44100Hz
Channel Map: front-left,front-right
Owner Module: 5
Mute: no
Volume: front-left: 8308 / 13% / -53.82 dB, front-right:
8308 / 13% / -53.82 dB
balance 0.00
Base Volume: 65536 / 100% / 0.00 dB
Monitor Source: alsa_output.default.monitor
Latency: 9833 usec, configured 9977 usec
Flags: HARDWARE HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
Properties:
alsa.resolution_bits = "32"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "Merus Audio Amp ma120x0p-amp-0"
alsa.id = "Merus Audio Amp ma120x0p-amp-0"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "0"
alsa.card_name = "snd_rpi_merus_amp"
alsa.long_card_name = "snd_rpi_merus_amp"
alsa.driver_name = "snd_soc_rpi_simple_soundcard"
device.bus_path = "platform-soc:sound"
sysfs.path = "/devices/platform/soc/soc:sound/sound/card0"
device.form_factor = "internal"
device.string = "default"
device.buffering.buffer_size = "3520"
device.buffering.fragment_size = "1760"
device.access_mode = "mmap"
device.description = "Built-in Audio"
device.icon_name = "audio-card"
Formats:
pcm
Here's what I see on the client side. I trimmed this substantially,
as I actually have a number of sinks on this workstation; showing just
the tunnel to the RPI server:
Sink #14
State: RUNNING
Name: tunnel.dietpi-ma12070p.local.alsa_output.default
Description: Built-in Audio on pulse at dietpi-ma12070p
Driver: module-tunnel.c
Sample Specification: s32le 2ch 44100Hz
Channel Map: front-left,front-right
Owner Module: 30
Mute: no
Volume: front-left: 65536 / 100%, front-right: 65536 / 100%
balance 0.00
Base Volume: 65536 / 100%
Monitor Source: tunnel.dietpi-ma12070p.local.alsa_output.default.monitor
Latency: 137764 usec, configured 250000 usec
Flags: NETWORK HW_MUTE_CTRL HW_VOLUME_CTRL LATENCY
Properties:
device.description = "Built-in Audio on pulse at dietpi-ma12070p"
tunnel.remote.server = "[10.18.51.66]:4713"
tunnel.remote.sink = "alsa_output.default"
device.icon_name = "computer"
tunnel.remote_version = "32"
tunnel.remote.user = "pulse"
tunnel.remote.fqdn = "dietpi-ma12070p"
tunnel.remote.description = "Built-in Audio"
Formats:
pcm
That seems a little high to me, around 140 ms. Not sure if it's
possible to reduce that and maybe improve the experience? I know ping
is a poor choice for measuring latency, but I think it's useful as a
ballpark estimate. Ping from my workstation to the RPI server is
pretty consistently around 0.4 ms. So as you said, wired ethernet
should be low latency enough for lag-free network audio.
Thanks again!
Matt
More information about the pulseaudio-discuss
mailing list