[pulseaudio-tickets] [PulseAudio] #477: module-rtp-recv - rtp sink latency is random/playback distorts randomly without glitch-free
PulseAudio
trac-noreply at tango.0pointer.de
Wed Feb 4 11:28:59 PST 2009
#477: module-rtp-recv - rtp sink latency is random/playback distorts randomly
without glitch-free
---------------------------------+------------------------------------------
Reporter: erich | Owner: erich
Type: defect | Status: new
Priority: high | Milestone:
Component: module-rtp-* | Severity: normal
Keywords: latency,glitch-free |
---------------------------------+------------------------------------------
When running RTP receiver on ALSA machines without "glitch-free" support,
i.e. ones in which the ALSA driver requires the "tched=0" parameter to
run, the playback on the sink gets very distorted due to the semi-random
latency readings trying to be deduced from the ALSA interfaces.
Examples: It will speed up or slow down (pitch increases or decreases) by
as much as 5% to 25+% every 5 seconds during playback, which is quite
audible, sometimes creating gaps in playback from reading off the end of
the available buffer.
Fairly sure the real playback deviation is much much smaller, since when
taking out the resampling step, the playback deviates just enough over 10
minutes to hear the echo from another RTP receiver, but otherwise sounds
normal.
So, so far I've noticed/considered the following:
* The readback mechanism being used to determine the latency appears to
be partly or completely broken when "glitch-free" is disabled.
* Considered using a debouncer to average latency readings over time
but it doesn't look like it's just a randomness issue. There may be
persistent bias in the values being read, or it could be partly garbage.
* I noticed that the code used to match the rate here is rather
different from that used by "module-combine".
Solution being considered: My favorite idea at the moment is to basically
keep track of all samples sent, and perform a long-term (over say a minute
each time) drift calculation to see if the buffer is averaging fuller or
emptier, then gradually adjust the frequency to compensate. This is an
algorithm I used in an audio frequency-matcher before when all I had were
semi-reliable buffer fullness levels (before I switched to pulseaudio!),
and it worked pretty well.
In any case, I'm working on fixing this (hence assigning it to myself),
and am testing all the above-listed cases to see which works best. I'm
motivated to fix it since I'm using it throughout my house right now, and
my wife is annoyed that it's broken!
--
Ticket URL: <http://www.pulseaudio.org/ticket/477>
PulseAudio <http://pulseaudio.org/>
The PulseAudio Sound Server
More information about the pulseaudio-bugs
mailing list