Commit graph

193 commits

Author SHA1 Message Date
Wim Taymans
2607ff079d server: use 5 second linger period in SO_LINGER
Wait 5 seconds before clearing the send buffers and reseting the connection with
the client when we do a close. This should be enough time to get the message to
the client.

See #622757
2010-08-19 18:52:47 +02:00
Robert Krakora
8f6fd32065 server: use SO_LINGER
SO_LINGER on the socket will make sure that any pending data on the socket is
flushed ASAP and that the socket connection is reset. This makes sure that the
socket can be reused immediately.

Fixes 622757
2010-08-16 12:45:24 +02:00
David Schleef
6a880e53df Add stdlib.h for atoi() 2010-08-09 12:56:23 -07:00
Wim Taymans
336ffc0941 client: improve client cleanups
Make sure the session does not timeout when using TCP. We need to do this
because quicktime player does not send RTCP for some reason in tunneled
mode.
Refactor some cleanup code.

Fixes #612915
2010-04-06 17:08:40 +02:00
Wim Taymans
4fdd2bf4d1 session: add support for prevent session timeouts
Add an atomix counter to prevent session timeouts when we are, for example,
streaming over TCP.
2010-04-06 17:07:27 +02:00
Wim Taymans
48a54054e7 client: fix unlink on session timeouts
When our session times out, make sure we unlink all streams in this
session.
Remove the tunnelid when closing the connection.
2010-04-06 15:45:56 +02:00
Wim Taymans
558c7fddd2 session: small cleanups 2010-04-06 15:44:45 +02:00
Wim Taymans
30c31a65eb client: handle lost_tunnel callbacks
Handle lost_tunnel callbacks and use it to store the tunnelid back into the
hashtable so that we can reuse it for when the client reopens the POST
socket.
Close the connection after a TEARDOWN.
Make sure or watchid is cleared when the watch is removed.

Fixes #612915
2010-04-06 11:13:51 +02:00
Wim Taymans
09b97dd4ac rtsp-server: add more support for multicast 2010-03-19 18:03:40 +01:00
Wim Taymans
ac8343ea62 media: allow configuration of allowed lower transport 2010-03-19 15:15:29 +01:00
Wim Taymans
e866345f15 rtsp: keep track of server ip and ipv6
Keep track of how the client connected to the server and setup the udp ports
with the same protocol.
Copy the server ip address in the SDP so that clients can send RTCP back to
us.
2010-03-16 18:37:18 +01:00
Wim Taymans
4eccdd9dd7 session: indent 2010-03-16 18:34:43 +01:00
Wim Taymans
d749f1e7d5 client: use right size for malloc 2010-03-16 18:33:23 +01:00
Wim Taymans
0509aa1cbf server: comment ipv6 server listening address 2010-03-10 11:45:30 +01:00
Wim Taymans
6afa5be799 media: allow for ipv6 sockets 2010-03-10 11:45:06 +01:00
Wim Taymans
17bb89f1fc server: rework server part
Allow setting a bind address, make sure we can deal with ipv6.
Remove the port property and change with the service property.
2010-03-09 13:49:00 +01:00
Wim Taymans
1b0dc41534 media: update comments a little 2010-03-09 13:44:20 +01:00
Wim Taymans
b3814d4646 client: make content-base better
Use the URI formatting functions to make a content-base. Also make sure that
there is a trailing / at the end.
2010-03-09 13:43:29 +01:00
Wim Taymans
171e89c63a client: guard against invalid paths 2010-03-09 13:42:50 +01:00
Alessandro Decina
5f535ecf87 rtspmedia: emit "unprepared" if _prepare fails.
Emit the unprepared signal if gst_rtsp_media_prepare fails so that the
media object is removed from its factory's cache.
2010-03-09 10:27:38 +01:00
Wim Taymans
2997806d43 media: collect media position when seek completes 2010-03-05 19:08:08 +01:00
Luca Ognibene
e19c382bbb client: call unlink_streams in client finalize
Fixes #599027
2010-03-05 18:37:17 +01:00
Wim Taymans
83ed258684 media: limit the time to wait to something huge
Avoid waiting forever but limit the timeout to 20 seconds.
2010-03-05 18:23:18 +01:00
Wim Taymans
f90c422e62 sdp: reindent and check for prepared status 2010-03-05 17:57:08 +01:00
Wim Taymans
c7ca9b74eb media: avoid doing _get_state() for state changes
When preparing, use the ASYNC_DONE and ERROR messages in the bus handler to wait
until the media is prerolled or in error. This avoids doing a blocking call of
gst_element_get_state() that can cause lockups when there is an error.

