[Bug 767826] New: opusdec with plc enabled failing to decode audio
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Sat Jun 18 20:50:38 UTC 2016
https://bugzilla.gnome.org/show_bug.cgi?id=767826
Bug ID: 767826
Summary: opusdec with plc enabled failing to decode audio
Classification: Platform
Product: GStreamer
Version: 1.8.2
OS: Linux
Status: NEW
Severity: normal
Priority: Normal
Component: gst-plugins-base
Assignee: gstreamer-bugs at lists.freedesktop.org
Reporter: jasonfsmitty at gmail.com
QA Contact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
Sending opus audio over RTP, with PLC and FEC enabled, the opusdec gets into a
state where it no longer decodes any buffers. The issue only occurs when there
is packet loss, and disabling plc or fed in opusdec allows it to continue
decoding audio, but it's obviously less than ideal due to the cutouts in audio.
I'm able to reliably recreate the issue with the following launch pipelines:
server side (based on
gst-plugins-good/tests/examples/rtp/server-alsasrc-PCMA.sh, just switched to
opusenc):
DEST=127.0.0.1
AELEM=audiotestsrc
ASOURCE="$AELEM ! audioconvert"
AENC="opusenc inband-fec=true ! rtpopuspay"
gst-launch-1.0 -v -m rtpbin name=rtpbin \
$ASOURCE ! $AENC ! rtpbin.send_rtp_sink_0 \
rtpbin.send_rtp_src_0 ! udpsink port=5002 host=$DEST
\
rtpbin.send_rtcp_src_0 ! udpsink port=5003 host=$DEST sync=false
async=false \
udpsrc port=5007 ! rtpbin.recv_rtcp_sink_0
And the client side. It's based on
gst-plugins-good/tests/examples/rtp/client-PCMA.sh, but changed to use opusdec
and have an identity inserted for dropping packets:
AUDIO_CAPS="application/x-rtp,media=(string)audio,clock-rate=(int)48000,encoding-name=(string)OPUS"
AUDIO_DEC="rtpopusdepay ! opusdec plc=true use-inband-fec=true"
AUDIO_SINK="audioconvert ! audioresample ! autoaudiosink"
DEST=127.0.0.1
gst-launch-1.0 -v -m rtpbin name=rtpbin \
udpsrc caps=$AUDIO_CAPS port=5002 \
! identity drop-probability=0.10 \
! rtpbin.recv_rtp_sink_0 \
rtpbin.! $AUDIO_DEC ! $AUDIO_SINK \
udpsrc port=5003 ! rtpbin.recv_rtcp_sink_0 \
rtpbin.send_rtcp_src_0 \
! udpsink port=5007 host=$DEST sync=false async=false
Note it happens with any non-zero drop-probability, it just usually takes
longer with a lower %
Running the client with GST_DEBUG="opusdec:7" I'm able to catch the point were
the audio stops playing - as best as I can tell it's right at the point of
"missing buffer, doing PLC duration". Looks like the 99:99:99 buffer duration
doesn't matter until it hits the missing buffer. Afterwards it seems confused
and keeps printing "current duration 5124095:34:33.709551614 of missing data
not enough for PLC (minimum needed: 0:00:00.002500000) - skipping"
<< more of the same before this>>
0:00:03.710085157 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:565:opus_dec_chain_parse_data:<opusdec0> decoded 960 samples
0:00:03.710157312 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:765:gst_opus_dec_handle_frame:<opusdec0> Got buffer ts
0:00:03.403897735, duration 99:99:99.999999999
0:00:03.710175711 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:442:opus_dec_chain_parse_data:<opusdec0> Received buffer of size
160
0:00:03.710197538 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:468:opus_dec_chain_parse_data:<opusdec0> Using buffer of size 160
0:00:03.710213085 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:539:opus_dec_chain_parse_data:<opusdec0> FEC enabled, decoding
last delayed buffer
0:00:03.710333994 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:565:opus_dec_chain_parse_data:<opusdec0> decoded 960 samples
0:00:03.710402215 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:765:gst_opus_dec_handle_frame:<opusdec0> Got buffer ts
0:00:03.423897512, duration 99:99:99.999999999
0:00:03.710425387 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:442:opus_dec_chain_parse_data:<opusdec0> Received buffer of size
160
0:00:03.710439248 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:468:opus_dec_chain_parse_data:<opusdec0> Using buffer of size 160
0:00:03.710452574 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:539:opus_dec_chain_parse_data:<opusdec0> FEC enabled, decoding
last delayed buffer
0:00:03.710633914 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:565:opus_dec_chain_parse_data:<opusdec0> decoded 960 samples
0:00:03.710727746 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:765:gst_opus_dec_handle_frame:<opusdec0> Got buffer ts
0:00:03.443877173, duration 99:99:99.999999999
0:00:03.710750500 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:442:opus_dec_chain_parse_data:<opusdec0> Received buffer of size 0
0:00:03.710761205 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:468:opus_dec_chain_parse_data:<opusdec0> Using buffer of size 160
0:00:03.710773195 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:539:opus_dec_chain_parse_data:<opusdec0> FEC enabled, decoding
last delayed buffer
0:00:03.710912318 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:565:opus_dec_chain_parse_data:<opusdec0> decoded 960 samples
0:00:03.781393181 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:765:gst_opus_dec_handle_frame:<opusdec0> Got buffer ts
0:00:03.463897290, duration 99:99:99.999999999
0:00:03.781426767 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:442:opus_dec_chain_parse_data:<opusdec0> Received buffer of size
160
0:00:03.781435646 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:468:opus_dec_chain_parse_data:<opusdec0> Using buffer of size 160
<< audio cuts out here ... I think >>
0:00:03.781442601 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:484:opus_dec_chain_parse_data:<opusdec0> missing buffer, doing PLC
duration 99:99:99.999999999 plus leftover 0:00:00.000000000
0:00:03.781474727 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:504:opus_dec_chain_parse_data:<opusdec0> current duration
99:99:99.999999999 of missing data not enough for PLC (minimum needed:
0:00:00.002500000) - skipping
0:00:03.781501051 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:765:gst_opus_dec_handle_frame:<opusdec0> Got buffer ts
0:00:03.483897070, duration 99:99:99.999999999
0:00:03.781513571 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:442:opus_dec_chain_parse_data:<opusdec0> Received buffer of size
160
0:00:03.781520889 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:468:opus_dec_chain_parse_data:<opusdec0> Using buffer of size 160
0:00:03.781527173 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:484:opus_dec_chain_parse_data:<opusdec0> missing buffer, doing PLC
duration 99:99:99.999999999 plus leftover 99:99:99.999999999
0:00:03.781536975 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:504:opus_dec_chain_parse_data:<opusdec0> current duration
5124095:34:33.709551614 of missing data not enough for PLC (minimum needed:
0:00:00.002500000) - skipping
0:00:03.781557109 5002 0x7f26f4003050 LOG opusdec
gstopusdec.c:765:gst_opus_dec_handle_frame:<opusdec0> Got buffer ts
0:00:03.503896852, duration 99:99:99.999999999
0:00:03.781568468 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:442:opus_dec_chain_parse_data:<opusdec0> Received buffer of size
160
0:00:03.781575346 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:468:opus_dec_chain_parse_data:<opusdec0> Using buffer of size 160
0:00:03.781581728 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:484:opus_dec_chain_parse_data:<opusdec0> missing buffer, doing PLC
duration 99:99:99.999999999 plus leftover 5124095:34:33.709551614
0:00:03.781591523 5002 0x7f26f4003050 DEBUG opusdec
gstopusdec.c:504:opus_dec_chain_parse_data:<opusdec0> current duration
5124095:34:33.709551613 of missing data not enough for PLC (minimum needed:
0:00:00.002500000) - skipping
<< more of the same after this>>
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list