Sound stopping (pipeline sync issue?)

Tvrtko Ursulin tvrtko.ursulin at onelan.co.uk
Mon Jun 6 05:07:37 PDT 2011


Hi Marco,

Thank you for replying.

On Sunday 05 Jun 2011 07:45:24 Marco Ballesio wrote:
> On Thu, Jun 2, 2011 at 2:45 PM, Tvrtko Ursulin
> <tvrtko.ursulin at onelan.co.uk> wrote:
> > Hi all,
> > 
> > I have a test pipeline where sound works very unreliable unless sync
> > property on alsasink is set to false and I am wondering about why, what
> > is happening under the hood and so on.
> > 
> > Pipeline looks like this:
> > 
> > gst-launch-0.10 v4l2src device=/dev/video0 ! video/x-raw-
> > yuv,width=1920,height=1080,framerate=50/1 ! queue ! deinterlace ! queue !
> > xvimagesink alsasrc device=hw:2,0 provide-clock=false ! audio/x-raw-
> > int,rate=48000 ! queue ! alsasink
> 
> here the video processing is performed at quite high frame rate and
> resolution. Even though no actual processing is performed on the
> frames, memory copies are performed here and there, so I'd check the
> CPU load to begin with.

This seems to be fine, gst-launch load is 10-15% of a single core.
 
> > What is happening is that sound stops less than a second after pipeline
> > is launched and stays off. Video works fine.
> > 
> > If I add "sync=false" to alsasink then it all works fine. "provide-clock"
> > on the alsasrc has no effect there, I added it assuming video clock must
> > be a better choice?
> 
> In your case, as the pipeline is live and no sources would be
> providing a clock, the pipeline would use the system one:
> 
> http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/Gst
> Pipeline.html
> 
> (v4l2src doesn't provide a clock).
> 
> It's usually a bad choice, as it could lead to (short) audio dropouts
> when compensating skews. As audio is (almost) a continuous signal, a
> drop there is more annoying than in the case of video.

Right, so you suggest leaving provide-clock to true for alsasrc on the 
rationale that audio clock is more reliable than the system clock? Or some 
other reason?

> > My main question would be is "sync=false" on the audio output sync in any
> > way dangerous or not recommended?
> 
> it prevents the audio sink from dropping frames when they arrive too
> late, either because of audio skew or for delayed scheduling in the
> audio pipeline (or the cumulative effect of both). The intermediate
> queue risks to delay audio further because of more context switches (a
> queue "splits" the pipe in two threads), but here opinions may differ.

sync=false prevents dropping frame or sync=true?

As I said with sync=true I get no sound at all after the initial sub second 
period. This is even when alsasrc and alsasink are on the same device. 
 
> You might try and play with the alsa buffer size by increasing both
> "buffer-time" and "latency-time". Please note that this would increase
> the overall latency in your pipeline and, being it a live stream, it
> could not be what you really want.

Neither increasing or decreasing these by order of magnitude has any 
observable effect.

> > How does GStreamer synchronise video and audio with this kind of pipeline
> > and how does "sync=false" on audio sink affect that?
> 
> "grep"ping (or "find"ing) on the gstreamer core sources would have
> given you a quicker answer ;) . btw here you go:
> 
> http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-synch
> ronisation.txt

Well it is a bit complicated but in essence it says that things should 
synchronize, right? :)

Even with "disjoint" streams in a pipeline (not two streams coming for a 
demuxer which would then output correct timestamps for each)?

Many thanks,

Tvrtko


More information about the gstreamer-devel mailing list