Fixes #611899
2010-03-05 17:54:09 +01:00
Wim Taymans
d45eae2edd media: reindent 2010-03-05 16:20:08 +01:00
Wim Taymans
851e8aa744 media-factory: better error handling
Improve the error handling a bit.
2010-03-05 13:34:15 +01:00
Wim Taymans
73e8d6c69a client: rework transport parsing
Rework the transport parsing code so that we can ignore transports we don't
support instead of just picking the first one we can parse.
Configure a (for now hardcoded) destination for multicast transports.
2010-03-05 13:31:37 +01:00
Wim Taymans
53f8350b36 media: set multicast sink parameters
Disable loop and automatic multicast join on the udpsink elements.
Add some more debug info.
Reset some state variables in the right place.
Use the right port numbers for multicast.
2010-03-05 13:28:58 +01:00
Wim Taymans
63addbc278 session: handle transport setup correctly
Handle UDP, MCAST and TCP transport negotiation more correctly.
Store the server session SSRC in the transport.
2010-03-05 13:27:18 +01:00
Wim Taymans
ce6724f788 rtsp-client: implement error_full
Implement error_full to avoid some segfaults when the rtspconnection calls it.

See #608245
2010-01-27 18:38:27 +01:00
Wim Taymans
996112db95 docs: update docs and comments 2009-12-25 18:24:10 +01:00
Nikolay Ivanov
92eb244215 sdp: make server work better when behind a proxy 2009-12-25 15:22:23 +01:00
Sebastian Pölsterl
3d7610b033 client: dump rtsp message only if debug threshold is higher than GST_LEVEL_LOG 2009-11-21 19:20:39 +01:00
Sebastian Pölsterl
6d227be7a9 Use GStreamer's debugging subsystem 2009-11-21 19:20:23 +01:00
Sebastian Pölsterl
87fbfa54a0 server: Set ghost pad active in gst_rtsp_media_factory_collect_streams 2009-11-21 19:20:23 +01:00
Luca Ognibene
745900dd48 client: call weak-unref on client->sessions from finalize
Fixes bug #596305
2009-10-13 10:57:35 +02:00
Sebastian Pölsterl
f8630c6c81 media: Fixed crasher where caps got unref'ed too often 2009-10-13 10:57:31 +02:00
Wim Taymans
297b6a755a media: add some docs 2009-09-11 13:52:27 +02:00
Peter Kjellerstedt
309f53a12b rtsp: Use gst_rtsp_watch_send_message().
Use gst_rtsp_watch_send_message() since the old API which used
gst_rtsp_watch_queue_message() has been deprecated.
2009-08-24 13:27:00 +02:00
Wim Taymans
7338ab81e1 rtsp: allocate channels in TCP mode
When the client does not provide us with channels in TCP mode, allocate channels
ourselves.
2009-07-27 19:42:44 +02:00
Wim Taymans
daccf6bc99 client: don't crash when tunnelid is missing
When a clients tries to open an HTTP tunnel but fails to provide a tunnelid,
don't crash but return an error response to the client.

