summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-09-23Release 1.19.2HEAD1.19.2masterdiscontinued-for-monorepoTim-Philipp Müller6-14/+68
2021-07-05Protection against early RTCP packets.Göran Jönsson4-0/+98
When receiving RTCP packets early the funnel is not ready yet and GST_FLOW_FLUSHING will be returned when pushing data to it's srcpad. This causes the thread that handle RTCP packets to go to pause mode. Since this thread is in pause mode there will be no further callbacks to handle keep-alive for incoming RTCP packets. This will make the session time out if the client is not using another keep-alive mechanism. Change-Id: Idb29db05f59c06423fa693a2aeeacbe3a1883fc5 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/211>
2021-06-21Update COPYING.LIB, COPYING filesCorentin Damman2-188/+232
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/210>
2021-06-01Back to developmentTim-Philipp Müller2-2/+2
2021-06-01Release 1.19.11.19.1Tim-Philipp Müller6-1993/+490
2021-05-24rtsp-stream: use new gst_buffer_new_memdup()Tim-Philipp Müller1-3/+1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/208>
2021-05-05rtsp-media: fix leak when adding converterDoug Nazar1-0/+1
Free the previous caps before reusing the variable for the converter caps. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/204>
2021-05-05rtsp-client: fix leak adding headersDoug Nazar1-1/+2
gst_rtsp_message_add_header() makes a copy of the header, instead of taking ownership. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/204>
2021-05-05Use gst_element_request_pad_simple...François Laignel1-10/+10
Instead of the deprecated gst_element_get_request_pad. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/195>
2021-04-29rtsp-media: Ensure the bus watch is removed during unprepareDoug Nazar1-2/+9
It's possible for the destruction of the source to be delayed. Instead of relying on the dispose() to remove the bus watch, do it ourselves. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/202>
2021-04-27docs: minor spelling correction in READMEMarc Leeman1-1/+1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/200>
2021-04-27test-replay-server: minor spelling correctionsMarc Leeman1-4/+4
Bumped on these while investigating the example code. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/200>
2021-04-23tests: Don't fail tests if IPv6 not available.Doug Nazar1-4/+43
On computers with IPv6 disabled it shouldn't result in a test failure. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/196>
2021-04-23rtsp-media: Add one more case to seek avoidanceEdward Hervey1-1/+2
This is an extension to the previous commit. There can also be cases where the start position is not specified, in those cases we should also avoid doing seeking unless it's forced. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/197>
2021-04-20rtsp-media: Improve skipping trickmode seek.Doug Nazar1-2/+2
We can also skip the seek if the end range is already correct. Avoids initial seek on play start if playing full stream. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/194>
2021-03-19rtspclientsink: Don't run signal class handlers during the CLEANUP stageSebastian Dröge1-2/+2
It's sufficient to run them during the FIRST stage instead of in both. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/193>
2021-02-15tests: rtspclientsink: fix some leaksTim-Philipp Müller1-1/+5
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/190>
2021-02-15rtspclientsink: mark cached caps as maybe-leaked to make leaks tracer happyTim-Philipp Müller1-0/+2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/190>
2021-02-15rtspclientsink: add unit test for potential shutdown deadlockTim-Philipp Müller1-0/+47
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/189>
2021-02-15rtspclientsink: fix deadlock on shutdown before prerollTim-Philipp Müller1-1/+28
Fixes https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/130 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/189>
2021-02-01rtsp-stream: avoid deadlock in send_funcBranko Subasic1-4/+2
Currently the send_func() runs in a thread of its own which is started the first time we enter handle_new_sample(). It runs in an outer loop until priv->continue_sending is FALSE, which happens when a TEARDOWN request is received. We use a local variable, cont, which is initialized to TRUE, meaning that we will always enter the outer loop, and at the end of the outer loop we assign it the value of priv->continue_sending. Within the outer loop there is an inner loop, where we wait to be signaled when there is more data to send. The inner loop is exited when priv->send_cookie has changed value, which it does when more data is available or when a TEARDOWN has been received. But if we get a TEARDOWN before send_func() is entered we will get stuck in the inner loop because no one will increase priv->session_cookie anymore. By not entering the outer loop in send_func() if priv->continue_sending is FALSE we make sure that we do not get stuck in send_func()'s inner loop should we receive a TEARDOWN before the send thread has started. Change-Id: I7338a0ea60ea435bb685f875965f5165839afa20 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/187>
2021-01-22rtsp-client: cleanup transports during TEARDOWNBranko Subasic1-0/+60
When tunneling RTP over RTSP the stream transports are stored in a hash table in the GstRTSPClientPrivate struct. They are used for, among other things, mapping channel id to stream transports when receiving data from the client. The stream tranports are created and added to the hash table in handle_setup_request(), but unfortuately they are not removed in handle_teardown_request(). This means that if the client sends data on the RTSP connection after it has sent the TEARDOWN, which is often the case when audio backchannel is enabled, handle_data() will still be able to map the channel to a session transport and pass the data along to it. Which eventually leads to a failing assert in gst_rtsp_stream_recv_rtp() because the stream is no longer joined to a bin. We avoid this by removing the stream transports from the hash table when we handle the TEARDOWN request. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/184>
2021-01-08rtspclientsink: Add "update-sdp" signal that allows updating the SDP before ↵Sebastian Dröge2-0/+28
sending it to the server Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/178>
2020-12-23Add test cases for mountpoint of '/'John Lindgren1-42/+108
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/168>
2020-12-23Make a mount point of "/" work correctly.John Lindgren3-9/+31
As far as I can tell, this is neither explicitly allowed nor forbidden by RFC 7826. Meanwhile, URLs such as rtsp://<IP>:554 or rtsp://<IP>:554/ are in use in the wild (presumably with non-GStreamer servers). GStreamer's prior behavior was confusing, in that gst_rtsp_mount_points_add_factory() would appear to accept a mount path of "" or "/", but later connection attempts would fail with a "media not found" error. This commit makes a mount path of "/" work for either form of URL, while an empty mount path ("") is rejected and logs a warning. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/168>
2020-12-21rtspclientsink: Use proper types instead of G_TYPE_POINTER for the RTSP ↵Sebastian Dröge2-3/+5
messages in the "handle-request" signal Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/177>
2020-12-17rtsp-media: Only count senders when counting blocked streamsTobias Ronge1-12/+13
Only sender streams sends the GstRTSPStreamBlocking message, so only these should be counted before setting media status to prepared. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/180>
2020-12-15rtspclientsink add proper support for uri queriesJimmi Holst Christensen1-7/+20
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/166>
2020-12-15rtsp-client: Only unref client watch context on finalize, to avoid deadlockLawrence Troup1-15/+6
Fixes https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/127 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/176>
2020-11-18rtsp-stream: collect a clock_rate when blockingMathieu Duponchelle1-2/+23
This lets us provide a clock_rate in a fashion similar to the other code paths in get_rtpinfo() Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/174>
2020-11-16rtsp-media: Use guint64 for setting the size-time property on rtpstorageSebastian Dröge1-1/+1
Otherwise this will cause memory corruption as the property expects a 64 bit integer. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/169>
2020-11-11rtsp-media: Ignore GstRTSPStreamBlocking from incomplete streamsDavid Phung2-5/+24
To prevent cases with prerolling when the inactive stream prerolls first and the server proceeds without waiting for the active stream, we will ignore GstRTSPStreamBlocking messages from incomplete streams. When there are no complete streams (during DESCRIBE), we will listen to all streams. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/167>
2020-11-11media test: Add test for seeking one active stream with a demuxerKristofer Björkström3-8/+41
Add another seek_one_active_stream test but with a demuxer. The demuxer will flush both streams in opposed to the existing test which only flushes the active stream. This will help exposing problems with the prerolling process after a flushing seek. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/167>
2020-10-23Meson: Use pkg-config generatorXavier Claessens5-48/+11
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/1>
2020-10-19meson: update glib minimum version to 2.56Sebastian Dröge1-1/+1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/164>
2020-10-10rtsp-media-factory: expose API to disable RTCPMathieu Duponchelle7-45/+232
This is supported by the RFC, and can be useful on systems where allocating two consecutive ports is problematic, and RTCP is not necessary. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/159>
2020-10-08git: use our standard pre commit hookMathieu Duponchelle2-0/+86
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/162>
2020-10-08rtsp-stream: make use of blocked_running_time in query_positionMathieu Duponchelle1-0/+7
When blocking, the sink element will not have received a buffer yet and the position query will fail. Instead, we make use of the running time of the buffer we blocked on. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/160>
2020-10-08rtsp-stream: collect rtp info when blockingMathieu Duponchelle1-3/+56
We don't unblock the stream anymore before replying to the play request (883ddc72bb5bc57c95a9e167814d1ac53fe1b443), so the sinks don't have a last-sample after potentially flush seeking. seek_trickmode waits for preroll however, which means the stream will block and wait for a first buffer. Subsequent calls to get_rtpinfo() can thus make use of the information. See https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/115 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/160>
2020-09-30examples: Add an example for loop playbackSeungha Yang3-0/+968
This demo example shows a way of file loop playback of a given source. Note that client seek request is not properly implemented yet. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/154>
2020-09-29rtsp-media: Plug memory leakDavid Phung1-0/+2
The get-storage signal of rtpbin increases the ref count of the storage. So we have to unref it after usage. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/155>
2020-09-18rtsp-media: Get rates only on sender streamsGuiqin Zou1-1/+2
When play a media with both sender and receiver stream, like ONVIF back channel audio in, gst_rtsp_media_get_rates call gst_rtsp_stream_get_rates for each stream to set the rates. But gst_rtsp_stream_get_rates return false for the receiver steam, which lead a g_assert crash. Instead to get rates on all streams, now just get rates on sender streams. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/150>
2020-09-09rtsp-media: set a 0 storage size for TCP receiversMathieu Duponchelle3-17/+40
ulpfec correction is obviously useless when receiving a stream over TCP, and in TCP modes the rtp storage receives non timestamped buffers, causing it to queue buffers indefinitely, until the queue grows so large that sanity checks kick in and warnings start to get emitted. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/149>
2020-09-09rtsp-stream: preroll on gap eventsMathieu Duponchelle1-9/+22
This allows negotiating a SDP with all streams present, but only start sending packets at some later point in time Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/146>
2020-09-08rtsp-media: do not unblock on unsuspendMathieu Duponchelle1-13/+6
rtsp_media_unsuspend() is called from handle_play_request() before sending the play response. Unblocking the streams here was causing data to be sent out before the client was ready to handle it, with obvious side effects such as initial packets getting discarded, causing decoding errors. Instead we can simply let the media streams be unblocked when the state of the media is set to PLAYING, which occurs after sending the play response. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/147>
2020-09-08ci: include template from gst-ci master branch againTim-Philipp Müller1-1/+1
2020-09-08Back to developmentTim-Philipp Müller2-3/+3
2020-09-08Release 1.18.01.18.0Tim-Philipp Müller7-72/+2092
2020-08-20Release 1.17.901.17.90Tim-Philipp Müller6-43/+89
2020-08-03rtsp-thread-pool.c: fix clang 10 warningJordan Petridis1-1/+2
clang 10 is complaining about incompatible types due to the glib typesystem. ``` ../subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-thread-pool.c:534:10: error: incompatible pointer types passing 'typeof ((((void *)0))) *' (aka 'void **') to parameter of type 'GThreadPool **' (aka 'struct _GThreadPool **') [-Werror,-Wincompatible-pointer-types] ``` Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/145>