Remove use of RtpHeaderExtension and clean up

Currently there are two structs that are identical and track extension details:
webrtc::RtpExtension
cricket::RtpHeaderExtension

The use of the structs is mixed in the code to track the extensions being
supported. This results in duplicate definition of
the URI constants and there is code to convert between the two structs.

Clean up to use a single RtpHeader throughout the codebase. The actual location
of RtpHeader may change in future (perhaps to be located in api/). Additionally,
this CL renames some of the constants to clarify Uri and Id use.

BUG= webrtc:5895

Review-Url: https://codereview.webrtc.org/1984983002
Cr-Commit-Position: refs/heads/master@{#12924}
This commit is contained in:
isheriff 2016-05-26 11:24:55 -07:00 committed by Commit bot
parent 97f0b93f0d
commit 6f8d686d35
39 changed files with 433 additions and 504 deletions

View File

@ -27,6 +27,8 @@
#include "webrtc/base/logging.h"
#include "webrtc/base/messagedigest.h"
#include "webrtc/base/stringutils.h"
// for RtpExtension
#include "webrtc/config.h"
#include "webrtc/media/base/codec.h"
#include "webrtc/media/base/cryptoparams.h"
#include "webrtc/media/base/mediaconstants.h"
@ -64,7 +66,7 @@ using cricket::kCodecParamMaxPlaybackRate;
using cricket::kCodecParamAssociatedPayloadType;
using cricket::MediaContentDescription;
using cricket::MediaType;
using cricket::RtpHeaderExtension;
using cricket::RtpHeaderExtensions;
using cricket::SsrcGroup;
using cricket::StreamParams;
using cricket::StreamParamsVec;
@ -73,8 +75,6 @@ using cricket::TransportInfo;
using cricket::VideoContentDescription;
using rtc::SocketAddress;
typedef std::vector<RtpHeaderExtension> RtpHeaderExtensions;
namespace cricket {
class SessionDescription;
}
@ -309,7 +309,7 @@ static bool ParseIceOptions(const std::string& line,
std::vector<std::string>* transport_options,
SdpParseError* error);
static bool ParseExtmap(const std::string& line,
RtpHeaderExtension* extmap,
RtpExtension* extmap,
SdpParseError* error);
static bool ParseFingerprintAttribute(const std::string& line,
rtc::SSLFingerprint** fingerprint,
@ -1168,7 +1168,8 @@ bool ParseSctpPort(const std::string& line,
return true;
}
bool ParseExtmap(const std::string& line, RtpHeaderExtension* extmap,
bool ParseExtmap(const std::string& line,
RtpExtension* extmap,
SdpParseError* error) {
// RFC 5285
// a=extmap:<value>["/"<direction>] <URI> <extensionattributes>
@ -1192,7 +1193,7 @@ bool ParseExtmap(const std::string& line, RtpHeaderExtension* extmap,
return false;
}
*extmap = RtpHeaderExtension(uri, value);
*extmap = RtpExtension(uri, value);
return true;
}
@ -2015,7 +2016,7 @@ bool ParseSessionDescription(const std::string& message, size_t* pos,
desc->set_msid_supported(
CaseInsensitiveFind(semantics, kMediaStreamSemantic));
} else if (HasAttribute(line, kAttributeExtmap)) {
RtpHeaderExtension extmap;
RtpExtension extmap;
if (!ParseExtmap(line, &extmap, error)) {
return false;
}
@ -2703,7 +2704,7 @@ bool ParseContent(const std::string& message,
} else if (HasAttribute(line, kAttributeSendRecv)) {
media_desc->set_direction(cricket::MD_SENDRECV);
} else if (HasAttribute(line, kAttributeExtmap)) {
RtpHeaderExtension extmap;
RtpExtension extmap;
if (!ParseExtmap(line, &extmap, error)) {
return false;
}

View File

@ -44,7 +44,6 @@ using cricket::kFecSsrcGroupSemantics;
using cricket::LOCAL_PORT_TYPE;
using cricket::NS_JINGLE_DRAFT_SCTP;
using cricket::NS_JINGLE_RTP;
using cricket::RtpHeaderExtension;
using cricket::RELAY_PORT_TYPE;
using cricket::SessionDescription;
using cricket::StreamParams;
@ -57,6 +56,7 @@ using webrtc::IceCandidateCollection;
using webrtc::IceCandidateInterface;
using webrtc::JsepIceCandidate;
using webrtc::JsepSessionDescription;
using webrtc::RtpExtension;
using webrtc::SdpParseError;
using webrtc::SessionDescriptionInterface;
@ -1110,8 +1110,8 @@ class WebRtcSdpTest : public testing::Test {
ASSERT_EQ(cd1->rtp_header_extensions().size(),
cd2->rtp_header_extensions().size());
for (size_t i = 0; i< cd1->rtp_header_extensions().size(); ++i) {
const RtpHeaderExtension ext1 = cd1->rtp_header_extensions().at(i);
const RtpHeaderExtension ext2 = cd2->rtp_header_extensions().at(i);
const RtpExtension ext1 = cd1->rtp_header_extensions().at(i);
const RtpExtension ext2 = cd2->rtp_header_extensions().at(i);
EXPECT_EQ(ext1.uri, ext2.uri);
EXPECT_EQ(ext1.id, ext2.id);
}
@ -1333,10 +1333,8 @@ class WebRtcSdpTest : public testing::Test {
audio_desc_->Copy());
video_desc_ = static_cast<VideoContentDescription*>(
video_desc_->Copy());
audio_desc_->AddRtpHeaderExtension(
RtpHeaderExtension(kExtmapUri, kExtmapId));
video_desc_->AddRtpHeaderExtension(
RtpHeaderExtension(kExtmapUri, kExtmapId));
audio_desc_->AddRtpHeaderExtension(RtpExtension(kExtmapUri, kExtmapId));
video_desc_->AddRtpHeaderExtension(RtpExtension(kExtmapUri, kExtmapId));
desc_.RemoveContentByName(kAudioContentName);
desc_.RemoveContentByName(kVideoContentName);
desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_desc_);

View File

@ -38,7 +38,7 @@ bool UseSendSideBwe(const webrtc::AudioReceiveStream::Config& config) {
return false;
}
for (const auto& extension : config.rtp.extensions) {
if (extension.name == RtpExtension::kTransportSequenceNumber) {
if (extension.uri == RtpExtension::kTransportSequenceNumberUri) {
return true;
}
}
@ -97,17 +97,17 @@ AudioReceiveStream::AudioReceiveStream(
channel_proxy_->RegisterExternalTransport(config.rtcp_send_transport);
for (const auto& extension : config.rtp.extensions) {
if (extension.name == RtpExtension::kAudioLevel) {
if (extension.uri == RtpExtension::kAudioLevelUri) {
channel_proxy_->SetReceiveAudioLevelIndicationStatus(true, extension.id);
bool registered = rtp_header_parser_->RegisterRtpHeaderExtension(
kRtpExtensionAudioLevel, extension.id);
RTC_DCHECK(registered);
} else if (extension.name == RtpExtension::kAbsSendTime) {
} else if (extension.uri == RtpExtension::kAbsSendTimeUri) {
channel_proxy_->SetReceiveAbsoluteSenderTimeStatus(true, extension.id);
bool registered = rtp_header_parser_->RegisterRtpHeaderExtension(
kRtpExtensionAbsoluteSendTime, extension.id);
RTC_DCHECK(registered);
} else if (extension.name == RtpExtension::kTransportSequenceNumber) {
} else if (extension.uri == RtpExtension::kTransportSequenceNumberUri) {
channel_proxy_->EnableReceiveTransportSequenceNumber(extension.id);
bool registered = rtp_header_parser_->RegisterRtpHeaderExtension(
kRtpExtensionTransportSequenceNumber, extension.id);

View File

@ -108,11 +108,11 @@ struct ConfigHelper {
stream_config_.rtp.local_ssrc = kLocalSsrc;
stream_config_.rtp.remote_ssrc = kRemoteSsrc;
stream_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
stream_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAudioLevel, kAudioLevelId));
RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId));
stream_config_.rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumber, kTransportSequenceNumberId));
RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
}
MockCongestionController* congestion_controller() {
@ -224,10 +224,10 @@ TEST(AudioReceiveStreamTest, ConfigToString) {
config.rtp.remote_ssrc = kRemoteSsrc;
config.rtp.local_ssrc = kLocalSsrc;
config.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
config.voe_channel_id = kChannelId;
EXPECT_EQ(
"{rtp: {remote_ssrc: 1234, local_ssrc: 5678, extensions: [{name: "
"{rtp: {remote_ssrc: 1234, local_ssrc: 5678, extensions: [{uri: "
"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time, id: 2}], "
"transport_cc: off}, "
"rtcp_send_transport: nullptr, "

View File

@ -79,11 +79,11 @@ AudioSendStream::AudioSendStream(
channel_proxy_->RegisterExternalTransport(config.send_transport);
for (const auto& extension : config.rtp.extensions) {
if (extension.name == RtpExtension::kAbsSendTime) {
if (extension.uri == RtpExtension::kAbsSendTimeUri) {
channel_proxy_->SetSendAbsoluteSenderTimeStatus(true, extension.id);
} else if (extension.name == RtpExtension::kAudioLevel) {
} else if (extension.uri == RtpExtension::kAudioLevelUri) {
channel_proxy_->SetSendAudioLevelIndicationStatus(true, extension.id);
} else if (extension.name == RtpExtension::kTransportSequenceNumber) {
} else if (extension.uri == RtpExtension::kTransportSequenceNumberUri) {
channel_proxy_->EnableSendTransportSequenceNumber(extension.id);
} else {
RTC_NOTREACHED() << "Registering unsupported RTP extension.";

View File

@ -99,11 +99,11 @@ struct ConfigHelper {
stream_config_.rtp.ssrc = kSsrc;
stream_config_.rtp.c_name = kCName;
stream_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAudioLevel, kAudioLevelId));
RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId));
stream_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
stream_config_.rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumber, kTransportSequenceNumberId));
RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
}
AudioSendStream::Config& config() { return stream_config_; }
@ -171,13 +171,13 @@ TEST(AudioSendStreamTest, ConfigToString) {
AudioSendStream::Config config(nullptr);
config.rtp.ssrc = kSsrc;
config.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
config.rtp.c_name = kCName;
config.voe_channel_id = kChannelId;
config.cng_payload_type = 42;
config.red_payload_type = 17;
EXPECT_EQ(
"{rtp: {ssrc: 1234, extensions: [{name: "
"{rtp: {ssrc: 1234, extensions: [{uri: "
"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time, id: 3}], "
"c_name: foo_name}, voe_channel_id: 1, cng_payload_type: 42, "
"red_payload_type: 17}",

View File

@ -134,9 +134,9 @@ class BitrateEstimatorTest : public test::CallTest {
receive_config_.rtp.local_ssrc = kReceiverLocalVideoSsrc;
receive_config_.rtp.remb = true;
receive_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kTOffset, kTOFExtensionId));
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
receive_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId));
}
virtual void TearDown() {
@ -189,7 +189,7 @@ class BitrateEstimatorTest : public test::CallTest {
// an underlying channel id.
receive_config.voe_channel_id = 0;
receive_config.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId));
audio_receive_stream_ =
test_->receiver_call_->CreateAudioReceiveStream(receive_config);
} else {
@ -265,7 +265,7 @@ static const char* kSingleStreamLog =
TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) {
video_send_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kTOffset, kTOFExtensionId));
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@ -275,7 +275,7 @@ TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) {
TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) {
video_send_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId));
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@ -287,7 +287,7 @@ TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) {
TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) {
video_send_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kTOffset, kTOFExtensionId));
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@ -295,7 +295,7 @@ TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) {
EXPECT_TRUE(receiver_log_.Wait());
video_send_config_.rtp.extensions[0] =
RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId);
RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE.");
streams_.push_back(new Stream(this, false));
@ -305,7 +305,7 @@ TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) {
// This test is flaky. See webrtc:5790.
TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) {
video_send_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kTOffset, kTOFExtensionId));
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@ -313,14 +313,14 @@ TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) {
EXPECT_TRUE(receiver_log_.Wait());
video_send_config_.rtp.extensions[0] =
RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId);
RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE.");
streams_.push_back(new Stream(this, false));
EXPECT_TRUE(receiver_log_.Wait());
video_send_config_.rtp.extensions[0] =
RtpExtension(RtpExtension::kTOffset, kTOFExtensionId);
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId);
receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
receiver_log_.PushExpectedLogLine(
"WrappingBitrateEstimator: Switching to transmission time offset RBE.");

