Olivier Crête
e548916d85
webrtc receivebin: Drop serialized queries before receive queue
...
If they're not dropped, they can be blocked in the queue even if it is
leaky in the case where there is a buffer being pushed downstream. Since
in webrtc, it's unlikely that there will be a special allocator to
receive RTP packets, there is almost no downside to just ignoring the
queries.
Also drop queries if they get caught in the pad probe after the queue.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2363 >
2021-06-29 00:42:20 -04:00
Olivier Crête
543fcb93a4
webrtc receivebin: Only set queue to leaky when the pad is blocked
...
When the pad is no longer blocked, remove the leakyness to make sure
everything gets into the jitterbuffer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2363 >
2021-06-29 00:42:20 -04:00
Olivier Crête
a07e52528c
webrtc receivebin: Don't unblock pad until sender is unblocked
...
As ther OpenSSL session is created when the receiver goes into
playing, we have to wait for the ICE session to be connected before we
can start delivering packets to the DTLS element.
Fixes #1599
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2363 >
2021-06-29 00:42:20 -04:00
Sebastian Dröge
0e559fc2f3
webrtcbin: Sync to the clock per stream and not per bundle
...
By using the clocksync inside the dtlssrtpenc, all streams inside a
bundled are synchronized together. This will cause problems if their
buffers are not already arriving synchronized: clocksync would wait for
a buffer on one stream and then buffers from the other stream(s) with
lower timestamps would all be sent out too late.
Placing the clocksync before the rtpbin and rtpfunnel synchronizes each
stream individually and they will be send out more smoothly as a result.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2355 >
2021-06-28 16:38:33 +00:00
Olivier Crête
ee0124cb36
webrtc: Remove the webrtc-priv.h header from public headers
...
And this time for real, also import it in a couple more places
inside the webrtc element to make it build.
Fixes #1607
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2359 >
2021-06-28 16:06:59 +00:00
Sebastian Dröge
096a7f1ac0
webrtcbin: Set transceiver kind and codec preferences immediately when creating it
...
Otherwise the on-new-transceiver signal will always be emitted with kind
set to UNKNOWN and no codec preferences although both are often known at
this point already.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2360 >
2021-06-25 14:35:43 +03:00
Sebastian Dröge
7ee8f4539e
webrtcbin: Store newly created transceivers when creating an answer also in the seen transceivers list
...
Otherwise it might be used a second time for another media afterwards.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2310 >
2021-06-25 09:45:24 +00:00
Sebastian Dröge
4efdb40f43
webrtcbin: When creating a new transceiver as part of creating the answer also take its codec preferences into account
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2310 >
2021-06-25 09:45:24 +00:00
Sebastian Dröge
b7951fb897
webrtcbin: Fix a couple of caps leaks of the offer caps
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2310 >
2021-06-25 09:45:24 +00:00
Philippe Normand
0f492a39c9
webrtcbin: Stop transceivers update after first SDP error on data channel
...
When invalid SDP is supplied, _update_data_channel_from_sdp_media() sets the
GError, so it is invalid to continue any further SDP processing, we have to exit
early when the first error is raised.
This change is similar to the one applied in
064428cb34
.
See also #1595
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2356 >
2021-06-25 05:12:37 +00:00
Olivier Crête
a931e31141
webrtc lib: Make the datachannel struct private
...
This will prevent any unsafe access.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2241 >
2021-06-21 20:53:09 +00:00
Olivier Crête
a0813c5bd2
webrtc lib: Make the icetransport struct private
...
This will prevent any unsafe access.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2241 >
2021-06-21 20:53:09 +00:00
Olivier Crête
a6593753a5
webrtc lib: Make the rtpsender struct private
...
This will prevent any unsafe access.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2241 >
2021-06-21 20:53:09 +00:00
Olivier Crête
b5f2de3124
webrtc lib: Make the transceiver struct private
...
This will prevent any unsafe access.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2241 >
2021-06-21 20:53:09 +00:00
Philippe Normand
064428cb34
webrtcbin: Stop transceivers update after first SDP error
...
When invalid SDP is supplied, _update_transceiver_from_sdp_media() sets the
GError, so it is invalid to continue any further SDP processing, we have to exit
early when the first error is raised.
Fixes #1595
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2254 >
2021-05-30 00:16:10 +00:00
Doug Nazar
4fcfd5b7f9
webrtcbin: Fix race bringing up sctp data channel
...
Notifying before pads are linked can cause the stream to fail to start.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2256 >
2021-05-19 05:49:48 +00:00
Matthew Waters
a836bd4766
webrtcbin: advertise harder the rtcp-mux-only requirement
...
And ignore rtcp ICE candidates
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2239 >
2021-05-19 04:42:56 +00:00
Sid Sethupathi
abe7e724ed
webrtcbin: update default jb latency docs
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2242 >
2021-05-19 03:53:55 +00:00
Olivier Crête
3bdf1e691e
webrtc: Remove reundundant context object in transportsendbin
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260 >
2021-05-18 20:26:38 -04:00
Olivier Crête
51821644ba
webrtc: Wait until ICE is connected to start DTLS handshake process
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260 >
2021-05-18 20:18:28 -04:00
Olivier Crête
b6965e9906
webrtcbin: Remove pad probe on nicesink
...
This pad probe is no longer necessary, libnice now drops
all buffers before the stream is connected. This pad problem
also caused deadlocks in some situations.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260 >
2021-05-18 19:08:48 -04:00
Olivier Crête
f34be8a3bd
webrtcbin: Intersect answer with codec prefs & capabilities
...
In case the local capabilities changed since the last negotiaton,
we need to re-intersect and see if the result would be different.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183 >
2021-05-13 15:05:00 -04:00
Olivier Crête
3065ac49fb
webrtcbin: Ignore current caps for codec negotiation
...
On the sink pad, we want the caps of the current stream, those
are the "received_caps" field. If we haven't received caps yet, then
we only care about the caps that the next element can accept, that is
the caps from the peer pad (and the preferences). Otherwise, we prevent
re-negotiation to a better codec when possible.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183 >
2021-05-13 15:05:00 -04:00
Olivier Crête
4bb94c6970
webrtcbin: Remove dead code
...
The function is only called to create an offer, so no
need to pass the offer parameter and then check it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183 >
2021-05-13 15:05:00 -04:00
Olivier Crête
f6345b4b03
webrtcbin: Refactor codec preference retrieval
...
Now intersect against pads on both sides if they are available.
If the intersection fails, we now just reject the creation of the offer
or answer as it means that the codec_preferences are too restrictive or
that the caps on both sides the webrtcbin are not compatible.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183 >
2021-05-13 15:05:00 -04:00
Olivier Crête
48f4498801
webrtcbin: Intersect codec preferences with caps from pads
...
When creating an offer or an answer, also take into account
the caps on the pads as well as the codec preferences when both are set.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183 >
2021-05-13 15:05:00 -04:00
Olivier Crête
70befc0b21
webrtcbin: Implement caps queries on sinkpad based on codec preferences
...
Also includes a unit test.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183 >
2021-05-13 15:05:00 -04:00
Olivier Crête
dc6655542d
webrtcbin: Hold transceiver lock when accessing codec_preferences
...
This is required to allow the applications to modify the preferences.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183 >
2021-05-13 15:05:00 -04:00
Johan Sternerup
4d514abfd6
webrtcbin: Fix deadlock when receiving new sctp stream
...
When receiving an sctp message for a stream that not yet has an
sctpdec pad associated with it means we end up in
_on_sctpdec_pad_added. At this point we're holding the sctpassocation
lock. Then it's not possible to take the pc_lock because then code
executing under the pc_lock (which means anything in the webrtc
thread) may not take the sctpassociation lock. For example, running
the data channel close procedure from the webrtc thread means we
eventually end up sending a SCTP_RESET_STREAMS packet which needs to
grab the sctpassociation lock.
This means _on_sctpdec_pad_added simply cannot take the pc_lock and
also it is not possible to postpone the channel creation as we need to
link the pads right there. The solution is to introduce a more
granular dc_lock that protects only the things that needs to be done
to create the datachannel.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2186 >
2021-05-12 03:02:27 +00:00
Johan Sternerup
8dbdfad914
webrtcbin: Support closing of data channels
...
Support for closing WebRTC data channels as described in RFC
8831 (section 6.7) now fully supported. This means that we can now
reuse data channels that have been closed properly. Previously, an
application that created a lot of short-lived on-demand data channels
would quickly exhaust resources held by lingering non-closed data
channels.
We now use a one-to-one style socket interface to SCTP just like the
Google implementation (i.e. SOCK_STREAM instead of SOCK_SEQPACKET, see
RFC 6458). For some reason the socket interface to use was made
optional through a property "use-sock-stream" even though code wasn't
written to handle the SOCK_SEQPACKET style. Specifically the
SCTP_RESET_STREAMS command wouldn't work without passing the correct
assocation id. Changing the default interface to use from
SOCK_SEQPACKET to SOCK_STREAM now means we don't have to bother about
the association id as there is only one association per socket. For
the SCTP_RESET_STREAMS command we set it to SCTP_ALL_ASSOC just to
match the Google implementation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2186 >
2021-05-12 03:02:27 +00:00
Matthew Waters
a78c907597
webrtc: only add nack pli by default if kind is video
...
Sending/receiving PLI's (Picture Loss Indication) for non-video doesn't
really make sense. This also matches what the browsers do.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2220 >
2021-05-06 12:19:51 +00:00
Matthew Waters
1470660976
webrtc: move webrtc_kind_from_caps() to utils
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2220 >
2021-05-06 12:19:51 +00:00
François Laignel
ad3d7d34cc
Use gst_element_request_pad_simple...
...
Instead of the deprecated gst_element_get_request_pad.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2180 >
2021-05-05 06:17:14 +00:00
Matthew Waters
5835f2aa8d
webrtc: advertise support for transport-cc rtcp-fb by default
...
Still requires explicit enabling by the application through the header
extension on all the relevant payloaders.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2207 >
2021-04-29 22:01:54 +10:00
Matthew Waters
1ab58736df
webrtc/stats: provide the twcc stats when available
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2207 >
2021-04-29 22:01:54 +10:00
Nazar Mokrynskyi
fe190fb5eb
webrtcbin: downgrade "dropping ICE candidates from SDP" from warning to debug level
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2187 >
2021-04-23 00:15:26 +00:00
Olivier Crête
c690be3e03
webrtcbin: Attach rtpbin even for data channels
...
This is required because the same transport may later be used for RTP.
In which case the RTCP needs to flow bi-directionnally already.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2172 >
2021-04-22 22:15:31 +00:00
Frederich Munch
6f2c010360
Fix missing unref of nice-agent causing sockets to never close.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1960 >
2021-04-22 21:14:49 +00:00
Doug Nazar
4e29ba9fce
webrtc: Fix sctp task's return type.
...
GstWebRTCBinFunc expects a GstStructure* return type.
Fixes segfault on PowerPC.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2188 >
2021-04-22 16:14:41 -04:00
Olivier Crête
813a320c06
webrtcbin: Filter caps isn't fixed
...
Fix an assertion because the filter paramter passed to
gst_caps_is_equal_fixed() wasn't fixed. So use the regular
gst_caps_is_equal() instead.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2175 >
2021-04-19 19:06:50 -04:00
Olivier Crête
d67dcb2227
webrtcbin: Simplify answer_caps intersection code a little
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
12ab469ad3
webrtcbin: Move GstPromise reply to operation framework
...
This makes it possible to reply to all promises in a consistent way
without having to do a unlock/relock that is always risky.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
38ef12063d
webrtcbin: Make sure PC_LOCK is release when replying to promise
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
913383166b
webrtcbin: Take PC lock around all entry points
...
All of those action signals change the internal state, so
protect it by using the PC_LOCK
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
572c2b6783
webrtcbin: Take PC_LOCK when requesting new pad
...
This is needed to avoid having the state change under us.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
c7107fd940
webrtcbin: Ensure that query caps method returns valid caps
...
This means rejecting any caps that aren't fixed. Also, use a filter
that will create unfixed caps if the other side just returns ANY.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
09c65fe534
webrtcbin: Associate the stream with a new transceiver
...
Otherwise, this newly created transceiver has no stream and it
aborts later when it tries to connect the input pad.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
83e546f935
webrtcbin: Match unassociated transceiver by kind too
...
When a new m-line comes in that doesn't have a transceiver, only match
existing transceivers of the same kind.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
7db5848376
webrtcbin: Fix typoe in name of error GstStructure
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 18:37:27 -04:00
Olivier Crête
7f29486ba4
webrtcbin: Enforce direction on request sink pad with a specific name
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104 >
2021-04-12 17:55:07 -04:00