Commit graph

13 commits

Author SHA1 Message Date
Patricia Muscalu
bd4a9fde89 rtsp-server: Unprepare media that is in error state
Without this patch a prepared media that entered an error state
remains unprepared.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5621>
2023-11-08 14:39:01 +00:00
Jacob Johnsson
e49a9df621 rtsp-server: Only unblock live streams when complete
When media consists of multiple streams we should only unblock the
complete streams.

Fixes #2443

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4334>
2023-10-02 16:22:33 +00:00
Jacob Johnsson
eb0272e210 rtsp-server: Add new ensure-keyunit-on-start property
While the suspend modes NONE and PAUSED provided a low startup latency
for connecting clients they did not ensure that streams started on
fresh data.

With this property we can maintain the low startup latency of those
suspend modes while also ensuring that a stream starts on a key unit.
Furthermore, by modifying the value of a new property,
ensure-keyunit-on-start-timeout, it is possible to accept a keyunit of
a certain age but discard it if too much time has passed and instead
force a new keyunit.

Fixes #2443

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4334>
2023-10-02 16:22:33 +00:00
Sebastian Dröge
55c961a4dc rtsp-server: media-factory: Make sure a shared media is actually still usable
Previously it was possible that a shared media was just in the process
of being unprepared because the last client disappeared, while another
client retrieved it from the cache and then tried to use it. Unless the
media was reusable this would've then failed unnecessarily.

To avoid this it is necessary to lock the media directly in
gst_rtsp_media_factory_construct() and return a locked media. After
locking the cached media it is necessary to check if the media was ever
unprepared or is actually reusable and based on that either reuse it or
create a new media.

This minimally changes the gst_rtsp_media_factory_construct() API to
always return a locked media, and adds a new
gst_rtsp_media_can_be_shared() function to check if a media can actually
be shared in practice.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4606>
2023-05-19 11:09:48 +00:00
Sebastian Dröge
5b178caadf rtsp-server: media: First set state to PLAYING again temporarily, then send EOS
Sending the EOS event while the pipeline is PAUSED can deadlock on the
stream lock if a sink is currently blocked because of pre-rolling.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4340>
2023-04-05 08:06:50 +00:00
Tim-Philipp Müller
f5977dae15 rtsp-server: drop use of GSlice allocator
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3784>
2023-02-03 17:48:09 +00:00
Sebastian Dröge
502eddfc36 rtsp-server: Add/fix various annotations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3194>
2022-10-18 13:51:16 +03:00
Peter Stensson
ec605e7b52 rtsp-server: Add support for adjusting request response on pipeline errors
The idea is to give the application the possibility to adjust the error
code when responding to a request. For that purpose the pipeline's bus
messages are emitted to subscribers through a signal handle-message.
The subscribers can then check those messages for errors and adjust
the response error code by overriding the virtual method
adjust_error_code().

Fixes #1294

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2972>
2022-10-11 07:42:28 +02:00
Patricia Muscalu
6c3445a83f rtsp-media: Correct logic on GstRTSPStreamBlocking message reception
We must take into account the receiving streams as well when calculating
the expected number of the received GstRTSPStreamBlocking messages.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2429>
2022-05-20 07:37:05 +00:00
Sebastian Dröge
14d636b224 rtsp-media: Unprepare suspended medias too
Previously suspended medias immediately reached the UNPREPARED state
without going through the media's unprepare() vfunc. This didn't allow
the media subclass to do any additional cleanup, and for example the
shutdown-eos property of GstRTSPMedia was ignored.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1090>
2021-10-07 11:16:39 +00:00
Sebastian Dröge
e9d551b45c rtsp-media: Only unprepare a media if it was not already unpreparing anyway
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1083>
2021-10-07 05:28:19 +00:00
Sebastian Dröge
55222db66e rtsp-media: Also mark receive-only (RECORD) medias as prepared when unsuspending
Previously the status was only changed for other medias.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1058>
2021-10-05 16:40:07 +00:00
Thibault Saunier
a43d7eaef4 Move files from gst-rtsp-server into the "subprojects/gst-rtsp-server/" subdir 2021-09-24 16:15:21 -03:00
Renamed from gst/rtsp-server/rtsp-media.c (Browse further)