mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-14 22:22:59 +02:00
Merge commit 'c385313d2590fd26e26bb9bdacddef78162ab490'
* commit 'c385313d2590fd26e26bb9bdacddef78162ab490': rtsp: Support misordered fmtp rtpmap Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
dacc4cb115
@ -296,6 +296,9 @@ typedef struct SDPParseState {
|
|||||||
struct RTSPSource **default_include_source_addrs; /**< Source-specific multicast include source IP address (from SDP content) */
|
struct RTSPSource **default_include_source_addrs; /**< Source-specific multicast include source IP address (from SDP content) */
|
||||||
int nb_default_exclude_source_addrs; /**< Number of source-specific multicast exclude source IP address (from SDP content) */
|
int nb_default_exclude_source_addrs; /**< Number of source-specific multicast exclude source IP address (from SDP content) */
|
||||||
struct RTSPSource **default_exclude_source_addrs; /**< Source-specific multicast exclude source IP address (from SDP content) */
|
struct RTSPSource **default_exclude_source_addrs; /**< Source-specific multicast exclude source IP address (from SDP content) */
|
||||||
|
int seen_rtpmap;
|
||||||
|
int seen_fmtp;
|
||||||
|
char delayed_fmtp[2048];
|
||||||
} SDPParseState;
|
} SDPParseState;
|
||||||
|
|
||||||
static void copy_default_source_addrs(struct RTSPSource **addrs, int count,
|
static void copy_default_source_addrs(struct RTSPSource **addrs, int count,
|
||||||
@ -385,7 +388,9 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
|
|||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
/* new stream */
|
/* new stream */
|
||||||
s1->skip_media = 0;
|
s1->skip_media = 0;
|
||||||
|
s1->seen_fmtp = 0;
|
||||||
|
s1->seen_rtpmap = 0;
|
||||||
codec_type = AVMEDIA_TYPE_UNKNOWN;
|
codec_type = AVMEDIA_TYPE_UNKNOWN;
|
||||||
get_word(st_type, sizeof(st_type), &p);
|
get_word(st_type, sizeof(st_type), &p);
|
||||||
if (!strcmp(st_type, "audio")) {
|
if (!strcmp(st_type, "audio")) {
|
||||||
@ -508,13 +513,21 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
|
|||||||
st = s->streams[rtsp_st->stream_index];
|
st = s->streams[rtsp_st->stream_index];
|
||||||
sdp_parse_rtpmap(s, st, rtsp_st, payload_type, p);
|
sdp_parse_rtpmap(s, st, rtsp_st, payload_type, p);
|
||||||
}
|
}
|
||||||
|
s1->seen_rtpmap = 1;
|
||||||
|
if (s1->seen_fmtp) {
|
||||||
|
parse_fmtp(s, rt, payload_type, s1->delayed_fmtp);
|
||||||
|
}
|
||||||
} else if (av_strstart(p, "fmtp:", &p) ||
|
} else if (av_strstart(p, "fmtp:", &p) ||
|
||||||
av_strstart(p, "framesize:", &p)) {
|
av_strstart(p, "framesize:", &p)) {
|
||||||
/* NOTE: fmtp is only supported AFTER the 'a=rtpmap:xxx' tag */
|
|
||||||
// let dynamic protocol handlers have a stab at the line.
|
// let dynamic protocol handlers have a stab at the line.
|
||||||
get_word(buf1, sizeof(buf1), &p);
|
get_word(buf1, sizeof(buf1), &p);
|
||||||
payload_type = atoi(buf1);
|
payload_type = atoi(buf1);
|
||||||
parse_fmtp(s, rt, payload_type, buf);
|
if (s1->seen_rtpmap) {
|
||||||
|
parse_fmtp(s, rt, payload_type, buf);
|
||||||
|
} else {
|
||||||
|
s1->seen_fmtp = 1;
|
||||||
|
av_strlcpy(s1->delayed_fmtp, buf, sizeof(s1->delayed_fmtp));
|
||||||
|
}
|
||||||
} else if (av_strstart(p, "range:", &p)) {
|
} else if (av_strstart(p, "range:", &p)) {
|
||||||
int64_t start, end;
|
int64_t start, end;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user