Index: webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc b/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
index 55e8e5266919bbb978b44e8d5fcd1fff356549c1..ec8bbdcbe9cae9fb3e48f3beb730d3f8e7c335b8 100644 |
--- a/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
+++ b/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
@@ -38,6 +38,25 @@ const int kMsToRtpTimestamp = kVideoPayloadTypeFrequency / 1000; |
// How often to log the generated FEC packets to the text log. |
constexpr int64_t kPacketLogIntervalMs = 10000; |
+RtpHeaderExtensionMap RegisterBweExtensions( |
+ const std::vector<RtpExtension>& rtp_header_extensions) { |
+ RtpHeaderExtensionMap map; |
+ for (const auto& extension : rtp_header_extensions) { |
+ if (extension.uri == TransportSequenceNumber::kUri) { |
+ map.Register<TransportSequenceNumber>(extension.id); |
+ } else if (extension.uri == AbsoluteSendTime::kUri) { |
+ map.Register<AbsoluteSendTime>(extension.id); |
+ } else if (extension.uri == TransmissionOffset::kUri) { |
+ map.Register<TransmissionOffset>(extension.id); |
+ } else { |
+ LOG(LS_INFO) << "FlexfecSender only supports RTP header extensions for " |
+ << "BWE, so the extension " << extension.ToString() |
+ << " will not be used."; |
+ } |
+ } |
+ return map; |
+} |
+ |
} // namespace |
FlexfecSender::FlexfecSender( |
@@ -57,7 +76,7 @@ FlexfecSender::FlexfecSender( |
protected_media_ssrc_(protected_media_ssrc), |
seq_num_(random_.Rand(1, kMaxInitRtpSeqNumber)), |
ulpfec_generator_(ForwardErrorCorrection::CreateFlexfec()), |
- rtp_header_extension_map_() { |
+ rtp_header_extension_map_(RegisterBweExtensions(rtp_header_extensions)) { |
// This object should not have been instantiated if FlexFEC is disabled. |
RTC_DCHECK_GE(payload_type, 0); |
RTC_DCHECK_LE(payload_type, 127); |
@@ -65,24 +84,6 @@ FlexfecSender::FlexfecSender( |
// It's OK to create this object on a different thread/task queue than |
// the one used during main operation. |
sequence_checker_.Detach(); |
- |
- // Register RTP header extensions for BWE. |
- for (const auto& extension : rtp_header_extensions) { |
- if (extension.uri == RtpExtension::kTransportSequenceNumberUri) { |
- rtp_header_extension_map_.Register(kRtpExtensionTransportSequenceNumber, |
- extension.id); |
- } else if (extension.uri == RtpExtension::kAbsSendTimeUri) { |
- rtp_header_extension_map_.Register(kRtpExtensionAbsoluteSendTime, |
- extension.id); |
- } else if (extension.uri == RtpExtension::kTimestampOffsetUri) { |
- rtp_header_extension_map_.Register(kRtpExtensionTransmissionTimeOffset, |
- extension.id); |
- } else { |
- LOG(LS_WARNING) << "RTP header extension with id: " << extension.id |
- << ", uri: " << extension.uri |
- << ", is unsupported by FlexfecSender."; |
- } |
- } |
} |
FlexfecSender::~FlexfecSender() = default; |
@@ -158,8 +159,10 @@ FlexfecSender::GetFecPackets() { |
return fec_packets_to_send; |
} |
+// The overhead is BWE RTP header extensions and FlexFEC header. |
size_t FlexfecSender::MaxPacketOverhead() const { |
- return kFlexfecMaxHeaderSize; |
+ return rtp_header_extension_map_.GetTotalLengthInBytes() + |
+ kFlexfecMaxHeaderSize; |
} |
} // namespace webrtc |