Commit graph

125 commits

Author SHA1 Message Date
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
Wim Taymans e1154c92d6 Some more session timeout handling
Move the session header setting code to a central place so that we always add
the timeout parameter too.

Handle timeouts by running the session cleanup code.

Stop media before cleaning up.
2009-02-13 12:57:45 +01:00
Wim Taymans 34152ec840 Add timeout property
Add a timeout property ot the client and make the other properties into GObject
properties.
2009-02-10 16:24:13 +01:00
Wim Taymans c5b06ab5f8 Use getters and setters in property code
Use the getters and setters for the timeout property instead of locking
ourselves.
2009-02-10 16:21:17 +01:00
Wim Taymans 734dedaeac Merge branch 'master' of git+ssh://git.collabora.co.uk/git/gst-rtsp-server 2009-02-04 20:13:32 +01:00
Wim Taymans ae9da4c5b0 Add more timeout stuff
Add method to check if a session is expired.
Add method to perform cleanup on a session pool.
2009-02-04 20:10:39 +01:00
Wim Taymans aedd4652f3 Add beginnings of session timeouts and limits
Add the timeout value to the Session header for unusual timeout values.

Allow us to configure a limit to the amount of active sessions in a pool. Set a
limit on the amount of retry we do after a sessionid collision.

Add properties to the sessionid and the timeout of a session. Keep track of
creation time and last access time for sessions.
2009-02-04 19:52:50 +01:00
Wim Taymans e789a8fdf3 Cleanup of sessions and more
Fix the refcounting of media and sessions in the client. Properly clean up the
session data when the client performs a teardown.

Add Server header to responses.

Allow for multiple uri setups in one session.

Add Range header to the PLAY response and add the range attribute to the SDP
message.

Fix the session pool remove method, it used the wrong key in the hashtable. Also
give the ownership of the sessionid to the session object.
2009-02-04 17:00:42 +01:00
Wim Taymans 077a31b8df Rename a variable
Rename the 'server_port' variable to simply 'port'.
2009-02-04 09:57:55 +01:00
Wim Taymans d5a00f1f23 Rework the way we handle transports for streams
Make the media accept an array of transports for the streams that we have
configured for the play/pause requests.

Implement server states for a client and its media.

Require 0.10.22.1 (git HEAD) of gstreamer.
2009-02-03 19:32:38 +01:00
Wim Taymans f303eef9bb Drop const from functions dealing with urls
Drop const from GstRTSPUrl stuff because the .h files in gst-plugins-base don't
have the right const in them.
2009-01-31 19:50:33 +01:00
Wim Taymans ae2521096a Fix various leaks
Fix some leaks.
2009-01-30 17:06:26 +01:00
Wim Taymans 27f069b43c More cleanups
Don't keep a reference to the GstRTSPMedia in the stream.
Free more things when freeing the GstRTSPMedia.
2009-01-30 16:24:10 +01:00
Wim Taymans 1b9225078b More docs and small cleanups
Add some more docs and update the README
Cleanup some method names.
Remove an unneeded idx field in the GstRTSPMediaStream
2009-01-30 14:53:28 +01:00
Wim Taymans edd2175695 Fix some leaks and change default port
Fix some memory leaks by setting the udpsrc elements to the unlocked state after
we finished the initial preroll. If we keep them locked, setting the pipeline to
NULL will not stop and clean up the sources correctly.

