@ -250,7 +250,7 @@ static const AttrNameMap attr_names[]=
/* parse the attribute line from the fmtp a line of an sdp resonse. This
/* parse the attribute line from the fmtp a line of an sdp resonse. This
* is broken out as a function because it is used in rtp_h264 . c , which is
* is broken out as a function because it is used in rtp_h264 . c , which is
* forthcoming . */
* forthcoming . */
int rtsp_next_attr_and_value ( const char * * p , char * attr , int attr_size ,
int ff_ rtsp_next_attr_and_value( const char * * p , char * attr , int attr_size ,
char * value , int value_size )
char * value , int value_size )
{
{
skip_spaces ( p ) ;
skip_spaces ( p ) ;
@ -279,7 +279,7 @@ static void sdp_parse_fmtp(AVStream *st, const char *p)
RTPPayloadData * rtp_payload_data = & rtsp_st - > rtp_payload_data ;
RTPPayloadData * rtp_payload_data = & rtsp_st - > rtp_payload_data ;
/* loop on each attribute */
/* loop on each attribute */
while ( rtsp_next_attr_and_value ( & p , attr , sizeof ( attr ) ,
while ( ff_ rtsp_next_attr_and_value( & p , attr , sizeof ( attr ) ,
value , sizeof ( value ) ) ) {
value , sizeof ( value ) ) ) {
/* grab the codec extra_data from the config parameter of the fmtp
/* grab the codec extra_data from the config parameter of the fmtp
* line */
* line */
@ -572,7 +572,7 @@ static int sdp_parse(AVFormatContext *s, const char *content)
}
}
/* close and free RTSP streams */
/* close and free RTSP streams */
void rtsp_close_streams ( AVFormatContext * s )
void ff_ rtsp_close_streams( AVFormatContext * s )
{
{
RTSPState * rt = s - > priv_data ;
RTSPState * rt = s - > priv_data ;
int i ;
int i ;
@ -819,7 +819,7 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
}
}
}
}
void rtsp_parse_line ( RTSPMessageHeader * reply , const char * buf )
void ff_ rtsp_parse_line( RTSPMessageHeader * reply , const char * buf )
{
{
const char * p ;
const char * p ;
@ -881,7 +881,7 @@ static void rtsp_skip_packet(AVFormatContext *s)
}
}
}
}
int rtsp_read_reply ( AVFormatContext * s , RTSPMessageHeader * reply ,
int ff_ rtsp_read_reply( AVFormatContext * s , RTSPMessageHeader * reply ,
unsigned char * * content_ptr ,
unsigned char * * content_ptr ,
int return_on_interleaved_data )
int return_on_interleaved_data )
{
{
@ -932,7 +932,7 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
get_word ( buf1 , sizeof ( buf1 ) , & p ) ;
get_word ( buf1 , sizeof ( buf1 ) , & p ) ;
reply - > status_code = atoi ( buf1 ) ;
reply - > status_code = atoi ( buf1 ) ;
} else {
} else {
rtsp_parse_line ( reply , p ) ;
ff_ rtsp_parse_line( reply , p ) ;
av_strlcat ( rt - > last_reply , p , sizeof ( rt - > last_reply ) ) ;
av_strlcat ( rt - > last_reply , p , sizeof ( rt - > last_reply ) ) ;
av_strlcat ( rt - > last_reply , " \n " , sizeof ( rt - > last_reply ) ) ;
av_strlcat ( rt - > last_reply , " \n " , sizeof ( rt - > last_reply ) ) ;
}
}
@ -968,7 +968,7 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
return 0 ;
return 0 ;
}
}
void rtsp_send_cmd_with_content_async ( AVFormatContext * s ,
void ff_ rtsp_send_cmd_with_content_async( AVFormatContext * s ,
const char * cmd ,
const char * cmd ,
const unsigned char * send_content ,
const unsigned char * send_content ,
int send_content_length )
int send_content_length )
@ -1000,30 +1000,30 @@ void rtsp_send_cmd_with_content_async(AVFormatContext *s,
rt - > last_cmd_time = av_gettime ( ) ;
rt - > last_cmd_time = av_gettime ( ) ;
}
}
void rtsp_send_cmd_async ( AVFormatContext * s , const char * cmd )
void ff_ rtsp_send_cmd_async( AVFormatContext * s , const char * cmd )
{
{
rtsp_send_cmd_with_content_async ( s , cmd , NULL , 0 ) ;
ff_ rtsp_send_cmd_with_content_async( s , cmd , NULL , 0 ) ;
}
}
void rtsp_send_cmd ( AVFormatContext * s ,
void ff_ rtsp_send_cmd( AVFormatContext * s ,
const char * cmd , RTSPMessageHeader * reply ,
const char * cmd , RTSPMessageHeader * reply ,
unsigned char * * content_ptr )
unsigned char * * content_ptr )
{
{
rtsp_send_cmd_async ( s , cmd ) ;
ff_ rtsp_send_cmd_async( s , cmd ) ;
rtsp_read_reply ( s , reply , content_ptr , 0 ) ;
ff_ rtsp_read_reply( s , reply , content_ptr , 0 ) ;
}
}
void rtsp_send_cmd_with_content ( AVFormatContext * s ,
void ff_ rtsp_send_cmd_with_content( AVFormatContext * s ,
const char * cmd ,
const char * cmd ,
RTSPMessageHeader * reply ,
RTSPMessageHeader * reply ,
unsigned char * * content_ptr ,
unsigned char * * content_ptr ,
const unsigned char * send_content ,
const unsigned char * send_content ,
int send_content_length )
int send_content_length )
{
{
rtsp_send_cmd_with_content_async ( s , cmd , send_content , send_content_length ) ;
ff_ rtsp_send_cmd_with_content_async( s , cmd , send_content , send_content_length ) ;
rtsp_read_reply ( s , reply , content_ptr , 0 ) ;
ff_ rtsp_read_reply( s , reply , content_ptr , 0 ) ;
}
}
/**
/**
@ -1162,7 +1162,7 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port,
" RealChallenge2: %s, sd=%s \r \n " ,
" RealChallenge2: %s, sd=%s \r \n " ,
rt - > session_id , real_res , real_csum ) ;
rt - > session_id , real_res , real_csum ) ;
}
}
rtsp_send_cmd ( s , cmd , reply , NULL ) ;
ff_ rtsp_send_cmd( s , cmd , reply , NULL ) ;
if ( reply - > status_code = = 461 /* Unsupported protocol */ & & i = = 0 ) {
if ( reply - > status_code = = 461 /* Unsupported protocol */ & & i = = 0 ) {
err = 1 ;
err = 1 ;
goto fail ;
goto fail ;
@ -1282,7 +1282,7 @@ static int rtsp_read_play(AVFormatContext *s)
rt - > control_uri ,
rt - > control_uri ,
( double ) rt - > seek_timestamp / AV_TIME_BASE ) ;
( double ) rt - > seek_timestamp / AV_TIME_BASE ) ;
}
}
rtsp_send_cmd ( s , cmd , reply , NULL ) ;
ff_ rtsp_send_cmd( s , cmd , reply , NULL ) ;
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
return - 1 ;
return - 1 ;
}
}
@ -1313,7 +1313,7 @@ static int rtsp_setup_input_streams(AVFormatContext *s)
" Require: com.real.retain-entity-for-setup \r \n " ,
" Require: com.real.retain-entity-for-setup \r \n " ,
sizeof ( cmd ) ) ;
sizeof ( cmd ) ) ;
}
}
rtsp_send_cmd ( s , cmd , reply , & content ) ;
ff_ rtsp_send_cmd( s , cmd , reply , & content ) ;
if ( ! content )
if ( ! content )
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
@ -1351,7 +1351,7 @@ static int rtsp_setup_output_streams(AVFormatContext *s)
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
}
}
av_log ( s , AV_LOG_INFO , " SDP: \n %s \n " , sdp ) ;
av_log ( s , AV_LOG_INFO , " SDP: \n %s \n " , sdp ) ;
rtsp_send_cmd_with_content ( s , cmd , reply , NULL , sdp , strlen ( sdp ) ) ;
ff_ rtsp_send_cmd_with_content( s , cmd , reply , NULL , sdp , strlen ( sdp ) ) ;
av_free ( sdp ) ;
av_free ( sdp ) ;
if ( reply - > status_code ! = RTSP_STATUS_OK )
if ( reply - > status_code ! = RTSP_STATUS_OK )
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
@ -1378,7 +1378,7 @@ static int rtsp_setup_output_streams(AVFormatContext *s)
return 0 ;
return 0 ;
}
}
int rtsp_connect ( AVFormatContext * s )
int ff_ rtsp_connect( AVFormatContext * s )
{
{
RTSPState * rt = s - > priv_data ;
RTSPState * rt = s - > priv_data ;
char host [ 1024 ] , path [ 1024 ] , tcpname [ 1024 ] , cmd [ 2048 ] , auth [ 128 ] ;
char host [ 1024 ] , path [ 1024 ] , tcpname [ 1024 ] , cmd [ 2048 ] , auth [ 128 ] ;
@ -1478,7 +1478,7 @@ redirect:
" CompanyID: KnKV4M4I/B2FjJ1TToLycw== \r \n "
" CompanyID: KnKV4M4I/B2FjJ1TToLycw== \r \n "
" GUID: 00000000-0000-0000-0000-000000000000 \r \n " ,
" GUID: 00000000-0000-0000-0000-000000000000 \r \n " ,
sizeof ( cmd ) ) ;
sizeof ( cmd ) ) ;
rtsp_send_cmd ( s , cmd , reply , NULL ) ;
ff_ rtsp_send_cmd( s , cmd , reply , NULL ) ;
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
err = AVERROR_INVALIDDATA ;
err = AVERROR_INVALIDDATA ;
goto fail ;
goto fail ;
@ -1522,7 +1522,7 @@ redirect:
rt - > seek_timestamp = 0 ; /* default is to start stream at position zero */
rt - > seek_timestamp = 0 ; /* default is to start stream at position zero */
return 0 ;
return 0 ;
fail :
fail :
rtsp_close_streams ( s ) ;
ff_ rtsp_close_streams( s ) ;
url_close ( rt - > rtsp_hd ) ;
url_close ( rt - > rtsp_hd ) ;
if ( reply - > status_code > = 300 & & reply - > status_code < 400 & & s - > iformat ) {
if ( reply - > status_code > = 300 & & reply - > status_code < 400 & & s - > iformat ) {
av_strlcpy ( s - > filename , reply - > location , sizeof ( s - > filename ) ) ;
av_strlcpy ( s - > filename , reply - > location , sizeof ( s - > filename ) ) ;
@ -1542,7 +1542,7 @@ static int rtsp_read_header(AVFormatContext *s,
RTSPState * rt = s - > priv_data ;
RTSPState * rt = s - > priv_data ;
int ret ;
int ret ;
ret = rtsp_connect ( s ) ;
ret = ff_ rtsp_connect( s ) ;
if ( ret )
if ( ret )
return ret ;
return ret ;
@ -1550,7 +1550,7 @@ static int rtsp_read_header(AVFormatContext *s,
/* do not start immediately */
/* do not start immediately */
} else {
} else {
if ( rtsp_read_play ( s ) < 0 ) {
if ( rtsp_read_play ( s ) < 0 ) {
rtsp_close_streams ( s ) ;
ff_ rtsp_close_streams( s ) ;
url_close ( rt - > rtsp_hd ) ;
url_close ( rt - > rtsp_hd ) ;
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
}
}
@ -1611,7 +1611,7 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st,
if ( tcp_fd ! = - 1 & & FD_ISSET ( tcp_fd , & rfds ) ) {
if ( tcp_fd ! = - 1 & & FD_ISSET ( tcp_fd , & rfds ) ) {
RTSPMessageHeader reply ;
RTSPMessageHeader reply ;
rtsp_read_reply ( s , & reply , NULL , 0 ) ;
ff_ rtsp_read_reply( s , & reply , NULL , 0 ) ;
/* XXX: parse message */
/* XXX: parse message */
if ( rt - > state ! = RTSP_STATE_STREAMING )
if ( rt - > state ! = RTSP_STATE_STREAMING )
return 0 ;
return 0 ;
@ -1635,7 +1635,7 @@ redo:
for ( ; ; ) {
for ( ; ; ) {
RTSPMessageHeader reply ;
RTSPMessageHeader reply ;
ret = rtsp_read_reply ( s , & reply , NULL , 1 ) ;
ret = ff_ rtsp_read_reply( s , & reply , NULL , 1 ) ;
if ( ret = = - 1 )
if ( ret = = - 1 )
return - 1 ;
return - 1 ;
if ( ret = = 1 ) /* received '$' */
if ( ret = = 1 ) /* received '$' */
@ -1751,7 +1751,7 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
" SET_PARAMETER %s RTSP/1.0 \r \n "
" SET_PARAMETER %s RTSP/1.0 \r \n "
" Unsubscribe: %s \r \n " ,
" Unsubscribe: %s \r \n " ,
rt - > control_uri , rt - > last_subscription ) ;
rt - > control_uri , rt - > last_subscription ) ;
rtsp_send_cmd ( s , cmd , reply , NULL ) ;
ff_ rtsp_send_cmd( s , cmd , reply , NULL ) ;
if ( reply - > status_code ! = RTSP_STATUS_OK )
if ( reply - > status_code ! = RTSP_STATUS_OK )
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
rt - > need_subscription = 1 ;
rt - > need_subscription = 1 ;
@ -1787,7 +1787,7 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
}
}
}
}
av_strlcatf ( cmd , sizeof ( cmd ) , " %s \r \n " , rt - > last_subscription ) ;
av_strlcatf ( cmd , sizeof ( cmd ) , " %s \r \n " , rt - > last_subscription ) ;
rtsp_send_cmd ( s , cmd , reply , NULL ) ;
ff_ rtsp_send_cmd( s , cmd , reply , NULL ) ;
if ( reply - > status_code ! = RTSP_STATUS_OK )
if ( reply - > status_code ! = RTSP_STATUS_OK )
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
rt - > need_subscription = 0 ;
rt - > need_subscription = 0 ;
@ -1809,9 +1809,9 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
snprintf ( cmd , sizeof ( cmd ) - 1 ,
snprintf ( cmd , sizeof ( cmd ) - 1 ,
" GET_PARAMETER %s RTSP/1.0 \r \n " ,
" GET_PARAMETER %s RTSP/1.0 \r \n " ,
rt - > control_uri ) ;
rt - > control_uri ) ;
rtsp_send_cmd_async ( s , cmd ) ;
ff_ rtsp_send_cmd_async( s , cmd ) ;
} else {
} else {
rtsp_send_cmd_async ( s , " OPTIONS * RTSP/1.0 \r \n " ) ;
ff_ rtsp_send_cmd_async( s , " OPTIONS * RTSP/1.0 \r \n " ) ;
}
}
}
}
@ -1833,7 +1833,7 @@ static int rtsp_read_pause(AVFormatContext *s)
snprintf ( cmd , sizeof ( cmd ) ,
snprintf ( cmd , sizeof ( cmd ) ,
" PAUSE %s RTSP/1.0 \r \n " ,
" PAUSE %s RTSP/1.0 \r \n " ,
rt - > control_uri ) ;
rt - > control_uri ) ;
rtsp_send_cmd ( s , cmd , reply , NULL ) ;
ff_ rtsp_send_cmd( s , cmd , reply , NULL ) ;
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
if ( reply - > status_code ! = RTSP_STATUS_OK ) {
return - 1 ;
return - 1 ;
}
}
@ -1882,9 +1882,9 @@ static int rtsp_read_close(AVFormatContext *s)
snprintf ( cmd , sizeof ( cmd ) ,
snprintf ( cmd , sizeof ( cmd ) ,
" TEARDOWN %s RTSP/1.0 \r \n " ,
" TEARDOWN %s RTSP/1.0 \r \n " ,
s - > filename ) ;
s - > filename ) ;
rtsp_send_cmd_async ( s , cmd ) ;
ff_ rtsp_send_cmd_async( s , cmd ) ;
rtsp_close_streams ( s ) ;
ff_ rtsp_close_streams( s ) ;
url_close ( rt - > rtsp_hd ) ;
url_close ( rt - > rtsp_hd ) ;
return 0 ;
return 0 ;
}
}
@ -1964,13 +1964,13 @@ static int sdp_read_header(AVFormatContext *s, AVFormatParameters *ap)
}
}
return 0 ;
return 0 ;
fail :
fail :
rtsp_close_streams ( s ) ;
ff_ rtsp_close_streams( s ) ;
return err ;
return err ;
}
}
static int sdp_read_close ( AVFormatContext * s )
static int sdp_read_close ( AVFormatContext * s )
{
{
rtsp_close_streams ( s ) ;
ff_ rtsp_close_streams( s ) ;
return 0 ;
return 0 ;
}
}