@ -63,7 +63,7 @@ typedef struct RTSPState {
// ByteIOContext rtsp_gb;
int seq ; /* RTSP command sequence number */
char session_id [ 512 ] ;
enum RTSPProtocol protocol ;
enum RTSPLowerTransport lower_transport ;
enum RTSPServerType server_type ;
char last_reply [ 2048 ] ; /* XXX: allocate ? */
RTPDemuxContext * cur_rtp ;
@ -94,7 +94,7 @@ static int rtsp_read_play(AVFormatContext *s);
changing this variable */
# if LIBAVFORMAT_VERSION_INT < (53 << 16)
int rtsp_default_protocols = ( 1 < < RTSP_PROTOCOL_RTP _UDP ) ;
int rtsp_default_protocols = ( 1 < < RTSP_LOWER_TRANSPORT _UDP ) ;
# endif
static int rtsp_probe ( AVProbeData * p )
@ -643,9 +643,9 @@ static void rtsp_parse_transport(RTSPHeader *reply, const char *p)
profile [ 0 ] = ' \0 ' ;
}
if ( ! strcasecmp ( lower_transport , " TCP " ) )
th - > pr otocol = RTSP_PROTOCOL_RTP _TCP ;
th - > lower_trans por t = RTSP_LOWER_TRANSPORT _TCP ;
else
th - > pr otocol = RTSP_PROTOCOL_RTP _UDP ;
th - > lower_trans por t = RTSP_LOWER_TRANSPORT _UDP ;
if ( * p = = ' ; ' )
p + + ;
@ -676,8 +676,8 @@ static void rtsp_parse_transport(RTSPHeader *reply, const char *p)
& th - > interleaved_max , & p ) ;
}
} else if ( ! strcmp ( parameter , " multicast " ) ) {
if ( th - > pr otocol = = RTSP_PROTOCOL_RTP _UDP )
th - > pr otocol = RTSP_PROTOCOL_RTP _UDP_MULTICAST ;
if ( th - > lower_trans por t = = RTSP_LOWER_TRANSPORT _UDP )
th - > lower_trans por t = RTSP_LOWER_TRANSPORT _UDP_MULTICAST ;
} else if ( ! strcmp ( parameter , " ttl " ) ) {
if ( * p = = ' = ' ) {
p + + ;
@ -899,7 +899,7 @@ rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
*/
static int
make_setup_request ( AVFormatContext * s , const char * host , int port ,
int pr otocol , const char * real_challenge )
int lower_trans por t, const char * real_challenge )
{
RTSPState * rt = s - > priv_data ;
int j , i , err ;
@ -923,7 +923,7 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
rtsp_st = rt - > rtsp_streams [ i ] ;
/* RTP/UDP */
if ( pr otocol = = RTSP_PROTOCOL_RTP _UDP ) {
if ( lower_trans por t = = RTSP_LOWER_TRANSPORT _UDP ) {
char buf [ 256 ] ;
/* first try in specified port range */
@ -954,12 +954,12 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
}
/* RTP/TCP */
else if ( pr otocol = = RTSP_PROTOCOL_RTP _TCP ) {
else if ( lower_trans por t = = RTSP_LOWER_TRANSPORT _TCP ) {
snprintf ( transport , sizeof ( transport ) - 1 ,
" %s/TCP " , trans_pref ) ;
}
else if ( pr otocol = = RTSP_PROTOCOL_RTP _UDP_MULTICAST ) {
else if ( lower_trans por t = = RTSP_LOWER_TRANSPORT _UDP_MULTICAST ) {
snprintf ( transport , sizeof ( transport ) - 1 ,
" %s/UDP;multicast " , trans_pref ) ;
}
@ -990,28 +990,28 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
/* XXX: same protocol for all streams is required */
if ( i > 0 ) {
if ( reply - > transports [ 0 ] . pr otocol ! = rt - > pr otocol ) {
if ( reply - > transports [ 0 ] . lower_trans por t ! = rt - > lower_trans por t) {
err = AVERROR_INVALIDDATA ;
goto fail ;
}
} else {
rt - > pr otocol = reply - > transports [ 0 ] . pr otocol ;
rt - > lower_trans por t = reply - > transports [ 0 ] . lower_trans por t;
}
/* close RTP connection if not choosen */
if ( reply - > transports [ 0 ] . pr otocol ! = RTSP_PROTOCOL_RTP _UDP & &
( pr otocol = = RTSP_PROTOCOL_RTP _UDP ) ) {
if ( reply - > transports [ 0 ] . lower_trans por t ! = RTSP_LOWER_TRANSPORT _UDP & &
( lower_trans por t = = RTSP_LOWER_TRANSPORT _UDP ) ) {
url_close ( rtsp_st - > rtp_handle ) ;
rtsp_st - > rtp_handle = NULL ;
}
switch ( reply - > transports [ 0 ] . pr otocol ) {
case RTSP_PROTOCOL_RTP _TCP :
switch ( reply - > transports [ 0 ] . lower_trans por t) {
case RTSP_LOWER_TRANSPORT _TCP :
rtsp_st - > interleaved_min = reply - > transports [ 0 ] . interleaved_min ;
rtsp_st - > interleaved_max = reply - > transports [ 0 ] . interleaved_max ;
break ;
case RTSP_PROTOCOL_RTP _UDP :
case RTSP_LOWER_TRANSPORT _UDP :
{
char url [ 1024 ] ;
@ -1024,7 +1024,7 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
}
}
break ;
case RTSP_PROTOCOL_RTP _UDP_MULTICAST :
case RTSP_LOWER_TRANSPORT _UDP_MULTICAST :
{
char url [ 1024 ] ;
struct in_addr in ;
@ -1070,7 +1070,7 @@ static int rtsp_read_header(AVFormatContext *s,
int port , ret , err ;
RTSPHeader reply1 , * reply = & reply1 ;
unsigned char * content = NULL ;
int pr otocol _mask = 0 ;
int lower_trans por t_mask = 0 ;
char real_challenge [ 64 ] ;
/* extract hostname and port */
@ -1092,16 +1092,16 @@ static int rtsp_read_header(AVFormatContext *s,
* ( option_list + + ) = 0 ;
/* handle the options */
if ( strcmp ( option , " udp " ) = = 0 )
pr otocol _mask = ( 1 < < RTSP_PROTOCOL_RTP _UDP ) ;
lower_trans por t_mask = ( 1 < < RTSP_LOWER_TRANSPORT _UDP ) ;
else if ( strcmp ( option , " multicast " ) = = 0 )
pr otocol _mask = ( 1 < < RTSP_PROTOCOL_RTP _UDP_MULTICAST ) ;
lower_trans por t_mask = ( 1 < < RTSP_LOWER_TRANSPORT _UDP_MULTICAST ) ;
else if ( strcmp ( option , " tcp " ) = = 0 )
pr otocol _mask = ( 1 < < RTSP_PROTOCOL_RTP _TCP ) ;
lower_trans por t_mask = ( 1 < < RTSP_LOWER_TRANSPORT _TCP ) ;
}
}
if ( ! pr otocol _mask )
pr otocol _mask = ( 1 < < RTSP_PROTOCOL_RTP _LAST ) - 1 ;
if ( ! lower_trans por t_mask)
lower_trans por t_mask = ( 1 < < RTSP_LOWER_TRANSPORT _LAST ) - 1 ;
/* open the tcp connexion */
snprintf ( tcpname , sizeof ( tcpname ) , " tcp://%s:%d " , host , port ) ;
@ -1179,15 +1179,15 @@ static int rtsp_read_header(AVFormatContext *s,
}
do {
int pr otocol = ff_log2_tab [ pr otocol _mask & ~ ( pr otocol _mask - 1 ) ] ;
int lower_trans por t = ff_log2_tab [ lower_trans por t_mask & ~ ( lower_trans por t_mask - 1 ) ] ;
err = make_setup_request ( s , host , port , pr otocol ,
err = make_setup_request ( s , host , port , lower_trans por t,
rt - > server_type = = RTSP_SERVER_REAL ?
real_challenge : NULL ) ;
if ( err < 0 )
goto fail ;
pr otocol _mask & = ~ ( 1 < < pr otocol ) ;
if ( pr otocol _mask = = 0 & & err = = 1 ) {
lower_trans por t_mask & = ~ ( 1 < < lower_trans por t) ;
if ( lower_trans por t_mask = = 0 & & err = = 1 ) {
err = AVERROR ( FF_NETERROR ( EPROTONOSUPPORT ) ) ;
goto fail ;
}
@ -1353,13 +1353,13 @@ static int rtsp_read_packet(AVFormatContext *s,
/* read next RTP packet */
redo :
switch ( rt - > pr otocol ) {
switch ( rt - > lower_trans por t) {
default :
case RTSP_PROTOCOL_RTP _TCP :
case RTSP_LOWER_TRANSPORT _TCP :
len = tcp_read_packet ( s , & rtsp_st , buf , sizeof ( buf ) ) ;
break ;
case RTSP_PROTOCOL_RTP _UDP :
case RTSP_PROTOCOL_RTP _UDP_MULTICAST :
case RTSP_LOWER_TRANSPORT _UDP :
case RTSP_LOWER_TRANSPORT _UDP_MULTICAST :
len = udp_read_packet ( s , & rtsp_st , buf , sizeof ( buf ) ) ;
if ( len > = 0 & & rtsp_st - > rtp_ctx )
rtp_check_and_send_back_rr ( rtsp_st - > rtp_ctx , len ) ;
@ -1462,7 +1462,7 @@ static int rtsp_read_close(AVFormatContext *s)
#if 0
/* NOTE: it is valid to flush the buffer here */
if ( rt - > pr otocol = = RTSP_PROTOCOL_RTP _TCP ) {
if ( rt - > lower_trans por t = = RTSP_LOWER_TRANSPORT _TCP ) {
url_fclose ( & rt - > rtsp_gb ) ;
}
# endif