Commit graph

1625 commits

Author SHA1 Message Date
Thibault Saunier
5b039416db docs: Port to hotdoc 2019-05-13 11:38:39 -04:00
Sebastian Dröge
abf6be1d7a rtsp-server: Fix various Since markers 2019-04-23 15:09:34 +03:00
Sebastian Dröge
8d3bef4c1e rtsp-server: Add various Since: 1.14 markers 2019-04-23 15:01:32 +03:00
Sebastian Dröge
802a648723 rtsp-server: Add various missing Since: 1.16 markers 2019-04-23 14:56:42 +03:00
Sebastian Dröge
640c5bba41 rtspclientsink: Set async-handling=false for the internal bins
Without this we can easily run into a race condition with async state changes:
- the pipeline is doing an async state change
- we set the internal bins to PLAYING but that's ignored because an
  async state change is currently pending
- the async state change finishes but does not change the state of the
  internal bins because of locked_state==TRUE
- the internal bins stay in PAUSED forever
2019-04-22 10:38:08 +00:00
Sebastian Dröge
c4653ef38b rtspclientsink: Use write_messages() API to send buffer lists in one go
And to write messages with multiple memories also via writev().
2019-04-22 10:38:08 +00:00
Kristofer Bjorkstrom
b578628dc1 rtsp-client: Handle Content-Length limitation
Add functionality to limit the Content-Length.
API addition, Enhancement.

Define an appropriate request size limit and reject requests
exceeding the limit with response status 413 Request Entity Too Large

Related to !182
2019-04-22 09:17:13 +00:00
Tim-Philipp Müller
f586450b99 Back to development 2019-04-19 11:00:07 +01:00
Tim-Philipp Müller
70e0d0b27e Release 1.16.0 2019-04-19 00:34:55 +01:00
Sebastian Dröge
0f0a10525a rtspclientsink: Notify the stream transport about each written message
Otherwise it will never try to send us the next one: it tries to keep
exactly one message in-flight all the time.

In gst-rtsp-server this is done asynchronously via the GstRTSPWatch but
in the client sink we always write data out synchronously.
2019-04-15 17:34:56 +00:00
Göran Jönsson
3cfe88632f rtsp_server: Free thread pool before clean transport cache
If not waiting for free thread pool before clean transport caches, there
can be a crash if a thread is executing in transport list loop in
function send_tcp_message.

Also add a check if priv->send_pool in on_message_sent to avoid that a
new thread is pushed during wait of free thread pool. This is possible
since when waiting for free thread pool mutex have to be unlocked.
2019-04-11 08:02:52 +02:00
Tim-Philipp Müller
cd46712162 Release 1.15.90 2019-04-11 00:35:56 +01:00
Ulf Olsson
d09b7c8e4f rtsp-stream: Add support for GCM (RFC 7714)
Follow-up to !198
2019-04-10 08:43:29 +00:00
Erlend Eriksen
a9d3bcc03e session pool: fix missing klass-> in klass->create_session 2019-03-28 00:27:37 +01:00
Tim-Philipp Müller
0becf0b67d g-i: pass --quiet to g-ir-scanner
This suppresses the annoying 'g-ir-scanner: link: cc ..' output
that we get even if everything works just fine.

We still get g-ir-scanner warnings and compiler warnings if
we pass this option.
2019-03-23 19:16:17 +00:00
Tim-Philipp Müller
6f43461592 g-i: silence 'nested extern' compiler warnings when building scanner binary
We need a nested extern in our init section for the scanner binary
so we can call gst_init to make sure GStreamer types are initialised
(they are not all lazy init via get_type functions, but some are in
exported variables). There doesn't seem to be any other mechanism to
achieve this, so just remove that warning, it's not important at all.
2019-03-23 19:15:48 +00:00
Tim-Philipp Müller
48d7d5846f meson: pass -Wno-unused to compiler if gstreamer debug system is disabled 2019-03-21 11:49:10 +00:00
Göran Jönsson
1fd49d36d1 rtsp-media: Handle set state when preparing.
Handle the situation when  a call to gst_rtsp_media_set_state is done
when media status is preparing.

Also add unit test for this scenario.

The unit test simulate on a media level when two clients share a (live)
media.
Both clients have done SETUP and got responses. Now client 1 is doing
play and client 2 is just closing the connection.

Then without patch there are a problem when
client1 is calling gst_rtsp_media_unsuspend in handle_play_request.
And client2 is doing closing connection we can end up in a call
to gst_rtsp_media_set_state when
priv->status == GST_RTSP_MEDIA_STATUS_PREPARING and all the logic for
shut down media is jumped over .

