diff --git a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp index b633653f0..64ec08bc8 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp @@ -225,11 +225,6 @@ void SrsRtpExtensionTwcc::assign(const SrsRtpExtensionTwcc& h) sn_ = h.sn_; } -bool SrsRtpExtensionTwcc::has_twcc_ext() -{ - return has_twcc_; -} - srs_error_t SrsRtpExtensionTwcc::decode(SrsBuffer* buf) { srs_error_t err = srs_success; @@ -481,7 +476,7 @@ srs_error_t SrsRtpExtensions::decode_0xbede(SrsBuffer* buf) uint64_t SrsRtpExtensions::nb_bytes() { - int size = 4 + (twcc_.has_twcc_ext() ? twcc_.nb_bytes() : 0); + int size = 4 + (twcc_.exists() ? twcc_.nb_bytes() : 0); size += (audio_level_.exists() ? audio_level_.nb_bytes() : 0); // add padding size += (size % 4 == 0) ? 0 : (4 - size % 4); @@ -497,7 +492,7 @@ srs_error_t SrsRtpExtensions::encode(SrsBuffer* buf) // Write length. int len = 0; - if (twcc_.has_twcc_ext()) { + if (twcc_.exists()) { len += twcc_.nb_bytes(); } @@ -508,10 +503,14 @@ srs_error_t SrsRtpExtensions::encode(SrsBuffer* buf) int padding_count = (len % 4 == 0) ? 0 : (4 - len % 4); len += padding_count; + if (!buf->require(len)) { + return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", len); + } + buf->write_2bytes(len / 4); // Write extensions. - if (twcc_.has_twcc_ext()) { + if (twcc_.exists()) { if ((err = twcc_.encode(buf)) != srs_success) { return srs_error_wrap(err, "encode twcc extension"); } @@ -524,19 +523,14 @@ srs_error_t SrsRtpExtensions::encode(SrsBuffer* buf) } // add padding - while(padding_count > 0) { - buf->write_1bytes(0); - padding_count--; + if (padding_count) { + memset(buf->head(), 0, padding_count); + buf->skip(padding_count); } return err; } -bool SrsRtpExtensions::exists() -{ - return has_ext_; -} - void SrsRtpExtensions::set_types_(SrsRtpExtensionTypes* types) { types_ = types; @@ -544,7 +538,7 @@ void SrsRtpExtensions::set_types_(SrsRtpExtensionTypes* types) srs_error_t SrsRtpExtensions::get_twcc_sequence_number(uint16_t& twcc_sn) { - if (twcc_.has_twcc_ext()) { + if (twcc_.exists()) { twcc_sn = twcc_.get_sn(); return srs_success; } @@ -1080,7 +1074,7 @@ srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf) if (!buf->require(padding)) { return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", padding); } - memset(buf->data() + buf->pos(), padding, padding); + memset(buf->head(), padding, padding); buf->skip(padding); } diff --git a/trunk/src/kernel/srs_kernel_rtc_rtp.hpp b/trunk/src/kernel/srs_kernel_rtc_rtp.hpp index 7227fb004..4f3e28524 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtp.hpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtp.hpp @@ -142,7 +142,7 @@ public: void reset(); void assign(const SrsRtpExtensionTwcc& h); public: - bool has_twcc_ext(); + inline bool exists() { return has_twcc_; } // SrsRtpExtensionTwcc::exists uint8_t get_id(); void set_id(uint8_t id); uint16_t get_sn(); @@ -168,7 +168,7 @@ public: void reset(); void assign(const SrsRtpExtensionOneByte& h); public: - bool exists() { return has_ext_; } + inline bool exists() { return has_ext_; } // SrsRtpExtensionOneByte::exists int get_id() { return id_; } uint8_t get_value() { return value_; } void set_id(int id); @@ -200,7 +200,7 @@ public: void reset(); void assign(const SrsRtpExtensions& h); public: - bool exists(); + inline bool exists() { return has_ext_; } // SrsRtpExtensions::exists void set_types_(SrsRtpExtensionTypes* types); srs_error_t get_twcc_sequence_number(uint16_t& twcc_sn); srs_error_t set_twcc_sequence_number(uint8_t id, uint16_t sn); @@ -254,10 +254,7 @@ public: void set_timestamp(uint32_t v); uint32_t get_timestamp() const; void set_ssrc(uint32_t v); - // SrsRtpHeader::get_ssrc - inline uint32_t get_ssrc() const { - return ssrc; - } + inline uint32_t get_ssrc() const { return ssrc; } // SrsRtpHeader::get_ssrc void set_padding(uint8_t v); uint8_t get_padding() const; void set_extensions(SrsRtpExtensionTypes* extmap);