When we are dynamically adding pads, the addition of the udpsrc elements will
trigger an ASYNC_DONE. We have to ignore this because we only want to react to
the real ASYNC_DONE when everything is prerolled.
When we generate the key to share made between connections, don't include the
host used to connect so that we can share media even if between clients that
connected with localhost and ones with the ip address.
Add an eos-shutdown property that will send an EOS to the pipeline before
shutting it down. This allows for nice cleanup in case of a muxer.
Fixes#625597
If we have a new enough multiudpsink with the send-duplicates property, use this
instead of doing our own filtering. Our custom filtering code should eventually
be removed when we can depend on a released -good.
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
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
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
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
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.