Commit graph

117 commits

Author SHA1 Message Date
Mathieu Duponchelle
6fd3e2a400 find_codec_preferences: use received caps
When negotiation is triggered by receiving caps on our sink pad
probes, we could encounter a race condition where need-negotiation
is emitted and the application requires the creation of an offer
before the current caps were actually updated.

This led to retrieving incomplete caps when creating the offer,
using find_codec_preferences -> pad_get_current_caps.

Instead, as we save the caps in the probe callback anyway, it is better
and thread safe to use these if they were set.

https://bugzilla.gnome.org/show_bug.cgi?id=796801
2018-07-12 21:39:41 +02:00
Jan Schmidt
27b28f3aec webrtc: Explicitly initialise mutex and condition
Fixes random crashes when an allocated webrtcbin isn't
given fresh 0-filled memory in its allocation. It works
mostly because GMutex and GCond are automatically initialised
in that case.
2018-07-01 10:44:45 +10:00
Jan Schmidt
0fca02bb5e webrtc: Move the transportsendbin pad block removal
Move freeing of the pad blocks back to before we call the
GstBin state change function, as there's something racy
going on on the build server otherwise, where the pads don't
unblock during downward state changes.

This is a bit of a stab in the dark, since I can't recreate
the build server failure locally.
2018-06-30 01:07:32 +10:00
Jan Schmidt
bc128d6100 webrtc: Clean up pad block allocs on dispose.
Release references in pad blocks and release the memory in the
dispose function too, in case the state change doesn't get
run (because calling the parent state change fails).
2018-06-27 22:44:26 +10:00
Jan Schmidt
ed90d3b2ec webrtc: Don't deadlock on block pads on shutdown
When changing state downward, we can't set pads
to inactive if they are blocked, it will deadlock
trying to acquire the streaming lock.

Just calling the parent state change function
will do the correct things to unblock probes and
set the pad inactive, so let it do that and
remove the probes after the parent state change
function has run

https://bugzilla.gnome.org/show_bug.cgi?id=796682
2018-06-27 22:44:26 +10:00
Tim-Philipp Müller
6f46792f0f webrtc: Update for g_type_class_add_private() deprecation in recent GLib 2018-06-24 00:17:26 +02:00
Mathieu Duponchelle
33c7af8845 webrtcbin: copy sticky events on our ghostpads
This lets users call gst_pad_get_current_caps on newly-added
pads to easily determine what to plug them into.

We cannot copy sticky events unconditionally in core,
see #719437

https://bugzilla.gnome.org/show_bug.cgi?id=796387
2018-05-29 13:07:30 +02:00
Tim-Philipp Müller
ed7a98d45b webrtcbin: rtpstorage takes a 64-bit integer for "size-time" property
https://bugzilla.gnome.org/show_bug.cgi?id=796429
2018-05-28 10:43:37 +01:00
Tim-Philipp Müller
2227ef1304 meson: fix libnice fallback options 2018-05-21 14:42:56 +01:00
Tim-Philipp Müller
69fcd6391a webrtc: add some default options for libnice fallback
The tests are not very reliable, so disable for now.
2018-05-19 12:25:02 +01:00
Mathieu Duponchelle
5c450c5992 webrtcbin: implement support for FEC and RTX
https://bugzilla.gnome.org/show_bug.cgi?id=795044
2018-05-09 14:46:14 +02:00
Nirbheek Chauhan
7f7324b3e6 meson: Add a subproject fallback for libnice in webrtc 2018-05-05 18:48:13 +05:30
Sebastian Dröge
8375e33965 webrtcbin: Remove parameter from gst_webrtc_rtp_sender_new() 2018-03-16 11:07:01 +02:00
Matthew Waters
6f50d35246 webrtc: Fix ffeb09e4 conditional
Fixes ffeb09e4ab

if (sscanf(...)) {  // != 0
  error;
}

Is not correct where != 0 indicates some kind of success.

Check instead that the correct number of elements were slurped.
2018-02-08 15:51:35 +11:00
Matthew Waters
7e6b4dcb49 webrtc: change dead code to an assert
CID #1429140
2018-02-08 15:47:33 +11:00
Matthew Waters
ffeb09e4ab webrtc: bail on invalid rtpbin names
If we fail parsing rtpbin pad names, someone has screwed up so critical
and return.

CID #1429142
2018-02-08 15:29:56 +11:00
Matthew Waters
1894293d63 webrtcbin: an element that handles the transport aspects of webrtc connections
SDP's are generated and consumed according to the W3C PeerConnection API
available from https://www.w3.org/TR/webrtc/

The SDP is either created initially from the connected
sink pads/attached transceivers as in the case of generating an offer or
intersected with the connected sink pads/attached transceivers as in
the case for creating an answer.  In both cases, the rtp payloaded streams
sent by the peer are exposed as separate src pads.

The implementation supports trickle ICE, RTCP muxing, reduced size RTCP.

With contributions from:
Nirbheek Chauhan <nirbheek@centricular.com>
Mathieu Duponchelle <mathieu@centricular.com>
Edward Hervey <edward@centricular.com>

https://bugzilla.gnome.org/show_bug.cgi?id=792523
2018-02-02 15:02:21 +11:00