mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-26 12:15:34 +08:00
[fix] fix payload length for sender report and receiver report
This commit is contained in:
@@ -22,7 +22,7 @@
|
|||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
inline constexpr DataRate kCongestionControllerMinBitrate =
|
inline constexpr DataRate kCongestionControllerMinBitrate =
|
||||||
DataRate::BitsPerSec(5'000);
|
DataRate::BitsPerSec(500'000);
|
||||||
inline constexpr TimeDelta kBitrateWindow = TimeDelta::Seconds(1);
|
inline constexpr TimeDelta kBitrateWindow = TimeDelta::Seconds(1);
|
||||||
|
|
||||||
extern const char kBweTypeHistogram[];
|
extern const char kBweTypeHistogram[];
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ void ReceiverReport::SetReportBlocks(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t *ReceiverReport::Build() {
|
const uint8_t *ReceiverReport::Build() {
|
||||||
size_t buffer_size =
|
size_t buffer_size = DEFAULT_RTCP_HEADER_SIZE + DEFAULT_RR_SIZE +
|
||||||
DEFAULT_RR_SIZE + reports_.size() * RtcpReportBlock::kLength;
|
reports_.size() * RtcpReportBlock::kLength;
|
||||||
if (!buffer_ || buffer_size != size_) {
|
if (!buffer_ || buffer_size != size_) {
|
||||||
delete[] buffer_;
|
delete[] buffer_;
|
||||||
buffer_ = nullptr;
|
buffer_ = nullptr;
|
||||||
@@ -30,9 +30,9 @@ const uint8_t *ReceiverReport::Build() {
|
|||||||
buffer_ = new uint8_t[buffer_size];
|
buffer_ = new uint8_t[buffer_size];
|
||||||
size_ = buffer_size;
|
size_ = buffer_size;
|
||||||
|
|
||||||
int pos =
|
int pos = rtcp_common_header_.Create(
|
||||||
rtcp_common_header_.Create(DEFAULT_RTCP_VERSION, 0, DEFAULT_RR_BLOCK_NUM,
|
DEFAULT_RTCP_VERSION, 0, DEFAULT_RR_BLOCK_NUM, RTCP_TYPE::RR,
|
||||||
RTCP_TYPE::RR, DEFAULT_RR_SIZE, buffer_);
|
(buffer_size - DEFAULT_RTCP_HEADER_SIZE) / 4, buffer_);
|
||||||
|
|
||||||
buffer_[pos] = sender_ssrc_ >> 24 & 0xFF;
|
buffer_[pos] = sender_ssrc_ >> 24 & 0xFF;
|
||||||
buffer_[pos + 1] = sender_ssrc_ >> 16 & 0xFF;
|
buffer_[pos + 1] = sender_ssrc_ >> 16 & 0xFF;
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ int RtcpCommonHeader::Create(uint8_t version, uint8_t has_padding,
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16_t payload_size = length - kHeaderSizeBytes;
|
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<uint8_t>(count_or_format);
|
||||||
buffer[1] = payload_type;
|
buffer[1] = payload_type;
|
||||||
buffer[2] = payload_size >> 8 & 0xFF;
|
buffer[2] = payload_size >> 8 & 0xFF;
|
||||||
buffer[3] = payload_size & 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;
|
bool has_padding = (buffer[0] & 0x20) != 0;
|
||||||
count_or_format_ = buffer[0] & 0x1F;
|
count_or_format_ = buffer[0] & 0x1F;
|
||||||
packet_type_ = buffer[1];
|
packet_type_ = buffer[1];
|
||||||
payload_size_ = buffer[2] << 8 | buffer[3];
|
payload_size_ = ((static_cast<uint16_t>(buffer[2]) << 8) | buffer[3]) * 4;
|
||||||
payload_ = buffer + kHeaderSizeBytes;
|
payload_ = buffer + kHeaderSizeBytes;
|
||||||
padding_size_ = 0;
|
padding_size_ = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
#define DEFAULT_RTCP_HEADER_SIZE 4
|
#define DEFAULT_RTCP_HEADER_SIZE 4
|
||||||
|
|
||||||
#define DEFAULT_SR_BLOCK_NUM 1
|
#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_BLOCK_NUM 1
|
||||||
#define DEFAULT_RR_SIZE 32
|
#define DEFAULT_RR_SIZE 4
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
UNKNOWN = 0,
|
UNKNOWN = 0,
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ void SenderReport::SetReportBlocks(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t *SenderReport::Build() {
|
const uint8_t *SenderReport::Build() {
|
||||||
size_t buffer_size =
|
size_t buffer_size = DEFAULT_RTCP_HEADER_SIZE + DEFAULT_SR_SIZE +
|
||||||
DEFAULT_SR_SIZE + reports_.size() * RtcpReportBlock::kLength;
|
reports_.size() * RtcpReportBlock::kLength;
|
||||||
if (!buffer_ || buffer_size != size_) {
|
if (!buffer_ || buffer_size != size_) {
|
||||||
delete[] buffer_;
|
delete[] buffer_;
|
||||||
buffer_ = nullptr;
|
buffer_ = nullptr;
|
||||||
@@ -31,9 +31,9 @@ const uint8_t *SenderReport::Build() {
|
|||||||
buffer_ = new uint8_t[buffer_size];
|
buffer_ = new uint8_t[buffer_size];
|
||||||
size_ = buffer_size;
|
size_ = buffer_size;
|
||||||
|
|
||||||
int pos =
|
int pos = rtcp_common_header_.Create(
|
||||||
rtcp_common_header_.Create(DEFAULT_RTCP_VERSION, 0, DEFAULT_SR_BLOCK_NUM,
|
DEFAULT_RTCP_VERSION, 0, DEFAULT_SR_BLOCK_NUM, RTCP_TYPE::SR,
|
||||||
RTCP_TYPE::SR, buffer_size, buffer_);
|
(buffer_size - DEFAULT_RTCP_HEADER_SIZE) / 4, buffer_);
|
||||||
|
|
||||||
buffer_[pos++] = sender_info_.sender_ssrc >> 24 & 0xFF;
|
buffer_[pos++] = sender_info_.sender_ssrc >> 24 & 0xFF;
|
||||||
buffer_[pos++] = sender_info_.sender_ssrc >> 16 & 0xFF;
|
buffer_[pos++] = sender_info_.sender_ssrc >> 16 & 0xFF;
|
||||||
|
|||||||
@@ -222,6 +222,7 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size,
|
|||||||
bool valid = true;
|
bool valid = true;
|
||||||
if (!rtcp_block.Parse(buffer, size)) {
|
if (!rtcp_block.Parse(buffer, size)) {
|
||||||
valid = false;
|
valid = false;
|
||||||
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (rtcp_block.type()) {
|
switch (rtcp_block.type()) {
|
||||||
@@ -296,7 +297,7 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size,
|
|||||||
// local_media_ssrc(), packet_type_counter_);
|
// local_media_ssrc(), packet_type_counter_);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
return true;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IceTransport::HandleReportBlock(const RtcpReportBlock &rtcp_report_block,
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user