Set pacer target bitrate to max of bwe and bitrate allocation.
ChannelGroup::OnNetWorkChanged() should not configure the pacer to send a lower bitrate than what bitrate_allocator has actually allocated (may be the case if min_bitrate is enforced, for instance). BUG= Review URL: https://codereview.webrtc.org/1413663004 Cr-Commit-Position: refs/heads/master@{#10519}
This commit is contained in:
@ -282,16 +282,22 @@ void CongestionController::SignalNetworkState(NetworkState state) {
|
|||||||
void CongestionController::OnNetworkChanged(uint32_t target_bitrate_bps,
|
void CongestionController::OnNetworkChanged(uint32_t target_bitrate_bps,
|
||||||
uint8_t fraction_loss,
|
uint8_t fraction_loss,
|
||||||
int64_t rtt) {
|
int64_t rtt) {
|
||||||
bitrate_allocator_->OnNetworkChanged(target_bitrate_bps, fraction_loss, rtt);
|
uint32_t allocated_bitrate_bps = bitrate_allocator_->OnNetworkChanged(
|
||||||
|
target_bitrate_bps, fraction_loss, rtt);
|
||||||
int pad_up_to_bitrate_bps = 0;
|
int pad_up_to_bitrate_bps = 0;
|
||||||
{
|
{
|
||||||
rtc::CritScope lock(&encoder_crit_);
|
rtc::CritScope lock(&encoder_crit_);
|
||||||
for (const auto& encoder : encoders_)
|
for (const auto& encoder : encoders_)
|
||||||
pad_up_to_bitrate_bps += encoder->GetPaddingNeededBps();
|
pad_up_to_bitrate_bps += encoder->GetPaddingNeededBps();
|
||||||
}
|
}
|
||||||
|
// Allocated bitrate might be higher than bitrate estimate if enforcing min
|
||||||
|
// bitrate, or lower if estimate is higher than the sum of max bitrates, so
|
||||||
|
// set the pacer bitrate to the maximum of the two.
|
||||||
|
uint32_t pacer_bitrate_bps =
|
||||||
|
std::max(target_bitrate_bps, allocated_bitrate_bps);
|
||||||
pacer_->UpdateBitrate(
|
pacer_->UpdateBitrate(
|
||||||
target_bitrate_bps / 1000,
|
pacer_bitrate_bps / 1000,
|
||||||
PacedSender::kDefaultPaceMultiplier * target_bitrate_bps / 1000,
|
PacedSender::kDefaultPaceMultiplier * pacer_bitrate_bps / 1000,
|
||||||
pad_up_to_bitrate_bps / 1000);
|
pad_up_to_bitrate_bps / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,23 +26,26 @@ const int kDefaultBitrateBps = 300000;
|
|||||||
BitrateAllocator::BitrateAllocator()
|
BitrateAllocator::BitrateAllocator()
|
||||||
: crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
|
: crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
bitrate_observers_(),
|
bitrate_observers_(),
|
||||||
|
bitrate_observers_modified_(false),
|
||||||
enforce_min_bitrate_(true),
|
enforce_min_bitrate_(true),
|
||||||
last_bitrate_bps_(kDefaultBitrateBps),
|
last_bitrate_bps_(kDefaultBitrateBps),
|
||||||
last_fraction_loss_(0),
|
last_fraction_loss_(0),
|
||||||
last_rtt_(0) {
|
last_rtt_(0) {}
|
||||||
}
|
|
||||||
|
|
||||||
|
uint32_t BitrateAllocator::OnNetworkChanged(uint32_t bitrate,
|
||||||
void BitrateAllocator::OnNetworkChanged(uint32_t bitrate,
|
|
||||||
uint8_t fraction_loss,
|
uint8_t fraction_loss,
|
||||||
int64_t rtt) {
|
int64_t rtt) {
|
||||||
CriticalSectionScoped lock(crit_sect_.get());
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
last_bitrate_bps_ = bitrate;
|
last_bitrate_bps_ = bitrate;
|
||||||
last_fraction_loss_ = fraction_loss;
|
last_fraction_loss_ = fraction_loss;
|
||||||
last_rtt_ = rtt;
|
last_rtt_ = rtt;
|
||||||
|
uint32_t allocated_bitrate_bps = 0;
|
||||||
ObserverBitrateMap allocation = AllocateBitrates();
|
ObserverBitrateMap allocation = AllocateBitrates();
|
||||||
for (const auto& kv : allocation)
|
for (const auto& kv : allocation) {
|
||||||
kv.first->OnNetworkChanged(kv.second, last_fraction_loss_, last_rtt_);
|
kv.first->OnNetworkChanged(kv.second, last_fraction_loss_, last_rtt_);
|
||||||
|
allocated_bitrate_bps += kv.second;
|
||||||
|
}
|
||||||
|
return allocated_bitrate_bps;
|
||||||
}
|
}
|
||||||
|
|
||||||
BitrateAllocator::ObserverBitrateMap BitrateAllocator::AllocateBitrates() {
|
BitrateAllocator::ObserverBitrateMap BitrateAllocator::AllocateBitrates() {
|
||||||
|
@ -31,7 +31,10 @@ class BitrateAllocator {
|
|||||||
public:
|
public:
|
||||||
BitrateAllocator();
|
BitrateAllocator();
|
||||||
|
|
||||||
void OnNetworkChanged(uint32_t target_bitrate,
|
// Allocate target_bitrate across the registered BitrateObservers.
|
||||||
|
// Returns actual bitrate allocated (might be higher than target_bitrate if
|
||||||
|
// for instance EnforceMinBitrate() is enabled.
|
||||||
|
uint32_t OnNetworkChanged(uint32_t target_bitrate,
|
||||||
uint8_t fraction_loss,
|
uint8_t fraction_loss,
|
||||||
int64_t rtt);
|
int64_t rtt);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user