From 84ba2d83399e4da96905f0dce4e5329fa4c821de Mon Sep 17 00:00:00 2001 From: dijunkun Date: Wed, 5 Mar 2025 17:49:17 +0800 Subject: [PATCH] [fix] fix payload length for sender report and receiver report --- src/qos/bwe_defines.h | 2 +- src/rtcp/rtcp_packet/receiver_report.cpp | 10 +++++----- src/rtcp/rtcp_packet/rtcp_common_header.cpp | 5 +++-- src/rtcp/rtcp_packet/rtcp_typedef.h | 4 ++-- src/rtcp/rtcp_packet/sender_report.cpp | 10 +++++----- src/transport/ice_transport.cpp | 5 ++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/qos/bwe_defines.h b/src/qos/bwe_defines.h index e3f4e8c..878115e 100644 --- a/src/qos/bwe_defines.h +++ b/src/qos/bwe_defines.h @@ -22,7 +22,7 @@ namespace webrtc { inline constexpr DataRate kCongestionControllerMinBitrate = - DataRate::BitsPerSec(5'000); + DataRate::BitsPerSec(500'000); inline constexpr TimeDelta kBitrateWindow = TimeDelta::Seconds(1); extern const char kBweTypeHistogram[]; diff --git a/src/rtcp/rtcp_packet/receiver_report.cpp b/src/rtcp/rtcp_packet/receiver_report.cpp index 1dba3f9..1bfa8d4 100644 --- a/src/rtcp/rtcp_packet/receiver_report.cpp +++ b/src/rtcp/rtcp_packet/receiver_report.cpp @@ -20,8 +20,8 @@ void ReceiverReport::SetReportBlocks( } const uint8_t *ReceiverReport::Build() { - size_t buffer_size = - DEFAULT_RR_SIZE + reports_.size() * RtcpReportBlock::kLength; + size_t buffer_size = DEFAULT_RTCP_HEADER_SIZE + DEFAULT_RR_SIZE + + reports_.size() * RtcpReportBlock::kLength; if (!buffer_ || buffer_size != size_) { delete[] buffer_; buffer_ = nullptr; @@ -30,9 +30,9 @@ const uint8_t *ReceiverReport::Build() { buffer_ = new uint8_t[buffer_size]; size_ = buffer_size; - int pos = - rtcp_common_header_.Create(DEFAULT_RTCP_VERSION, 0, DEFAULT_RR_BLOCK_NUM, - RTCP_TYPE::RR, DEFAULT_RR_SIZE, buffer_); + int pos = rtcp_common_header_.Create( + DEFAULT_RTCP_VERSION, 0, DEFAULT_RR_BLOCK_NUM, RTCP_TYPE::RR, + (buffer_size - DEFAULT_RTCP_HEADER_SIZE) / 4, buffer_); buffer_[pos] = sender_ssrc_ >> 24 & 0xFF; buffer_[pos + 1] = sender_ssrc_ >> 16 & 0xFF; diff --git a/src/rtcp/rtcp_packet/rtcp_common_header.cpp b/src/rtcp/rtcp_packet/rtcp_common_header.cpp index 24238b1..5dd94a1 100644 --- a/src/rtcp/rtcp_packet/rtcp_common_header.cpp +++ b/src/rtcp/rtcp_packet/rtcp_common_header.cpp @@ -33,7 +33,8 @@ int RtcpCommonHeader::Create(uint8_t version, uint8_t has_padding, } uint16_t payload_size = length - kHeaderSizeBytes; - buffer[0] = (version << 6) | (has_padding << 5) | (count_or_format << 4); + buffer[0] = (version << 6) | (has_padding << 5) | + static_cast(count_or_format); buffer[1] = payload_type; buffer[2] = payload_size >> 8 & 0xFF; buffer[3] = payload_size & 0xFF; @@ -61,7 +62,7 @@ bool RtcpCommonHeader::Parse(const uint8_t* buffer, size_t size_bytes) { bool has_padding = (buffer[0] & 0x20) != 0; count_or_format_ = buffer[0] & 0x1F; packet_type_ = buffer[1]; - payload_size_ = buffer[2] << 8 | buffer[3]; + payload_size_ = ((static_cast(buffer[2]) << 8) | buffer[3]) * 4; payload_ = buffer + kHeaderSizeBytes; padding_size_ = 0; diff --git a/src/rtcp/rtcp_packet/rtcp_typedef.h b/src/rtcp/rtcp_packet/rtcp_typedef.h index 8eac213..8609210 100644 --- a/src/rtcp/rtcp_packet/rtcp_typedef.h +++ b/src/rtcp/rtcp_packet/rtcp_typedef.h @@ -8,9 +8,9 @@ #define DEFAULT_RTCP_HEADER_SIZE 4 #define DEFAULT_SR_BLOCK_NUM 1 -#define DEFAULT_SR_SIZE 28 +#define DEFAULT_SR_SIZE 24 #define DEFAULT_RR_BLOCK_NUM 1 -#define DEFAULT_RR_SIZE 32 +#define DEFAULT_RR_SIZE 4 typedef enum { UNKNOWN = 0, diff --git a/src/rtcp/rtcp_packet/sender_report.cpp b/src/rtcp/rtcp_packet/sender_report.cpp index 62de5f1..d49a577 100644 --- a/src/rtcp/rtcp_packet/sender_report.cpp +++ b/src/rtcp/rtcp_packet/sender_report.cpp @@ -21,8 +21,8 @@ void SenderReport::SetReportBlocks( } const uint8_t *SenderReport::Build() { - size_t buffer_size = - DEFAULT_SR_SIZE + reports_.size() * RtcpReportBlock::kLength; + size_t buffer_size = DEFAULT_RTCP_HEADER_SIZE + DEFAULT_SR_SIZE + + reports_.size() * RtcpReportBlock::kLength; if (!buffer_ || buffer_size != size_) { delete[] buffer_; buffer_ = nullptr; @@ -31,9 +31,9 @@ const uint8_t *SenderReport::Build() { buffer_ = new uint8_t[buffer_size]; size_ = buffer_size; - int pos = - rtcp_common_header_.Create(DEFAULT_RTCP_VERSION, 0, DEFAULT_SR_BLOCK_NUM, - RTCP_TYPE::SR, buffer_size, buffer_); + int pos = rtcp_common_header_.Create( + DEFAULT_RTCP_VERSION, 0, DEFAULT_SR_BLOCK_NUM, RTCP_TYPE::SR, + (buffer_size - DEFAULT_RTCP_HEADER_SIZE) / 4, buffer_); buffer_[pos++] = sender_info_.sender_ssrc >> 24 & 0xFF; buffer_[pos++] = sender_info_.sender_ssrc >> 16 & 0xFF; diff --git a/src/transport/ice_transport.cpp b/src/transport/ice_transport.cpp index a858fb0..b12a857 100644 --- a/src/transport/ice_transport.cpp +++ b/src/transport/ice_transport.cpp @@ -222,6 +222,7 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size, bool valid = true; if (!rtcp_block.Parse(buffer, size)) { valid = false; + return valid; } switch (rtcp_block.type()) { @@ -296,7 +297,7 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size, // local_media_ssrc(), packet_type_counter_); // } - return true; + return valid; } void IceTransport::HandleReportBlock(const RtcpReportBlock &rtcp_report_block, @@ -404,8 +405,6 @@ bool IceTransport::HandleNack(const RtcpCommonHeader &rtcp_block, // } // } - LOG_INFO("Nack [{}]", nack.packet_ids().size()); - return true; }