[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