- p_sys->psz_rtsp_path = strdup( url->psz_path ? url->psz_path : "/" );
- p_sys->psz_rtsp_control = malloc (strlen( url->psz_host ) + 20 + strlen( p_sys->psz_rtsp_path ) + 1 );
- sprintf( p_sys->psz_rtsp_control, "rtsp://%s:%d%s",
- 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 );
- if( p_sys->p_rtsp_url == 0 )
- {
- return VLC_EGENERIC;
- }
- httpd_UrlCatch( p_sys->p_rtsp_url, HTTPD_MSG_DESCRIBE, RtspCallback, (void*)p_stream );
- httpd_UrlCatch( p_sys->p_rtsp_url, HTTPD_MSG_SETUP, RtspCallback, (void*)p_stream );
- httpd_UrlCatch( p_sys->p_rtsp_url, HTTPD_MSG_PLAY, RtspCallback, (void*)p_stream );
- httpd_UrlCatch( p_sys->p_rtsp_url, HTTPD_MSG_PAUSE, RtspCallback, (void*)p_stream );
- httpd_UrlCatch( p_sys->p_rtsp_url, HTTPD_MSG_TEARDOWN, RtspCallback, (void*)p_stream );
+ rtsp->owner = p_stream;
+ rtsp->sessionc = 0;
+ rtsp->sessionv = NULL;
+ rtsp->host = NULL;
+ rtsp->url = NULL;
+ rtsp->psz_path = NULL;
+ vlc_mutex_init( &rtsp->lock );
+
+ rtsp->port = (url->i_port > 0) ? url->i_port : 554;
+ rtsp->psz_path = strdup( ( url->psz_path != NULL ) ? url->psz_path : "/" );
+ if( rtsp->psz_path == NULL )
+ goto error;
+
+ assert( strlen( rtsp->psz_path ) > 0 );
+ if( rtsp->psz_path[strlen( rtsp->psz_path ) - 1] == '/' )
+ rtsp->track_fmt = "%strackID=%u";
+ else
+ rtsp->track_fmt = "%s/trackID=%u";
+
+ msg_Dbg( p_stream, "RTSP stream: host %s port %d at %s",
+ url->psz_host, rtsp->port, rtsp->psz_path );
+
+ rtsp->host = httpd_HostNew( VLC_OBJECT(p_stream), url->psz_host,
+ rtsp->port );
+ if( rtsp->host == NULL )
+ goto error;
+
+ rtsp->url = httpd_UrlNewUnique( rtsp->host, rtsp->psz_path,
+ NULL, NULL, NULL );
+ if( rtsp->url == NULL )
+ goto error;
+
+ httpd_UrlCatch( rtsp->url, HTTPD_MSG_DESCRIBE, RtspCallback, (void*)rtsp );
+ httpd_UrlCatch( rtsp->url, HTTPD_MSG_SETUP, RtspCallback, (void*)rtsp );
+ httpd_UrlCatch( rtsp->url, HTTPD_MSG_PLAY, RtspCallback, (void*)rtsp );
+ httpd_UrlCatch( rtsp->url, HTTPD_MSG_PAUSE, RtspCallback, (void*)rtsp );
+ httpd_UrlCatch( rtsp->url, HTTPD_MSG_GETPARAMETER, RtspCallback,
+ (void*)rtsp );
+ httpd_UrlCatch( rtsp->url, HTTPD_MSG_TEARDOWN, RtspCallback, (void*)rtsp );
+ return rtsp;