@ -374,6 +374,10 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
if ( ! strcmp ( ff_rtp_enc_name ( rtsp_st - > sdp_payload_type ) , " MP2T " ) ) {
/* no corresponding stream */
} else if ( rt - > server_type = = RTSP_SERVER_WMS & &
codec_type = = AVMEDIA_TYPE_DATA ) {
/* RTX stream, a stream that carries all the other actual
* audio / video streams . Don ' t expose this to the callers . */
} else {
st = avformat_new_stream ( s , NULL ) ;
if ( ! st )
@ -430,9 +434,11 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
/* NOTE: rtpmap is only supported AFTER the 'm=' tag */
get_word ( buf1 , sizeof ( buf1 ) , & p ) ;
payload_type = atoi ( buf1 ) ;
st = s - > streams [ s - > nb_streams - 1 ] ;
rtsp_st = rt - > rtsp_streams [ rt - > nb_rtsp_streams - 1 ] ;
sdp_parse_rtpmap ( s , st , rtsp_st , payload_type , p ) ;
if ( rtsp_st - > stream_index > = 0 ) {
st = s - > streams [ rtsp_st - > stream_index ] ;
sdp_parse_rtpmap ( s , st , rtsp_st , payload_type , p ) ;
}
} else if ( av_strstart ( p , " fmtp: " , & p ) | |
av_strstart ( p , " framesize: " , & p ) ) {
/* NOTE: fmtp is only supported AFTER the 'a=rtpmap:xxx' tag */
@ -467,14 +473,15 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
if ( rt - > server_type = = RTSP_SERVER_WMS )
ff_wms_parse_sdp_a_line ( s , p ) ;
if ( s - > nb_streams > 0 ) {
rtsp_st = rt - > rtsp_streams [ rt - > nb_rtsp_streams - 1 ] ;
if ( rt - > server_type = = RTSP_SERVER_REAL )
ff_real_parse_sdp_a_line ( s , s - > nb_streams - 1 , p ) ;
ff_real_parse_sdp_a_line ( s , rt sp_st - > stream_index , p ) ;
rtsp_st = rt - > rtsp_streams [ rt - > nb_rtsp_streams - 1 ] ;
if ( rtsp_st - > dynamic_handler & &
rtsp_st - > dynamic_handler - > parse_sdp_a_line )
rtsp_st - > dynamic_handler - > parse_sdp_a_line ( s ,
s - > nb_streams - 1 ,
rt sp_st - > stream_index ,
rtsp_st - > dynamic_protocol_context , buf ) ;
}
}
@ -1250,8 +1257,9 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port,
* UDP . When trying to set it up for TCP streams , the server
* will return an error . Therefore , we skip those streams . */
if ( rt - > server_type = = RTSP_SERVER_WMS & &
s - > streams [ rtsp_st - > stream_index ] - > codec - > codec_type = =
AVMEDIA_TYPE_DATA )
( rtsp_st - > stream_index < 0 | |
s - > streams [ rtsp_st - > stream_index ] - > codec - > codec_type = =
AVMEDIA_TYPE_DATA ) )
continue ;
snprintf ( transport , sizeof ( transport ) - 1 ,
" %s/TCP; " , trans_pref ) ;