Default enable sending transport sequence numbers on audio packets.

This enables send side bandwidth estimation for audio and removes field
trial "WebRTC-Audio-SendSideBwe" which this was controlled through.

Transport-cc extension still needs to be negotiated.

Bug: webrtc:12222
Change-Id: Ie2268fad13703eeb0f0d38fcf484baaa29715b7c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/194142
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32681}
This commit is contained in:
Jakob Ivarsson 2020-11-23 15:05:44 +01:00 committed by Commit Bot
parent d840c8fb5d
commit 47a03e8743
10 changed files with 8 additions and 57 deletions

View File

@ -143,7 +143,6 @@ AudioSendStream::AudioSendStream(
std::unique_ptr<voe::ChannelSendInterface> channel_send) std::unique_ptr<voe::ChannelSendInterface> channel_send)
: clock_(clock), : clock_(clock),
worker_queue_(rtp_transport->GetWorkerQueue()), worker_queue_(rtp_transport->GetWorkerQueue()),
audio_send_side_bwe_(field_trial::IsEnabled("WebRTC-Audio-SendSideBwe")),
allocate_audio_without_feedback_( allocate_audio_without_feedback_(
field_trial::IsEnabled("WebRTC-Audio-ABWENoTWCC")), field_trial::IsEnabled("WebRTC-Audio-ABWENoTWCC")),
enable_audio_alr_probing_( enable_audio_alr_probing_(
@ -289,7 +288,7 @@ void AudioSendStream::ConfigureStream(
RtcpBandwidthObserver* bandwidth_observer = nullptr; RtcpBandwidthObserver* bandwidth_observer = nullptr;
if (audio_send_side_bwe_ && !allocate_audio_without_feedback_ && if (!allocate_audio_without_feedback_ &&
new_ids.transport_sequence_number != 0) { new_ids.transport_sequence_number != 0) {
rtp_rtcp_module_->RegisterRtpHeaderExtension( rtp_rtcp_module_->RegisterRtpHeaderExtension(
TransportSequenceNumber::kUri, new_ids.transport_sequence_number); TransportSequenceNumber::kUri, new_ids.transport_sequence_number);
@ -809,8 +808,7 @@ void AudioSendStream::ReconfigureBitrateObserver(
if (config_.min_bitrate_bps == new_config.min_bitrate_bps && if (config_.min_bitrate_bps == new_config.min_bitrate_bps &&
config_.max_bitrate_bps == new_config.max_bitrate_bps && config_.max_bitrate_bps == new_config.max_bitrate_bps &&
config_.bitrate_priority == new_config.bitrate_priority && config_.bitrate_priority == new_config.bitrate_priority &&
(TransportSeqNumId(config_) == TransportSeqNumId(new_config) || TransportSeqNumId(config_) == TransportSeqNumId(new_config) &&
!audio_send_side_bwe_) &&
config_.audio_network_adaptor_config == config_.audio_network_adaptor_config ==
new_config.audio_network_adaptor_config) { new_config.audio_network_adaptor_config) {
return; return;

View File

@ -155,7 +155,6 @@ class AudioSendStream final : public webrtc::AudioSendStream,
rtc::RaceChecker audio_capture_race_checker_; rtc::RaceChecker audio_capture_race_checker_;
rtc::TaskQueue* worker_queue_; rtc::TaskQueue* worker_queue_;
const bool audio_send_side_bwe_;
const bool allocate_audio_without_feedback_; const bool allocate_audio_without_feedback_;
const bool force_no_audio_feedback_ = allocate_audio_without_feedback_; const bool force_no_audio_feedback_ = allocate_audio_without_feedback_;
const bool enable_audio_alr_probing_; const bool enable_audio_alr_probing_;

View File

@ -188,17 +188,10 @@ class TransportWideSequenceNumberObserver : public AudioSendTest {
}; };
TEST_F(AudioSendStreamCallTest, SendsTransportWideSequenceNumbersInFieldTrial) { TEST_F(AudioSendStreamCallTest, SendsTransportWideSequenceNumbersInFieldTrial) {
ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
TransportWideSequenceNumberObserver test(/*expect_sequence_number=*/true); TransportWideSequenceNumberObserver test(/*expect_sequence_number=*/true);
RunBaseTest(&test); RunBaseTest(&test);
} }
TEST_F(AudioSendStreamCallTest,
DoesNotSendTransportWideSequenceNumbersPerDefault) {
TransportWideSequenceNumberObserver test(/*expect_sequence_number=*/false);
RunBaseTest(&test);
}
TEST_F(AudioSendStreamCallTest, SendDtmf) { TEST_F(AudioSendStreamCallTest, SendDtmf) {
static const uint8_t kDtmfPayloadType = 120; static const uint8_t kDtmfPayloadType = 120;
static const int kDtmfPayloadFrequency = 8000; static const int kDtmfPayloadFrequency = 8000;

View File

@ -421,7 +421,6 @@ TEST(AudioSendStreamTest, SetMuted) {
} }
TEST(AudioSendStreamTest, AudioBweCorrectObjectsOnChannelProxy) { TEST(AudioSendStreamTest, AudioBweCorrectObjectsOnChannelProxy) {
ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(true, true, use_null_audio_processing); ConfigHelper helper(true, true, use_null_audio_processing);
auto send_stream = helper.CreateAudioSendStream(); auto send_stream = helper.CreateAudioSendStream();
@ -523,14 +522,12 @@ TEST(AudioSendStreamTest, GetStatsAudioLevel) {
TEST(AudioSendStreamTest, SendCodecAppliesAudioNetworkAdaptor) { TEST(AudioSendStreamTest, SendCodecAppliesAudioNetworkAdaptor) {
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(false, true, use_null_audio_processing); ConfigHelper helper(true, true, use_null_audio_processing);
helper.config().send_codec_spec = helper.config().send_codec_spec =
AudioSendStream::Config::SendCodecSpec(0, kOpusFormat); AudioSendStream::Config::SendCodecSpec(0, kOpusFormat);
const std::string kAnaConfigString = "abcde"; const std::string kAnaConfigString = "abcde";
const std::string kAnaReconfigString = "12345"; const std::string kAnaReconfigString = "12345";
helper.config().rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
helper.config().audio_network_adaptor_config = kAnaConfigString; helper.config().audio_network_adaptor_config = kAnaConfigString;
EXPECT_CALL(helper.mock_encoder_factory(), MakeAudioEncoderMock(_, _, _, _)) EXPECT_CALL(helper.mock_encoder_factory(), MakeAudioEncoderMock(_, _, _, _))
@ -559,12 +556,10 @@ TEST(AudioSendStreamTest, SendCodecAppliesAudioNetworkAdaptor) {
TEST(AudioSendStreamTest, AudioNetworkAdaptorReceivesOverhead) { TEST(AudioSendStreamTest, AudioNetworkAdaptorReceivesOverhead) {
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(false, true, use_null_audio_processing); ConfigHelper helper(true, true, use_null_audio_processing);
helper.config().send_codec_spec = helper.config().send_codec_spec =
AudioSendStream::Config::SendCodecSpec(0, kOpusFormat); AudioSendStream::Config::SendCodecSpec(0, kOpusFormat);
const std::string kAnaConfigString = "abcde"; const std::string kAnaConfigString = "abcde";
helper.config().rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
EXPECT_CALL(helper.mock_encoder_factory(), MakeAudioEncoderMock(_, _, _, _)) EXPECT_CALL(helper.mock_encoder_factory(), MakeAudioEncoderMock(_, _, _, _))
.WillOnce(Invoke( .WillOnce(Invoke(
@ -647,7 +642,6 @@ TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) {
} }
TEST(AudioSendStreamTest, SSBweTargetInRangeRespected) { TEST(AudioSendStreamTest, SSBweTargetInRangeRespected) {
ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(true, true, use_null_audio_processing); ConfigHelper helper(true, true, use_null_audio_processing);
auto send_stream = helper.CreateAudioSendStream(); auto send_stream = helper.CreateAudioSendStream();
@ -666,7 +660,6 @@ TEST(AudioSendStreamTest, SSBweTargetInRangeRespected) {
TEST(AudioSendStreamTest, SSBweFieldTrialMinRespected) { TEST(AudioSendStreamTest, SSBweFieldTrialMinRespected) {
ScopedFieldTrials field_trials( ScopedFieldTrials field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/"
"WebRTC-Audio-Allocation/min:6kbps,max:64kbps/"); "WebRTC-Audio-Allocation/min:6kbps,max:64kbps/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(true, true, use_null_audio_processing); ConfigHelper helper(true, true, use_null_audio_processing);
@ -684,7 +677,6 @@ TEST(AudioSendStreamTest, SSBweFieldTrialMinRespected) {
TEST(AudioSendStreamTest, SSBweFieldTrialMaxRespected) { TEST(AudioSendStreamTest, SSBweFieldTrialMaxRespected) {
ScopedFieldTrials field_trials( ScopedFieldTrials field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/"
"WebRTC-Audio-Allocation/min:6kbps,max:64kbps/"); "WebRTC-Audio-Allocation/min:6kbps,max:64kbps/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(true, true, use_null_audio_processing); ConfigHelper helper(true, true, use_null_audio_processing);
@ -702,8 +694,6 @@ TEST(AudioSendStreamTest, SSBweFieldTrialMaxRespected) {
TEST(AudioSendStreamTest, SSBweWithOverhead) { TEST(AudioSendStreamTest, SSBweWithOverhead) {
ScopedFieldTrials field_trials( ScopedFieldTrials field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/"
"WebRTC-SendSideBwe-WithOverhead/Enabled/"
"WebRTC-Audio-LegacyOverhead/Disabled/"); "WebRTC-Audio-LegacyOverhead/Disabled/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(true, true, use_null_audio_processing); ConfigHelper helper(true, true, use_null_audio_processing);
@ -725,8 +715,6 @@ TEST(AudioSendStreamTest, SSBweWithOverhead) {
TEST(AudioSendStreamTest, SSBweWithOverheadMinRespected) { TEST(AudioSendStreamTest, SSBweWithOverheadMinRespected) {
ScopedFieldTrials field_trials( ScopedFieldTrials field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/"
"WebRTC-SendSideBwe-WithOverhead/Enabled/"
"WebRTC-Audio-LegacyOverhead/Disabled/" "WebRTC-Audio-LegacyOverhead/Disabled/"
"WebRTC-Audio-Allocation/min:6kbps,max:64kbps/"); "WebRTC-Audio-Allocation/min:6kbps,max:64kbps/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
@ -747,8 +735,6 @@ TEST(AudioSendStreamTest, SSBweWithOverheadMinRespected) {
TEST(AudioSendStreamTest, SSBweWithOverheadMaxRespected) { TEST(AudioSendStreamTest, SSBweWithOverheadMaxRespected) {
ScopedFieldTrials field_trials( ScopedFieldTrials field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/"
"WebRTC-SendSideBwe-WithOverhead/Enabled/"
"WebRTC-Audio-LegacyOverhead/Disabled/" "WebRTC-Audio-LegacyOverhead/Disabled/"
"WebRTC-Audio-Allocation/min:6kbps,max:64kbps/"); "WebRTC-Audio-Allocation/min:6kbps,max:64kbps/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
@ -808,7 +794,6 @@ TEST(AudioSendStreamTest, DontRecreateEncoder) {
} }
TEST(AudioSendStreamTest, ReconfigureTransportCcResetsFirst) { TEST(AudioSendStreamTest, ReconfigureTransportCcResetsFirst) {
ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
for (bool use_null_audio_processing : {false, true}) { for (bool use_null_audio_processing : {false, true}) {
ConfigHelper helper(false, true, use_null_audio_processing); ConfigHelper helper(false, true, use_null_audio_processing);
auto send_stream = helper.CreateAudioSendStream(); auto send_stream = helper.CreateAudioSendStream();

View File

@ -160,9 +160,6 @@ using AudioBweIntegrationTest = CallTest;
// TODO(tschumim): This test is flaky when run on android and mac. Re-enable the // TODO(tschumim): This test is flaky when run on android and mac. Re-enable the
// test for when the issue is fixed. // test for when the issue is fixed.
TEST_F(AudioBweIntegrationTest, DISABLED_NoBandwidthDropAfterDtx) { TEST_F(AudioBweIntegrationTest, DISABLED_NoBandwidthDropAfterDtx) {
webrtc::test::ScopedFieldTrials override_field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/"
"WebRTC-SendSideBwe-WithOverhead/Enabled/");
NoBandwidthDropAfterDtx test; NoBandwidthDropAfterDtx test;
RunBaseTest(&test); RunBaseTest(&test);
} }

View File

@ -663,7 +663,6 @@ TEST_F(RampUpTest, DISABLED_UpDownUpTransportSequenceNumberPacketLoss) {
UpDownUpAudioVideoTransportSequenceNumberRtx UpDownUpAudioVideoTransportSequenceNumberRtx
#endif #endif
TEST_F(RampUpTest, MAYBE_UpDownUpAudioVideoTransportSequenceNumberRtx) { TEST_F(RampUpTest, MAYBE_UpDownUpAudioVideoTransportSequenceNumberRtx) {
test::ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
std::vector<int> loss_rates = {0, 0, 0, 0}; std::vector<int> loss_rates = {0, 0, 0, 0};
RampUpDownUpTester test(3, 1, 0, kStartBitrateBps, RampUpDownUpTester test(3, 1, 0, kStartBitrateBps,
RtpExtension::kTransportSequenceNumberUri, true, RtpExtension::kTransportSequenceNumberUri, true,
@ -672,7 +671,6 @@ TEST_F(RampUpTest, MAYBE_UpDownUpAudioVideoTransportSequenceNumberRtx) {
} }
TEST_F(RampUpTest, UpDownUpAudioTransportSequenceNumberRtx) { TEST_F(RampUpTest, UpDownUpAudioTransportSequenceNumberRtx) {
test::ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
std::vector<int> loss_rates = {0, 0, 0, 0}; std::vector<int> loss_rates = {0, 0, 0, 0};
RampUpDownUpTester test(0, 1, 0, kStartBitrateBps, RampUpDownUpTester test(0, 1, 0, kStartBitrateBps,
RtpExtension::kTransportSequenceNumberUri, true, RtpExtension::kTransportSequenceNumberUri, true,

View File

@ -1344,8 +1344,6 @@ TEST_P(WebRtcVoiceEngineTestFake, SetAndGetRtpSendParameters) {
// Test that max_bitrate_bps in send stream config gets updated correctly when // Test that max_bitrate_bps in send stream config gets updated correctly when
// SetRtpSendParameters is called. // SetRtpSendParameters is called.
TEST_P(WebRtcVoiceEngineTestFake, SetRtpSendParameterUpdatesMaxBitrate) { TEST_P(WebRtcVoiceEngineTestFake, SetRtpSendParameterUpdatesMaxBitrate) {
webrtc::test::ScopedFieldTrials override_field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/");
EXPECT_TRUE(SetupSendStream()); EXPECT_TRUE(SetupSendStream());
cricket::AudioSendParameters send_parameters; cricket::AudioSendParameters send_parameters;
send_parameters.codecs.push_back(kOpusCodec); send_parameters.codecs.push_back(kOpusCodec);
@ -2127,17 +2125,7 @@ TEST_P(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) {
EXPECT_TRUE(channel_->CanInsertDtmf()); EXPECT_TRUE(channel_->CanInsertDtmf());
} }
class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { TEST_P(WebRtcVoiceEngineTestFake,
public:
WebRtcVoiceEngineWithSendSideBweTest()
: WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {}
};
INSTANTIATE_TEST_SUITE_P(UnusedParameter,
WebRtcVoiceEngineWithSendSideBweTest,
::testing::Values(true));
TEST_P(WebRtcVoiceEngineWithSendSideBweTest,
SupportsTransportSequenceNumberHeaderExtension) { SupportsTransportSequenceNumberHeaderExtension) {
const std::vector<webrtc::RtpExtension> header_extensions = const std::vector<webrtc::RtpExtension> header_extensions =
GetDefaultEnabledRtpHeaderExtensions(*engine_); GetDefaultEnabledRtpHeaderExtensions(*engine_);
@ -2530,9 +2518,7 @@ class WebRtcVoiceEngineWithSendSideBweWithOverheadTest
public: public:
WebRtcVoiceEngineWithSendSideBweWithOverheadTest() WebRtcVoiceEngineWithSendSideBweWithOverheadTest()
: WebRtcVoiceEngineTestFake( : WebRtcVoiceEngineTestFake(
"WebRTC-Audio-SendSideBwe/Enabled/WebRTC-Audio-Allocation/" "WebRTC-Audio-Allocation/min:6000bps,max:32000bps/") {}
"min:6000bps,max:32000bps/WebRTC-SendSideBwe-WithOverhead/"
"Enabled/") {}
}; };
// Test that we can set the outgoing SSRC properly. // Test that we can set the outgoing SSRC properly.

View File

@ -32,10 +32,7 @@ TEST(GoogCcPeerScenarioTest, MAYBE_NoBweChangeFromVideoUnmute) {
// packets sizes. This will create a change in propagation time which might be // packets sizes. This will create a change in propagation time which might be
// detected as an overuse. Using separate overuse detectors for audio and // detected as an overuse. Using separate overuse detectors for audio and
// video avoids the issue. // video avoids the issue.
std::string audio_twcc_trials( std::string audio_twcc_trials("WebRTC-Audio-AlrProbing/Disabled/");
"WebRTC-Audio-SendSideBwe/Enabled/" //
"WebRTC-SendSideBwe-WithOverhead/Enabled/" //
"WebRTC-Audio-AlrProbing/Disabled/");
std::string separate_audio_video( std::string separate_audio_video(
"WebRTC-Bwe-SeparateAudioPackets/" "WebRTC-Bwe-SeparateAudioPackets/"
"enabled:true,packet_threshold:15,time_threshold:1000ms/"); "enabled:true,packet_threshold:15,time_threshold:1000ms/");

View File

@ -146,7 +146,7 @@ TEST(ScenarioTest,
RetransmitsVideoPacketsInAudioAndVideoCallWithSendSideBweAndLoss) { RetransmitsVideoPacketsInAudioAndVideoCallWithSendSideBweAndLoss) {
// Make sure audio packets are included in transport feedback. // Make sure audio packets are included in transport feedback.
test::ScopedFieldTrials override_field_trials( test::ScopedFieldTrials override_field_trials(
"WebRTC-Audio-SendSideBwe/Enabled/WebRTC-Audio-ABWENoTWCC/Disabled/"); "WebRTC-Audio-ABWENoTWCC/Disabled/");
Scenario s; Scenario s;
CallClientConfig call_client_config; CallClientConfig call_client_config;

View File

@ -327,7 +327,6 @@ TEST_F(TransportFeedbackEndToEndTest, VideoTransportFeedbackNotConfigured) {
} }
TEST_F(TransportFeedbackEndToEndTest, AudioReceivesTransportFeedback) { TEST_F(TransportFeedbackEndToEndTest, AudioReceivesTransportFeedback) {
test::ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
TransportFeedbackTester test(true, 0, 1); TransportFeedbackTester test(true, 0, 1);
RunBaseTest(&test); RunBaseTest(&test);
} }
@ -435,7 +434,6 @@ TEST_F(TransportFeedbackEndToEndTest,
} }
TEST_F(TransportFeedbackEndToEndTest, TransportSeqNumOnAudioAndVideo) { TEST_F(TransportFeedbackEndToEndTest, TransportSeqNumOnAudioAndVideo) {
test::ScopedFieldTrials field_trials("WebRTC-Audio-SendSideBwe/Enabled/");
static constexpr size_t kMinPacketsToWaitFor = 50; static constexpr size_t kMinPacketsToWaitFor = 50;
class TransportSequenceNumberTest : public test::EndToEndTest { class TransportSequenceNumberTest : public test::EndToEndTest {
public: public: