mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
Support 3xx redirection in rtsp
All the error codes 3xx got managed the same way. After setup/early play redirection will not be managed REDIRECT method is yet to be supported (if somebody knows a server implementing it please contact me) Originally committed as revision 20369 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c5898e8623
commit
d243ba30b8
@ -704,6 +704,9 @@ void rtsp_parse_line(RTSPMessageHeader *reply, const char *buf)
|
|||||||
} else if (av_stristart(p, "Notice:", &p) ||
|
} else if (av_stristart(p, "Notice:", &p) ||
|
||||||
av_stristart(p, "X-Notice:", &p)) {
|
av_stristart(p, "X-Notice:", &p)) {
|
||||||
reply->notice = strtol(p, NULL, 10);
|
reply->notice = strtol(p, NULL, 10);
|
||||||
|
} else if (av_stristart(p, "Location:", &p)) {
|
||||||
|
skip_spaces(&p);
|
||||||
|
av_strlcpy(reply->location, p , sizeof(reply->location));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1180,7 +1183,7 @@ static int rtsp_read_header(AVFormatContext *s,
|
|||||||
unsigned char *content = NULL;
|
unsigned char *content = NULL;
|
||||||
int lower_transport_mask = 0;
|
int lower_transport_mask = 0;
|
||||||
char real_challenge[64];
|
char real_challenge[64];
|
||||||
|
redirect:
|
||||||
/* extract hostname and port */
|
/* extract hostname and port */
|
||||||
url_split(NULL, 0, auth, sizeof(auth),
|
url_split(NULL, 0, auth, sizeof(auth),
|
||||||
host, sizeof(host), &port, path, sizeof(path), s->filename);
|
host, sizeof(host), &port, path, sizeof(path), s->filename);
|
||||||
@ -1338,6 +1341,13 @@ static int rtsp_read_header(AVFormatContext *s,
|
|||||||
av_freep(&content);
|
av_freep(&content);
|
||||||
url_close(rt->rtsp_hd);
|
url_close(rt->rtsp_hd);
|
||||||
av_freep(&rt->auth_b64);
|
av_freep(&rt->auth_b64);
|
||||||
|
if (reply->status_code >=300 && reply->status_code < 400) {
|
||||||
|
av_strlcpy(s->filename, reply->location, sizeof(s->filename));
|
||||||
|
av_log(s, AV_LOG_INFO, "Status %d: Redirecting to %s\n",
|
||||||
|
reply->status_code,
|
||||||
|
s->filename);
|
||||||
|
goto redirect;
|
||||||
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,6 +121,10 @@ typedef struct RTSPMessageHeader {
|
|||||||
* should be re-transmitted by the client in every RTSP command. */
|
* should be re-transmitted by the client in every RTSP command. */
|
||||||
char session_id[512];
|
char session_id[512];
|
||||||
|
|
||||||
|
/** the "Location:" field. This value is used to handle redirection.
|
||||||
|
*/
|
||||||
|
char location[4096];
|
||||||
|
|
||||||
/** the "RealChallenge1:" field from the server */
|
/** the "RealChallenge1:" field from the server */
|
||||||
char real_challenge[64];
|
char real_challenge[64];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user