Commit graph

929 commits

Author SHA1 Message Date
Xavier Claessens
372c44655a janusvr_signaller: Do not block in end_session()
Only stop() is allowed to block, wait there.

Fixes #603

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1848>
2024-10-30 12:36:01 +00:00
Mathieu Duponchelle
79845fd99a awstranscriber: post warning message with details when item is late
When the latency is configured to a value that is too low, items will be
pushed out with an adjusted timestamp, thus affecting synchronization.

It can be useful for the application to receive details about those
adjustments.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1793>
2024-10-28 13:13:31 +00:00
Sebastian Dröge
41ddbd8706 mpegtslivesrc: Parse PAT/PMT and only handle PCRs from the first program
This matches default behaviour of tsdemux and makes sure we're not
jumping between different PCRs if there are multiple.

At a later time, program selection could be implemented.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1887>
2024-10-28 12:15:11 +00:00
Chris Bainbridge
5010ee872d webrtc: Fix Python custom signaller receiving SDP offer
The GstWebRTC API web interface defaults to receiving an SDP offer and
generating an answer, but this can be overridden by entering "offer
options" before clicking to open the remote stream. The Python
webrtcsink-custom-signaller.py example failed in this mode as it was
coded to only generate an offer and receive an answer. Fix this by
implementing support for receiving an offer and sending an answer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1883>
2024-10-28 11:23:32 +00:00
Chris Bainbridge
e30d80c71e webrtc: README: add webrtcsink-custom-signaller.py
Document the Python webrtcsink custom signaller example.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1888>
2024-10-28 10:19:25 +00:00
Sebastian Dröge
98a87fb8f2 Update to quick-xml 0.37
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1891>
2024-10-28 09:12:13 +00:00
Jerome Colle
0df2b72ff2 rtpbasedepay2: fix reference timestamp meta duplicates
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1890>
2024-10-25 18:23:07 +02:00
Sebastian Dröge
f73317510e Update to quick-xml 0.36
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1881>
2024-10-24 10:09:18 +03:00
Sanchayan Maity
af54b2396b net/quinn: Specify crypto provider explicitly
rustls allows the choice of ring or aws-lc-rs as the cryptographic
library implementation. This is enabled/selected via Cargo feature
flags. We have plugins directly or indirectly depending on rustls
like quinn, aws and spotify. In the presence of multiple plugins,
selecting different implementations as the default, rustls can
panic.

The safest way to avoid this is by using builder_with_provider
and selecting a provider explicitly.

See below issues for further discussion and clarifications.
https://github.com/rustls/rustls/issues/1877
https://github.com/seanmonstar/reqwest/pull/2225

While at it, also specify features explicitly for quinn and rustls.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1878>
2024-10-23 21:24:22 +05:30
kingosticks
a81b7f380f net/quinn: Fix test panic due to unset default crypto provider
If another dep in the workspace pulls in a different rustls crypto
provider then we need to explicitly specify our default provider.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1801>
2024-10-23 12:37:05 +00:00
Benjamin Gaignard
cf757e6ad2 relationmeta: Add onvifmeta2relationmeta element
Add onvifmeta2relationmeta wich convert ONVIF metas
into relation metas and add them to buffer.
Used ONVIFS metas are removed from buffer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1464>
2024-10-23 10:27:31 +00:00
Benjamin Gaignard
fc3cefc38c relationmeta: Add relationmeta2onvifmeta element
Add relationmeta2onvifmeta which convert relation metas
to ONVIF metas and add them to buffer.
Used relation metas are removed from buffer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1464>
2024-10-23 10:27:31 +00:00
Benjamin Gaignard
de153222da onvif: Add onvifmetadataextractor element
onvifmetadataextractor does the opposite operation than
onvifmetadatacombiner, it extracts ONVIF metadatas from the
stream buffer and export them as buffers which could be
used by rtponvifpay element.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1464>
2024-10-23 10:27:31 +00:00
Benjamin Gaignard
43a4468263 onvif: onvifmetadataoverlay: Add support of Transformation node
Transformation node allows to modify the coordinate system for
individual nodes of XML tree.
Parse the XML to get translation and scaling vectors values and
apply them when computing bounding box coordinates.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1464>
2024-10-23 10:27:31 +00:00
Benjamin Gaignard
eddf443a8b onvif: Use CustomMeta::is_registered function
Use CustomMeta::is_registered() to avoid registering twice
OnvifXMLFrameMeta type.
It will be useful later when adding relation meta elements.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1464>
2024-10-23 10:27:31 +00:00
Sebastian Dröge
4abc5c7a48 Be stricter with Impl-trait bounds to enforce type hierarchies
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1871>
2024-10-22 13:43:12 +00:00
Sebastian Dröge
7e59c3f0fd Remove once_cell dependency
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1868>
2024-10-21 17:53:18 +00:00
Sanchayan Maity
d6e7031799 net/quinn: Fix panic due to unset default crypto provider
Fix CI failure that we see after the upgrade of rustls from
0.23.13 to 0.23.15.