View File

@ -121,12 +121,12 @@ void RampUpTester::ModifyVideoConfigs(
bool remb;
bool transport_cc;
if (extension_type_ == RtpExtension::kAbsSendTime) {
if (extension_type_ == RtpExtension::kAbsSendTimeUri) {
remb = true;
transport_cc = false;
send_config->rtp.extensions.push_back(
RtpExtension(extension_type_.c_str(), kAbsSendTimeExtensionId));
} else if (extension_type_ == RtpExtension::kTransportSequenceNumber) {
} else if (extension_type_ == RtpExtension::kTransportSequenceNumberUri) {
remb = false;
transport_cc = true;
send_config->rtp.extensions.push_back(RtpExtension(
@ -182,18 +182,18 @@ void RampUpTester::ModifyAudioConfigs(
if (num_audio_streams_ == 0)
return;
EXPECT_NE(RtpExtension::kTOffset, extension_type_)
EXPECT_NE(RtpExtension::kTimestampOffsetUri, extension_type_)
<< "Audio BWE not supported with toffset.";
send_config->rtp.ssrc = audio_ssrcs_[0];
send_config->rtp.extensions.clear();
bool transport_cc = false;
if (extension_type_ == RtpExtension::kAbsSendTime) {
if (extension_type_ == RtpExtension::kAbsSendTimeUri) {
transport_cc = false;
send_config->rtp.extensions.push_back(
RtpExtension(extension_type_.c_str(), kAbsSendTimeExtensionId));
} else if (extension_type_ == RtpExtension::kTransportSequenceNumber) {
} else if (extension_type_ == RtpExtension::kTransportSequenceNumberUri) {
transport_cc = true;
send_config->rtp.extensions.push_back(RtpExtension(
extension_type_.c_str(), kTransportSequenceNumberExtensionId));
@ -439,28 +439,28 @@ class RampUpTest : public test::CallTest {
};
TEST_F(RampUpTest, SingleStream) {
RampUpTester test(1, 0, 0, RtpExtension::kTOffset, false, false);
RampUpTester test(1, 0, 0, RtpExtension::kTimestampOffsetUri, false, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, Simulcast) {
RampUpTester test(3, 0, 0, RtpExtension::kTOffset, false, false);
RampUpTester test(3, 0, 0, RtpExtension::kTimestampOffsetUri, false, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, SimulcastWithRtx) {
RampUpTester test(3, 0, 0, RtpExtension::kTOffset, true, false);
RampUpTester test(3, 0, 0, RtpExtension::kTimestampOffsetUri, true, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, SimulcastByRedWithRtx) {
RampUpTester test(3, 0, 0, RtpExtension::kTOffset, true, true);
RampUpTester test(3, 0, 0, RtpExtension::kTimestampOffsetUri, true, true);
RunBaseTest(&test);
}
TEST_F(RampUpTest, SingleStreamWithHighStartBitrate) {
RampUpTester test(1, 0, 0.9 * kSingleStreamTargetBps, RtpExtension::kTOffset,
false, false);
RampUpTester test(1, 0, 0.9 * kSingleStreamTargetBps,
RtpExtension::kTimestampOffsetUri, false, false);
RunBaseTest(&test);
}
@ -472,46 +472,47 @@ static const uint32_t kStartBitrateBps = 60000;
// Disabled: https://bugs.chromium.org/p/webrtc/issues/detail?id=5576
TEST_F(RampUpTest, DISABLED_UpDownUpOneStream) {
RampUpDownUpTester test(1, 0, kStartBitrateBps, RtpExtension::kAbsSendTime,
RampUpDownUpTester test(1, 0, kStartBitrateBps, RtpExtension::kAbsSendTimeUri,
false, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, UpDownUpThreeStreams) {
RampUpDownUpTester test(3, 0, kStartBitrateBps, RtpExtension::kAbsSendTime,
RampUpDownUpTester test(3, 0, kStartBitrateBps, RtpExtension::kAbsSendTimeUri,
false, false);
RunBaseTest(&test);
}
// Disabled: https://bugs.chromium.org/p/webrtc/issues/detail?id=5576
TEST_F(RampUpTest, DISABLED_UpDownUpOneStreamRtx) {
RampUpDownUpTester test(1, 0, kStartBitrateBps, RtpExtension::kAbsSendTime,
RampUpDownUpTester test(1, 0, kStartBitrateBps, RtpExtension::kAbsSendTimeUri,
true, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, UpDownUpThreeStreamsRtx) {
RampUpDownUpTester test(3, 0, kStartBitrateBps, RtpExtension::kAbsSendTime,
RampUpDownUpTester test(3, 0, kStartBitrateBps, RtpExtension::kAbsSendTimeUri,
true, false);
RunBaseTest(&test);
}
// Disabled: https://bugs.chromium.org/p/webrtc/issues/detail?id=5576
TEST_F(RampUpTest, DISABLED_UpDownUpOneStreamByRedRtx) {
RampUpDownUpTester test(1, 0, kStartBitrateBps, RtpExtension::kAbsSendTime,
RampUpDownUpTester test(1, 0, kStartBitrateBps, RtpExtension::kAbsSendTimeUri,
true, true);
RunBaseTest(&test);
}
TEST_F(RampUpTest, UpDownUpThreeStreamsByRedRtx) {
RampUpDownUpTester test(3, 0, kStartBitrateBps, RtpExtension::kAbsSendTime,
RampUpDownUpTester test(3, 0, kStartBitrateBps, RtpExtension::kAbsSendTimeUri,
true, true);
RunBaseTest(&test);
}
TEST_F(RampUpTest, SendSideVideoUpDownUpRtx) {
RampUpDownUpTester test(3, 0, kStartBitrateBps,
RtpExtension::kTransportSequenceNumber, true, false);
RtpExtension::kTransportSequenceNumberUri, true,
false);
RunBaseTest(&test);
}
@ -519,71 +520,72 @@ TEST_F(RampUpTest, SendSideVideoUpDownUpRtx) {
// allocation.
TEST_F(RampUpTest, DISABLED_SendSideAudioVideoUpDownUpRtx) {
RampUpDownUpTester test(3, 1, kStartBitrateBps,
RtpExtension::kTransportSequenceNumber, true, false);
RtpExtension::kTransportSequenceNumberUri, true,
false);
RunBaseTest(&test);
}
#endif
TEST_F(RampUpTest, AbsSendTimeSingleStream) {
RampUpTester test(1, 0, 0, RtpExtension::kAbsSendTime, false, false);
RampUpTester test(1, 0, 0, RtpExtension::kAbsSendTimeUri, false, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, AbsSendTimeSimulcast) {
RampUpTester test(3, 0, 0, RtpExtension::kAbsSendTime, false, false);
RampUpTester test(3, 0, 0, RtpExtension::kAbsSendTimeUri, false, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, AbsSendTimeSimulcastWithRtx) {
RampUpTester test(3, 0, 0, RtpExtension::kAbsSendTime, true, false);
RampUpTester test(3, 0, 0, RtpExtension::kAbsSendTimeUri, true, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, AbsSendTimeSimulcastByRedWithRtx) {
RampUpTester test(3, 0, 0, RtpExtension::kAbsSendTime, true, true);
RampUpTester test(3, 0, 0, RtpExtension::kAbsSendTimeUri, true, true);
RunBaseTest(&test);
}
TEST_F(RampUpTest, AbsSendTimeSingleStreamWithHighStartBitrate) {
RampUpTester test(1, 0, 0.9 * kSingleStreamTargetBps,
RtpExtension::kAbsSendTime, false, false);
RtpExtension::kAbsSendTimeUri, false, false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, TransportSequenceNumberSingleStream) {
RampUpTester test(1, 0, 0, RtpExtension::kTransportSequenceNumber, false,
RampUpTester test(1, 0, 0, RtpExtension::kTransportSequenceNumberUri, false,
false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, TransportSequenceNumberSimulcast) {
RampUpTester test(3, 0, 0, RtpExtension::kTransportSequenceNumber, false,
RampUpTester test(3, 0, 0, RtpExtension::kTransportSequenceNumberUri, false,
false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, TransportSequenceNumberSimulcastWithRtx) {
RampUpTester test(3, 0, 0, RtpExtension::kTransportSequenceNumber, true,
RampUpTester test(3, 0, 0, RtpExtension::kTransportSequenceNumberUri, true,
false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, AudioVideoTransportSequenceNumberSimulcastWithRtx) {
RampUpTester test(3, 1, 0, RtpExtension::kTransportSequenceNumber, true,
RampUpTester test(3, 1, 0, RtpExtension::kTransportSequenceNumberUri, true,
false);
RunBaseTest(&test);
}
TEST_F(RampUpTest, TransportSequenceNumberSimulcastByRedWithRtx) {
RampUpTester test(3, 0, 0, RtpExtension::kTransportSequenceNumber, true,
RampUpTester test(3, 0, 0, RtpExtension::kTransportSequenceNumberUri, true,
true);
RunBaseTest(&test);
}
TEST_F(RampUpTest, TransportSequenceNumberSingleStreamWithHighStartBitrate) {
RampUpTester test(1, 0, 0.9 * kSingleStreamTargetBps,
RtpExtension::kTransportSequenceNumber, false, false);
RtpExtension::kTransportSequenceNumberUri, false, false);
RunBaseTest(&test);
}
} // namespace webrtc

View File

@ -268,7 +268,7 @@ void RtcEventLogImpl::LogVideoReceiveStreamConfig(
for (const auto& e : config.rtp.extensions) {
rtclog::RtpHeaderExtension* extension =
receiver_config->add_header_extensions();
extension->set_name(e.name);
extension->set_name(e.uri);
extension->set_id(e.id);
}
@ -297,7 +297,7 @@ void RtcEventLogImpl::LogVideoSendStreamConfig(
for (const auto& e : config.rtp.extensions) {
rtclog::RtpHeaderExtension* extension =
sender_config->add_header_extensions();
extension->set_name(e.name);
extension->set_name(e.uri);
extension->set_id(e.id);
}

View File

@ -48,11 +48,10 @@ const RTPExtensionType kExtensionTypes[] = {
RTPExtensionType::kRtpExtensionAbsoluteSendTime,
RTPExtensionType::kRtpExtensionVideoRotation,
RTPExtensionType::kRtpExtensionTransportSequenceNumber};
const char* kExtensionNames[] = {RtpExtension::kTOffset,
RtpExtension::kAudioLevel,
RtpExtension::kAbsSendTime,
RtpExtension::kVideoRotation,
RtpExtension::kTransportSequenceNumber};
const char* kExtensionNames[] = {
RtpExtension::kTimestampOffsetUri, RtpExtension::kAudioLevelUri,
RtpExtension::kAbsSendTimeUri, RtpExtension::kVideoRotationUri,
RtpExtension::kTransportSequenceNumberUri};
const size_t kNumExtensions = 5;
void PrintActualEvents(const ParsedRtcEventLog& parsed_log) {

View File

@ -153,7 +153,7 @@ void RtcEventLogTestHelper::VerifyReceiveStreamConfig(
const std::string& name = receiver_config.header_extensions(i).name();
int id = receiver_config.header_extensions(i).id();
EXPECT_EQ(config.rtp.extensions[i].id, id);
EXPECT_EQ(config.rtp.extensions[i].name, name);
EXPECT_EQ(config.rtp.extensions[i].uri, name);
}
// Check decoders.
ASSERT_EQ(static_cast<int>(config.decoders.size()),
@ -186,8 +186,8 @@ void RtcEventLogTestHelper::VerifyReceiveStreamConfig(
// Check header extensions.
EXPECT_EQ(config.rtp.extensions.size(), parsed_config.rtp.extensions.size());
for (size_t i = 0; i < parsed_config.rtp.extensions.size(); i++) {
EXPECT_EQ(config.rtp.extensions[i].name,
parsed_config.rtp.extensions[i].name);
EXPECT_EQ(config.rtp.extensions[i].uri,
parsed_config.rtp.extensions[i].uri);
EXPECT_EQ(config.rtp.extensions[i].id, parsed_config.rtp.extensions[i].id);
}
// Check decoders.
@ -223,7 +223,7 @@ void RtcEventLogTestHelper::VerifySendStreamConfig(
const std::string& name = sender_config.header_extensions(i).name();
int id = sender_config.header_extensions(i).id();
EXPECT_EQ(config.rtp.extensions[i].id, id);
EXPECT_EQ(config.rtp.extensions[i].name, name);
EXPECT_EQ(config.rtp.extensions[i].uri, name);
}
// Check RTX settings.
ASSERT_EQ(static_cast<int>(config.rtp.rtx.ssrcs.size()),
@ -255,8 +255,8 @@ void RtcEventLogTestHelper::VerifySendStreamConfig(
// Check header extensions.
EXPECT_EQ(config.rtp.extensions.size(), parsed_config.rtp.extensions.size());
for (size_t i = 0; i < parsed_config.rtp.extensions.size(); i++) {
EXPECT_EQ(config.rtp.extensions[i].name,
parsed_config.rtp.extensions[i].name);
EXPECT_EQ(config.rtp.extensions[i].uri,
parsed_config.rtp.extensions[i].uri);
EXPECT_EQ(config.rtp.extensions[i].id, parsed_config.rtp.extensions[i].id);
}
// Check RTX settings.

View File

@ -24,32 +24,42 @@ std::string FecConfig::ToString() const {
std::string RtpExtension::ToString() const {
std::stringstream ss;
ss << "{name: " << name;
ss << "{uri: " << uri;
ss << ", id: " << id;
ss << '}';
return ss.str();
}
const char* RtpExtension::kTOffset = "urn:ietf:params:rtp-hdrext:toffset";
const char* RtpExtension::kAbsSendTime =
"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time";
const char* RtpExtension::kVideoRotation = "urn:3gpp:video-orientation";
const char* RtpExtension::kAudioLevel =
const char* RtpExtension::kAudioLevelUri =
"urn:ietf:params:rtp-hdrext:ssrc-audio-level";
const char* RtpExtension::kTransportSequenceNumber =
"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01";
const int RtpExtension::kAudioLevelDefaultId = 1;
bool RtpExtension::IsSupportedForAudio(const std::string& name) {
return name == webrtc::RtpExtension::kAbsSendTime ||
name == webrtc::RtpExtension::kAudioLevel ||
name == webrtc::RtpExtension::kTransportSequenceNumber;
const char* RtpExtension::kTimestampOffsetUri =
"urn:ietf:params:rtp-hdrext:toffset";
const int RtpExtension::kTimestampOffsetDefaultId = 2;
const char* RtpExtension::kAbsSendTimeUri =
"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time";
const int RtpExtension::kAbsSendTimeDefaultId = 3;
const char* RtpExtension::kVideoRotationUri = "urn:3gpp:video-orientation";
const int RtpExtension::kVideoRotationDefaultId = 4;
const char* RtpExtension::kTransportSequenceNumberUri =
"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01";
const int RtpExtension::kTransportSequenceNumberDefaultId = 5;
bool RtpExtension::IsSupportedForAudio(const std::string& uri) {
return uri == webrtc::RtpExtension::kAbsSendTimeUri ||
uri == webrtc::RtpExtension::kAudioLevelUri ||
uri == webrtc::RtpExtension::kTransportSequenceNumberUri;
}
bool RtpExtension::IsSupportedForVideo(const std::string& name) {
return name == webrtc::RtpExtension::kTOffset ||
name == webrtc::RtpExtension::kAbsSendTime ||
name == webrtc::RtpExtension::kVideoRotation ||
name == webrtc::RtpExtension::kTransportSequenceNumber;
bool RtpExtension::IsSupportedForVideo(const std::string& uri) {
return uri == webrtc::RtpExtension::kTimestampOffsetUri ||
uri == webrtc::RtpExtension::kAbsSendTimeUri ||
uri == webrtc::RtpExtension::kVideoRotationUri ||
uri == webrtc::RtpExtension::kTransportSequenceNumberUri;
}
VideoStream::VideoStream()

View File

@ -52,20 +52,42 @@ struct FecConfig {
// RTP header extension, see RFC 5285.
struct RtpExtension {
RtpExtension(const std::string& name, int id) : name(name), id(id) {}
RtpExtension() : id(0) {}
RtpExtension(const std::string& uri, int id) : uri(uri), id(id) {}
std::string ToString() const;
bool operator==(const RtpExtension& rhs) const {
return name == rhs.name && id == rhs.id;
return uri == rhs.uri && id == rhs.id;
}
static bool IsSupportedForAudio(const std::string& name);
static bool IsSupportedForVideo(const std::string& name);
static bool IsSupportedForAudio(const std::string& uri);
static bool IsSupportedForVideo(const std::string& uri);
static const char* kTOffset;
static const char* kAbsSendTime;
static const char* kVideoRotation;
static const char* kAudioLevel;
static const char* kTransportSequenceNumber;
std::string name;
// Header extension for audio levels, as defined in:
// http://tools.ietf.org/html/draft-ietf-avtext-client-to-mixer-audio-level-03
static const char* kAudioLevelUri;
static const int kAudioLevelDefaultId;
// Header extension for RTP timestamp offset, see RFC 5450 for details:
// http://tools.ietf.org/html/rfc5450
static const char* kTimestampOffsetUri;
static const int kTimestampOffsetDefaultId;
// Header extension for absolute send time, see url for details:
// http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
static const char* kAbsSendTimeUri;
static const int kAbsSendTimeDefaultId;
// Header extension for coordination of video orientation, see url for
// details:
// http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ts_126114v120700p.pdf
static const char* kVideoRotationUri;
static const int kVideoRotationDefaultId;
// Header extension for transport sequence number, see url for details:
// http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions
static const char* kTransportSequenceNumberUri;
static const int kTransportSequenceNumberDefaultId;
std::string uri;
int id;
};

View File

@ -28,6 +28,8 @@
#include "webrtc/media/base/streamparams.h"
#include "webrtc/p2p/base/sessiondescription.h"
using webrtc::RtpExtension;
namespace cricket {
class FakeMediaEngine;
@ -44,10 +46,10 @@ template <class Base> class RtpHelper : public Base {
fail_set_recv_codecs_(false),
send_ssrc_(0),
ready_to_send_(false) {}
const std::vector<RtpHeaderExtension>& recv_extensions() {
const std::vector<RtpExtension>& recv_extensions() {
return recv_extensions_;
}
const std::vector<RtpHeaderExtension>& send_extensions() {
const std::vector<RtpExtension>& send_extensions() {
return send_extensions_;
}
bool sending() const { return sending_; }
@ -231,13 +233,11 @@ template <class Base> class RtpHelper : public Base {
return true;
}
void set_playout(bool playout) { playout_ = playout; }
bool SetRecvRtpHeaderExtensions(
const std::vector<RtpHeaderExtension>& extensions) {
bool SetRecvRtpHeaderExtensions(const std::vector<RtpExtension>& extensions) {
recv_extensions_ = extensions;
return true;
}
bool SetSendRtpHeaderExtensions(
const std::vector<RtpHeaderExtension>& extensions) {
bool SetSendRtpHeaderExtensions(const std::vector<RtpExtension>& extensions) {
send_extensions_ = extensions;
return true;
}
@ -263,8 +263,8 @@ template <class Base> class RtpHelper : public Base {
private:
bool sending_;
bool playout_;
std::vector<RtpHeaderExtension> recv_extensions_;
std::vector<RtpHeaderExtension> send_extensions_;
std::vector<RtpExtension> recv_extensions_;
std::vector<RtpExtension> send_extensions_;
std::list<std::string> rtp_packets_;
std::list<std::string> rtcp_packets_;
std::vector<StreamParams> send_streams_;
@ -712,8 +712,7 @@ class FakeBaseEngine {
void set_fail_create_channel(bool fail) { fail_create_channel_ = fail; }
RtpCapabilities GetCapabilities() const { return capabilities_; }
void set_rtp_header_extensions(
const std::vector<RtpHeaderExtension>& extensions) {
void set_rtp_header_extensions(const std::vector<RtpExtension>& extensions) {
capabilities_.header_extensions = extensions;
}
@ -854,11 +853,11 @@ class FakeMediaEngine :
}
void SetAudioRtpHeaderExtensions(
const std::vector<RtpHeaderExtension>& extensions) {
const std::vector<RtpExtension>& extensions) {
voice_.set_rtp_header_extensions(extensions);
}
void SetVideoRtpHeaderExtensions(
const std::vector<RtpHeaderExtension>& extensions) {
const std::vector<RtpExtension>& extensions) {
video_.set_rtp_header_extensions(extensions);
}

View File

@ -26,6 +26,7 @@
#include "webrtc/base/sigslot.h"
#include "webrtc/base/socket.h"
#include "webrtc/base/window.h"
#include "webrtc/config.h"
#include "webrtc/media/base/codec.h"
#include "webrtc/media/base/mediaconstants.h"
#include "webrtc/media/base/streamparams.h"
@ -52,8 +53,6 @@ class VideoFrame;
struct RtpHeader;
struct VideoFormat;
const int kMinRtpHeaderExtensionId = 1;
const int kMaxRtpHeaderExtensionId = 255;
const int kScreencastDefaultFps = 5;
template <class T>
@ -321,44 +320,6 @@ struct VideoOptions {
}
};
struct RtpHeaderExtension {
RtpHeaderExtension() : id(0) {}
RtpHeaderExtension(const std::string& u, int i) : uri(u), id(i) {}
bool operator==(const RtpHeaderExtension& ext) const {
// id is a reserved word in objective-c. Therefore the id attribute has to
// be a fully qualified name in order to compile on IOS.
return this->id == ext.id &&
uri == ext.uri;
}
std::string ToString() const {
std::ostringstream ost;
ost << "{";
ost << "uri: " << uri;
ost << ", id: " << id;
ost << "}";
return ost.str();
}
std::string uri;
int id;
// TODO(juberti): SendRecv direction;
};
// Returns the named header extension if found among all extensions, NULL
// otherwise.
inline const RtpHeaderExtension* FindHeaderExtension(
const std::vector<RtpHeaderExtension>& extensions,
const std::string& name) {
for (std::vector<RtpHeaderExtension>::const_iterator it = extensions.begin();
it != extensions.end(); ++it) {
if (it->uri == name)
return &(*it);
}
return NULL;
}
class MediaChannel : public sigslot::has_slots<> {
public:
class NetworkInterface {
@ -842,7 +803,7 @@ struct RtpParameters {
}
std::vector<Codec> codecs;
std::vector<RtpHeaderExtension> extensions;
std::vector<webrtc::RtpExtension> extensions;
// TODO(pthatcher): Add streams.
RtcpParameters rtcp;
virtual ~RtpParameters() = default;

View File

@ -91,27 +91,6 @@ const char kGoogleSctpDataCodecName[] = "google-sctp-data";
const char kComfortNoiseCodecName[] = "CN";
const int kRtpAudioLevelHeaderExtensionDefaultId = 1;
const char kRtpAudioLevelHeaderExtension[] =
"urn:ietf:params:rtp-hdrext:ssrc-audio-level";
const int kRtpTimestampOffsetHeaderExtensionDefaultId = 2;
const char kRtpTimestampOffsetHeaderExtension[] =
"urn:ietf:params:rtp-hdrext:toffset";
const int kRtpAbsoluteSenderTimeHeaderExtensionDefaultId = 3;
const char kRtpAbsoluteSenderTimeHeaderExtension[] =
"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time";
const int kRtpVideoRotationHeaderExtensionDefaultId = 4;
const char kRtpVideoRotationHeaderExtension[] = "urn:3gpp:video-orientation";
const char kRtpVideoRotation6BitsHeaderExtensionForTesting[] =
"urn:3gpp:video-orientation:6";
const int kRtpTransportSequenceNumberHeaderExtensionDefaultId = 5;
const char kRtpTransportSequenceNumberHeaderExtension[] =
"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01";
const char kVp8CodecName[] = "VP8";
const char kVp9CodecName[] = "VP9";
const char kH264CodecName[] = "H264";

View File

@ -117,34 +117,6 @@ extern const char kGoogleSctpDataCodecName[];
extern const char kComfortNoiseCodecName[];
// Header extension for audio levels, as defined in
// http://tools.ietf.org/html/draft-ietf-avtext-client-to-mixer-audio-level-03
extern const int kRtpAudioLevelHeaderExtensionDefaultId;
extern const char kRtpAudioLevelHeaderExtension[];
// Header extension for RTP timestamp offset, see RFC 5450 for details:
// http://tools.ietf.org/html/rfc5450
extern const int kRtpTimestampOffsetHeaderExtensionDefaultId;
extern const char kRtpTimestampOffsetHeaderExtension[];
// Header extension for absolute send time, see url for details:
// http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
extern const int kRtpAbsoluteSenderTimeHeaderExtensionDefaultId;
extern const char kRtpAbsoluteSenderTimeHeaderExtension[];
// Header extension for coordination of video orientation, see url for details:
// http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/
// ts_126114v120700p.pdf
extern const int kRtpVideoRotationHeaderExtensionDefaultId;
extern const char kRtpVideoRotationHeaderExtension[];
// We don't support 6 bit CVO. Added here for testing purpose.
extern const char kRtpVideoRotation6BitsHeaderExtensionForTesting[];
// Header extension for transport sequence number, see url for details:
// http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions
extern const int kRtpTransportSequenceNumberHeaderExtensionDefaultId;
extern const char kRtpTransportSequenceNumberHeaderExtension[];
extern const char kVp8CodecName[];
extern const char kVp9CodecName[];
extern const char kH264CodecName[];

View File

@ -42,7 +42,7 @@ namespace cricket {
class VideoCapturer;
struct RtpCapabilities {
std::vector<RtpHeaderExtension> header_extensions;
std::vector<webrtc::RtpExtension> header_extensions;
};
// MediaEngineInterface is an abstraction of a media engine which can be

View File

@ -73,11 +73,10 @@ void DiscardRedundantExtensions(
rtc::ArrayView<const char*> extensions_decreasing_prio) {
RTC_DCHECK(extensions);
bool found = false;
for (const char* name : extensions_decreasing_prio) {
auto it = std::find_if(extensions->begin(), extensions->end(),
[name](const webrtc::RtpExtension& rhs) {
return rhs.name == name;
});
for (const char* uri : extensions_decreasing_prio) {
auto it = std::find_if(
extensions->begin(), extensions->end(),
[uri](const webrtc::RtpExtension& rhs) { return rhs.uri == uri; });
if (it != extensions->end()) {
if (found) {
extensions->erase(it);
@ -88,7 +87,8 @@ void DiscardRedundantExtensions(
}
} // namespace
bool ValidateRtpExtensions(const std::vector<RtpHeaderExtension>& extensions) {
bool ValidateRtpExtensions(
const std::vector<webrtc::RtpExtension>& extensions) {
bool id_used[14] = {false};
for (const auto& extension : extensions) {
if (extension.id <= 0 || extension.id >= 15) {
@ -105,7 +105,7 @@ bool ValidateRtpExtensions(const std::vector<RtpHeaderExtension>& extensions) {
}
std::vector<webrtc::RtpExtension> FilterRtpExtensions(
const std::vector<RtpHeaderExtension>& extensions,
const std::vector<webrtc::RtpExtension>& extensions,
bool (*supported)(const std::string&),
bool filter_redundant_extensions) {
RTC_DCHECK(ValidateRtpExtensions(extensions));
@ -115,7 +115,7 @@ std::vector<webrtc::RtpExtension> FilterRtpExtensions(
// Ignore any extensions that we don't recognize.
for (const auto& extension : extensions) {
if (supported(extension.uri)) {
result.push_back({extension.uri, extension.id});
result.push_back(extension);
} else {
LOG(LS_WARNING) << "Unsupported RTP extension: " << extension.ToString();
}
@ -124,24 +124,23 @@ std::vector<webrtc::RtpExtension> FilterRtpExtensions(
// Sort by name, ascending, so that we don't reset extensions if they were
// specified in a different order (also allows us to use std::unique below).
std::sort(result.begin(), result.end(),
[](const webrtc::RtpExtension& rhs, const webrtc::RtpExtension& lhs) {
return rhs.name < lhs.name;
});
[](const webrtc::RtpExtension& rhs,
const webrtc::RtpExtension& lhs) { return rhs.uri < lhs.uri; });
// Remove unnecessary extensions (used on send side).
if (filter_redundant_extensions) {
auto it = std::unique(result.begin(), result.end(),
auto it = std::unique(
result.begin(), result.end(),
[](const webrtc::RtpExtension& rhs, const webrtc::RtpExtension& lhs) {
return rhs.name == lhs.name;
return rhs.uri == lhs.uri;
});
result.erase(it, result.end());
// Keep just the highest priority extension of any in the following list.
static const char* kBweExtensionPriorities[] = {
kRtpTransportSequenceNumberHeaderExtension,
kRtpAbsoluteSenderTimeHeaderExtension,
kRtpTimestampOffsetHeaderExtension
};
webrtc::RtpExtension::kTransportSequenceNumberUri,
webrtc::RtpExtension::kAbsSendTimeUri,
webrtc::RtpExtension::kTimestampOffsetUri};
DiscardRedundantExtensions(&result, kBweExtensionPriorities);
}

View File

@ -37,14 +37,13 @@ class WebRtcMediaEngineFactory {
// Verify that extension IDs are within 1-byte extension range and are not
// overlapping.
bool ValidateRtpExtensions(const std::vector<RtpHeaderExtension>& extensions);
bool ValidateRtpExtensions(const std::vector<webrtc::RtpExtension>& extensions);
// Convert cricket::RtpHeaderExtension:s to webrtc::RtpExtension:s, discarding
// any extensions not validated by the 'supported' predicate. Duplicate
// Discard any extensions not validated by the 'supported' predicate. Duplicate
// extensions are removed if 'filter_redundant_extensions' is set, and also any
// mutually exclusive extensions (see implementation for details).
// mutually exclusive extensions (see implementation for details) are removed.
std::vector<webrtc::RtpExtension> FilterRtpExtensions(
const std::vector<RtpHeaderExtension>& extensions,
const std::vector<webrtc::RtpExtension>& extensions,
bool (*supported)(const std::string&),
bool filter_redundant_extensions);

View File

@ -12,27 +12,29 @@
#include "webrtc/media/engine/webrtcmediaengine.h"
using webrtc::RtpExtension;
namespace cricket {
namespace {
std::vector<RtpHeaderExtension> MakeUniqueExtensions() {
std::vector<RtpHeaderExtension> result;
std::vector<RtpExtension> MakeUniqueExtensions() {
std::vector<RtpExtension> result;
char name[] = "a";
for (int i = 0; i < 7; ++i) {
result.push_back(RtpHeaderExtension(name, 1 + i));
result.push_back(RtpExtension(name, 1 + i));
name[0]++;
result.push_back(RtpHeaderExtension(name, 14 - i));
result.push_back(RtpExtension(name, 14 - i));
name[0]++;
}
return result;
}
std::vector<RtpHeaderExtension> MakeRedundantExtensions() {
std::vector<RtpHeaderExtension> result;
std::vector<RtpExtension> MakeRedundantExtensions() {
std::vector<RtpExtension> result;
char name[] = "a";
for (int i = 0; i < 7; ++i) {
result.push_back(RtpHeaderExtension(name, 1 + i));
result.push_back(RtpHeaderExtension(name, 14 - i));
result.push_back(RtpExtension(name, 1 + i));
result.push_back(RtpExtension(name, 14 - i));
name[0]++;
}
return result;
@ -49,67 +51,67 @@ bool SupportedExtensions2(const std::string& name) {
bool IsSorted(const std::vector<webrtc::RtpExtension>& extensions) {
const std::string* last = nullptr;
for (const auto& extension : extensions) {
if (last && *last > extension.name) {
if (last && *last > extension.uri) {
return false;
}
last = &extension.name;
last = &extension.uri;
}
return true;
}
} // namespace
TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_EmptyList) {
std::vector<RtpHeaderExtension> extensions;
std::vector<RtpExtension> extensions;
EXPECT_TRUE(ValidateRtpExtensions(extensions));
}
TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_AllGood) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
EXPECT_TRUE(ValidateRtpExtensions(extensions));
}
TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OutOfRangeId_Low) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpHeaderExtension("foo", 0));
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpExtension("foo", 0));
EXPECT_FALSE(ValidateRtpExtensions(extensions));
}
TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OutOfRangeId_High) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpHeaderExtension("foo", 15));
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpExtension("foo", 15));
EXPECT_FALSE(ValidateRtpExtensions(extensions));
}
TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OverlappingIds_StartOfSet) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpHeaderExtension("foo", 1));
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpExtension("foo", 1));
EXPECT_FALSE(ValidateRtpExtensions(extensions));
}
TEST(WebRtcMediaEngineTest, ValidateRtpExtensions_OverlappingIds_EndOfSet) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpHeaderExtension("foo", 14));
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
extensions.push_back(RtpExtension("foo", 14));
EXPECT_FALSE(ValidateRtpExtensions(extensions));
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_EmptyList) {
std::vector<RtpHeaderExtension> extensions;
std::vector<RtpExtension> extensions;
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions1, true);
EXPECT_EQ(0, filtered.size());
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_IncludeOnlySupported) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions1, false);
EXPECT_EQ(2, filtered.size());
EXPECT_EQ("c", filtered[0].name);
EXPECT_EQ("i", filtered[1].name);
EXPECT_EQ("c", filtered[0].uri);
EXPECT_EQ("i", filtered[1].uri);
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_1) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions2, false);
EXPECT_EQ(12, filtered.size());
@ -117,7 +119,7 @@ TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_1) {
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_2) {
std::vector<RtpHeaderExtension> extensions = MakeUniqueExtensions();
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(12, filtered.size());
@ -125,64 +127,56 @@ TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_2) {
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_DontRemoveRedundant) {
std::vector<RtpHeaderExtension> extensions = MakeRedundantExtensions();
std::vector<RtpExtension> extensions = MakeRedundantExtensions();
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions2, false);
EXPECT_EQ(12, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
EXPECT_EQ(filtered[0].name, filtered[1].name);
EXPECT_EQ(filtered[0].uri, filtered[1].uri);
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundant) {
std::vector<RtpHeaderExtension> extensions = MakeRedundantExtensions();
std::vector<RtpExtension> extensions = MakeRedundantExtensions();
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(6, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
EXPECT_NE(filtered[0].name, filtered[1].name);
EXPECT_NE(filtered[0].uri, filtered[1].uri);
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_1) {
std::vector<RtpHeaderExtension> extensions;
std::vector<RtpExtension> extensions;
extensions.push_back(
RtpHeaderExtension(kRtpTransportSequenceNumberHeaderExtension, 3));
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9));
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6));
extensions.push_back(
RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 9));
extensions.push_back(
RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, 6));
extensions.push_back(
RtpHeaderExtension(kRtpTransportSequenceNumberHeaderExtension, 1));
extensions.push_back(
RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 14));
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(1, filtered.size());
EXPECT_EQ(kRtpTransportSequenceNumberHeaderExtension, filtered[0].name);
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_2) {
std::vector<RtpHeaderExtension> extensions;
extensions.push_back(
RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 1));
extensions.push_back(
RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, 14));
extensions.push_back(
RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 7));
std::vector<RtpExtension> extensions;
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 1));
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 14));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 7));
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(1, filtered.size());
EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtension, filtered[0].name);
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[0].uri);
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_3) {
std::vector<RtpHeaderExtension> extensions;
extensions.push_back(
RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 2));
extensions.push_back(
RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 14));
std::vector<RtpExtension> extensions;
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 2));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
std::vector<webrtc::RtpExtension> filtered =
FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(1, filtered.size());
EXPECT_EQ(kRtpTimestampOffsetHeaderExtension, filtered[0].name);
EXPECT_EQ(RtpExtension::kTimestampOffsetUri, filtered[0].uri);
}
} // namespace cricket

View File

@ -254,9 +254,9 @@ static bool ValidateStreamParams(const StreamParams& sp) {
inline bool ContainsHeaderExtension(
const std::vector<webrtc::RtpExtension>& extensions,
const std::string& name) {
const std::string& uri) {
for (const auto& kv : extensions) {
if (kv.name == name) {
if (kv.uri == uri) {
return true;
}
}
@ -551,18 +551,18 @@ const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const {
RtpCapabilities WebRtcVideoEngine2::GetCapabilities() const {
RtpCapabilities capabilities;
capabilities.header_extensions.push_back(
RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension,
kRtpTimestampOffsetHeaderExtensionDefaultId));
webrtc::RtpExtension(webrtc::RtpExtension::kTimestampOffsetUri,
webrtc::RtpExtension::kTimestampOffsetDefaultId));
capabilities.header_extensions.push_back(
RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension,
kRtpAbsoluteSenderTimeHeaderExtensionDefaultId));
webrtc::RtpExtension(webrtc::RtpExtension::kAbsSendTimeUri,
webrtc::RtpExtension::kAbsSendTimeDefaultId));
capabilities.header_extensions.push_back(
RtpHeaderExtension(kRtpVideoRotationHeaderExtension,
kRtpVideoRotationHeaderExtensionDefaultId));
webrtc::RtpExtension(webrtc::RtpExtension::kVideoRotationUri,
webrtc::RtpExtension::kVideoRotationDefaultId));
if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe") == "Enabled") {
capabilities.header_extensions.push_back(RtpHeaderExtension(
kRtpTransportSequenceNumberHeaderExtension,
kRtpTransportSequenceNumberHeaderExtensionDefaultId));
capabilities.header_extensions.push_back(webrtc::RtpExtension(
webrtc::RtpExtension::kTransportSequenceNumberUri,
webrtc::RtpExtension::kTransportSequenceNumberDefaultId));
}
return capabilities;
}
@ -1570,7 +1570,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
enable_cpu_overuse_detection ? this : nullptr;
sink_wants_.rotation_applied = !ContainsHeaderExtension(
rtp_extensions, kRtpVideoRotationHeaderExtension);
rtp_extensions, webrtc::RtpExtension::kVideoRotationUri);
if (codec_settings) {
SetCodec(*codec_settings);
@ -1854,7 +1854,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters(
// that might cause a lock order inversion.
if (params.rtp_header_extensions) {
sink_wants_.rotation_applied = !ContainsHeaderExtension(
*params.rtp_header_extensions, kRtpVideoRotationHeaderExtension);
*params.rtp_header_extensions, webrtc::RtpExtension::kVideoRotationUri);
if (source_) {
source_->AddOrUpdateSink(this, sink_wants_);
}

View File

@ -27,6 +27,8 @@
#include "webrtc/test/field_trial.h"
#include "webrtc/video_encoder.h"
using webrtc::RtpExtension;
namespace {
static const int kDefaultQpMax = 56;
static const int kDefaultFramerate = 30;
@ -182,9 +184,9 @@ TEST_F(WebRtcVideoEngine2Test, DefaultRtxCodecHasAssociatedPayloadTypeSet) {
TEST_F(WebRtcVideoEngine2Test, SupportsTimestampOffsetHeaderExtension) {
RtpCapabilities capabilities = engine_.GetCapabilities();
ASSERT_FALSE(capabilities.header_extensions.empty());
for (const RtpHeaderExtension& extension : capabilities.header_extensions) {
if (extension.uri == kRtpTimestampOffsetHeaderExtension) {
EXPECT_EQ(kRtpTimestampOffsetHeaderExtensionDefaultId, extension.id);
for (const RtpExtension& extension : capabilities.header_extensions) {
if (extension.uri == RtpExtension::kTimestampOffsetUri) {
EXPECT_EQ(RtpExtension::kTimestampOffsetDefaultId, extension.id);
return;
}
}
@ -194,9 +196,9 @@ TEST_F(WebRtcVideoEngine2Test, SupportsTimestampOffsetHeaderExtension) {
TEST_F(WebRtcVideoEngine2Test, SupportsAbsoluteSenderTimeHeaderExtension) {
RtpCapabilities capabilities = engine_.GetCapabilities();
ASSERT_FALSE(capabilities.header_extensions.empty());
for (const RtpHeaderExtension& extension : capabilities.header_extensions) {
if (extension.uri == kRtpAbsoluteSenderTimeHeaderExtension) {
EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtensionDefaultId, extension.id);
for (const RtpExtension& extension : capabilities.header_extensions) {
if (extension.uri == RtpExtension::kAbsSendTimeUri) {
EXPECT_EQ(RtpExtension::kAbsSendTimeDefaultId, extension.id);
return;
}
}
@ -213,10 +215,9 @@ TEST_F(WebRtcVideoEngine2WithSendSideBweTest,
SupportsTransportSequenceNumberHeaderExtension) {
RtpCapabilities capabilities = engine_.GetCapabilities();
ASSERT_FALSE(capabilities.header_extensions.empty());
for (const RtpHeaderExtension& extension : capabilities.header_extensions) {
if (extension.uri == kRtpTransportSequenceNumberHeaderExtension) {
EXPECT_EQ(kRtpTransportSequenceNumberHeaderExtensionDefaultId,
extension.id);
for (const RtpExtension& extension : capabilities.header_extensions) {
if (extension.uri == RtpExtension::kTransportSequenceNumberUri) {
EXPECT_EQ(RtpExtension::kTransportSequenceNumberDefaultId, extension.id);
return;
}
}
@ -226,9 +227,9 @@ TEST_F(WebRtcVideoEngine2WithSendSideBweTest,
TEST_F(WebRtcVideoEngine2Test, SupportsVideoRotationHeaderExtension) {
RtpCapabilities capabilities = engine_.GetCapabilities();
ASSERT_FALSE(capabilities.header_extensions.empty());
for (const RtpHeaderExtension& extension : capabilities.header_extensions) {
if (extension.uri == kRtpVideoRotationHeaderExtension) {
EXPECT_EQ(kRtpVideoRotationHeaderExtensionDefaultId, extension.id);
for (const RtpExtension& extension : capabilities.header_extensions) {
if (extension.uri == RtpExtension::kVideoRotationUri) {
EXPECT_EQ(RtpExtension::kVideoRotationDefaultId, extension.id);
return;
}
}
@ -252,7 +253,7 @@ TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) {
// Add CVO extension.
const int id = 1;
parameters.extensions.push_back(
cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
RtpExtension(RtpExtension::kVideoRotationUri, id));
EXPECT_TRUE(channel->SetSendParameters(parameters));
// Set capturer.
@ -282,7 +283,7 @@ TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeAddSendStream) {
// Add CVO extension.
const int id = 1;
parameters.extensions.push_back(
cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
RtpExtension(RtpExtension::kVideoRotationUri, id));
EXPECT_TRUE(channel->SetSendParameters(parameters));
EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
@ -316,7 +317,7 @@ TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) {
// Add CVO extension.
const int id = 1;
parameters.extensions.push_back(
cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
RtpExtension(RtpExtension::kVideoRotationUri, id));
// Also remove the first codec to trigger a codec change as well.
parameters.codecs.erase(parameters.codecs.begin());
EXPECT_TRUE(channel->SetSendParameters(parameters));
@ -967,13 +968,11 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
fake_call_->GetConfig().bitrate_config.max_bitrate_bps);
}
void TestSetSendRtpHeaderExtensions(const std::string& cricket_ext,
const std::string& webrtc_ext) {
void TestSetSendRtpHeaderExtensions(const std::string& ext_uri) {
// Enable extension.
const int id = 1;
cricket::VideoSendParameters parameters = send_parameters_;
parameters.extensions.push_back(
cricket::RtpHeaderExtension(cricket_ext, id));
parameters.extensions.push_back(RtpExtension(ext_uri, id));
EXPECT_TRUE(channel_->SetSendParameters(parameters));
FakeVideoSendStream* send_stream =
AddSendStream(cricket::StreamParams::CreateLegacy(123));
@ -981,7 +980,7 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
// Verify the send extension id.
ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size());
EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id);
EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name);
EXPECT_EQ(ext_uri, send_stream->GetConfig().rtp.extensions[0].uri);
// Verify call with same set of extensions returns true.
EXPECT_TRUE(channel_->SetSendParameters(parameters));
// Verify that SetSendRtpHeaderExtensions doesn't implicitly add them for
@ -1002,16 +1001,14 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
send_stream = fake_call_->GetVideoSendStreams()[0];
ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size());
EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id);
EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name);
EXPECT_EQ(ext_uri, send_stream->GetConfig().rtp.extensions[0].uri);
}
void TestSetRecvRtpHeaderExtensions(const std::string& cricket_ext,
const std::string& webrtc_ext) {
void TestSetRecvRtpHeaderExtensions(const std::string& ext_uri) {
// Enable extension.
const int id = 1;
cricket::VideoRecvParameters parameters = recv_parameters_;
parameters.extensions.push_back(
cricket::RtpHeaderExtension(cricket_ext, id));
parameters.extensions.push_back(RtpExtension(ext_uri, id));
EXPECT_TRUE(channel_->SetRecvParameters(parameters));
FakeVideoReceiveStream* recv_stream =
@ -1020,7 +1017,7 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
// Verify the recv extension id.
ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size());
EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id);
EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name);
EXPECT_EQ(ext_uri, recv_stream->GetConfig().rtp.extensions[0].uri);
// Verify call with same set of extensions returns true.
EXPECT_TRUE(channel_->SetRecvParameters(parameters));
@ -1042,7 +1039,7 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size());
EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id);
EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name);
EXPECT_EQ(ext_uri, recv_stream->GetConfig().rtp.extensions[0].uri);
}
void TestExtensionFilter(const std::vector<std::string>& extensions,
@ -1053,8 +1050,7 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
for (const std::string& extension : extensions) {
if (extension == expected_extension)
expected_id = id;
parameters.extensions.push_back(
cricket::RtpHeaderExtension(extension, id++));
parameters.extensions.push_back(RtpExtension(extension, id++));
}
EXPECT_TRUE(channel_->SetSendParameters(parameters));
FakeVideoSendStream* send_stream =
@ -1065,7 +1061,7 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size());
EXPECT_EQ(expected_id, send_stream->GetConfig().rtp.extensions[0].id);
EXPECT_EQ(expected_extension,
send_stream->GetConfig().rtp.extensions[0].name);
send_stream->GetConfig().rtp.extensions[0].uri);
}
void TestCpuAdaptation(bool enable_overuse, bool is_screenshare);
@ -1220,39 +1216,37 @@ TEST_F(WebRtcVideoChannel2Test, NoHeaderExtesionsByDefault) {
// Test support for RTP timestamp offset header extension.
TEST_F(WebRtcVideoChannel2Test, SendRtpTimestampOffsetHeaderExtensions) {
TestSetSendRtpHeaderExtensions(kRtpTimestampOffsetHeaderExtension,
webrtc::RtpExtension::kTOffset);
TestSetSendRtpHeaderExtensions(RtpExtension::kTimestampOffsetUri);
}
TEST_F(WebRtcVideoChannel2Test, RecvRtpTimestampOffsetHeaderExtensions) {
TestSetRecvRtpHeaderExtensions(kRtpTimestampOffsetHeaderExtension,
webrtc::RtpExtension::kTOffset);
TestSetRecvRtpHeaderExtensions(RtpExtension::kTimestampOffsetUri);
}
// Test support for absolute send time header extension.
TEST_F(WebRtcVideoChannel2Test, SendAbsoluteSendTimeHeaderExtensions) {
TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension,
webrtc::RtpExtension::kAbsSendTime);
TestSetSendRtpHeaderExtensions(RtpExtension::kAbsSendTimeUri);
}
TEST_F(WebRtcVideoChannel2Test, RecvAbsoluteSendTimeHeaderExtensions) {
TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension,
webrtc::RtpExtension::kAbsSendTime);
TestSetRecvRtpHeaderExtensions(RtpExtension::kAbsSendTimeUri);
}
TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksTransportSeqNum) {
// Enable three redundant extensions.
std::vector<std::string> extensions;
extensions.push_back(kRtpAbsoluteSenderTimeHeaderExtension);
extensions.push_back(kRtpTimestampOffsetHeaderExtension);
extensions.push_back(kRtpTransportSequenceNumberHeaderExtension);
TestExtensionFilter(extensions, kRtpTransportSequenceNumberHeaderExtension);
extensions.push_back(RtpExtension::kAbsSendTimeUri);
extensions.push_back(RtpExtension::kTimestampOffsetUri);
extensions.push_back(RtpExtension::kTransportSequenceNumberUri);
TestExtensionFilter(extensions, RtpExtension::kTransportSequenceNumberUri);
}
TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksAbsSendTime) {
// Enable two redundant extensions.
std::vector<std::string> extensions;
extensions.push_back(kRtpAbsoluteSenderTimeHeaderExtension);
extensions.push_back(kRtpTimestampOffsetHeaderExtension);
TestExtensionFilter(extensions, kRtpAbsoluteSenderTimeHeaderExtension);
extensions.push_back(RtpExtension::kAbsSendTimeUri);
extensions.push_back(RtpExtension::kTimestampOffsetUri);
TestExtensionFilter(extensions, RtpExtension::kAbsSendTimeUri);
}
class WebRtcVideoChannel2WithSendSideBweTest : public WebRtcVideoChannel2Test {
@ -1264,34 +1258,28 @@ class WebRtcVideoChannel2WithSendSideBweTest : public WebRtcVideoChannel2Test {
// Test support for transport sequence number header extension.
TEST_F(WebRtcVideoChannel2WithSendSideBweTest,
SendTransportSequenceNumberHeaderExtensions) {
TestSetSendRtpHeaderExtensions(
kRtpTransportSequenceNumberHeaderExtension,
webrtc::RtpExtension::kTransportSequenceNumber);
TestSetSendRtpHeaderExtensions(RtpExtension::kTransportSequenceNumberUri);
}
TEST_F(WebRtcVideoChannel2WithSendSideBweTest,
RecvTransportSequenceNumberHeaderExtensions) {
TestSetRecvRtpHeaderExtensions(
kRtpTransportSequenceNumberHeaderExtension,
webrtc::RtpExtension::kTransportSequenceNumber);
TestSetRecvRtpHeaderExtensions(RtpExtension::kTransportSequenceNumberUri);
}
// Test support for video rotation header extension.
TEST_F(WebRtcVideoChannel2Test, SendVideoRotationHeaderExtensions) {
TestSetSendRtpHeaderExtensions(kRtpVideoRotationHeaderExtension,
webrtc::RtpExtension::kVideoRotation);
TestSetSendRtpHeaderExtensions(RtpExtension::kVideoRotationUri);
}
TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) {
TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension,
webrtc::RtpExtension::kVideoRotation);
TestSetRecvRtpHeaderExtensions(RtpExtension::kVideoRotationUri);
}
TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) {
const int kAbsSendTimeId = 1;
const int kVideoRotationId = 2;
send_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId));
send_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
kRtpVideoRotationHeaderExtension, kVideoRotationId));
send_parameters_.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
send_parameters_.extensions.push_back(
RtpExtension(RtpExtension::kVideoRotationUri, kVideoRotationId));
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
FakeVideoSendStream* send_stream =
@ -1319,12 +1307,12 @@ TEST_F(WebRtcVideoChannel2Test, IdenticalRecvExtensionsDoesntRecreateStream) {
const int kTOffsetId = 1;
const int kAbsSendTimeId = 2;
const int kVideoRotationId = 3;
recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId));
recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
kRtpTimestampOffsetHeaderExtension, kTOffsetId));
recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
kRtpVideoRotationHeaderExtension, kVideoRotationId));
recv_parameters_.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
recv_parameters_.extensions.push_back(
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOffsetId));
recv_parameters_.extensions.push_back(
RtpExtension(RtpExtension::kVideoRotationUri, kVideoRotationId));
EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
FakeVideoReceiveStream* recv_stream =
@ -1354,9 +1342,9 @@ TEST_F(WebRtcVideoChannel2Test,
const int kTOffsetId = 2;
send_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId));
RtpExtension(kUnsupportedExtensionName, kUnsupportedId));
send_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId));
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOffsetId));
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
FakeVideoSendStream* send_stream =
AddSendStream(cricket::StreamParams::CreateLegacy(123));
@ -1364,8 +1352,8 @@ TEST_F(WebRtcVideoChannel2Test,
// Only timestamp offset extension is set to send stream,
// unsupported rtp extension is ignored.
ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size());
EXPECT_STREQ(webrtc::RtpExtension::kTOffset,
send_stream->GetConfig().rtp.extensions[0].name.c_str());
EXPECT_STREQ(RtpExtension::kTimestampOffsetUri,
send_stream->GetConfig().rtp.extensions[0].uri.c_str());
}
TEST_F(WebRtcVideoChannel2Test,
@ -1374,9 +1362,9 @@ TEST_F(WebRtcVideoChannel2Test,
const int kTOffsetId = 2;
recv_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId));
RtpExtension(kUnsupportedExtensionName, kUnsupportedId));
recv_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId));
RtpExtension(RtpExtension::kTimestampOffsetUri, kTOffsetId));
EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
FakeVideoReceiveStream* recv_stream =
AddRecvStream(cricket::StreamParams::CreateLegacy(123));
@ -1384,15 +1372,15 @@ TEST_F(WebRtcVideoChannel2Test,
// Only timestamp offset extension is set to receive stream,
// unsupported rtp extension is ignored.
ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size());
EXPECT_STREQ(webrtc::RtpExtension::kTOffset,
recv_stream->GetConfig().rtp.extensions[0].name.c_str());
EXPECT_STREQ(RtpExtension::kTimestampOffsetUri,
recv_stream->GetConfig().rtp.extensions[0].uri.c_str());
}
TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) {
const int kIncorrectIds[] = {-2, -1, 0, 15, 16};
for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) {
send_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
webrtc::RtpExtension::kTOffset, kIncorrectIds[i]));
send_parameters_.extensions.push_back(
RtpExtension(RtpExtension::kTimestampOffsetUri, kIncorrectIds[i]));
EXPECT_FALSE(channel_->SetSendParameters(send_parameters_))
<< "Bad extension id '" << kIncorrectIds[i] << "' accepted.";
}
@ -1401,8 +1389,8 @@ TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) {
TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) {
const int kIncorrectIds[] = {-2, -1, 0, 15, 16};
for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) {
recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
webrtc::RtpExtension::kTOffset, kIncorrectIds[i]));
recv_parameters_.extensions.push_back(
RtpExtension(RtpExtension::kTimestampOffsetUri, kIncorrectIds[i]));
EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_))
<< "Bad extension id '" << kIncorrectIds[i] << "' accepted.";
}
@ -1411,15 +1399,15 @@ TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) {
TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) {
const int id = 1;
send_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
RtpExtension(RtpExtension::kTimestampOffsetUri, id));
send_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id));
RtpExtension(RtpExtension::kAbsSendTimeUri, id));
EXPECT_FALSE(channel_->SetSendParameters(send_parameters_));
// Duplicate entries are also not supported.
send_parameters_.extensions.clear();
send_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
RtpExtension(RtpExtension::kTimestampOffsetUri, id));
send_parameters_.extensions.push_back(send_parameters_.extensions.back());
EXPECT_FALSE(channel_->SetSendParameters(send_parameters_));
}
@ -1427,15 +1415,15 @@ TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) {
TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) {
const int id = 1;
recv_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
RtpExtension(RtpExtension::kTimestampOffsetUri, id));
recv_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id));
RtpExtension(RtpExtension::kAbsSendTimeUri, id));
EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_));
// Duplicate entries are also not supported.
recv_parameters_.extensions.clear();
recv_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
RtpExtension(RtpExtension::kTimestampOffsetUri, id));
recv_parameters_.extensions.push_back(recv_parameters_.extensions.back());
EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_));
}

