Always send abs-send-time when negotiated and do not filter it out.
Previously, when abs-send-time was negotiated, it was not sent if TWCC was enabled. With this FieldTrial, abs-send-time header extension is sent even if TWCC was negotiated in addition to abs-send-time. Bug: webrtc:10234 Change-Id: I3af85720760882e89760888d43996fe85def619a Reviewed-on: https://webrtc-review.googlesource.com/c/118936 Commit-Queue: Konrad Hofbauer <hofbauer@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26368}
This commit is contained in:
committed by
Commit Bot
parent
ae6e0b2058
commit
b0397d69a9
@ -18,6 +18,7 @@
|
||||
#include "api/video_codecs/video_decoder_factory.h"
|
||||
#include "api/video_codecs/video_encoder_factory.h"
|
||||
#include "media/engine/webrtc_voice_engine.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
|
||||
#ifdef HAVE_WEBRTC_VIDEO
|
||||
#include "media/engine/webrtc_video_engine.h"
|
||||
@ -67,6 +68,13 @@ std::unique_ptr<MediaEngineInterface> WebRtcMediaEngineFactory::Create(
|
||||
}
|
||||
|
||||
namespace {
|
||||
// If this FieldTrial is enabled, we will not filter out the abs-send-time
|
||||
// header extension when the TWCC extensions were also negotiated, but keep
|
||||
// kAbsSendTimeUri also if kTransportSequenceNumberUri is present.
|
||||
bool IsKeepAbsSendTimeExtensionFieldTrialEnabled() {
|
||||
return webrtc::field_trial::IsEnabled("WebRTC-KeepAbsSendTimeExtension");
|
||||
}
|
||||
|
||||
// Remove mutually exclusive extensions with lower priority.
|
||||
void DiscardRedundantExtensions(
|
||||
std::vector<webrtc::RtpExtension>* extensions,
|
||||
@ -143,14 +151,20 @@ std::vector<webrtc::RtpExtension> FilterRtpExtensions(
|
||||
});
|
||||
result.erase(it, result.end());
|
||||
|
||||
// Keep just the highest priority extension of any in the following list.
|
||||
static const char* const kBweExtensionPriorities[] = {
|
||||
webrtc::RtpExtension::kTransportSequenceNumberUri,
|
||||
webrtc::RtpExtension::kAbsSendTimeUri,
|
||||
webrtc::RtpExtension::kTimestampOffsetUri};
|
||||
DiscardRedundantExtensions(&result, kBweExtensionPriorities);
|
||||
// Keep just the highest priority extension of any in the following lists.
|
||||
if (IsKeepAbsSendTimeExtensionFieldTrialEnabled()) {
|
||||
static const char* const kBweExtensionPriorities[] = {
|
||||
webrtc::RtpExtension::kAbsSendTimeUri,
|
||||
webrtc::RtpExtension::kTimestampOffsetUri};
|
||||
DiscardRedundantExtensions(&result, kBweExtensionPriorities);
|
||||
} else {
|
||||
static const char* const kBweExtensionPriorities[] = {
|
||||
webrtc::RtpExtension::kTransportSequenceNumberUri,
|
||||
webrtc::RtpExtension::kAbsSendTimeUri,
|
||||
webrtc::RtpExtension::kTimestampOffsetUri};
|
||||
DiscardRedundantExtensions(&result, kBweExtensionPriorities);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
#include "api/video_codecs/builtin_video_encoder_factory.h"
|
||||
#include "media/engine/webrtc_media_engine.h"
|
||||
#include "modules/audio_processing/include/audio_processing.h"
|
||||
#include "test/field_trial.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
using webrtc::RtpExtension;
|
||||
@ -198,6 +199,25 @@ TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_1) {
|
||||
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
|
||||
}
|
||||
|
||||
TEST(WebRtcMediaEngineTest,
|
||||
FilterRtpExtensions_RemoveRedundantBwe_1_KeepAbsSendTime) {
|
||||
std::vector<RtpExtension> extensions;
|
||||
webrtc::test::ScopedFieldTrials override_field_trials_(
|
||||
"WebRTC-KeepAbsSendTimeExtension/Enabled/");
|
||||
extensions.push_back(
|
||||
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
|
||||
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9));
|
||||
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6));
|
||||
extensions.push_back(
|
||||
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
|
||||
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
|
||||
std::vector<webrtc::RtpExtension> filtered =
|
||||
FilterRtpExtensions(extensions, SupportedExtensions2, true);
|
||||
EXPECT_EQ(2u, filtered.size());
|
||||
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
|
||||
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[1].uri);
|
||||
}
|
||||
|
||||
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBweEncrypted_1) {
|
||||
std::vector<RtpExtension> extensions;
|
||||
extensions.push_back(
|
||||
@ -219,6 +239,31 @@ TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBweEncrypted_1) {
|
||||
EXPECT_NE(filtered[0].encrypt, filtered[1].encrypt);
|
||||
}
|
||||
|
||||
TEST(WebRtcMediaEngineTest,
|
||||
FilterRtpExtensions_RemoveRedundantBweEncrypted_1_KeepAbsSendTime) {
|
||||
std::vector<RtpExtension> extensions;
|
||||
webrtc::test::ScopedFieldTrials override_field_trials_(
|
||||
"WebRTC-KeepAbsSendTimeExtension/Enabled/");
|
||||
extensions.push_back(
|
||||
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
|
||||
extensions.push_back(
|
||||
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 4, true));
|
||||
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9));
|
||||
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6));
|
||||
extensions.push_back(
|
||||
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
|
||||
extensions.push_back(
|
||||
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 2, true));
|
||||
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
|
||||
std::vector<webrtc::RtpExtension> filtered =
|
||||
FilterRtpExtensions(extensions, SupportedExtensions2, true);
|
||||
EXPECT_EQ(3u, filtered.size());
|
||||
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
|
||||
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[1].uri);
|
||||
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[2].uri);
|
||||
EXPECT_NE(filtered[0].encrypt, filtered[1].encrypt);
|
||||
}
|
||||
|
||||
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_2) {
|
||||
std::vector<RtpExtension> extensions;
|
||||
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 1));
|
||||
|
||||
Reference in New Issue
Block a user