[gst-devel] lost packets

Tomasz Grobelny tomasz at grobelny.oswiecenia.net
Sat Jul 5 20:23:52 CEST 2008


In short: is there any gst element that would make up packets that are missing 
from audio stream?

Now the long version:
I send audio data encoded with speex over rtp/udp and then on the other end I 
receive it, decode and send to alsasink. The problem is that the network has 
quite a considerable packet loss (let's say 5% introduced by netem kernel 
module). Every few seconds the audio playback stops and I get something like:

WARNING: from element /pipeline0/alsasink0: Compensating for audio 
synchronisation problems
Additional debug info:
gstbaseaudiosink.c(1190): gst_base_audio_sink_render (): /pipeline0/alsasink0:
Unexpected discontinuity in audio timestamps of more than half a second 
(0:00:00.500000000), resyncing

If I use fakesink instead of alsasink the output looks like this:
/pipeline0/fakesink0: last-message = "chain   ******* < (  640 bytes, 
timestamp: 0:00:02.900000000, duration: 0:00:00.020000000, offset: 43200, 
offset_end: 43520, flags: 0) 0x8151458"
/pipeline0/fakesink0: last-message = "chain   ******* < (  640 bytes, 
timestamp: 0:00:02.920000000, duration: 0:00:00.020000000, offset: 43520, 
offset_end: 43840, flags: 0) 0x81514a8"
/pipeline0/fakesink0: last-message = "chain   ******* < (  640 bytes, 
timestamp: 0:00:02.960000000, duration: 0:00:00.020000000, offset: 43840, 
offset_end: 44160, flags: 0) 0x81514f8"
/pipeline0/fakesink0: last-message = "chain   ******* < (  640 bytes, 
timestamp: 0:00:02.980000000, duration: 0:00:00.020000000, offset: 44160, 
offset_end: 44480, flags: 0) 0x814aed0"
/pipeline0/fakesink0: last-message = "chain   ******* < (  640 bytes, 
timestamp: 0:00:03.000000000, duration: 0:00:00.020000000, offset: 44480, 
offset_end: 44800, flags: 0) 0x814ae80"
/pipeline0/fakesink0: last-message = "chain   ******* < (  640 bytes, 
timestamp: 0:00:03.020000000, duration: 0:00:00.020000000, offset: 44800, 
offset_end: 45120, flags: 0) 0x8151548"

As you can see the packet with 0:00:02.940000000 timestamp has been lost. But 
it seems like alsasink cannot correctly handle such a case. Fixing alsasink 
is one way to go. The other would be to use an element that would recreate 
missing packets. They should contain either silence or somehow derive it from 
preceeding and succeeding packets (comfort noise?). Does such an element 
exist? Thanks in advance,
-- 
Regards,
Tomasz Grobelny




More information about the gstreamer-devel mailing list