@ -701,7 +701,14 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
get_word_sep ( buf , sizeof ( buf ) , " ;, " , & p ) ;
get_sockaddr ( buf , & th - > destination ) ;
}
} else if ( ! strcmp ( parameter , " source " ) ) {
if ( * p = = ' = ' ) {
p + + ;
get_word_sep ( buf , sizeof ( buf ) , " ;, " , & p ) ;
av_strlcpy ( th - > source , buf , sizeof ( th - > source ) ) ;
}
}
while ( * p ! = ' ; ' & & * p ! = ' \0 ' & & * p ! = ' , ' )
p + + ;
if ( * p = = ' ; ' )
@ -1154,9 +1161,15 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port,
case RTSP_LOWER_TRANSPORT_UDP : {
char url [ 1024 ] ;
/* XXX: also use address if specified */
/* Use source address if specified */
if ( reply - > transports [ 0 ] . source [ 0 ] ) {
ff_url_join ( url , sizeof ( url ) , " rtp " , NULL ,
reply - > transports [ 0 ] . source ,
reply - > transports [ 0 ] . server_port_min , NULL ) ;
} else {
ff_url_join ( url , sizeof ( url ) , " rtp " , NULL , host ,
reply - > transports [ 0 ] . server_port_min , NULL ) ;
}
if ( ! ( rt - > server_type = = RTSP_SERVER_WMS & & i > 1 ) & &
rtp_set_remote_url ( rtsp_st - > rtp_handle , url ) < 0 ) {
err = AVERROR_INVALIDDATA ;