Commit graph

523 commits

Author SHA1 Message Date
Matt Staples
bc2adef550 rtspsrc: Fix session cleanup when handling redirect on PLAY
Redirect on PLAY wasn't doing the necessary session cleanup. Fixed by
removing code from gst_rtspsrc_send that changed the state varable upon
encountering a redirect. Better to let the redirect handlers in
gst_rtspsrc_retrieve_sdp and gst_rtspsrc_play do their own
state-dependent cleanup.

https://bugzilla.gnome.org/show_bug.cgi?id=775543
2016-12-05 18:23:31 +02:00
Aleix Conchillo Flaque
bc9f06f37b rtspsrc: always send teardown request
Allow CMD_CLOSE to cancel all commands not only CMD_PAUSE
and ignore CMD_WAIT while closing.

https://bugzilla.gnome.org/show_bug.cgi?id=748360
2016-12-05 11:32:43 +02:00
Sebastian Dröge
058ab0df1d rtspsrc: Move to new helper function to parse authentication responses
https://bugzilla.gnome.org/show_bug.cgi?id=774416
2016-11-21 09:40:08 +02:00
Matt Staples
cd71e3a8e8 rtspsrc: Also handle redirect on PLAY
https://bugzilla.gnome.org/show_bug.cgi?id=772610
2016-11-01 20:14:35 +02:00
Petr Kulhavy
5cdf66d5d2 rtspsrc: allow missing control attribute in case of a single stream
Improve RFC2326 - chapter C.3 compatibility:
In case just a single stream is specified in SDP and the control attribute
is missing do not drop the stream but rather assume "a=control:*"

https://bugzilla.gnome.org/show_bug.cgi?id=770568
2016-11-01 20:13:49 +02:00
Mark Nauwelaerts
735924236e rtspsrc: reset connection info to non-flushing when closing
This solves a hanging mainloop in following scenario:
* connect to source
* network/server drops
* pipeline set to NULL (and connection to flushing as part)
* pipeline set to PAUSED/PLAYING (connection to non-flushing, but not recorded)
* [connecting still not possible]
* pipeline set to NULL => mainloop hangs (since no actual flushing is done)
2016-10-26 12:30:39 +02:00
Sebastian Dröge
eaae016884 rtspsrc: Use new bin suppressed flags API for managing the element flags 2016-09-15 18:20:30 +02:00
Thibault Saunier
150edef830 Use the new API to post flow ERROR messages on the bus
https://bugzilla.gnome.org/show_bug.cgi?id=770158
2016-08-26 19:23:26 -03:00
Sebastian Dröge
0b0a042781 rtspsrc: Allow mimetypes with properties as long as they're application/sdp
Some servers add properties like charset, e.g.
  application/sdp; charset=utf8

Ideally we should also parse the charset and do conversion of all messages,
but that's for a later time.
2016-08-17 09:49:04 +03:00
Steven Hoving
ec59291b2e rtspsrc: Fix error messages to first convert to doubles before division 2016-07-06 11:22:53 +03:00
Sebastian Dröge
b9532527ec rtspsrc: Set to PLAYING after a seek again after setting up the segment and everything else
There's a small window for a race condition otherwise.
2016-07-05 21:11:35 +03:00
Brad Lackey
6d3071f200 rtspsrc: Don't disable UDP protocols on redirecting
https://bugzilla.gnome.org/show_bug.cgi?id=768232
2016-07-01 12:21:43 +02:00
Sebastian Dröge
c18b609c06 rtspsrc: When seeking, consider the current element state or pending state instead of the RTSP state
If we consider the RTSP state, what can happen is that it is PLAYING but the
element already asynchronously tried to PAUSE and it just did not happen yet.

We would then override this setting to PAUSED (while the element actually is
in PAUSED) and set the RTSP state to PLAYING again. This would then cause us
to produce packets while the sinks are all PAUSED, piling up thousands of
packets in the rtpjitterbuffer and other elements and finally failing.
2016-06-28 11:01:24 +03:00
Aleix Conchillo Flaqué
12eb5d6912 rtspsrc: make all srtp encoder properties explicit
The Session Data Protocol doesn't allow specifying a cipher for the
SRTCP, so it will use the SRTP one. In the "srtpenc" element the cipher
"aes-128-icm" is the default for SRTP and SRTCP, but if we want to have
an SRTCP with the "aes-256-icm" cipher then we also need to set the SRTP
cipher to "aes-256-icm", otherwise "aes-128-icm" will be used instead.

https://bugzilla.gnome.org/show_bug.cgi?id=767799
2016-06-20 09:53:24 +02:00
Sebastian Dröge
7c728db1f3 rtspsrc: Update caps for TCP whenever they change
We only changed them for UDP so far, which caused the wrong seqnum-base and
other information to be passed to rtpjitterbuffer/etc when seeking. This
usually wasn't that much of a problem as the code there is robust enough, but
every now and then it causes us to drop up to 32756 packets before we
continue doing anything meaningful.

