diff --git a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp index f65e42653..73ba782e0 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp @@ -411,7 +411,7 @@ srs_error_t SrsRtpExtensions::decode_0xbede(SrsBuffer* buf) // Note that 'len' is the header extension element length, which is the // number of bytes - 1. uint8_t id = (v & 0xF0) >> 4; - uint8_t len = (v & 0x0F); + uint8_t len = (v & 0x0F) + 1; SrsRtpExtensionType xtype = types_? types_->get_type(id) : kRtpExtensionNone; if (xtype == kRtpExtensionTransportSequenceNumber) { @@ -421,10 +421,10 @@ srs_error_t SrsRtpExtensions::decode_0xbede(SrsBuffer* buf) } has_ext_ = true; } else { - if (!buf->require(len+1+1)) { - return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", len+1+1); + if (!buf->require(len+1)) { + return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", len+1); } - buf->skip(len + 1 + 1); + buf->skip(len + 1); } } else if (xtype == kRtpExtensionAudioLevel) { if((err = audio_level_.decode(buf)) != srs_success) { @@ -432,7 +432,7 @@ srs_error_t SrsRtpExtensions::decode_0xbede(SrsBuffer* buf) } has_ext_ = true; } else { - buf->skip(1 + (len + 1)); + buf->skip(1 + len); } }