Do not add audio bitrate observer if TWCC sending is not supported
Bug: webrtc:8243 Change-Id: Ida076dca72a6894053bdd0884f818ab3eaf5128a Reviewed-on: https://webrtc-review.googlesource.com/30840 Commit-Queue: Alex Narest <alexnarest@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21149}
This commit is contained in:
@ -58,6 +58,7 @@ rtc_static_library("audio") {
|
||||
"../rtc_base:rtc_base_approved",
|
||||
"../rtc_base:rtc_task_queue",
|
||||
"../system_wrappers",
|
||||
"../system_wrappers:field_trial_api",
|
||||
"../voice_engine",
|
||||
]
|
||||
}
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/task_queue.h"
|
||||
#include "rtc_base/timeutils.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
#include "voice_engine/channel_proxy.h"
|
||||
#include "voice_engine/include/voe_base.h"
|
||||
#include "voice_engine/transmit_mixer.h"
|
||||
@ -137,6 +138,19 @@ void AudioSendStream::Reconfigure(
|
||||
ConfigureStream(this, new_config, false);
|
||||
}
|
||||
|
||||
AudioSendStream::ExtensionIds AudioSendStream::FindExtensionIds(
|
||||
const std::vector<RtpExtension>& extensions) {
|
||||
ExtensionIds ids;
|
||||
for (const auto& extension : extensions) {
|
||||
if (extension.uri == RtpExtension::kAudioLevelUri) {
|
||||
ids.audio_level = extension.id;
|
||||
} else if (extension.uri == RtpExtension::kTransportSequenceNumberUri) {
|
||||
ids.transport_sequence_number = extension.id;
|
||||
}
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
|
||||
void AudioSendStream::ConfigureStream(
|
||||
webrtc::internal::AudioSendStream* stream,
|
||||
const webrtc::AudioSendStream::Config& new_config,
|
||||
@ -177,28 +191,8 @@ void AudioSendStream::ConfigureStream(
|
||||
stream->timed_send_transport_adapter_.get());
|
||||
}
|
||||
|
||||
// RFC 5285: Each distinct extension MUST have a unique ID. The value 0 is
|
||||
// reserved for padding and MUST NOT be used as a local identifier.
|
||||
// So it should be safe to use 0 here to indicate "not configured".
|
||||
struct ExtensionIds {
|
||||
int audio_level = 0;
|
||||
int transport_sequence_number = 0;
|
||||
};
|
||||
|
||||
auto find_extension_ids = [](const std::vector<RtpExtension>& extensions) {
|
||||
ExtensionIds ids;
|
||||
for (const auto& extension : extensions) {
|
||||
if (extension.uri == RtpExtension::kAudioLevelUri) {
|
||||
ids.audio_level = extension.id;
|
||||
} else if (extension.uri == RtpExtension::kTransportSequenceNumberUri) {
|
||||
ids.transport_sequence_number = extension.id;
|
||||
}
|
||||
}
|
||||
return ids;
|
||||
};
|
||||
|
||||
const ExtensionIds old_ids = find_extension_ids(old_config.rtp.extensions);
|
||||
const ExtensionIds new_ids = find_extension_ids(new_config.rtp.extensions);
|
||||
const ExtensionIds old_ids = FindExtensionIds(old_config.rtp.extensions);
|
||||
const ExtensionIds new_ids = FindExtensionIds(new_config.rtp.extensions);
|
||||
// Audio level indication
|
||||
if (first_time || new_ids.audio_level != old_ids.audio_level) {
|
||||
channel_proxy->SetSendAudioLevelIndicationStatus(new_ids.audio_level != 0,
|
||||
@ -238,7 +232,10 @@ void AudioSendStream::ConfigureStream(
|
||||
|
||||
void AudioSendStream::Start() {
|
||||
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
|
||||
if (config_.min_bitrate_bps != -1 && config_.max_bitrate_bps != -1) {
|
||||
if (config_.min_bitrate_bps != -1 && config_.max_bitrate_bps != -1 &&
|
||||
(FindExtensionIds(config_.rtp.extensions).transport_sequence_number !=
|
||||
0 ||
|
||||
!webrtc::field_trial::IsEnabled("WebRTC-Audio-SendSideBwe"))) {
|
||||
// Audio BWE is enabled.
|
||||
transport_->packet_sender()->SetAccountForAudioPackets(true);
|
||||
ConfigureBitrateObserver(config_.min_bitrate_bps, config_.max_bitrate_bps);
|
||||
@ -599,12 +596,19 @@ void AudioSendStream::ReconfigureBitrateObserver(
|
||||
// allow us to configure the bitrate observer if the new config has bitrate
|
||||
// limits set, but would only have us call RemoveBitrateObserver if we were
|
||||
// previously configured with bitrate limits.
|
||||
int new_transport_seq_num_id =
|
||||
FindExtensionIds(new_config.rtp.extensions).transport_sequence_number;
|
||||
if (stream->config_.min_bitrate_bps == new_config.min_bitrate_bps &&
|
||||
stream->config_.max_bitrate_bps == new_config.max_bitrate_bps) {
|
||||
stream->config_.max_bitrate_bps == new_config.max_bitrate_bps &&
|
||||
(FindExtensionIds(stream->config_.rtp.extensions)
|
||||
.transport_sequence_number == new_transport_seq_num_id ||
|
||||
!webrtc::field_trial::IsEnabled("WebRTC-Audio-SendSideBwe"))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (new_config.min_bitrate_bps != -1 && new_config.max_bitrate_bps != -1) {
|
||||
if (new_config.min_bitrate_bps != -1 && new_config.max_bitrate_bps != -1 &&
|
||||
(new_transport_seq_num_id != 0 ||
|
||||
!webrtc::field_trial::IsEnabled("WebRTC-Audio-SendSideBwe"))) {
|
||||
stream->ConfigureBitrateObserver(new_config.min_bitrate_bps,
|
||||
new_config.max_bitrate_bps);
|
||||
} else {
|
||||
|
||||
@ -124,6 +124,16 @@ class AudioSendStream final : public webrtc::AudioSendStream,
|
||||
std::unique_ptr<TimedTransport> timed_send_transport_adapter_;
|
||||
TimeInterval active_lifetime_;
|
||||
|
||||
// RFC 5285: Each distinct extension MUST have a unique ID. The value 0 is
|
||||
// reserved for padding and MUST NOT be used as a local identifier.
|
||||
// So it should be safe to use 0 here to indicate "not configured".
|
||||
struct ExtensionIds {
|
||||
int audio_level = 0;
|
||||
int transport_sequence_number = 0;
|
||||
};
|
||||
static ExtensionIds FindExtensionIds(
|
||||
const std::vector<RtpExtension>& extensions);
|
||||
|
||||
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AudioSendStream);
|
||||
};
|
||||
} // namespace internal
|
||||
|
||||
Reference in New Issue
Block a user