Skip m= blocks in the SDP if the media type is unknown. This prevents
subsequent a= lines from the m= block to be applied to the previous m= line, thus breaking otherwise functional RTP streams. See discussion in [PATCH] RTSP-MS 7/15: parse and allow unknown m= line codes" thread on mailinglist. Originally committed as revision 16737 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ce71d83ede
commit
cb760a4790
@ -325,6 +325,7 @@ typedef struct SDPParseState {
|
||||
/* SDP only */
|
||||
struct in_addr default_ip;
|
||||
int default_ttl;
|
||||
int skip_media; ///< set if an unknown m= line occurs
|
||||
} SDPParseState;
|
||||
|
||||
static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
|
||||
@ -345,6 +346,8 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
|
||||
#endif
|
||||
|
||||
p = buf;
|
||||
if (s1->skip_media && letter != 'm')
|
||||
return;
|
||||
switch(letter) {
|
||||
case 'c':
|
||||
get_word(buf1, sizeof(buf1), &p);
|
||||
@ -383,12 +386,14 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
|
||||
break;
|
||||
case 'm':
|
||||
/* new stream */
|
||||
s1->skip_media = 0;
|
||||
get_word(st_type, sizeof(st_type), &p);
|
||||
if (!strcmp(st_type, "audio")) {
|
||||
codec_type = CODEC_TYPE_AUDIO;
|
||||
} else if (!strcmp(st_type, "video")) {
|
||||
codec_type = CODEC_TYPE_VIDEO;
|
||||
} else {
|
||||
s1->skip_media = 1;
|
||||
return;
|
||||
}
|
||||
rtsp_st = av_mallocz(sizeof(RTSPStream));
|
||||
|
Loading…
Reference in New Issue
Block a user