View File

@ -951,16 +951,17 @@ const std::vector<AudioCodec>& WebRtcVoiceEngine::codecs() {
RtpCapabilities WebRtcVoiceEngine::GetCapabilities() const {
RTC_DCHECK(signal_thread_checker_.CalledOnValidThread());
RtpCapabilities capabilities;
capabilities.header_extensions.push_back(RtpHeaderExtension(
kRtpAudioLevelHeaderExtension, kRtpAudioLevelHeaderExtensionDefaultId));
capabilities.header_extensions.push_back(
RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension,
kRtpAbsoluteSenderTimeHeaderExtensionDefaultId));
webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri,
webrtc::RtpExtension::kAudioLevelDefaultId));
capabilities.header_extensions.push_back(
webrtc::RtpExtension(webrtc::RtpExtension::kAbsSendTimeUri,
webrtc::RtpExtension::kAbsSendTimeDefaultId));
if (webrtc::field_trial::FindFullName("WebRTC-Audio-SendSideBwe") ==
"Enabled") {
capabilities.header_extensions.push_back(RtpHeaderExtension(
kRtpTransportSequenceNumberHeaderExtension,
kRtpTransportSequenceNumberHeaderExtensionDefaultId));
capabilities.header_extensions.push_back(webrtc::RtpExtension(
webrtc::RtpExtension::kTransportSequenceNumberUri,
webrtc::RtpExtension::kTransportSequenceNumberDefaultId));
}
return capabilities;
}