Related docs/PR
https://docs.rs/rustls/latest/rustls/crypto/struct.CryptoProvider.html#using-the-per-process-default-cryptoprovider
https://github.com/quinn-rs/quinn/pull/1882

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1865>
2024-10-21 09:27:33 +00:00
Sebastian Dröge
0e3d019e24 aws: Don't unnecessarily clone AWS behaviour version
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1864>
2024-10-20 19:53:15 +00:00
Sebastian Dröge
00a4398aee aws: Allow a deprecated BehaviourVersion for now
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1864>
2024-10-20 19:53:15 +00:00
Sebastian Dröge
120c62964d Update to bitstream-io 2.5
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1864>
2024-10-20 19:53:15 +00:00
Sebastian Dröge
d057488a20 aws: Update to test-with 0.14
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1864>
2024-10-20 19:53:15 +00:00
Sebastian Dröge
b43a778a8e Fix a couple of type hierarchy bugs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1864>
2024-10-20 19:53:15 +00:00
Sebastian Dröge
ec8759ae44 Fix various new clippy warnings due to MSRV bump
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1864>
2024-10-20 19:53:15 +00:00
Sebastian Dröge
3e040c65f1 reqwesthttpsrc: Allow a server error after a seek
There might be a server error because a seek would immediately close the
old connection without allowing for clean shutdown.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/527

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1861>
2024-10-18 15:59:41 +00:00
Sebastian Dröge
54bc7a898e webrtc: Silence two new Rust 1.82 clippy warnings
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1860>
2024-10-17 21:38:10 +00:00
Mathieu Duponchelle
959463ff65 webrtcsink: fix session not in place errors
The InPlace/Taken logic was introduced to avoid using an extra lock
around the session, but it places expectations that are not always
obvious to meet around when a session is expected to be taken or not.

Any code that expects to have access to the sessions at all times thus
needs either extra logic in the session wrapper, or to maintain the
state of the session outside of the session (eg mids).

This commit removes the logic, and wraps sessions in Arc<Mutex>>.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1852>
2024-10-17 12:29:53 +00:00
Mathieu Duponchelle
ef06421a25 webrtcsrc: make updated transceiver retrieval backward compatible
In 1.24 and before transceivers for remote sendonly medias are only
created at answer time. If that is the case, we can add the transceiver
ourself, it will get associated when creating the answer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1853>
2024-10-16 14:48:20 +00:00
Mathieu Duponchelle
82d0eaf438 webrtcsrc: fix debug message on offer created
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1853>
2024-10-16 14:48:20 +00:00
Mathieu Duponchelle
3d257b4819 webrtcsink: improve debut message when start session failed
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1853>
2024-10-16 14:48:20 +00:00
Chris Bainbridge
785209cc7f custom-signaller: add missing manual-sdp-munging property
All signallers must now implement this property

Fixes #611

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1854>
2024-10-16 15:45:50 +02:00
Mathieu Duponchelle
5f0ca7acde webrtcsink: fix custom_signaller hanging
Since 6a23ae168f, the chain function
of webrtcsink adds a custom meta on input buffers.

That custom meta was registered only by the class_init of the subclasses
of BaseWebRTCSink, but the custom signaller example uses
BaseWebRTCSink::with_signaller() directly.

Fix by registering the meta in BaseWebRTCSink::class_init()

Fixes: #610
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1854>
2024-10-16 15:25:09 +02:00
Mathieu Duponchelle
5e49f1d10e webrtcsrc: address non-compliant transceiver creation
Instead of adding transceivers explicitly then setting the remote
description, expecting the manually added transceivers to get picked
up, we pass a promise to set-remote-description-set, and set the
relevant properties on the automatically created transceivers at that
point.

We then call create-answer and proceed as before.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/596
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1829>
2024-10-14 11:19:38 +00:00
Guillaume Desmottes
027eead86d webrtc: janus: add 'janus-state' property to the sink
This property can be used by applications to track the state of the
signaller, especially to know when the stream is up.