Fixes #589489
2009-07-24 12:49:41 +02:00
Wim Taymans
a4c90c28c7 sessionpool: add function to filter sessions
Add generic function to retrieve/remove sessions.
2009-06-30 21:27:53 +02:00
Wim Taymans
5d4c0e20c0 media: fix indentation 2009-06-18 16:05:18 +02:00
Sebastian Pölsterl
f384231ca3 Unref pipeline and set it to NULL. Set stream's caps to NULL, otherwise we unref it too often. 2009-06-18 15:54:15 +02:00
Sebastian Pölsterl
036550bf60 set state and remove elements of media in for loop 2009-06-18 15:54:11 +02:00
Sebastian
3bd2d36b1b Added gst_rtsp_media_remove_elements function 2009-06-18 15:54:04 +02:00
Sebastian
1a3e5b369c Don't use name for gstrtpbin so we can add multiple instances to the pipeline 2009-06-18 15:54:01 +02:00
Sebastian Pölsterl
749765b921 Added vmethod unprepare to GstRTSPMedia
The default implementation sets the state of the pipeline to GST_STATE_NULL
2009-06-18 15:53:49 +02:00
Sebastian Pölsterl
045875ecbe Made collect_streams function public 2009-06-18 15:53:42 +02:00
Sebastian Pölsterl
e417d83dce Added vmethod create_pipeline to GstRTSPMediaFactory
The pipeline is created in this method and the GstRTSPMedia's element is added to it
2009-06-18 15:53:34 +02:00
Wim Taymans
a697d16c75 client: use g_source_destroy()
We need to use g_source_destroy() because we might have added the source to a
different main context than the default one.
2009-06-11 11:27:47 +02:00
Wim Taymans
5e4757eff6 rtsp: prepare for handling GET/SET_PARAMETER
Add helper functions to handle GET/SET_PARAMETER. Reply with an error when there
is a body now.
Fix return codes of handlers.
2009-06-10 00:01:07 +02:00
Wim Taymans
94b6da045a media: don't leak session pads 2009-06-04 19:20:26 +02:00
Wim Taymans
9a38f95417 media: clean up the messages a bit 2009-06-04 18:32:15 +02:00
Wim Taymans
e1765dec13 sdp: warn and skip streams without media 2009-06-03 12:13:21 +02:00
Wim Taymans
03ae66062b media: fix message
Fix a debug message
Make dumping RTCP stats configurable
2009-05-27 11:15:22 +02:00
Wim Taymans
3fc1439965 media: be less verbose and leak less 2009-05-26 19:20:07 +02:00
Wim Taymans
1340e21239 media: don't leak the destination address 2009-05-26 19:07:33 +02:00
Wim Taymans
9bed89c3b7 rtsp: use RTCP to keep the session alive
Use the RTCP rtcp-from stats field to find the associated session and use this
to keep the session alive.
2009-05-26 19:01:10 +02:00
Wim Taymans
7bbdf7bf97 session: add 5sec to the real session timeout
Allow the session to live 5sec longer before really timing out. This should give
clients some extra time to keep the session active.
2009-05-26 17:27:07 +02:00
Wim Taymans
461169537b client: replay OK to GET/SET_PARAMETER
Some clients (vlc) use GET/SET_PARAMETER to keep the TCP session open. Make it
so that we return OK for those requests.
2009-05-26 17:25:59 +02:00
Wim Taymans
5955fc7d12 media: keep track of active transports
Keep track of which transport is active to avoid closing the connection too
soon.
Remove the destination transport also when going to NULL.
Print some stats about the SDES and other RTCP messages we receive from the
clients.
2009-05-26 11:42:41 +02:00
Wim Taymans
7a8b931a83 media: also count active TCP connections 2009-05-24 19:56:45 +02:00
Wim Taymans
fab65082da rtsp: add support for dynamic elements
Add support for dynamic elements.
Don't set live pipelines back to paused.
2009-05-24 19:34:52 +02:00
Wim Taymans
415e5e674b sdp: don't add encoding name when absent in caps 2009-05-24 19:33:22 +02:00
Wim Taymans
740d71bd50 client: warn when we can't do RTP-Info 2009-05-23 16:30:55 +02:00
Wim Taymans
e5dc7c3719 factory: factor out the stream construction 2009-05-23 16:18:04 +02:00
Wim Taymans
8fcbe501dc client: only add RTP-Info when we have the info
Only add RTP-Info for a stream when we can get the seqnum and timestamp from the
depayloader.
2009-05-23 16:17:02 +02:00
Wim Taymans
b83f54f159 media: link the RTP udpsrc to the session manager
Link the RTP udpsrc and the appsrc to the session manager so that they don't
shut down when the client sends a packet to open firewalls.
2009-05-15 17:58:44 +02:00
Wim Taymans
5f19d4b09e media: seek to key frames 2009-04-29 17:25:04 +02:00
Wim Taymans
6ffd7432a5 media: emit the unprepared signal by id
Emit the unprepared signal by id instead of name and set the media as
reused.
2009-04-21 22:44:05 +02:00
Sebastian Pölsterl
708c8daaec Set pipeline's state to NULL no matter if the media is reusable and emit unprepared signal in gst_rtsp_media_unprepare 2009-04-21 22:40:01 +02:00
Sebastian Pölsterl
9b7cb2a4ef Added finalize function to GstRTPSPServer to unref session pool and media mapping 2009-04-21 00:14:41 +02:00
Wim Taymans
3f1f38f479 server: use appsink and appsrc with the API
Use the appsink/appsrc API instead of the signals for higher
performance.
2009-04-14 23:38:58 +02:00
Wim Taymans
35a5a709d3 factory: connect to the unprepare signal
Connect to the unprepare signal for non-reusable media so that we can remove
them from the cache.
2009-04-03 22:46:22 +02:00
Wim Taymans
0c1df5e023 media: add signal to notify of unprepare 2009-04-03 22:45:57 +02:00
Wim Taymans
5dab222089 media: more work on making the media shared
Add a reusable flag to medias, indicating that they can be reused after a state
change to NULL.

