Commit 4db2dc94 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Cleanup RTP / RTSP boundary a little

parent 39d3b160
...@@ -514,8 +514,7 @@ static void Close( vlc_object_t * p_this ) ...@@ -514,8 +514,7 @@ static void Close( vlc_object_t * p_this )
} }
} }
while( p_sys->i_rtsp > 0 ) RtspUnsetup( p_stream );
RtspClientDel( p_stream, p_sys->rtsp[0] );
vlc_mutex_destroy( &p_sys->lock_sdp ); vlc_mutex_destroy( &p_sys->lock_sdp );
...@@ -1112,23 +1111,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -1112,23 +1111,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
msg_Dbg( p_stream, "maximum RTP packet size: %d bytes", id->i_mtu ); msg_Dbg( p_stream, "maximum RTP packet size: %d bytes", id->i_mtu );
if( p_sys->p_rtsp_url ) if( p_sys->p_rtsp_url )
{ RtspSetupId( p_stream, id );
char psz_urlc[strlen( p_sys->psz_rtsp_control ) + 1 + 10];
sprintf( psz_urlc, "%s/trackID=%d", p_sys->psz_rtsp_path, p_sys->i_es );
msg_Dbg( p_stream, "rtsp: adding %s\n", psz_urlc );
id->p_rtsp_url = httpd_UrlNewUnique( p_sys->p_rtsp_host, psz_urlc, NULL, NULL, NULL );
if( id->p_rtsp_url )
{
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_DESCRIBE, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_SETUP, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_PLAY, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_PAUSE, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_TEARDOWN, RtspCallbackId, (void*)id );
}
}
/* Update p_sys context */ /* Update p_sys context */
vlc_mutex_lock( &p_sys->lock_es ); vlc_mutex_lock( &p_sys->lock_es );
......
...@@ -24,12 +24,9 @@ ...@@ -24,12 +24,9 @@
typedef struct rtsp_client_t rtsp_client_t; typedef struct rtsp_client_t rtsp_client_t;
int RtspSetup( sout_stream_t *p_stream, vlc_url_t * ); int RtspSetup( sout_stream_t *p_stream, const vlc_url_t *url );
int RtspSetupId( sout_stream_t *p_stream, sout_stream_id_t *id );
int RtspCallbackId( httpd_callback_sys_t *, httpd_client_t *, void RtspUnsetup( sout_stream_t *p_stream );
httpd_message_t *, httpd_message_t * );
void RtspClientDel( sout_stream_t *, rtsp_client_t * );
char *SDPGenerate( const sout_stream_t *p_stream, char *SDPGenerate( const sout_stream_t *p_stream,
const char *psz_destination, vlc_bool_t b_rtsp ); const char *psz_destination, vlc_bool_t b_rtsp );
......
...@@ -52,10 +52,12 @@ struct rtsp_client_t ...@@ -52,10 +52,12 @@ struct rtsp_client_t
static int RtspCallback( httpd_callback_sys_t *p_args, static int RtspCallback( httpd_callback_sys_t *p_args,
httpd_client_t *cl, httpd_client_t *cl,
httpd_message_t *answer, httpd_message_t *query ); httpd_message_t *answer, httpd_message_t *query );
static int RtspCallbackId( httpd_callback_sys_t *p_args,
httpd_client_t *cl,
httpd_message_t *answer, httpd_message_t *query );
static void RtspClientDel( sout_stream_t *p_stream, rtsp_client_t *rtsp );
int RtspSetup( sout_stream_t *p_stream, const vlc_url_t *url )
int RtspSetup( sout_stream_t *p_stream, vlc_url_t *url )
{ {
sout_stream_sys_t *p_sys = p_stream->p_sys; sout_stream_sys_t *p_sys = p_stream->p_sys;
...@@ -73,7 +75,7 @@ int RtspSetup( sout_stream_t *p_stream, vlc_url_t *url ) ...@@ -73,7 +75,7 @@ int RtspSetup( sout_stream_t *p_stream, vlc_url_t *url )
url->psz_host, url->i_port > 0 ? url->i_port : 554, p_sys->psz_rtsp_path ); url->psz_host, url->i_port > 0 ? url->i_port : 554, p_sys->psz_rtsp_path );
p_sys->p_rtsp_url = httpd_UrlNewUnique( p_sys->p_rtsp_host, p_sys->psz_rtsp_path, NULL, NULL, NULL ); p_sys->p_rtsp_url = httpd_UrlNewUnique( p_sys->p_rtsp_host, p_sys->psz_rtsp_path, NULL, NULL, NULL );
if( p_sys->p_rtsp_url == 0 ) if( p_sys->p_rtsp_url == NULL )
{ {
return VLC_EGENERIC; return VLC_EGENERIC;
} }
...@@ -87,6 +89,36 @@ int RtspSetup( sout_stream_t *p_stream, vlc_url_t *url ) ...@@ -87,6 +89,36 @@ int RtspSetup( sout_stream_t *p_stream, vlc_url_t *url )
} }
int RtspSetupId( sout_stream_t *p_stream, sout_stream_id_t *id )
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
char psz_urlc[strlen( p_sys->psz_rtsp_control ) + 1 + 10];
sprintf( psz_urlc, "%s/trackID=%d", p_sys->psz_rtsp_path, p_sys->i_es );
msg_Dbg( p_stream, "rtsp: adding %s\n", psz_urlc );
id->p_rtsp_url = httpd_UrlNewUnique( p_sys->p_rtsp_host, psz_urlc, NULL, NULL, NULL );
if( id->p_rtsp_url )
{
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_DESCRIBE, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_SETUP, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_PLAY, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_PAUSE, RtspCallbackId, (void*)id );
httpd_UrlCatch( id->p_rtsp_url, HTTPD_MSG_TEARDOWN, RtspCallbackId, (void*)id );
}
return VLC_SUCCESS;
}
void RtspUnsetup( sout_stream_t *p_stream )
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
while( p_sys->i_rtsp > 0 )
RtspClientDel( p_stream, p_sys->rtsp[0] );
}
static rtsp_client_t *RtspClientNew( sout_stream_t *p_stream, const char *psz_session ) static rtsp_client_t *RtspClientNew( sout_stream_t *p_stream, const char *psz_session )
{ {
rtsp_client_t *rtsp = malloc( sizeof( rtsp_client_t )); rtsp_client_t *rtsp = malloc( sizeof( rtsp_client_t ));
...@@ -122,7 +154,7 @@ static rtsp_client_t *RtspClientGet( sout_stream_t *p_stream, const char *psz_se ...@@ -122,7 +154,7 @@ static rtsp_client_t *RtspClientGet( sout_stream_t *p_stream, const char *psz_se
} }
/*static*/ void RtspClientDel( sout_stream_t *p_stream, rtsp_client_t *rtsp ) static void RtspClientDel( sout_stream_t *p_stream, rtsp_client_t *rtsp )
{ {
int i; int i;
TAB_REMOVE( p_stream->p_sys->i_rtsp, p_stream->p_sys->rtsp, rtsp ); TAB_REMOVE( p_stream->p_sys->i_rtsp, p_stream->p_sys->rtsp, rtsp );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment