[Bug 797328] New: webrtcbin: GStreamer-CRITICAL (padname not unique) with enabled both ULP_FEC and RTX using iOS devices

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Tue Oct 23 14:53:03 UTC 2018


https://bugzilla.gnome.org/show_bug.cgi?id=797328

            Bug ID: 797328
           Summary: webrtcbin: GStreamer-CRITICAL (padname not unique)
                    with enabled both ULP_FEC and RTX using iOS devices
    Classification: Platform
           Product: GStreamer
           Version: 1.14.x
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: piechaczek.szymon at gmail.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

I'm using webrtcbin as sendrecv endpoint (H264 video and Opus audio) with iOS
devices (native WebRTC SDK) and I've been facing many video issues over
wireless networks (dropped keyframes etc.).

I enabled FEC and RTX on webrtcbin with this Python code:

    def _on_new_transceiver(self, element, transceiver):
        if transceiver.mline == 1:
            transceiver.set_property("fec-type",
GstWebRTC.WebRTCFECType.ULP_RED)
            transceiver.set_property("do-nack", True)

The problem is that enabling _both_ of them makes webrtcbin to double-create
"src_1" pad:

app_1  | #ERR#Stream 5bcf2d353a11a300394baf0f#: 0:00:09.072505020   212
0x7f4df0095050 DEBUG              webrtcbin
gstwebrtcbin.c:3369:on_rtpbin_request_pt_map:<webrtcbin0> getting pt map for pt
99 in session 1
app_1  | #ERR#Stream 5bcf2d353a11a300394baf0f#: 0:00:09.073430701   212
0x7f4df0095050 INFO         rtpjitterbuffer
rtpjitterbuffer.c:778:rtp_jitter_buffer_calculate_pts: resync to time
0:00:07.084805979, rtptime 8:16:32.042122222
app_1  | #ERR#Stream 5bcf2d353a11a300394baf0f#: 0:00:09.073458015   212
0x7f4dac003c50 INFO         rtpjitterbuffer
gstrtpjitterbuffer.c:3942:do_deadline_timeout:<rtpjitterbuffer2> got deadline
timeout
app_1  | #ERR#Stream 5bcf2d353a11a300394baf0f#: 0:00:09.073584023   212
0x7f4df02a21e0 DEBUG              webrtcbin
gstwebrtcbin.c:3562:on_rtpbin_request_fec_decoder:<webrtcbin0> Creating ULPFEC
decoder for pt 97 in session 1
app_1  | #ERR#Stream 5bcf2d353a11a300394baf0f#: 0:00:09.074065056   212
0x7f4df02a21e0 DEBUG              webrtcbin
gstwebrtcbin.c:3301:copy_sticky_events:<webrtcbin0:src_1> store sticky event
stream-start event: 0x7f4dc40055e0, time 99:99:99.999999999, seq-num 741,
GstEventStreamStart, stream-id=(string)d86ca30418e5b0ec624d6b445597ed11,
flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)6;
app_1  | #ERR#Stream 5bcf2d353a11a300394baf0f#: 0:00:09.074097198   212
0x7f4df02a21e0 DEBUG              webrtcbin
gstwebrtcbin.c:3301:copy_sticky_events:<webrtcbin0:src_1> store sticky event
caps event: 0x7f4dc8001c40, time 99:99:99.999999999, seq-num 17928,
GstEventCaps, caps=(GstCaps)"application/x-rtp\,\ media\=\(string\)video\,\
payload\=\(int\)99\,\ clock-rate\=\(int\)90000\,\
encoding-name\=\(string\)RTX\,\ apt\=\(string\)110\,\ ssrc\=\(uint\)572172575";
app_1  | 0:00:09.074150118   212 0x7f4df02a21e0 DEBUG              webrtcbin
gstwebrtcbin.c:3301:copy_sticky_events:<webrtcbin0:src_1> store sticky event
segment event: 0x7f4dc4005650, time 99:99:99.999999999, seq-num 736,
GstEventSegment, segment=(GstSegment)"GstSegment,
flags=(GstSegmentFlags)GST_SEGMENT_FLAG_NONE, rate=(double)1,
applied-rate=(double)1, format=(GstFormat)GST_FORMAT_TIME, base=(guint64)0,
offset=(guint64)0, start=(guint64)0, stop=(guint64)18446744073709551615,
time=(guint64)0, position=(guint64)0, duration=(guint64)18446744073709551615;";
app_1  | (python3:212): GStreamer-CRITICAL **: 16:16:35.793: Padname src_1 is
not unique in element webrtcbin0, not adding
app_1  | #ERR#Stream 5bcf2d353a11a300394baf0f#: 0:00:09.130071459   212
0x7f4df0095940 WARN                 basesrc
gstbasesrc.c:3055:gst_base_src_loop:<nicesrc3> error: Internal data stream
error.
app_1  | 0:00:09.130115420   212 0x7f4df0095940 WARN                 basesrc
gstbasesrc.c:3055:gst_base_src_loop:<nicesrc3> error: streaming stopped, reason
not-linked (-1)
app_1  | #Stream 5bcf2d353a11a300394baf0f#: BUS ERROR: gst-stream-error-quark 1
| DEBUG: gstbasesrc.c(3055): gst_base_src_loop ():
/GstPipeline:episode_5bcf2d353a11a300394baf0f/GstBin:compositor_1001/GstWebRTCBin:webrtcbin0/TransportReceiveBin:transportreceivebin1/GstNiceSrc:nicesrc3:
app_1  | streaming stopped, reason not-linked (-1)

With WebRTC peer on Google Chrome everything is OK (SDP answer is almost the
same) and ULPFEC decoder is create earilier. On iOS it is somehow delayed.

I've looked into the source code and found two possible bug-causing lines:
https://github.com/GStreamer/gst-plugins-bad/blob/master/ext/webrtc/gstwebrtcbin.c#L4506-L4507

https://github.com/GStreamer/gst-plugins-bad/blob/master/ext/webrtc/gstwebrtcbin.c#L4589-L4594

-- 
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