rtsp: Check for dynamic payload handlers if no static payload mapping was found

Some systems abuse the static payload types 35 or 36 (which
according to IANA are unassigned) for H264.

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2011-12-08 15:19:58 +02:00
parent 154486f9ad
commit 6099543ad4
1 changed files with 8 additions and 6 deletions

View File

@ -198,7 +198,14 @@ static int sdp_parse_rtpmap(AVFormatContext *s,
* particular servers ("RealServer Version 6.1.3.970", see issue 1658)
* have a trailing space. */
get_word_sep(buf, sizeof(buf), "/ ", &p);
if (payload_type >= RTP_PT_PRIVATE) {
if (payload_type < RTP_PT_PRIVATE) {
/* We are in a standard case
* (from http://www.iana.org/assignments/rtp-parameters). */
/* search into AVRtpPayloadTypes[] */
codec->codec_id = ff_rtp_codec_id(buf, codec->codec_type);
}
if (codec->codec_id == CODEC_ID_NONE) {
RTPDynamicProtocolHandler *handler =
ff_rtp_handler_find_by_name(buf, codec->codec_type);
init_rtp_handler(handler, rtsp_st, codec);
@ -208,11 +215,6 @@ static int sdp_parse_rtpmap(AVFormatContext *s,
* the format name from the rtpmap line never is passed into rtpdec. */
if (!rtsp_st->dynamic_handler)
codec->codec_id = ff_rtp_codec_id(buf, codec->codec_type);
} else {
/* We are in a standard case
* (from http://www.iana.org/assignments/rtp-parameters). */
/* search into AVRtpPayloadTypes[] */
codec->codec_id = ff_rtp_codec_id(buf, codec->codec_type);
}
c = avcodec_find_decoder(codec->codec_id);