mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
rtsp: Parse RTP-Info headers
Originally committed as revision 26236 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
4cb06874c7
commit
29db7c3af4
@ -684,6 +684,61 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_rtp_info(RTSPState *rt, const char *url,
|
||||
uint32_t seq, uint32_t rtptime)
|
||||
{
|
||||
int i;
|
||||
if (!rtptime || !url[0])
|
||||
return;
|
||||
if (rt->transport != RTSP_TRANSPORT_RTP)
|
||||
return;
|
||||
for (i = 0; i < rt->nb_rtsp_streams; i++) {
|
||||
RTSPStream *rtsp_st = rt->rtsp_streams[i];
|
||||
RTPDemuxContext *rtpctx = rtsp_st->transport_priv;
|
||||
if (!rtpctx)
|
||||
continue;
|
||||
if (!strcmp(rtsp_st->control_url, url)) {
|
||||
rtpctx->base_timestamp = rtptime;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void rtsp_parse_rtp_info(RTSPState *rt, const char *p)
|
||||
{
|
||||
int read = 0;
|
||||
char key[20], value[1024], url[1024] = "";
|
||||
uint32_t seq = 0, rtptime = 0;
|
||||
|
||||
for (;;) {
|
||||
p += strspn(p, SPACE_CHARS);
|
||||
if (!*p)
|
||||
break;
|
||||
get_word_sep(key, sizeof(key), "=", &p);
|
||||
if (*p != '=')
|
||||
break;
|
||||
p++;
|
||||
get_word_sep(value, sizeof(value), ";, ", &p);
|
||||
read++;
|
||||
if (!strcmp(key, "url"))
|
||||
av_strlcpy(url, value, sizeof(url));
|
||||
else if (!strcmp(key, "seq"))
|
||||
seq = strtol(value, NULL, 10);
|
||||
else if (!strcmp(key, "rtptime"))
|
||||
rtptime = strtol(value, NULL, 10);
|
||||
if (*p == ',') {
|
||||
handle_rtp_info(rt, url, seq, rtptime);
|
||||
url[0] = '\0';
|
||||
seq = rtptime = 0;
|
||||
read = 0;
|
||||
}
|
||||
if (*p)
|
||||
p++;
|
||||
}
|
||||
if (read > 0)
|
||||
handle_rtp_info(rt, url, seq, rtptime);
|
||||
}
|
||||
|
||||
void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf,
|
||||
RTSPState *rt, const char *method)
|
||||
{
|
||||
@ -728,6 +783,10 @@ void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf,
|
||||
p += strspn(p, SPACE_CHARS);
|
||||
if (method && !strcmp(method, "DESCRIBE"))
|
||||
av_strlcpy(rt->control_uri, p , sizeof(rt->control_uri));
|
||||
} else if (av_stristart(p, "RTP-Info:", &p) && rt) {
|
||||
p += strspn(p, SPACE_CHARS);
|
||||
if (method && !strcmp(method, "PLAY"))
|
||||
rtsp_parse_rtp_info(rt, p);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user