[webrtcbin] DTLS Handshake stack on gst_pad_push for Chrome
GST 1.18.1 (built from source). I have the following dynamic webrtc pipeline:
PIPELINE_DESC = '''
videotestsrc is-live=true pattern=snow ! videoconvert ! vp8enc deadline=1 ! rtpvp8pay ! application/x-rtp,media=video,encoding-name=VP8,payload=97 ! tee name=teapod1 teapod1. ! fakesink
videotestsrc is-live=true pattern=ball ! videoconvert ! vp8enc deadline=1 ! rtpvp8pay ! application/x-rtp,media=video,encoding-name=VP8,payload=97 ! tee name=teapod2 teapod2. ! fakesink
videotestsrc is-live=true pattern=smpte ! videoconvert ! vp8enc deadline=1 ! rtpvp8pay ! application/x-rtp,media=video,encoding-name=VP8,payload=97 ! tee name=teapod3 teapod3. ! fakesink
videotestsrc is-live=true pattern=gradient ! videoconvert ! vp8enc deadline=1 ! rtpvp8pay ! application/x-rtp,media=video,encoding-name=VP8,payload=97 ! tee name=teapod4 teapod4. ! fakesink
'''
I then dynamically create a webrtcbin for each WebRTC peer (browser) and link it to the tee
element:
def start_pipeline(self):
self.pipe = Gst.parse_launch(PIPELINE_DESC)
self.sources.append(self.pipe.get_by_name('teapod1'))
self.sources.append(self.pipe.get_by_name('teapod2'))
self.sources.append(self.pipe.get_by_name('teapod3'))
self.sources.append(self.pipe.get_by_name('teapod4'))
def add_webrtc_peer(self, peer_id):
bin = GStreamberWebRTCBin(self, peer_id)
sink = bin.get_sink()
self.pipe.add(sink)
for source in self.sources:
queue = Gst.ElementFactory.make('queue')
self.pipe.add(queue)
source.link(queue)
queue.link(sink)
if self.pipe.get_state(1)[1] == Gst.State.PLAYING:
self.pipe.set_state(Gst.State.PAUSED)
self.pipe.set_state(Gst.State.PLAYING)
Which seems to be working well for Firefox and I can preview all 4 bundled test streams in Firefox.
Running the same code with GST_DEBUG=*dtls*:7
when a Chrome peer connects it does not want to pass this point:
in /ext/dtls/gstdtlsenc.c:
ret = gst_pad_push (self->src, buffer);
In other words gst_pad_push() never returns any value.
What might be causing this?
Edited by Piotr Gasiorowski