[pulseaudio-discuss] Tunnel vs direct connect to remote PA server - tunnel unreliable
Matt Garman
matthew.garman at gmail.com
Mon Nov 9 19:13:23 UTC 2020
At the risk of jinxing myself, I think I figured this out. I enabled
time sync (using systemd-timesyncd) on both client PC and server RPI.
This github post[1] gave me the idea to check on time sync.
There is a hint about this in the Arch Wiki[2]: "Ensure that client
and server systems agree on the time (i.e., use NTP), or audio streams
may be choppy or may not work at all". I have actually read that
several times, but mistakenly thought all my systems were already
doing time sync. It turns out, my Raspberry Pi server (running
DietPi) was only syncing at boot and once per day. It looks like my
workstation wasn't doing any kind of sync! I actually have an NTP
server running in my home. So I set both systems to continuously sync
to my own time server. So far so good. Testing all my typical
use-cases, things mostly seem to work the same between
direct-connecting and using a tunnel. I say "mostly" because I still
can't control the master (hardware) volume on the RPI via the tunnel.
Maybe I'm overlooking it, but I don't see anywhere in the PulseAudio
documentation about tight time sync being necessary for the tunnel
sink to work reliably. I looked at this[3] and this[4].
I'm also curious to what degree of precision time sync is needed. I'm
certain neither of my systems were significantly out of sync; they
were certainly close enough from a "human" perspective.
[1] https://github.com/mpv-player/mpv/issues/959
[2] https://wiki.archlinux.org/index.php/PulseAudio/Examples#PulseAudio_over_network
[3] https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Network/
[4] https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#module-tunnel-sinksource
Thanks again!
Matt
On Sun, Nov 8, 2020 at 8:07 PM Matt Garman <matthew.garman at gmail.com> wrote:
>
> I posted recently about this under the subject "Networking and volume
> control", but thought I'd start a new thread, as my focus is now less
> about volume, and more about getting reliable playback on a tunnel.
>
> Here's the setup: I have PulseAudio running on a Raspberry Pi,
> intended to be a music server for my office workstation/PC.
>
> The problem I'm having is: everything seems to work fine, as expected,
> when I direct connect from my PC to the RPI using PULSE_SERVER.
> However, on my workstation, I regularly need to switch between the RPI
> server and local sound devices, so direct connect is not appropriate
> for my use case. But I'm having issues with reliable playback when
> using a tunnel.
>
> If I play a wav file using paplay prefixed with PULSE_SERVER (i.e.
> direct connection), then things seem to work as expected:
>
> $ PULSE_SERVER=dietpi-music paplay --verbose song.wav
> Opening a playback stream with sample specification 's16le 2ch
> 44100Hz' and channel map 'front-left,front-right'.
> Connection established.
> Stream successfully created.
> Buffer metrics: maxlength=4194304, tlength=352800, prebuf=349276, minreq=3528
> Using sample spec 's16le 2ch 44100Hz', channel map 'front-left,front-right'.
> Connected to device alsa_output.default (index: 0, suspended: no).
> Stream started.
> Time: 1.126 sec; Latency: 2005612 usec.
>
> The last line is interesting: here the "Time" counter keeps going up,
> and the latency changes constantly, but stays approximately the same.
>
> Now if I play the same file without the PULSE_SERVER prefix, i.e. by
> using a tunnel, then things look like this:
>
> $ paplay --verbose song.wav
> Opening a playback stream with sample specification 's16le 2ch
> 44100Hz' and channel map 'front-left,front-right'.
> Connection established.
> Stream successfully created.
> Buffer metrics: maxlength=4194304, tlength=352800, prebuf=349276, minreq=3528
> Using sample spec 's16le 2ch 44100Hz', channel map 'front-left,front-right'.
> Connected to device tunnel.dietpi-music.local.alsa_output.default
> (index: 19, suspended: no).
> Stream started.
> Time: 0.000 sec; Latency: 108373832 usec.
>
> I do get playback. But in this case, that Time counter is stuck at
> 0.000 seconds (it never increments). Furthermore, the Latency counter
> keeps going up (strictly increasing). The final number when the song
> playback finishes is approximately the same as the length of the song
> (309346656 usec).
>
> The other things I've observed: playback of a YouTube video in
> Firefox, which uses PulseAudio. It works completely fine when
> direct-connected. But when using the tunnel, sometimes playback
> completely hangs (like a network timeout); sometimes the video will
> play, but after a random amount of time, it will stop, or reset itself
> back to the beginning.
>
> I have this program "Transcribe!", which is gstreamer based. One
> feature this program has is a live waveform of the left and right
> channels, which updates in real-time as the song plays back. When I
> use this program with PULSE_SERVER (i.e. direct-connect to the RPI) it
> works as expected. But when using the tunnel, I do get playback, but
> that waveform is static, not updating in realtime as it's supposed to.
>
> All these things together make me think that the tunnel appears to be
> a "one way" construct. It looks like I can send data to the tunnel
> (and get playback), but it seems like no data comes back. I assume
> the PulseAudio protocol is two-way, obviously you need to send audio
> data to the server, but presumably the server needs to send back
> acknowledgements and other status information.
>
> Thanks!
> Matt
More information about the pulseaudio-discuss
mailing list