Index: webrtc/modules/rtp_rtcp/source/rtp_sender.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc |
index 6fdac6f63fb08507ec68781c4bff1e59b6ca693e..5803e7bfefdadedf50512eb28b74b4ad839eba69 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc |
@@ -45,6 +45,14 @@ constexpr int kBitrateStatisticsWindowMs = 1000; |
constexpr size_t kMinFlexfecPacketsToStoreForPacing = 50; |
+// Size info for header extensions that might be used in padding or FEC packets. |
+constexpr RtpExtensionSize kExtensionSizes[] = { |
+ CreateExtensionSize<AbsoluteSendTime>(), |
+ CreateExtensionSize<TransmissionOffset>(), |
+ CreateExtensionSize<TransportSequenceNumber>(), |
+ CreateExtensionSize<PlayoutDelayLimits>(), |
+}; |
+ |
const char* FrameTypeToString(FrameType frame_type) { |
switch (frame_type) { |
case kEmptyFrame: |
@@ -157,6 +165,10 @@ RTPSender::~RTPSender() { |
} |
} |
+rtc::ArrayView<const RtpExtensionSize> RTPSender::FecExtensionSizes() { |
+ return kExtensionSizes; |
+} |
+ |
uint16_t RTPSender::ActualSendBitrateKbit() const { |
rtc::CritScope cs(&statistics_crit_); |
return static_cast<uint16_t>( |
@@ -277,12 +289,13 @@ void RTPSender::SetMaxRtpPacketSize(size_t max_packet_size) { |
max_packet_size_ = max_packet_size; |
} |
-size_t RTPSender::MaxPayloadSize() const { |
+size_t RTPSender::MaxPayloadSize( |
danilchap
2017/05/09 12:33:49
if you agree to remove MaxPayloadSize from rtp_rtc
erikvarga1
2017/05/09 13:30:30
Done.
|
+ rtc::ArrayView<const RtpExtensionSize> extension_sizes) const { |
if (audio_configured_) { |
- return max_packet_size_ - RtpHeaderLength(); |
+ return max_packet_size_ - RtpHeaderLength(extension_sizes); |
} else { |
- return max_packet_size_ - RtpHeaderLength() // RTP overhead. |
- - video_->FecPacketOverhead() // FEC/ULP/RED overhead. |
+ return max_packet_size_ - RtpHeaderLength(extension_sizes) // RTP overhead. |
+ - video_->FecPacketOverhead() // FEC/ULP/RED overhead. |
- (RtxStatus() ? kRtxHeaderSize : 0); // RTX overhead. |
} |
} |
@@ -459,7 +472,8 @@ size_t RTPSender::SendPadData(size_t bytes, |
if (audio_configured_) { |
// Allow smaller padding packets for audio. |
padding_bytes_in_packet = |
- std::min(std::max(bytes, kMinAudioPaddingLength), MaxPayloadSize()); |
+ std::min(std::max(bytes, kMinAudioPaddingLength), |
+ MaxPayloadSize(kExtensionSizes)); |
if (padding_bytes_in_packet > kMaxPaddingLength) |
padding_bytes_in_packet = kMaxPaddingLength; |
} else { |
@@ -467,7 +481,8 @@ size_t RTPSender::SendPadData(size_t bytes, |
// RtpPacketSender, which will make sure we don't send too much padding even |
// if a single packet is larger than requested. |
// We do this to avoid frequently sending small packets on higher bitrates. |
- padding_bytes_in_packet = std::min(MaxPayloadSize(), kMaxPaddingLength); |
+ padding_bytes_in_packet = std::min(MaxPayloadSize(kExtensionSizes), |
+ kMaxPaddingLength); |
} |
size_t bytes_sent = 0; |
while (bytes_sent < bytes) { |
@@ -957,11 +972,13 @@ void RTPSender::ProcessBitrate() { |
nack_bitrate_sent_.Rate(now_ms).value_or(0), ssrc); |
} |
-size_t RTPSender::RtpHeaderLength() const { |
+size_t RTPSender::RtpHeaderLength( |
+ rtc::ArrayView<const RtpExtensionSize> extension_sizes) const { |
rtc::CritScope lock(&send_critsect_); |
size_t rtp_header_length = kRtpHeaderLength; |
rtp_header_length += sizeof(uint32_t) * csrcs_.size(); |
- rtp_header_length += rtp_header_extension_map_.GetTotalLengthInBytes(); |
+ rtp_header_length += |
+ rtp_header_extension_map_.GetTotalLengthInBytes(extension_sizes); |
return rtp_header_length; |
} |