Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • gst-plugins-bad gst-plugins-bad
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 973
    • Issues 973
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 105
    • Merge requests 105
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GStreamerGStreamer
  • gst-plugins-badgst-plugins-bad
  • Issues
  • #1475
Closed
Open
Issue created Nov 24, 2020 by Piotr Gasiorowski@piotr.gasiorowski

[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 Nov 24, 2020 by Piotr Gasiorowski
Assignee
Assign to
Time tracking