Fix #510

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1505>
2024-10-10 10:59:50 -04:00
Guillaume Desmottes
d8b9a7a486 webrtc: janus: fix typo in doc
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1505>
2024-10-10 10:57:02 -04:00
Matthew Waters
d4fd21d197 rtp2/jitterbuffer: check for event query earlier
If a serialized query arrives (e.g. allocation) and the jitterbuffer has never
received a packet, then jitterbuffer would never forward the serialized query
resulting in a hang.

Fix by forwarding queries/events before the conditions that require the first
packet to arrive.

Also update unit test to check for this scenario.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1846>
2024-10-09 16:21:13 +00:00
Mathieu Duponchelle
b3ace3678b webrtcsink: fix naming of error dot files for discovery pipelines
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1843>
2024-10-03 14:35:45 +00:00
Guillaume Desmottes
d9e8f4054c webrtc: allow PAR change in webrtcsink input caps
We are already allowing resolution changes which can lead to change in
pixel-aspect-ratio.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1830>
2024-09-30 14:40:48 +02:00
Sebastian Dröge
dcb072ee23 webrtc: livekit: Set connection earlier during setup
Otherwise it's not available yet when handling the initial participants
that are already in the session when joining.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1794>
2024-09-30 13:04:24 +03:00
Sebastian Dröge
cd2b641321 livekitwebrtcsrc: Add API for disabling/enabling a track
A disabled track is still negotiated but no data is sent for it
temporarily until it is enabled again.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1794>
2024-09-30 13:04:24 +03:00
Sebastian Dröge
27dc76826e livekitwebrtcsrc: Add pad properties for various LiveKit participant / track metadata
The content of the TrackInfo and ParticipantInfo structs is exposed as
gst::Structure.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1794>
2024-09-30 13:04:24 +03:00
Sebastian Dröge
ceb88d960f rtpav1depay: Add wait-for-keyframe and request-keyframe properties
These behave the same as the properties in other depayloaders. Keyframe
detection is based on the N flag in the aggregation header.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/598

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1823>
2024-09-27 12:25:16 +03:00
Mathieu Duponchelle
87c6719e1d webrtcsink: add define-encoder-bitrates signal
When congestion control is used for a session with multiple encoders,
the default implementation simply divides the overall bitrate equally
between encoders.

This is not always desirable, and this patch exposes a new signal
that users can register to, with two arguments:

* The overall bitrate to allocate
* A structure with an encoder.stream_name -> bitrate mapping

Handlers should return a similar structure with a custom mapping.

An example is also provided.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1792>
2024-09-25 15:19:44 +00:00
François Laignel
f532d523b2 webrtcsink: fix RFC7273 attributes
RFC7273 related attributes are set in the SDP offer by passing them via the
transceiver `codec-preferences` signal. These attributes are intended to be set
at the media level so they must be prefixed by `a-` in the `Caps` argument to
the signal. Otherwise they end up under `a=fmtp`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1810>
2024-09-25 09:30:48 +00:00
Mathieu Duponchelle
5c66d8c107 webrtcsrc: ensure source pad has msid when added
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1800>
2024-09-24 14:50:30 +00:00
Mathieu Duponchelle
f70482d9bc webrtcsrc: fix default msid property value
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1800>
2024-09-24 14:50:30 +00:00
Mathieu Duponchelle
a85b0cb72e webrtcsrc: expose MSID property on source pad
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1789>
2024-09-20 09:31:57 +03:00
Jan Schmidt
7905626a5f onvifmetadatapay: Set output caps earlier
As soon as input caps arrive, we can set output
caps. This means upstream can send gap events earlier,
before there is any actual metadata to send

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1779>
2024-09-19 20:45:43 +10:00
Mathieu Duponchelle
6a23ae168f webrtcsink: implement mechanism to forward metas over control channel
It may be desirable for the frontend to receive ancillary information
over the control channel.

Such information includes but is not limited to time code metas, support
for other metas (eg custom meta) might be implemented in the future, as
well as downstream events.

This patch implements a new info message, probes buffers that arrive at
nicesink to look up timecode metas and potentially forwards them to the
consumer when the `forward-metas` property is set appropriately.

Internally, a "dye" meta is used to trace the media identifier the
packet we are about to send over relates to, as rtpfunnel bundles all
packets together.

The example frontend code also gets a minor update and now logs info
messages to the console.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1749>
2024-09-19 08:41:47 +00:00
Mathieu Duponchelle
db026ad535 gstwebrtc-api: expose API on consumer-session for munging stereo
We cannot do that by default as this is technically non-compliant,
so we need to expose API to let the user opt into it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1754>
2024-09-19 07:37:23 +00:00