Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(439)

Unified Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2775483004: Set max bitrate for audio send stream based on RtpParameters. (Closed)
Patch Set: fixing Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/media/engine/webrtcvoiceengine.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index 7c6d7940f685cd9e11aa4f90227b93582ccf6ce0..0d4a17281a45185af43f555645a84159a4da0a1f 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -1353,10 +1353,12 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
return false;
}
+ const rtc::Optional<int> old_rtp_max_bitrate =
+ rtp_parameters_.encodings[0].max_bitrate_bps;
+
rtp_parameters_ = parameters;
- // parameters.encodings[0].encodings[0].max_bitrate_bps could have changed.
- if (config_.send_codec_spec.codec_inst.rate != *send_rate) {
+ if (rtp_parameters_.encodings[0].max_bitrate_bps != old_rtp_max_bitrate) {
// Recreate AudioSendStream with new bit rate.
config_.send_codec_spec.codec_inst.rate = *send_rate;
RecreateAudioSendStream();
@@ -1388,7 +1390,15 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
RTC_DCHECK(!stream_);
if (webrtc::field_trial::IsEnabled("WebRTC-Audio-SendSideBwe")) {
config_.min_bitrate_bps = kOpusMinBitrateBps;
- config_.max_bitrate_bps = kOpusBitrateFbBps;
+
+ // This means that when RtpParameters is reset, we may change the
+ // encoder's bit rate immediately (through call_->CreateAudioSendStream),
+ // meanwhile change the cap to the output of BWE.
+ config_.max_bitrate_bps =
+ rtp_parameters_.encodings[0].max_bitrate_bps
+ ? *rtp_parameters_.encodings[0].max_bitrate_bps
+ : kOpusBitrateFbBps;
+
// TODO(mflodman): Keep testing this and set proper values.
// Note: This is an early experiment currently only supported by Opus.
if (send_side_bwe_with_overhead_) {
@@ -1397,8 +1407,6 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
if (!packet_sizes_ms.empty()) {
int max_packet_size_ms =
*std::max_element(packet_sizes_ms.begin(), packet_sizes_ms.end());
- int min_packet_size_ms =
- *std::min_element(packet_sizes_ms.begin(), packet_sizes_ms.end());
// Audio network adaptor will just use 20ms and 60ms frame lengths.
// The adaptor will only be active for the Opus encoder.
@@ -1409,7 +1417,6 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
#else
max_packet_size_ms = 60;
#endif
- min_packet_size_ms = 20;
}
// OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12)
@@ -1418,11 +1425,19 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
int min_overhead_bps =
kOverheadPerPacket * 8 * 1000 / max_packet_size_ms;
- int max_overhead_bps =
- kOverheadPerPacket * 8 * 1000 / min_packet_size_ms;
-
- config_.min_bitrate_bps = kOpusMinBitrateBps + min_overhead_bps;
- config_.max_bitrate_bps = kOpusBitrateFbBps + max_overhead_bps;
+ // We assume that |config_.max_bitrate_bps| before the next line is
+ // a hard limit on the payload bitrate, so we add min_overhead_bps to
+ // it to ensure that, when overhead is deducted, the payload rate
+ // never goes beyond the limit.
+ // Note: this also means that if a higher overhead is forced, we
+ // cannot reach the limit.
+ // TODO(minyue): Reconsider this when the signaling to BWE is done
+ // through a dedicated API.
+ config_.max_bitrate_bps += min_overhead_bps;
+
+ // In contrast to max_bitrate_bps, we let min_bitrate_bps always be
+ // reachable.
+ config_.min_bitrate_bps += min_overhead_bps;
}
}
}
« no previous file with comments | « no previous file | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698