Change the default RTSP port to 8554 aka the official alternative RTSP port.
2009-01-30 12:18:01 +01:00
Wim Taymans 704720f306 Cleanups to the session object
Remove some unneeded variables in the session state of a stream such as the
owner media and the server transport.
Get the configuration of a media stream in a session based on the media_stream
in the original object instead of our cached index.
Free more data in the finalize method.
2009-01-30 12:17:57 +01:00
Wim Taymans b19b1fbe6b Cleanups and reuse media from DESCRIBE
Handle thread create errors.
Rename some internal methods to better match what they actually do.
Handle misconfiguration of session_pool and media_mapping gracefully.
Cache the DESCRIBE media and uri in the client connection and reuse them when
we receive a SETUP request in the same connection for the same uri.
Cleanup the client connection object.
2009-01-30 12:17:51 +01:00
Wim Taymans 998cf7d5c7 Add shared properties to media and factory
Add the shared property to media.
Implement some simple caching in the factory depending on if the media is shared
or not.
2009-01-30 12:17:46 +01:00
Wim Taymans 082099005d Add a little comment
Add some comment about the content-base header.
2009-01-30 12:17:38 +01:00
Wim Taymans 41dd6399a6 Reorganize things, prepare for media sharing
Added various other test server examples
Move the SDP message generation to a separate helper.
Refactor common code for finding the session.
Add content-base for realplayer compatibility
Clean up request uris before processing for better vlc compatibility.
Move prerolling and pipeline construction to the RTSPMedia object.
Use multiudpsink for future pipeline reuse.
2009-01-30 12:17:28 +01:00
Wim Taymans b0fcbfd290 Cleanups and doc updates
Add some more documentation and do some minor cleanups here and there.
2009-01-22 18:35:17 +01:00
Wim Taymans cf18709634 More improvements
Rename GstRTSPMediaBin to GstRTSPMedia
Parse the request url into a GstRTSPUri object and pass this object to the
various handlers and methods that require the uri.
2009-01-22 17:58:19 +01:00
Wim Taymans 6f9b659b1d Handle state change failures better
Handle state change failures better when changing the state of the pipeline to
determine the SDP.
2009-01-22 16:53:16 +01:00
Wim Taymans 28b65778f6 Make element creation more extendible
Add get_element vmethod to the default MediaFactory so that subclasses can just
override that method and still use the default logic for making a MediaBin from
that.
2009-01-22 16:51:08 +01:00
Wim Taymans 4b1c190a5f Make the server handle arbitrary pipelines
Make GstMediaFactory an object that can instantiate GstMediaBin objects.
The GstMediaBin object has a handle to a bin with elements and to a list of
GstMediaStream objects that this bin produces.

Add GstMediaMapper that can map url mountpoints to GstMediaFactory objects along
with methods to register and remove those mappings.

Add methods and a property to GstRTSPServer to manage the GstMediaMapper object
used by the server instance.

Modify the example application so that it shows how to create custom pipelines
attached to a specific mount point.

Various misc cleanps.
2009-01-22 15:33:29 +01:00
Wim Taymans ddf17f338b Allow setting a custom media factory for a server 2009-01-20 19:47:07 +01:00
Wim Taymans 94d60a8611 Allow setting a custom media factory for a client. 2009-01-20 19:46:21 +01:00
Wim Taymans f38c390736 Add Makefile entry for the media factory 2009-01-20 19:45:28 +01:00
Wim Taymans 63ee9e050f Add media factory to map urls to media pipeline objects. 2009-01-20 19:44:45 +01:00
Wim Taymans 852cc3973c Add comments.
Remove unused field
2009-01-20 19:43:47 +01:00
Wim Taymans a3522af4f8 Allow custom session pools to override the session id allocation algorithms
Add some comments.
2009-01-20 19:41:53 +01:00
Wim Taymans f00188b50e Add some comments. 2009-01-20 19:40:42 +01:00
Wim Taymans b312f98627 Move the connection code in one place
Add some comments
2009-01-20 13:57:47 +01:00
Wim Taymans 74210e67be Make vmethod to create and accept new clients.
Add some docs.
2009-01-20 13:19:36 +01:00
Wim Taymans 491b20bedd Make more properties configurable in the server.
Expose the GIOChannel and GSource better to allow for more customisations.
2009-01-19 19:36:23 +01:00
Wim Taymans 8d2ace0026 Name the parameters more appropriately. 2009-01-19 19:34:29 +01:00
Wim Taymans 243b524f51 Do some more cleanup of the session pool. 2009-01-19 19:32:28 +01:00
Wim Taymans a76656ad8d Check if return value of gst_rtsp_session_get_media is not NULL 2009-01-08 16:28:24 +01:00
Wim Taymans b6e7986f45 Install rtsp-session and rtsp-session-pool headers 2009-01-08 15:02:42 +01:00
Alessandro Decina 51775b87d1 Change an obviously wrong return FALSE to return NULL;
(cherry picked from commit 56d4fb48030db3ae45f3f0e60b29b36f3134322b)
2009-01-08 13:55:07 +01:00
Sebastian Pölsterl a8400faeab Put GStreamer version in library name 2009-01-08 13:52:10 +01:00
Wim Taymans 36fb0de01c Fix some issues to pass distcheck 2009-01-08 13:51:26 +01:00
Wim Taymans 55bdc67e49 Added port property to GstRTSPServer class. 2009-01-08 13:41:33 +01:00
Wim Taymans 7889395787 Split in library and example program 2009-01-08 13:18:55 +01:00