void rtsp_parse_line(RTSPHeader *reply, const char *buf) { const char *p; /* NOTE: we do case independent match for broken servers */ p = buf; if (stristart(p, "Session:", &p)) { get_word_sep(reply->session_id, sizeof(reply->session_id), ";", &p); } else if (stristart(p, "Content-Length:", &p)) { reply->content_length = strtol(p, NULL, 10); } else if (stristart(p, "Transport:", &p)) { rtsp_parse_transport(reply, p); } else if (stristart(p, "CSeq:", &p)) { reply->seq = strtol(p, NULL, 10); } else if (stristart(p, "Range:", &p)) { rtsp_parse_range_npt(reply, p); } }
static void rtsp_parse_range_npt(RTSPHeader *reply, const char *p) { char buf[256]; skip_spaces(&p); if (!stristart(p, "npt=", &p)) return; reply->range_start = AV_NOPTS_VALUE; reply->range_end = AV_NOPTS_VALUE; get_word_sep(buf, sizeof(buf), "-", &p); reply->range_start = parse_date(buf, 1); if (*p == '-') { p++; get_word_sep(buf, sizeof(buf), "-", &p); reply->range_end = parse_date(buf, 1); } }
/** Parse a string \p in the form of Range:npt=xx-xx, and determine the start * and end time. * Used for seeking in the rtp stream. */ static void rtsp_parse_range_npt(const char *p, int64_t *start, int64_t *end) { char buf[256]; skip_spaces(&p); if (!stristart(p, "npt=", &p)) return; *start = AV_NOPTS_VALUE; *end = AV_NOPTS_VALUE; get_word_sep(buf, sizeof(buf), "-", &p); *start = parse_date(buf, 1); if (*p == '-') { p++; get_word_sep(buf, sizeof(buf), "-", &p); *end = parse_date(buf, 1); } // av_log(NULL, AV_LOG_DEBUG, "Range Start: %lld\n", *start); // av_log(NULL, AV_LOG_DEBUG, "Range End: %lld\n", *end); }