https://bugzilla.gnome.org/show_bug.cgi?id=765689
2016-04-27 20:52:32 +03:00
Sebastian Dröge
d24e68719b rtspsrc: Don't propagate spurious state change returns from internal elements further
We handle them inside rtspsrc and override them in all other cases anyway, so
do the same for "internal" state changes like PAUSED->PAUSED and
PLAYING->PLAYING.

This keeps unexpected NO_PREROLL to confuse state changes in GstBin.

See also https://bugzilla.gnome.org/show_bug.cgi?id=760532

https://bugzilla.gnome.org/show_bug.cgi?id=765689
2016-04-27 20:52:15 +03:00
Aleix Conchillo Flaqué
c36930535d rtspsrc: add srtp rollover counters from mikey crypto sessions
The server can send multiple crypto sessions, one for each SSRC with its
own rollover counter. We parse this information and pass it to the SRTP
decoder via the "request-key" signal.

https://bugzilla.gnome.org/show_bug.cgi?id=730540
2016-04-15 18:12:06 +02:00
Sebastian Dröge
df247f091c rtpjitterbuffer: Add RFC7273 media clock handling
https://bugzilla.gnome.org/show_bug.cgi?id=762259
2016-04-03 11:24:34 +03:00
Vineeth TM
1071309870 good: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763076
2016-03-24 14:32:20 +02:00
Jihae Yi
da5c8a954c rtspsrc: avoid potentially overflowing expression
https://bugzilla.gnome.org/show_bug.cgi?id=757569
2016-03-24 14:28:50 +02:00
Sebastian Dröge
bf5a72a6dd rtspsrc: Properly error out if binding the UDP sockets fails
udpsrc is not returning us a socket in that case.
2016-02-28 13:01:34 +02:00
Aleix Conchillo Flaqué
665d14a2a0 rtspsrc: handle rtcp/srtcp caps properly when using interleaved data
We check the stream profile and use the proper RTCP caps:
application/x-srtcp if we are using a secure profile and
application/x-rtcp otherwise.

https://bugzilla.gnome.org/show_bug.cgi?id=760556
2016-01-18 11:29:25 +02:00
Hyunjun Ko
3300039513 rtspsrc: replace duplicated codes to call new base sdp apis
https://bugzilla.gnome.org/show_bug.cgi?id=745880
2015-12-31 17:12:09 +02:00
Evan Callaway
4718870959 rtspsrc: Retry connection if tunneling needs authentication
Leverage response from gst_rtsp_connection_connect_with_response to
determine if the connection should be retried using authentication.  If
so, add the appropriate authentication headers based upon the response
and retry the connection.

https://bugzilla.gnome.org/show_bug.cgi?id=749596
2015-12-14 16:42:27 +01:00
Luis de Bethencourt
4735d2a9a5 rtspsrc: check port-range format
The string could exist but with a wrong format, in that case we still want
to reset the values of client_port_range.min and max like we do if there is
no string.

CID 1139593
2015-12-14 14:53:57 +00:00
Reynaldo H. Verdejo Pinochet
a4c8ec8bd7 rtspsrc: remove unnecessary NULL checks before g_free() 2015-11-15 01:43:08 -08:00
Sebastian Dröge
01c0f8723f rtpbin/rtpjitterbuffer/rtspsrc: Add property to set maximum ms between RTCP SR RTP time and last observed RTP time
https://bugzilla.gnome.org/show_bug.cgi?id=755125
2015-09-25 23:55:05 +02:00
Jan Schmidt
b38e24995b rtspsrc: Don't parse key data more than needed.
When an auxilliary streams are present in the SDP media,
there's no need to re-parse the SDP attributes multiple
times.
2015-09-05 23:44:51 +10:00
Jan Schmidt
fe4ed1d1df rtspsrc: Fix SRTP + RTX, auth access, a leak, and an invalid memory access.
In parse_keymgmt(), don't mutate the input string that's been passed
as const, especially since we might need the original value again if
the same key info applies to multiple streams (RTX, for example).

When a resource is 404, and we have auth info - retry with the auth
info the same as if we had receive unauthorised, in case the resource
isn't even visible until credentials are supplied.

Fix a memory leak handling Mikey data.

When generating a random keystring, don't overrun the 30 byte
buffer by generating 32 bytes into it.
2015-09-05 23:44:51 +10:00
Vineeth TM
ba8cda54f4 rtspsrc: Trivial fix to check correct condition
When checking for describe method, because of missing parentheses, wrong
condition is being checked, which will result in wrong behavior.

https://bugzilla.gnome.org/show_bug.cgi?id=753912
2015-08-21 11:06:57 +03:00
George Kiagiadakis
e2f2f087ec rtspsrc: send the User-Agent header
Sometimes it is useful to know this information on the
server side. Other popular implementations (vlc, ffmpeg, ...)
also send this header on every message.

