Send rtcp::RemoteEstimate and rtcp::TransportFeedback in one packet

Change-Id: I53912f4e82a9fd795f8886d6b2cdb313bde08c4d
BUG: webrtc:10742
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156380
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29437}
This commit is contained in:
Per Kjellander
2019-10-10 16:43:46 +02:00
committed by Commit Bot
parent 9e70f36143
commit ee153c92fe
7 changed files with 302 additions and 209 deletions

View File

@ -13,11 +13,13 @@
#include <algorithm>
#include <cstdint>
#include <limits>
#include <memory>
#include <utility>
#include "absl/types/optional.h"
#include "modules/rtp_rtcp/include/rtp_rtcp.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "modules/rtp_rtcp/source/rtcp_packet.h"
#include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
#include "rtc_base/atomic_ops.h"
#include "rtc_base/checks.h"
@ -274,33 +276,25 @@ bool PacketRouter::SendRemb(int64_t bitrate_bps,
return true;
}
bool PacketRouter::SendTransportFeedback(rtcp::TransportFeedback* packet) {
bool PacketRouter::SendCombinedRtcpPacket(
std::vector<std::unique_ptr<rtcp::RtcpPacket>> packets) {
rtc::CritScope cs(&modules_crit_);
// Prefer send modules.
for (auto* rtp_module : rtp_send_modules_) {
packet->SetSenderSsrc(rtp_module->SSRC());
if (rtp_module->SendFeedbackPacket(*packet)) {
return true;
if (rtp_module->RTCP() == RtcpMode::kOff) {
continue;
}
rtp_module->SendCombinedRtcpPacket(std::move(packets));
return true;
}
for (auto* rtcp_sender : rtcp_feedback_senders_) {
packet->SetSenderSsrc(rtcp_sender->SSRC());
if (rtcp_sender->SendFeedbackPacket(*packet)) {
return true;
}
}
return false;
}
void PacketRouter::SendNetworkStateEstimatePacket(
rtcp::RemoteEstimate* packet) {
rtc::CritScope cs(&modules_crit_);
for (auto* rtcp_sender : rtcp_feedback_senders_) {
packet->SetSenderSsrc(rtcp_sender->SSRC());
if (rtcp_sender->SendNetworkStateEstimatePacket(*packet)) {
break;
}
if (rtcp_feedback_senders_.empty()) {
return false;
}
auto* rtcp_sender = rtcp_feedback_senders_[0];
rtcp_sender->SendCombinedRtcpPacket(std::move(packets));
return true;
}
void PacketRouter::AddRembModuleCandidate(