With this patch and this scenario we wait until
priv->status == GST_RTSP_MEDIA_STATUS_PREPARED and then continue to
execute after that and now we will execute the logic for
shut down media.
2019-03-20 12:26:50 +01:00
Tim-Philipp Müller
f0a9861186 Back to development 2019-03-04 09:13:30 +00:00
Tim-Philipp Müller
14d0b77df6 Release 1.15.2 2019-02-26 11:58:53 +00:00
Göran Jönsson
7e01dfd151 rtsp-media: Fix multicast use case with common media
Use case
client 1: SETUP
client 1: PLAY
client 2: SETUP
client 1: TEARDOWN
client 2: PLAY
client 2: TEARDOWN
2019-02-19 12:12:34 +01:00
Göran Jönsson
afb27f91cf rtsp-server: remove recursive behavior
Introduce a threadpool to send rtp and rtcp to avoid recursive behavior.
2019-02-02 10:42:33 +00:00
Sebastian Dröge
4be7424de5 rtsp-client: Only allow to set either a send_func or send_messages_func but not both
And route all messages through the send_func if no send_messages_func
was provided.

We otherwise break backwards compatibility.
2019-01-30 14:40:09 +02:00
Sebastian Dröge
c372643e1e rtsp-client: Add support for sending buffer lists directly
Fixes https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/issues/29
2019-01-30 14:40:09 +02:00
Sebastian Dröge
d708f9736b rtsp-server: Add support for buffer lists
This adds new functions for passing buffer lists through the different
layers without breaking API/ABI, and enables the appsink to actually
provide buffer lists.

This should already reduce CPU usage and potentially context switches a
bit by passing a whole buffer list from the appsink instead of
individual buffers. As a next step it would be necessary to
  a) Add support for a vector of data for the GstRTSPMessage body
  b) Add support for sending multiple messages at once to the
    GstRTSPWatch and let it be handled internally
  c) Adding API to GOutputStream that works like writev()

Fixes https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/issues/29
2019-01-30 14:39:50 +02:00
Benjamin Berg
621e140a8e client: Fix crash in close handler
The close handler could trigger a crash because it invalidated the
watch_context while still leaving a source attached to it which would be
cleaned up at a later point.
2019-01-29 18:34:08 +00:00
Edward Hervey
a48711fa9d rtsp-stream: Use cached address when allocating sockets
If an address/port was previously decided upon (ex: multicast in the
SDP), then use that instead of re-creating another one

Fixes https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/issues/57
2019-01-29 14:42:35 +01:00
Lars Wiréen
ae32203cb0 rtsp-media: Fix race codition in finish_unprepare
The previous fix for race condition around finish_unprepare where the
function could be called twice assumed that the status wouldn't change
during execution of the function. This assumption is incorrect as the
state may change, for example if an error message arrives from the
pipeline bus.

Instead a flag keeping track on whether the finish_unprepare function
is currently executing is introduced and checked.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/issues/59
2019-01-25 12:44:23 +00:00
Tim-Philipp Müller
d5ccb5a7d0 Release 1.15.1 2019-01-17 02:26:50 +00:00
Patricia Muscalu
3be1b9bba8 Add source elements to the pipeline before activation
In plug_src we changed the element state before adding it to
the owner container. This prevented the pipeline from intercepting
a GST_STREAM_STATUS_TYPE_CREATE message from the pad in order
to assign a custom task pool.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/issues/53
2018-12-06 08:59:04 +00:00
Thibault Saunier
5b86dc34ee Automatic update of common submodule
From ed78bee to 59cb678
2018-12-05 17:24:59 -03:00
Ingo Randolf
ce2b418811 examples: test-appsrc: fix coding style error 2018-11-20 19:12:09 +01:00
Ingo Randolf
be4635cf2f examples: test-appsrc: fix buffer leak 2018-11-20 11:56:38 +00:00
Patricia Muscalu
4370f3a901 rtsp-media: Update priv->blocked when linked streams are unblocked.
Media is considered to be blocked when all streams that belong to
that media are blocked.
This patch solves the problem of inconsistent updates of
priv->blocked that are not synchronized with the media state.
2018-11-19 11:35:26 +00:00
Patricia Muscalu
146b3da174 rtsp-media: Don't block streams before seeking
Before the seek operation is performed on media, it's required that
its pipeline is prepared <=> the pipeline is in the PAUSED state.
At this stage, all transport parts (transport sinks) have been successfully
added to the pipeline and there is no need for blocking the streams.
2018-11-19 11:35:26 +00:00
Patricia Muscalu
d4a8834ffe tests: rtspserver: Add shared media test case for TCP 2018-11-17 16:16:34 +01:00
Linus Svensson
185385924d rtsp-stream: Use seqnum-offset for rtpinfo
The sequence number in the rtpinfo is supposed to be the first RTP
sequence number. The "seqnum" property on a payloader is supposed to be
the number from the last processed RTP packet. The sequence number for
payloaders that inherit gstrtpbasepayload will not be correct in case of
buffer lists. In order to fix the seqnum property on the payloaders
gst-rtsp-server must get the sequence number for rtpinfo elsewhere and
"seqnum-offset" from the "stats" property contains the value of the
very first RTP packet in a stream. The server will, however, try to look
at the last simple in the sink element and only use properties on the
payloader in case there no sink elements yet, and by looking at the last
sample of the sink gives the server full control of which RTP packet it
looks at. If the payloader does not have the "stats" property, "seqnum"
is still used since "seqnum-offset" is only present in as part of
"stats" and this is still an issue not solved with this patch.

