Simplify the command handling, only continue looping when we have not received
another command or when the previous loop was successfull.
Avoid looping on a disconnected socket.
Parse session control attributes when no media control attribute is
present. Threat * control attributes as an empty string, just like the
spec says.
Fixes#646800
... by forcing a state changed to PLAYING, which should otherwise be a
no-op as elements should already be in that state.
In particular, jitterbuffer needs new base_time as soon as possible to perform
proper timing (e.g. eos timeout handling) and can't wait for the new base_time
that will be distributed when the whole pipeline returns to PLAYING.
See bug #646397.
In case server-side fails to perform seek, i.e. PLAY at non-zero requested
position, recovery so far would arrange for streaming to continue, albeit
having lost position tracking in the process. So, query position prior
to seek and use upon failed seek.
Use g_ascii_dtostr() and g_ascii_strtod() to serialise/deserialise
floating point numbers, instead of ugly hacks that switch locale
before and after calling libc functions (which is not a good idea
in a multi-threaded application).
In particular, when streaming interleaved, this arranges for setting a new
timestamp on outgoing buffer so downstream can appropriate reset
to a change in (rtp)time.
Extend the _push_event() function so that it can also send events to the udp
sources when asked.
Implement a custum send_event function that correctly dispatches the downstream
events in TCP mode. This fixes sending EOS to rtspsrc and have it push the EOS
downstream.
Don't reuse sockets but make the udpsrc element fail the state change when the
socket is already in use. If we don't prevent reuse, we might end up using the same
port for different streams in some cases.
Fixes#622017
To support setups with firewall/ipsec, it is useful for an rtsp client to be
able to set the range of ports that can be used for rtp/rtcp reception.
Allows this by adding a "port-range" property to the rtspsrc element.
Fixes#625153
The RTSP server rtspsrc is communicating with, sends a GET_PARAMETER request
periodically as a ping. The code in gst_rtspsrc_handle_request forms an OK
response and sends, but doesn't call gst_rtsp_message_unset to free the memory
after sending the response. This results in a constant slow memory leak.
Fixes#624770
Keep a global connection for aggregate control but also keep stream connections
for non-aggregate control.
Add some helper methods to connect/close/flush the connections.
Parse the connection info from the SDP.
When we need to configure the multicast destination, fall back to the SDP
connection info when the transport did not specify a destination and ttl.
Fixes#617537
Pass the current running time to the jitterbuffer when pausing or resuming so
that it calculate the right offsets.
Small cleanups and comments.
Set the default rtspsrc latency to 2 seconds.
Fix some comments, clarify some FIXMEs
Remove the on-ntp-stop signal check now that the jitterbuffer is in
-good and we know that it supports this signal.
When an RTSP extension returns NULL or an empty transport string, just ignore it
and try to get the next possible transport. Fixes playback of RealMedia streams.
In gst_rtspsrc_parse_digest_challenge(), rtspsrc does a g_strndup of the auth
header items and then passes them to gst_rtsp_connection_set_auth_param()
without freeing.
Fixes#594133
Server eof (e.g. connection closed) is announced as connection closed,
so better record state and act accordingly to prevent (read/write)
errors during subsequent teardown/cleanup sequences. #Fixes 580851.(c).
The on-npt-stop signals was added only recently to rtpjitterbuffer in
-bad, so check if the signal exists before g_signal_connect()ing to
it, to avoid warnings.
Try to post a decent error message when it looks like we're failing
because the Real RTSP extension plugin is missing. Also add i18n
bits for rtspsrc so our error messages get translated.
MS RTSP spec states that the UDP port pair used in subsequent SETUP
requests for various streams must be identical (since there will actually
be only 1 stream of muxed asf packets). Following traditional specs and
using different port pairs in the SETUPs for separate streams will result
in all but the first one failing and only one stream being streamed.
So, in appropriate circumstances, retry UDP SETUP using previously used
port pair. Fixes#552650.
Link to properties. Correct titles for examples. Document a few trivial cases. Keep lists in section file and docs/plugins/Makefile.am alphabetically ordered.
Original commit message from CVS:
Patch by: 이문형 <iwings at gmail dot com>
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_loop_udp):
Prevent further read/write actions taken to the connect-failed socket by
erroring out quickly. See #562258.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (new_session_pad),
(gst_rtspsrc_parse_range):
Add some more debugging.
Use the reanges received from the server unconditionally.
Fixes#561625.
Original commit message from CVS:
Based on patch by: Eric Zhang <chao.zhang at access-company dot com>
* gst/rtsp/gstrtspsrc.c: (gst_rtsp_nat_method_get_type),
(gst_rtspsrc_class_init), (gst_rtspsrc_set_property),
(gst_rtspsrc_get_property), (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free),
(gst_rtspsrc_stream_configure_udp_sinks),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_send_dummy_packets),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_handle_message), (gst_rtspsrc_change_state):
* gst/rtsp/gstrtspsrc.h:
Add property to configure NAT traversal method.
Ignore EOS from the internal sinks.
Implement sending dummy packets as a (simple) method to open up
some firewalls.
Send PLAY request to the server after we started the udp sources.
Fixes#559545.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_transports_string),
(gst_rtspsrc_change_state):
Only send one transport at a time for improved compatibility with some
broken servers. See #537832.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_do_seek),
(gst_rtspsrc_perform_seek):
Only pause/play in the seek handler when the source was playing.
Fixes#529379.
Original commit message from CVS:
Based on patch by: Eric Zhang <chao.zhang at access-company dot com>
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_perform_seek),
(gst_rtspsrc_stream_configure_udp_sink):
Pause the RTSP stream before doing a new play request.
Make sure that adding the udpsinks does not cause the rtspsrc to become
a sink. Fixes#559547.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_handle_src_event):
Return TRUE instead of FALSE from the event handler when we swallowed the
event.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_parse_methods):
Don't assume the server supports PAUSE by default. Fixes#551048.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_open):
Handle the case where we cannot do desribe or when the describe result
does not contain a valid SDP message.
Original commit message from CVS:
* gst/rtsp/Makefile.am:
* gst/rtsp/gstrtsp.c: (plugin_init):
* gst/rtsp/gstrtspgoogle.c: (gst_rtsp_google_before_send),
(gst_rtsp_google_after_send), (gst_rtsp_google_get_transports),
(_do_init), (gst_rtsp_google_base_init),
(gst_rtsp_google_class_init), (gst_rtsp_google_init),
(gst_rtsp_google_finalize), (gst_rtsp_google_change_state),
(gst_rtsp_google_extension_init):
* gst/rtsp/gstrtspgoogle.h:
Add google RTSP extension, it can only handle udp and responds with
unsupported if we do anything else. Fixes#546465.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_connection_send),
(gst_rtspsrc_connection_receive), (gst_rtspsrc_loop_send_cmd),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_setup_streams), (gst_rtspsrc_open),
(gst_rtspsrc_close), (gst_rtspsrc_pause):
Make transport setup code a bit better using GString.
Add some more debug.
Check for closed connections before doing anything on them.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_stream_configure_udp_sink):
Don't try to configure RTCP back to the server when the server did not
give us a valid port number.
Original commit message from CVS:
* gst/rtp/gstrtpvrawdepay.c:
Include stdlib.h for atoi().
* gst/rtsp/gstrtspsrc.c:
Use floating point math for latencies < 0 sec in log output.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_stream_configure_mcast):
Set udpsrc for receiving data from multicast groups to PAUSED instead of
leaving them in READY. Fixes#537832.