Replace interfaces for sending RTCP with std::functions in ReceiveSideCongestionController

Logic for throttling how often REMB messages are sent is added to ReceiveSideCongestionController as well as a new method SetMaxDesiredReceiveBitrate. These are based on the logic in PacketRouter. The logic for throttling REMB and setting the max REMB will be removed from PacketRouter in a follow up cl.
The purpose is to eventually decouple PacketRouter from sending RTCP messages when RtcpTransceiver is used.

Bug: webrtc:12693
Change-Id: I9fb5cbcd14bb17d977e76d329a906fc0a9abc276
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215685
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Christoffer Rodbro <crodbro@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33801}
This commit is contained in:
Per Kjellander
2021-04-21 11:56:32 +02:00
committed by Commit Bot
parent 1585587c57
commit 898f091eeb
11 changed files with 330 additions and 83 deletions

View File

@ -10,6 +10,7 @@
#include "modules/congestion_controller/include/receive_side_congestion_controller.h"
#include "api/units/data_rate.h"
#include "modules/pacing/packet_router.h"
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
#include "modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h"
@ -127,9 +128,26 @@ ReceiveSideCongestionController::ReceiveSideCongestionController(
Clock* clock,
PacketRouter* packet_router,
NetworkStateEstimator* network_state_estimator)
: remote_bitrate_estimator_(packet_router, clock),
: remb_throttler_([](auto...) {}, clock),
remote_bitrate_estimator_(packet_router, clock),
remote_estimator_proxy_(
clock,
[packet_router](
std::vector<std::unique_ptr<rtcp::RtcpPacket>> packets) {
packet_router->SendCombinedRtcpPacket(std::move(packets));
},
&field_trial_config_,
network_state_estimator) {}
ReceiveSideCongestionController::ReceiveSideCongestionController(
Clock* clock,
RemoteEstimatorProxy::TransportFeedbackSender feedback_sender,
RembThrottler::RembSender remb_sender,
NetworkStateEstimator* network_state_estimator)
: remb_throttler_(std::move(remb_sender), clock),
remote_bitrate_estimator_(&remb_throttler_, clock),
remote_estimator_proxy_(clock,
packet_router,
std::move(feedback_sender),
&field_trial_config_,
network_state_estimator) {}
@ -186,4 +204,9 @@ void ReceiveSideCongestionController::Process() {
remote_bitrate_estimator_.Process();
}
void ReceiveSideCongestionController::SetMaxDesiredReceiveBitrate(
DataRate bitrate) {
remb_throttler_.SetMaxDesiredReceiveBitrate(bitrate);
}
} // namespace webrtc