Needed for gst-plugins-base!17
2018-11-14 12:29:58 +00:00
Linus Svensson
1c4d3b36fb rtsp-stream: Plug memory leak
Attaching a GSource to a context will increase the refcount. The idle
source will never be free'd since the initial reference is never
dropped.
2018-11-14 12:29:58 +00:00
Jordan Petridis
2065298d6d
Add Gitlab CI configuration
This commit adds a .gitlab-ci.yml file, which uses a feature
to fetch the config from a centralized repository. The intent is
to have all the gstreamer modules use the same configuration.

The configuration is currently hosted at the gst-ci repository
under the gitlab/ci_template.yml path.

Part of https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/29
2018-11-12 16:06:39 +02:00
Matthew Waters
8b4df97f9d Update git locations to gitlab 2018-11-05 05:56:35 +00:00
Mathieu Duponchelle
f43df76ee7 meson: add new onvif types 2018-11-01 14:20:36 +01:00
Sebastian Dröge
961de06be2 Add ONVIF subclass headers to the installed headers in meson.build too 2018-11-01 12:49:51 +02:00
Sebastian Dröge
5392cbba8a rtsp-server: Declare GstRTSPServer struct before anything else
It's needed by all kinds of other headers, including the ones that are
required for defining the GstRTSPServer struct itself and its API.
2018-11-01 11:29:01 +02:00
Sebastian Dröge
d525000f6a Mark all ONVIF-specific subclasses as Since 1.14 2018-11-01 10:23:02 +02:00
Sebastian Dröge
84a7f459a1 Include ONVIF types from single-include rtsp-server.h
... by actually making it a single-include header and moving everything
related to the GstRTSPServer type to rtsp-server-object.h instead.
Otherwise there are too many circular includes.

https://bugzilla.gnome.org/show_bug.cgi?id=797361
2018-11-01 10:18:22 +02:00
Göran Jönsson
7cfd59820a rtsp-stream: use idle source in on_message_sent
When the underlying layers are running on_message_sent, this sometimes
causes the underlying layer to send more data, which will cause the
underlying layer to run callback on_message_sent again. This can go on
and on.

To break this chain, we introduce an idle source that takes care of
sending data if there are more to send when running callback

https://bugzilla.gnome.org/show_bug.cgi?id=797289
2018-10-23 08:18:52 +01:00
Edward Hervey
ebafccb65a rtsp-client: Remove timeout GSource on cleanup
Avoids ending up with races where a timeout would still be around
*after* a client was gone. This could happen rather easily in
RTSP-over-HTTP mode on a local connection, where each RTSP message
would be sent as a different HTTP connection with the same tunnelid.

If not properly removed, that timeout would then try to free again
a client (and its contents).
2018-10-22 09:35:54 +02:00
Tim-Philipp Müller
22ced50da5 autotools: fix distcheck 2018-10-04 14:31:59 +01:00
Ognyan Tonchev
7b5e232a9e onvif: encapsulate onvif part into a bin
...and thus do not let onvif affect pipelines latency

https://bugzilla.gnome.org/show_bug.cgi?id=797174
2018-10-03 13:26:36 +03:00
Patricia Muscalu
982efec468 tests: client: Avoid bind() failures in tests
https://bugzilla.gnome.org/show_bug.cgi?id=797059
2018-09-28 13:27:48 +03:00