View File

@ -26,8 +26,6 @@
#include "webrtc/media/engine/webrtcvoiceengine.h"
#include "webrtc/modules/audio_device/include/mock_audio_device.h"
using cricket::kRtpAudioLevelHeaderExtension;
using cricket::kRtpAbsoluteSenderTimeHeaderExtension;
using testing::Return;
using testing::StrictMock;
@ -289,8 +287,8 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size());
// Ensure unknown extensions won't cause an error.
send_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
"urn:ietf:params:unknownextention", 1));
send_parameters_.extensions.push_back(
webrtc::RtpExtension("urn:ietf:params:unknownextention", 1));
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size());
@ -301,10 +299,10 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
// Ensure extension is set properly.
const int id = 1;
send_parameters_.extensions.push_back(cricket::RtpHeaderExtension(ext, id));
send_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id));
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
EXPECT_EQ(1u, GetSendStreamConfig(kSsrc1).rtp.extensions.size());
EXPECT_EQ(ext, GetSendStreamConfig(kSsrc1).rtp.extensions[0].name);
EXPECT_EQ(ext, GetSendStreamConfig(kSsrc1).rtp.extensions[0].uri);
EXPECT_EQ(id, GetSendStreamConfig(kSsrc1).rtp.extensions[0].id);
// Ensure extension is set properly on new stream.
@ -313,7 +311,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
EXPECT_NE(call_.GetAudioSendStream(kSsrc1),
call_.GetAudioSendStream(kSsrc2));
EXPECT_EQ(1u, GetSendStreamConfig(kSsrc2).rtp.extensions.size());
EXPECT_EQ(ext, GetSendStreamConfig(kSsrc2).rtp.extensions[0].name);
EXPECT_EQ(ext, GetSendStreamConfig(kSsrc2).rtp.extensions[0].uri);
EXPECT_EQ(id, GetSendStreamConfig(kSsrc2).rtp.extensions[0].id);
// Ensure all extensions go back off with an empty list.
@ -331,8 +329,8 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size());
// Ensure unknown extensions won't cause an error.
recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
"urn:ietf:params:unknownextention", 1));
recv_parameters_.extensions.push_back(
webrtc::RtpExtension("urn:ietf:params:unknownextention", 1));
EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size());
@ -343,10 +341,10 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
// Ensure extension is set properly.
const int id = 2;
recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension(ext, id));
recv_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id));
EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size());
EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].name);
EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].uri);
EXPECT_EQ(id, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].id);
// Ensure extension is set properly on new stream.
@ -355,7 +353,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
EXPECT_NE(call_.GetAudioReceiveStream(kSsrc1),
call_.GetAudioReceiveStream(kSsrc2));
EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size());
EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].name);
EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].uri);
EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id);
// Ensure all extensions go back off with an empty list.
@ -2253,10 +2251,9 @@ TEST_F(WebRtcVoiceEngineWithSendSideBweTest,
SupportsTransportSequenceNumberHeaderExtension) {
cricket::RtpCapabilities capabilities = engine_->GetCapabilities();
ASSERT_FALSE(capabilities.header_extensions.empty());
for (const cricket::RtpHeaderExtension& extension :
capabilities.header_extensions) {
if (extension.uri == cricket::kRtpTransportSequenceNumberHeaderExtension) {
EXPECT_EQ(cricket::kRtpTransportSequenceNumberHeaderExtensionDefaultId,
for (const webrtc::RtpExtension& extension : capabilities.header_extensions) {
if (extension.uri == webrtc::RtpExtension::kTransportSequenceNumberUri) {
EXPECT_EQ(webrtc::RtpExtension::kTransportSequenceNumberDefaultId,
extension.id);
return;
}
@ -2266,18 +2263,18 @@ TEST_F(WebRtcVoiceEngineWithSendSideBweTest,
// Test support for audio level header extension.
TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) {
TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension);
TestSetSendRtpHeaderExtensions(webrtc::RtpExtension::kAudioLevelUri);
}
TEST_F(WebRtcVoiceEngineTestFake, RecvAudioLevelHeaderExtensions) {
TestSetRecvRtpHeaderExtensions(kRtpAudioLevelHeaderExtension);
TestSetRecvRtpHeaderExtensions(webrtc::RtpExtension::kAudioLevelUri);
}
// Test support for absolute send time header extension.
TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) {
TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
TestSetSendRtpHeaderExtensions(webrtc::RtpExtension::kAbsSendTimeUri);
}
TEST_F(WebRtcVoiceEngineTestFake, RecvAbsoluteSendTimeHeaderExtensions) {
TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
TestSetRecvRtpHeaderExtensions(webrtc::RtpExtension::kAbsSendTimeUri);
}
// Test that we can create a channel and start sending on it.
@ -2315,7 +2312,7 @@ TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) {
// Changing RTP header extensions will recreate the AudioSendStream.
send_parameters_.extensions.push_back(
cricket::RtpHeaderExtension(kRtpAudioLevelHeaderExtension, 12));
webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12));
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
EXPECT_TRUE(GetSendStream(kSsrc1).IsSending());
@ -3383,7 +3380,7 @@ TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) {
for (const auto& e_ext : capabilities.header_extensions) {
for (const auto& s_ext : s_exts) {
if (e_ext.id == s_ext.id) {
EXPECT_EQ(e_ext.uri, s_ext.name);
EXPECT_EQ(e_ext.uri, s_ext.uri);
}
}
}

View File

@ -29,15 +29,15 @@
namespace webrtc {
RTPExtensionType StringToRtpExtensionType(const std::string& extension) {
if (extension == RtpExtension::kTOffset)
if (extension == RtpExtension::kTimestampOffsetUri)
return kRtpExtensionTransmissionTimeOffset;
if (extension == RtpExtension::kAudioLevel)
if (extension == RtpExtension::kAudioLevelUri)
return kRtpExtensionAudioLevel;
if (extension == RtpExtension::kAbsSendTime)
if (extension == RtpExtension::kAbsSendTimeUri)
return kRtpExtensionAbsoluteSendTime;
if (extension == RtpExtension::kVideoRotation)
if (extension == RtpExtension::kVideoRotationUri)
return kRtpExtensionVideoRotation;
if (extension == RtpExtension::kTransportSequenceNumber)
if (extension == RtpExtension::kTransportSequenceNumberUri)
return kRtpExtensionTransportSequenceNumber;
RTC_NOTREACHED() << "Looking up unsupported RTP extension.";
return kRtpExtensionNone;

View File

@ -43,6 +43,20 @@ struct SendPacketMessageData : public rtc::MessageData {
rtc::PacketOptions options;
};
#if defined(ENABLE_EXTERNAL_AUTH)
// Returns the named header extension if found among all extensions,
// nullptr otherwise.
const webrtc::RtpExtension* FindHeaderExtension(
const std::vector<webrtc::RtpExtension>& extensions,
const std::string& uri) {
for (const auto& extension : extensions) {
if (extension.uri == uri)
return &extension;
}
return nullptr;
}
#endif
} // namespace
enum {
@ -1390,13 +1404,13 @@ bool BaseChannel::UpdateRemoteStreams_w(
}
void BaseChannel::MaybeCacheRtpAbsSendTimeHeaderExtension_w(
const std::vector<RtpHeaderExtension>& extensions) {
const std::vector<webrtc::RtpExtension>& extensions) {
// Absolute Send Time extension id is used only with external auth,
// so do not bother searching for it and making asyncronious call to set
// something that is not used.
#if defined(ENABLE_EXTERNAL_AUTH)
const RtpHeaderExtension* send_time_extension =
FindHeaderExtension(extensions, kRtpAbsoluteSenderTimeHeaderExtension);
const webrtc::RtpExtension* send_time_extension =
FindHeaderExtension(extensions, webrtc::RtpExtension::kAbsSendTimeUri);
int rtp_abs_sendtime_extn_id =
send_time_extension ? send_time_extension->id : -1;
invoker_.AsyncInvoke<void>(

View File

@ -282,7 +282,7 @@ class BaseChannel
// Helper method to get RTP Absoulute SendTime extension header id if
// present in remote supported extensions list.
void MaybeCacheRtpAbsSendTimeHeaderExtension_w(
const std::vector<RtpHeaderExtension>& extensions);
const std::vector<webrtc::RtpExtension>& extensions);
bool CheckSrtpConfig_n(const std::vector<CryptoParams>& cryptos,
bool* dtls,

View File

@ -374,11 +374,10 @@ class UsedPayloadTypes : public UsedIds<Codec> {
// Helper class used for finding duplicate RTP Header extension ids among
// audio and video extensions.
class UsedRtpHeaderExtensionIds : public UsedIds<RtpHeaderExtension> {
class UsedRtpHeaderExtensionIds : public UsedIds<webrtc::RtpExtension> {
public:
UsedRtpHeaderExtensionIds()
: UsedIds<RtpHeaderExtension>(kLocalIdMin, kLocalIdMax) {
}
: UsedIds<webrtc::RtpExtension>(kLocalIdMin, kLocalIdMax) {}
private:
// Min and Max local identifier for one-byte header extensions, per RFC5285.
@ -890,10 +889,9 @@ static void FindCodecsToOffer(
}
}
static bool FindByUri(const RtpHeaderExtensions& extensions,
const RtpHeaderExtension& ext_to_match,
RtpHeaderExtension* found_extension) {
const webrtc::RtpExtension& ext_to_match,
webrtc::RtpExtension* found_extension) {
for (RtpHeaderExtensions::const_iterator it = extensions.begin();
it != extensions.end(); ++it) {
// We assume that all URIs are given in a canonical format.
@ -915,7 +913,7 @@ static void FindAndSetRtpHdrExtUsed(RtpHeaderExtensions* offered_extensions,
RtpHeaderExtensions* all_extensions,
UsedRtpHeaderExtensionIds* used_ids) {
for (auto& extension : *offered_extensions) {
RtpHeaderExtension existing;
webrtc::RtpExtension existing;
if (FindByUri(*all_extensions, extension, &existing)) {
extension.id = existing.id;
} else {
@ -934,7 +932,7 @@ static void FindRtpHdrExtsToOffer(
UsedRtpHeaderExtensionIds* used_ids) {
for (auto reference_extension : reference_extensions) {
if (!FindByUri(*offered_extensions, reference_extension, NULL)) {
RtpHeaderExtension existing;
webrtc::RtpExtension existing;
if (FindByUri(*all_extensions, reference_extension, &existing)) {
offered_extensions->push_back(existing);
} else {
@ -953,7 +951,7 @@ static void NegotiateRtpHeaderExtensions(
RtpHeaderExtensions::const_iterator ours;
for (ours = local_extensions.begin();
ours != local_extensions.end(); ++ours) {
RtpHeaderExtension theirs;
webrtc::RtpExtension theirs;
if (FindByUri(offered_extensions, *ours, &theirs)) {
// We respond with their RTP header extension id.
negotiated_extenstions->push_back(theirs);

View File

@ -35,7 +35,7 @@ typedef std::vector<AudioCodec> AudioCodecs;
typedef std::vector<VideoCodec> VideoCodecs;
typedef std::vector<DataCodec> DataCodecs;
typedef std::vector<CryptoParams> CryptoParamsVec;
typedef std::vector<RtpHeaderExtension> RtpHeaderExtensions;
typedef std::vector<webrtc::RtpExtension> RtpHeaderExtensions;
enum MediaType {
MEDIA_TYPE_AUDIO,
@ -205,7 +205,7 @@ class MediaContentDescription : public ContentDescription {
rtp_header_extensions_ = extensions;
rtp_header_extensions_set_ = true;
}
void AddRtpHeaderExtension(const RtpHeaderExtension& ext) {
void AddRtpHeaderExtension(const webrtc::RtpExtension& ext) {
rtp_header_extensions_.push_back(ext);
rtp_header_extensions_set_ = true;
}
@ -284,7 +284,7 @@ class MediaContentDescription : public ContentDescription {
std::string protocol_;
std::vector<CryptoParams> cryptos_;
CryptoType crypto_required_ = CT_NONE;
std::vector<RtpHeaderExtension> rtp_header_extensions_;
std::vector<webrtc::RtpExtension> rtp_header_extensions_;
bool rtp_header_extensions_set_ = false;
bool multistream_ = false;
StreamParamsVec streams_;

View File

@ -67,12 +67,12 @@ using cricket::NS_JINGLE_RTP;
using cricket::MEDIA_TYPE_AUDIO;
using cricket::MEDIA_TYPE_VIDEO;
using cricket::MEDIA_TYPE_DATA;
using cricket::RtpHeaderExtension;
using cricket::SEC_DISABLED;
using cricket::SEC_ENABLED;
using cricket::SEC_REQUIRED;
using rtc::CS_AES_CM_128_HMAC_SHA1_32;
using rtc::CS_AES_CM_128_HMAC_SHA1_80;
using webrtc::RtpExtension;
static const AudioCodec kAudioCodecs1[] = {
AudioCodec(103, "ISAC", 16000, -1, 1),
@ -113,44 +113,44 @@ static const DataCodec kDataCodecs2[] = {DataCodec(126, "binary-data"),
static const DataCodec kDataCodecsAnswer[] = {DataCodec(98, "binary-data"),
DataCodec(99, "utf8-text")};
static const RtpHeaderExtension kAudioRtpExtension1[] = {
RtpHeaderExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8),
RtpHeaderExtension("http://google.com/testing/audio_something", 10),
static const RtpExtension kAudioRtpExtension1[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8),
RtpExtension("http://google.com/testing/audio_something", 10),
};
static const RtpHeaderExtension kAudioRtpExtension2[] = {
RtpHeaderExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 2),
RtpHeaderExtension("http://google.com/testing/audio_something_else", 8),
RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 7),
static const RtpExtension kAudioRtpExtension2[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 2),
RtpExtension("http://google.com/testing/audio_something_else", 8),
RtpExtension("http://google.com/testing/both_audio_and_video", 7),
};
static const RtpHeaderExtension kAudioRtpExtension3[] = {
RtpHeaderExtension("http://google.com/testing/audio_something", 2),
RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 3),
static const RtpExtension kAudioRtpExtension3[] = {
RtpExtension("http://google.com/testing/audio_something", 2),
RtpExtension("http://google.com/testing/both_audio_and_video", 3),
};
static const RtpHeaderExtension kAudioRtpExtensionAnswer[] = {
RtpHeaderExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8),
static const RtpExtension kAudioRtpExtensionAnswer[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8),
};
static const RtpHeaderExtension kVideoRtpExtension1[] = {
RtpHeaderExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
RtpHeaderExtension("http://google.com/testing/video_something", 13),
static const RtpExtension kVideoRtpExtension1[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
RtpExtension("http://google.com/testing/video_something", 13),
};
static const RtpHeaderExtension kVideoRtpExtension2[] = {
RtpHeaderExtension("urn:ietf:params:rtp-hdrext:toffset", 2),
RtpHeaderExtension("http://google.com/testing/video_something_else", 14),
RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 7),
static const RtpExtension kVideoRtpExtension2[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 2),
RtpExtension("http://google.com/testing/video_something_else", 14),
RtpExtension("http://google.com/testing/both_audio_and_video", 7),
};
static const RtpHeaderExtension kVideoRtpExtension3[] = {
RtpHeaderExtension("http://google.com/testing/video_something", 4),
RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 5),
static const RtpExtension kVideoRtpExtension3[] = {
RtpExtension("http://google.com/testing/video_something", 4),
RtpExtension("http://google.com/testing/both_audio_and_video", 5),
};
static const RtpHeaderExtension kVideoRtpExtensionAnswer[] = {
RtpHeaderExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
static const RtpExtension kVideoRtpExtensionAnswer[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
};
static const uint32_t kSimulcastParamsSsrc[] = {10, 11, 20, 21, 30, 31};
@ -1904,18 +1904,16 @@ TEST_F(MediaSessionDescriptionFactoryTest,
// |f2_| offer.
// Since the default local extension id |f2_| uses has already been used by
// |f1_| for another extensions, it is changed to 13.
const RtpHeaderExtension kUpdatedAudioRtpExtensions[] = {
kAudioRtpExtensionAnswer[0],
RtpHeaderExtension(kAudioRtpExtension2[1].uri, 13),
kAudioRtpExtension2[2],
const RtpExtension kUpdatedAudioRtpExtensions[] = {
kAudioRtpExtensionAnswer[0], RtpExtension(kAudioRtpExtension2[1].uri, 13),
kAudioRtpExtension2[2],
};
// Since the default local extension id |f2_| uses has already been used by
// |f1_| for another extensions, is is changed to 12.
const RtpHeaderExtension kUpdatedVideoRtpExtensions[] = {
kVideoRtpExtensionAnswer[0],
RtpHeaderExtension(kVideoRtpExtension2[1].uri, 12),
kVideoRtpExtension2[2],
const RtpExtension kUpdatedVideoRtpExtensions[] = {
kVideoRtpExtensionAnswer[0], RtpExtension(kVideoRtpExtension2[1].uri, 12),
kVideoRtpExtension2[2],
};
const AudioContentDescription* updated_acd =
@ -1932,8 +1930,7 @@ TEST_F(MediaSessionDescriptionFactoryTest,
// Verify that if the same RTP extension URI is used for audio and video, the
// same ID is used. Also verify that the ID isn't changed when creating an
// updated offer (this was previously a bug).
TEST_F(MediaSessionDescriptionFactoryTest,
RtpHeaderExtensionIdReused) {
TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReused) {
MediaSessionOptions opts;
opts.recv_audio = true;
opts.recv_video = true;
@ -1945,9 +1942,8 @@ TEST_F(MediaSessionDescriptionFactoryTest,
// Since the audio extensions used ID 3 for "both_audio_and_video", so should
// the video extensions.
const RtpHeaderExtension kExpectedVideoRtpExtension[] = {
kVideoRtpExtension3[0],
kAudioRtpExtension3[1],
const RtpExtension kExpectedVideoRtpExtension[] = {
kVideoRtpExtension3[0], kAudioRtpExtension3[1],
};
EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3),

View File

@ -184,12 +184,12 @@ void CallTest::CreateSendConfig(size_t num_video_streams,
video_send_config_.encoder_settings.payload_type =
kFakeVideoSendPayloadType;
video_send_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId));
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeExtensionId));
video_encoder_config_.streams = test::CreateVideoStreams(num_video_streams);
for (size_t i = 0; i < num_video_streams; ++i)
video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[i]);
video_send_config_.rtp.extensions.push_back(RtpExtension(
RtpExtension::kVideoRotation, kVideoRotationRtpExtensionId));
RtpExtension::kVideoRotationUri, kVideoRotationRtpExtensionId));
}
if (num_audio_streams > 0) {

View File

@ -1432,8 +1432,8 @@ TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) {
VideoEncoderConfig* encoder_config,
test::FrameGeneratorCapturer** frame_generator) override {
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
send_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kExtensionId));
// Force some padding to be sent.
const int kPaddingBitrateBps = 50000;
@ -1459,8 +1459,8 @@ TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) {
VideoReceiveStream::Config* receive_config) override {
receive_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
receive_config->rtp.extensions.clear();
receive_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
receive_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kExtensionId));
}
test::DirectTransport* CreateSendTransport(Call* sender_call) override {
@ -1539,7 +1539,7 @@ class TransportFeedbackTester : public test::EndToEndTest {
VideoEncoderConfig* encoder_config) override {
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
RtpExtension(RtpExtension::kTransportSequenceNumberUri, kExtensionId));
(*receive_configs)[0].rtp.extensions = send_config->rtp.extensions;
(*receive_configs)[0].rtp.transport_cc = feedback_enabled_;
}
@ -1549,7 +1549,7 @@ class TransportFeedbackTester : public test::EndToEndTest {
std::vector<AudioReceiveStream::Config>* receive_configs) override {
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
RtpExtension(RtpExtension::kTransportSequenceNumberUri, kExtensionId));
(*receive_configs)[0].rtp.extensions.clear();
(*receive_configs)[0].rtp.extensions = send_config->rtp.extensions;
(*receive_configs)[0].rtp.transport_cc = feedback_enabled_;
@ -1787,7 +1787,7 @@ TEST_F(EndToEndTest, RembWithSendSideBwe) {
ASSERT_EQ(1u, send_config->rtp.ssrcs.size());
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber,
RtpExtension(RtpExtension::kTransportSequenceNumberUri,
test::kTransportSequenceNumberExtensionId));
sender_ssrc_ = send_config->rtp.ssrcs[0];
@ -3452,8 +3452,8 @@ TEST_F(EndToEndTest, TransportSeqNumOnAudioAndVideo) {
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
send_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kExtensionId));
(*receive_configs)[0].rtp.extensions = send_config->rtp.extensions;
}
@ -3461,8 +3461,8 @@ TEST_F(EndToEndTest, TransportSeqNumOnAudioAndVideo) {
AudioSendStream::Config* send_config,
std::vector<AudioReceiveStream::Config>* receive_configs) override {
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
send_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kExtensionId));
(*receive_configs)[0].rtp.extensions.clear();
(*receive_configs)[0].rtp.extensions = send_config->rtp.extensions;
}

View File

@ -222,12 +222,12 @@ void RtpReplay() {
receive_config.rtp.fec.red_payload_type = flags::RedPayloadType();
receive_config.rtp.nack.rtp_history_ms = 1000;
if (flags::TransmissionOffsetId() != -1) {
receive_config.rtp.extensions.push_back(
RtpExtension(RtpExtension::kTOffset, flags::TransmissionOffsetId()));
receive_config.rtp.extensions.push_back(RtpExtension(
RtpExtension::kTimestampOffsetUri, flags::TransmissionOffsetId()));
}
if (flags::AbsSendTimeId() != -1) {
receive_config.rtp.extensions.push_back(
RtpExtension(RtpExtension::kAbsSendTime, flags::AbsSendTimeId()));
RtpExtension(RtpExtension::kAbsSendTimeUri, flags::AbsSendTimeId()));
}
receive_config.renderer = &file_passthrough;

View File

@ -127,7 +127,7 @@ RtpStreamReceiver::RtpStreamReceiver(
}
for (size_t i = 0; i < config.rtp.extensions.size(); ++i) {
EnableReceiveRtpHeaderExtension(config.rtp.extensions[i].name,
EnableReceiveRtpHeaderExtension(config.rtp.extensions[i].uri,
config.rtp.extensions[i].id);
}

View File

@ -884,11 +884,11 @@ void VideoQualityTest::SetupCommon(Transport* send_transport,
video_send_config_.rtp.extensions.clear();
if (params_.common.send_side_bwe) {
video_send_config_.rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber,
RtpExtension(RtpExtension::kTransportSequenceNumberUri,
test::kTransportSequenceNumberExtensionId));
} else {
video_send_config_.rtp.extensions.push_back(RtpExtension(
RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId));
RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId));
}
video_encoder_config_.min_transmit_bitrate_bps =

View File

@ -35,7 +35,7 @@ static bool UseSendSideBwe(const VideoReceiveStream::Config& config) {
if (!config.rtp.transport_cc)
return false;
for (const auto& extension : config.rtp.extensions) {
if (extension.name == RtpExtension::kTransportSequenceNumber)
if (extension.uri == RtpExtension::kTransportSequenceNumberUri)
return true;
}
return false;

View File

@ -425,7 +425,7 @@ VideoSendStream::VideoSendStream(
video_sender_->RegisterProtectionCallback(this);
for (size_t i = 0; i < config_.rtp.extensions.size(); ++i) {
const std::string& extension = config_.rtp.extensions[i].name;
const std::string& extension = config_.rtp.extensions[i].uri;
int id = config_.rtp.extensions[i].id;
// One-byte-extension local identifiers are in the range 1-14 inclusive.
RTC_DCHECK_GE(id, 1);

View File

@ -147,7 +147,7 @@ TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) {
VideoEncoderConfig* encoder_config) override {
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId));
RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId));
}
void PerformTest() override {
@ -189,8 +189,8 @@ TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) {
VideoEncoderConfig* encoder_config) override {
send_config->encoder_settings.encoder = &encoder_;
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId));
send_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kTimestampOffsetUri, test::kTOffsetExtensionId));
}
void PerformTest() override {
@ -233,8 +233,8 @@ TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) {
VideoEncoderConfig* encoder_config) override {
send_config->encoder_settings.encoder = &encoder_;
send_config->rtp.extensions.clear();
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
send_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kExtensionId));
}
void PerformTest() override {
@ -422,9 +422,9 @@ class FecObserver : public test::EndToEndTest {
VideoSendStreamTest::kUlpfecPayloadType;
if (header_extensions_enabled_) {
send_config->rtp.extensions.push_back(RtpExtension(
RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId));
RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId));
send_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber,
RtpExtension(RtpExtension::kTransportSequenceNumberUri,
test::kTransportSequenceNumberExtensionId));
}
(*receive_configs)[0].rtp.fec.red_payload_type =