Small cleanups.
2009-04-03 22:22:30 +02:00
Wim Taymans
c6e1aef881 client: support shared media
Always perform the state actions even if the target state of the pipeline is
already correct, we still want to add/remove the transports when we are dealing
with shared media.

Keep a counter of the number of active transports for a media so that we can use
this to perform a state change when needed.

Perform a state change of the pipeline only when the first transport was added
or when there are no active transports.
2009-04-03 19:44:37 +02:00
Wim Taymans
47c822bdf3 client: fix refcounting crasher
Don't need to remove the weak refs in the finalize methods, they are already
removed in the dispose.
Don't register the callback with a DestroyNofity.
2009-04-03 19:43:33 +02:00
Tim-Philipp Müller
0b8ffbbb5c Fix rtsp client refcount management in TCP mode.
Don't unref a client ref we never had. Fixes an unref
of an already-free client object after a client
teardown request for me.
2009-04-01 01:23:32 +01:00
Tim-Philipp Müller
8f16b1504e docs: fix typo in API docs 2009-04-01 00:45:17 +01:00
Wim Taymans
8f91451555 More seeking fixes.
Keep the udp sources in playing even if we go to paused. unlock the sources when
we shut down.
Add some more debug info.
Only seek when we need to.
Keep track of the position when we go to paused.
2009-03-13 15:57:42 +01:00
Wim Taymans
525d639cde Add beginnings of seeking.
Parse the Range header and perform a seek on the pipeline for the requested
position. It's disabled currently until I figure out what's going wrong.
2009-03-12 20:32:14 +01:00
Wim Taymans
0ae095e825 allow pause requests for now.
--
2009-03-12 20:31:22 +01:00
Wim Taymans
d3c404f32f Remove weak ref on the session in teardown
We need to remove our weakref from the session when we do a teardown because
else we close the TCP connection prematurely.
2009-03-11 20:03:06 +01:00
Wim Taymans
1be35624da Do some more session cleanup
Make session timeout kill the TCP connection that currently watches the
session.
Remove the client timeout property.
2009-03-11 19:38:06 +01:00
Wim Taymans
ebc28a47da Add TCP transports
Use appsrc and appsink to send and receive RTP/RTCP packets in the TCP
connection.
2009-03-11 16:45:12 +01:00
Wim Taymans
de1ebbc21b Add support for live streams
Add support for live streams and ranges
Start on handling TCP data transfer.
2009-03-06 19:34:14 +01:00
Wim Taymans
cd3ed91553 Free the pipeline before other things
---
2009-03-04 16:33:59 +01:00
Wim Taymans
d85b34f1b1 Only free the pending tunnel if there is one
--
2009-03-04 16:33:21 +01:00
Wim Taymans
2f8025dbdd rtsp-server: Add support for tunneling
Add support for tunneling over HTTP.
Use new connection methods to retrieve the url.
Dispatch messages based on the message type instead of blindly
assuming it's always a request.
Keep track of the watch id so that we can remove it later.
Set the media pipeline to NULL before unreffing the pipeline.
2009-03-04 12:53:07 +01:00
Wim Taymans
daf27d2704 Fix for channel -> watch rename in gstreamer
Rename the RTSPChannel to RTSPWatch and remove an unused variable.
2009-02-19 15:53:50 +01:00
Wim Taymans
39c2e31e65 Use ASYNC RTSP io
Use the async RTSP channels instead of spawning a new thread for each client.
If a sessionid is specified in a request, fail if we don't have the session.
2009-02-18 18:57:31 +01:00
Wim Taymans
b70a6c9d83 Add better debug info
Add some better debug info.
2009-02-18 17:49:03 +01:00
Wim Taymans
b86451dc76 Pass GTimeVal around for performance reasons
Get the current time only once and pass it around so that sessions don't have to
get the current time anymore.

Add experimental support for a GSource that dispatches when the session needs to
be cleaned up.
2009-02-13 19:58:17 +01:00
Wim Taymans
bc785b0a47 Add better support for session timeouts
Add a method to request the number of milliseconds when a session will timeout.
2009-02-13 19:56:01 +01:00
Wim Taymans
f0c047ef94 Add suport for RTP manager monitoring
Add the first stage in monitoring the rtp manager.
Make sure we don't update the state to something we don't want.
2009-02-13 19:54:18 +01:00
Wim Taymans
308ad6f6d0 Add support for session keepalive
Get and update the session timeout for all requests. get the session as early as
possible.
2009-02-13 19:52:05 +01:00
Wim Taymans
cd29e2a454 Handle media bus messages
Handle media bus messages in a custom mainloop and dispatch them to the
RTSPMedia objects. Let the default implementation handle some common messages.
2009-02-13 16:39:36 +01:00