Stéphane Cerveau
bbe0258e1d
srt: allow per feature registration
...
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.
More details here:
https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2038 >
2021-03-23 14:19:17 +00:00
Jakub Adam
9c00d261c3
srt: preserve ABI compatibility
...
Reintroduce socket descriptor parameter removed in 327ad84e
to
"caller-added" and "caller-removed" signals, just set it always to zero.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2004 >
2021-02-03 23:39:00 +01:00
Jakub Adam
327ad84e35
srt: don't pass SRT socket ID to "caller-added,removed" signals
...
The caller's IP and port is enough for unique identification. Don't leak
the socket handle since using it in unadvised libsrt calls from the
application could break the SRT element.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1772 >
2021-02-03 16:23:33 +00:00
Jakub Adam
4a58af4352
srtobject: add caller address to stats structure
...
In listener mode, gst_stats() returns an independent set of
statistics for every connected caller. Having the caller's IP and port
present in each structure allows to correlate the statistics with a
particular caller that has been announced by "caller-added" signal.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1772 >
2021-02-03 16:23:33 +00:00
Edward Hervey
4e7f7871db
srt: Define options added in later revisions
...
Allows compiling the plugin against old headers.
For SRTO_BINDTODEVICE there's nothing we can do, since the value depends on
configuration options of the library. Nice.
Fixes build with libsrt < 1.4.2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1945 >
2021-01-07 09:23:28 +01:00
Jakub Adam
6c35222973
srtobject: distinguish authentication error messages
...
Use GST_RESOURCE_ERROR_NOT_AUTHORIZED code in posted error messages
related to SRT authentication (e.g. incorrect or missing password) so
that the application can recognize them more easily.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1943 >
2021-01-06 23:35:20 +00:00
Jakub Adam
ef118f3d0a
srtobject: detect socket errors from srt_epoll_wait()
...
On an error event, epoll wait puts the failed socket in both readfds and
writefds. We can take advantage of this and avoid explicitly checking
socket state before every read or write attempt.
In addition, srt_getrejectreason() will give us more detailed
description of the connection failure.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1943 >
2021-01-06 23:35:20 +00:00
Jakub Adam
3c3e89304e
srtobject: make possible to specify more sockopts in SRT URI
...
Any socket option that can be passed to libsrt's srt-live-transmit
through SRT URI query string is now recognized.
Also make the code that applies options to SRT sockets more generic.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1842 >
2021-01-06 22:28:02 +00:00
Jakub Adam
5687b03438
srtsrc: fix typos
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1541 >
2021-01-06 19:21:14 +00:00
Jakub Adam
1e461b3166
srtsink: remove unused connection_mode variable
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1541 >
2021-01-06 19:21:14 +00:00
Jakub Adam
d540012091
srtobject: obey "wait-for-connection" in caller mode
...
The pipeline now gets stuck in gst_srt_object_write_one() until the
receiver comes online, which may or may not be desired based on the use
case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1836 >
2021-01-06 18:55:37 +00:00
Jakub Adam
00e44e8ed7
srtobject: post a message on the bus when broken socket is detected
...
So that the application gets notified may react to it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1935 >
2021-01-05 16:50:01 +00:00
Raghavendra
08b1485862
srt: Add authentication to srtsink and srtsrc elements
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1725 >
2021-01-04 00:03:47 +05:30
Jan Alexander Steffens (heftig)
470e6989d2
srt: Don't take object lock calling gst_srt_object_get_stats
...
This function takes the sock lock. This can result in a deadlock when
another thread holding the sock lock is trying to take the object lock.
Thread A (Holds object lock, wants sock lock):
#2 gst_srt_object_get_stats at gst-plugins-bad/ext/srt/gstsrtobject.c:1753
#3 gst_srt_object_get_property_helper at gst-plugins-bad/ext/srt/gstsrtobject.c:409
#4 gst_srt_sink_get_property at gst-plugins-bad/ext/srt/gstsrtsink.c:95
#5 g_object_get_property from libgobject-2.0.so.0
Thread B (Holds sock lock, wants object lock):
#2 gst_element_post_message_default at gstreamer/gst/gstelement.c:2069
#3 gst_element_post_message at gstreamer/gst/gstelement.c:2123
#4 gst_element_message_full_with_details at gstreamer/gst/gstelement.c:2259
#5 gst_element_message_full at gstreamer/gst/gstelement.c:2298
#6 gst_srt_object_send_headers at gst-plugins-bad/ext/srt/gstsrtobject.c:1407
#7 gst_srt_object_send_headers at gst-plugins-bad/ext/srt/gstsrtobject.c:1444
#8 gst_srt_object_write_to_callers at gst-plugins-bad/ext/srt/gstsrtobject.c:1444
#9 gst_srt_object_write at gst-plugins-bad/ext/srt/gstsrtobject.c:1598
#10 gst_srt_sink_render at gst-plugins-bad/ext/srt/gstsrtsink.c:179
Fixes d2d00e07ac
.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1861 >
2020-12-07 17:59:09 +00:00
Jan Alexander Steffens (heftig)
4eeff95f92
srtsrc: Prevent delay
from being negative
...
`delay` should be a GstClockTimeDiff since SRT time is int64_t.
All values are in local time so we should never see a srctime that's in
the future. If we do, clamp the delay to 0 and warn about it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1674 >
2020-10-12 12:58:22 +00:00
Jan Alexander Steffens (heftig)
ec11ad9d55
srtsrc: Don't calculate a delay if the srctime is 0
...
A zero srctime is a missing srctime. Apparently this can happen when
["the connection is not between SRT peers or if Timestamp-Based Packet
Delivery mode (TSBPDMODE) is not enabled"][1] so it may not apply to us,
but it's best to be defensive.
[1]: https://github.com/Haivision/srt/blob/v1.4.2/docs/API.md#sending-and-receiving
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1674 >
2020-10-12 12:58:22 +00:00
Jan Alexander Steffens (heftig)
6b2fcb52e5
srtsrc: Defend against missing clock
...
If we don't have a clock, stop the source instead of asserting in
gst_clock_get_time. This can happen when the element is removed from the
pipeline while it's playing.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1674 >
2020-10-12 12:58:22 +00:00
Jan Alexander Steffens (heftig)
c6eeead1e4
srt: Consume the error from gst_srt_object_write
...
Instead of leaking it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1668 >
2020-10-09 07:47:47 +00:00
Jan Alexander Steffens (heftig)
2a7fa67693
srt: Check socket state before retrieving payload size
...
The connection might be broken, which we should detect instead of just
aborting the write.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1669 >
2020-10-09 07:12:04 +00:00
Edward Hervey
dd11e91c3b
srtsrc: Fix timestamping
...
SRT provides the original timestamp of a packet (with drift/skew corrected for
local clock), which is what should be used for timestamping the outgoing
buffers. This ensures that we output the packets with the same timestamp (and by
extension rate) as the original feed.
Also detect if packets were dropped (by checking the sequence number) and
properly set DISCONT flag on the outgoing buffer.
Finally answer the latency queries
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1658 >
2020-10-08 21:12:17 +00:00
Jan Alexander Steffens (heftig)
92dc2f4192
srt: Remove unused sa_family tracking
...
Now that SRT no longer needs the family when creating the socket, this
code has become useless.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1659 >
2020-10-06 13:56:32 +02:00
Niklas Hambüchen
13c8bda531
srt: Move off deprecated srt_socket()
.
...
See 73ee1e1a3e/docs/API-functions.md (srt_socket)
`srt_create_socket()` was added in
4b897ba92d
and srt `v1.3.0` is the first release that has it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1659 >
2020-10-06 13:56:32 +02:00
Jan Alexander Steffens (heftig)
4e26b447f6
srt: Register a log handler
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1659 >
2020-10-06 12:39:04 +02:00
Jan Alexander Steffens (heftig)
936f422764
srt: Avoid removing invalid sockets from the polls
...
This would provoke error messages from SRT.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1659 >
2020-10-06 12:39:00 +02:00
Jan Alexander Steffens (heftig)
fda4cfd15e
srt: Fix use of srt_startup
...
`srt_startup` can also return 1 if it was successful. Avoid warning in
this case.
Avoid a race when checking whether we need to call it at all.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1659 >
2020-10-06 12:38:57 +02:00
Jan Alexander Steffens (heftig)
6b8c4a5f34
srt: Fix parameter types used for socket options
...
The [SRT documentation][1] specifies exact types for the socket options.
Make sure we match these.
This reverts the linger workaround in commit 84f8dbd932
and extends srt_constant_params to support other types than int.
[1]: https://github.com/Haivision/srt/blob/master/docs/APISocketOptions.md
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1659 >
2020-10-06 12:36:40 +02:00
raghavendra
84f8dbd932
srtobject: typecast SRTO_LINGER to linger
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1615 >
2020-09-25 22:00:26 +05:30
J. Kim
8e9f8c7f2c
srtobject: set error when canceled waiting for a caller
...
To propagate error, this commit sets a reason. Otherwise, the function
caller should check if `error` is NULL when the return value is not normal.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1522 >
2020-08-19 12:01:37 +00:00
J. Kim
ebdb3447ce
srtobject: fix typo, s/errorj/error
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1522 >
2020-08-19 11:31:41 +00:00
Sebastian Dröge
e70ec38000
srt: Add support for using hostnames instead of IP addresses
...
If an address can't be parsed as IP address, try resolving it via
GResolver instead. SRT URIs more often than not contain hostnames and
without trying to resolve them we won't be able to handle such URIs.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1493 >
2020-08-06 07:29:14 +00:00
Francisco Javier Velázquez-García
97b5951d25
srtobject: Add support for IPv6
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1477 >
2020-08-03 21:46:04 +00:00
Francisco Javier Velázquez-García
1ba379ded0
srtobject: Reset parameters before setting URI
...
This makes `gst_srt_object_validate_parameters` work properly since
`localaddress` and `localport` will be missing if the URL did not
provide them.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1477 >
2020-08-03 21:46:04 +00:00
Francisco Javier Velázquez-García
096c60f9c5
srtobject: Simplify gst_srt_object_set_*_value
...
This fixes `gst_srt_object_set_string_value` in particular because the
value might not be a static string.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1477 >
2020-08-03 21:46:04 +00:00
Francisco Javier Velázquez-García
1a8e2cf981
srtobject: Store passphrase like other parameters
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1477 >
2020-08-03 21:46:04 +00:00
Tim-Philipp Müller
a8ce8db982
srt: add "empty" subclasses for deprecated srt{client,server}{src,sink}
...
The doc system gets confused when we register the exact same
class as multiple elements, so make a subclass for each.
Also wrap registration of deprecated elements with #ifndef GST_REMOVE_DEPRECATED.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1354 >
2020-06-19 17:20:02 +01:00
Thibault Saunier
ebababae03
srt: doc: Add missing gst_type_mark_as_plugin_api
2020-06-09 12:28:13 -04:00
Peter Workman
b98712c44a
srtobject: continue polling or report error on failed receive
...
fixes #1277
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1260 >
2020-06-03 09:31:42 +00:00
Jan Alexander Steffens (heftig)
a1bc9d4319
srt: Make logging regarding callers more useful
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1273 >
2020-06-03 04:23:14 +00:00
Jan Schmidt
918ed75944
srt: Don't leak the connection_poll_id on close()
...
Attempting to reach an inactive SRT peer in caller mode
was leaking an fd every few seconds in the gst_srt_object_close()/open()
loop.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1293 >
2020-05-24 10:47:59 +00:00
J. Kim
4ccaa1ebbb
srtobject: add streamid property
...
The stream id starts with '#!::' according to SRT Access Control[1],
but GstURI requires URI encoded string.This commit introduces additional
property to set the id by normal string.
[1] https://github.com/Haivision/srt/blob/master/docs/AccessControl.md
2020-05-13 14:13:48 +00:00
krivoguzovVlad
b769af0c4f
Update gstsrtobject.c
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/999 >
2020-04-30 18:57:13 +00:00
Jan Alexander Steffens (heftig)
97c05d3f4b
srt: Accumulate total bytes sent/received over all connections/callers
...
So we don't lose them. Split gst_srt_object_open_internal for internal
reconnections that don't reset the accumulated bytes.
2020-04-15 10:42:48 +02:00
Jan Alexander Steffens (heftig)
d19b3fccb5
srt: Fix type of bytes-received-lost
...
The field is a uint64_t.
2020-04-15 10:42:47 +02:00
Jan Alexander Steffens (heftig)
132e3a1af9
srt: Remove use of closures for signal emission
...
It seems overly complicated.
2020-04-15 10:42:47 +02:00
Jan Alexander Steffens (heftig)
d2d00e07ac
srt: Clean up locking
...
Use GST_OBJECT_LOCK (srtobject->element) to protect only the fields
involved in property access.
Introduce a new mutex srtobject->sock_lock to go with
srtobject->sock_cond and protect the list of callers from concurrent
access.
2020-04-15 10:42:47 +02:00
Jan Alexander Steffens (heftig)
37ee389913
srt: Remove trailing whitespace
2020-04-15 10:42:47 +02:00
J. Kim
04f3f4be4f
srtobject: fix mutex lock target
...
GstSRTObject is a structure that has an actual GstElement
which is extended to srt{src,sink}.
2020-04-13 15:23:46 +09:00
Francisco Javier Velázquez-García (francisv)
c7fe1e8164
gstsrtsink: Add wait-for-connection
property to srtsink
...
Add `wait-for-connection` property to `srtsink` element. This
property allows the element to process packets even when no clients
are connected.
2019-12-19 19:46:47 +00:00
Jakub Adam
19391ae4c7
srtobject: allow passing SRT Stream ID in stream URI
...
Based on Stream ID, the application can accept or reject the connection,
select the desired data stream, or set an appropriate passphrase for the
connection. Example usage:
srt://127.0.0.1:1234?streamid=mystream
2019-11-20 17:09:34 +00:00
Niels De Graef
d8f61515d8
Don't pass default GLib marshallers for signals
...
By passing NULL to `g_signal_new` instead of a marshaller, GLib will
actually internally optimize the signal (if the marshaller is available
in GLib itself) by also setting the valist marshaller. This makes the
signal emission a bit more performant than the regular marshalling,
which still needs to box into `GValue` and call libffi in case of a
generic marshaller.
Note that for custom marshallers, one would use
`g_signal_set_va_marshaller()` with the valist marshaller instead.
2019-11-06 14:27:46 +00:00