This includes a new "user-agent" property that the user
can set to use a custom User-Agent string. The default
is "GStreamer/<version>"

https://bugzilla.gnome.org/show_bug.cgi?id=750101
2015-08-14 15:59:06 +02:00
George Kiagiadakis
af03341e26 rtspsrc: wrap gst_rtsp_message_init_request in a local function
This will allow adding common request initialization, like the
user agent string, in just one place.
2015-08-14 15:59:06 +02:00
Vineeth TM
cf19525d5c rtspsrc: assertion error due to wrong condition check
In media to caps function, reserved_keys array is being used for variable i,
leading to GLib-CRITICAL **: g_ascii_strcasecmp: assertion 's1 != NULL' failed
changed it to variable j

https://bugzilla.gnome.org/show_bug.cgi?id=753009
2015-07-30 15:51:25 +03:00
Sebastian Dröge
39a90710b7 rtspsrc: Strip keys from the fmtp that we use internally in our caps
Skip keys from the fmtp, which we already use ourselves for the
caps. Some software is adding random things like clock-rate into
the fmtp, and we would otherwise here set a string-typed clock-rate
in the caps... and thus fail to create valid RTP caps

https://bugzilla.gnome.org/show_bug.cgi?id=753009
2015-07-29 14:31:49 +01:00
Hyunjun Ko
f560a3d223 rtspsrc: Add new ntp-time-source property and deprecate use-pipeline-clock property
Enable to use new ntp-time-source property of rtpbin

https://bugzilla.gnome.org/show_bug.cgi?id=751496
2015-06-25 17:16:49 +02:00
Xavier Claessens
b0b3e8e2cc rtspsrc: Add a GTlsInteraction property
It can be used for TLS client authentication.

https://bugzilla.gnome.org/show_bug.cgi?id=750471
2015-06-09 20:03:18 -04:00
Sebastian Dröge
0a7823b30f rtspsrc: Set RTP profile on the rtpsession objects
https://bugzilla.gnome.org/show_bug.cgi?id=746543
2015-06-02 11:38:15 +02:00
Sebastian Dröge
9865730cfa rtspsrc: Fix up last commit 2015-05-04 16:50:38 +02:00
Sebastian Dröge
d08f488598 rtspsrc: Only do RTX when using a feedback profile 2015-05-04 16:47:30 +02:00
Sebastian Dröge
33693525b9 rtspsrc: Only enable retransmissions if there is retransmission info in the SDP
Otherwise we're going to send early RTCP and NACKs in non-feedback sessions
too, which will confuse servers.

https://bugzilla.gnome.org/show_bug.cgi?id=748627
2015-04-29 15:53:09 +02:00
Luis de Bethencourt
671b4d25cd remove unused enum items PROP_LAST
This were probably added to the enums due to cargo cult programming and are
unused. Removing them.
2015-04-24 17:01:12 +01:00
Jesper Larsen
3528046773 rtspsrc: Fix RTCP caps leak
https://bugzilla.gnome.org//show_bug.cgi?id=748353
2015-04-23 14:56:27 +01:00
Nicolas Dufresne
84725d62b5 rtspsrc: Fix segment in TCP mode
It is expected that buffers are time-stamped with running time. Set
a segment accordingly. In this case we pick 0,-1 as this is what udpsrc
would do. Depayloaders will update the segment to reflect the playback
position.

https://bugzilla.gnome.org/show_bug.cgi?id=635701
2015-03-26 17:54:08 -04:00
Nicolas Dufresne
32aed67144 rtspsrc: Remove useless function
This function didn't do anything special, let's not use a function for
that.
2015-03-25 15:28:24 -04:00
Nicolas Dufresne
8afc8c8f3b rtspsrc: Fix seeking query
The segment start/stop in the query is meant to represent the seekable
portion of the stream. It does not match the segment start/stop. Instead
export 0 to duration.
2015-03-24 16:51:12 -04:00
Nicolas Dufresne
1c27002ebd rtspsrc: Improve trace readability
Change the command number into strings.
2015-03-18 17:32:36 -04:00
Ramiro Polla
90be7b4e1e rtspsrc: properly escape percent sign in documentation 2015-03-14 14:22:39 +00:00
Linus Svensson
398296d978 rtspsrc: Don't include payload type in the caps for framesize
When the sdp media attribute framesize are converted to caps
the <payload> should not be included.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=725335
2015-03-09 10:18:35 +01:00
Sebastian Dröge
c34a7cb90d rtspsrc: Fix handling of interleaved (TCP) streams
We need to set up the transport in any case, not just if we have a container
stream or a non-interleaved stream. Only if we have an interleaved stream and
are retrying, we should not set up the stream again.

https://bugzilla.gnome.org/show_bug.cgi?id=745599
2015-03-05 12:15:04 +01:00
Sebastian Dröge
b4aaa11f97 rtspsrc: Don't unref caps we don't own 2015-03-05 09:56:37 +01:00