Update the header extensions capabilities with mid, rid and rrid
Video and audio senders are missing mid, rid and rrid extensions in their GetCapabilities call. Bug: chromium:1007894 Change-Id: Ie9edba28ae32fda5e501913cac694f43bfb185ac Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156560 Commit-Queue: Florent Castelli <orphis@webrtc.org> Reviewed-by: Steve Anton <steveanton@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29493}
This commit is contained in:
parent
82ed2e852f
commit
8038541a4f
@ -507,6 +507,12 @@ RtpCapabilities WebRtcVideoEngine::GetCapabilities() const {
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kFrameMarkingUri, id++));
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kColorSpaceUri, id++));
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kMidUri, id++));
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kRidUri, id++));
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kRepairedRidUri, id++));
|
||||
if (webrtc::field_trial::IsEnabled("WebRTC-GenericDescriptorAdvertised")) {
|
||||
capabilities.header_extensions.push_back(webrtc::RtpExtension(
|
||||
webrtc::RtpExtension::kGenericFrameDescriptorUri00, id++));
|
||||
|
||||
@ -531,6 +531,12 @@ RtpCapabilities WebRtcVoiceEngine::GetCapabilities() const {
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kAbsSendTimeUri, id++));
|
||||
capabilities.header_extensions.push_back(webrtc::RtpExtension(
|
||||
webrtc::RtpExtension::kTransportSequenceNumberUri, id++));
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kMidUri, id++));
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kRidUri, id++));
|
||||
capabilities.header_extensions.push_back(
|
||||
webrtc::RtpExtension(webrtc::RtpExtension::kRepairedRidUri, id++));
|
||||
return capabilities;
|
||||
}
|
||||
|
||||
|
||||
@ -1357,30 +1357,25 @@ void MediaSessionDescriptionFactory::set_audio_codecs(
|
||||
ComputeAudioCodecsIntersectionAndUnion();
|
||||
}
|
||||
|
||||
static void AddUnifiedPlanExtensions(RtpHeaderExtensions* extensions) {
|
||||
static void RemoveUnifiedPlanExtensions(RtpHeaderExtensions* extensions) {
|
||||
RTC_DCHECK(extensions);
|
||||
|
||||
rtc::UniqueNumberGenerator<int> unique_id_generator;
|
||||
unique_id_generator.AddKnownId(0); // The first valid RTP extension ID is 1.
|
||||
for (const webrtc::RtpExtension& extension : *extensions) {
|
||||
const bool collision_free = unique_id_generator.AddKnownId(extension.id);
|
||||
RTC_DCHECK(collision_free);
|
||||
}
|
||||
|
||||
// Unified Plan also offers the MID and RID header extensions.
|
||||
extensions->push_back(webrtc::RtpExtension(webrtc::RtpExtension::kMidUri,
|
||||
unique_id_generator()));
|
||||
extensions->push_back(webrtc::RtpExtension(webrtc::RtpExtension::kRidUri,
|
||||
unique_id_generator()));
|
||||
extensions->push_back(webrtc::RtpExtension(
|
||||
webrtc::RtpExtension::kRepairedRidUri, unique_id_generator()));
|
||||
extensions->erase(
|
||||
std::remove_if(extensions->begin(), extensions->end(),
|
||||
[](auto extension) {
|
||||
return extension.uri == webrtc::RtpExtension::kMidUri ||
|
||||
extension.uri == webrtc::RtpExtension::kRidUri ||
|
||||
extension.uri ==
|
||||
webrtc::RtpExtension::kRepairedRidUri;
|
||||
}),
|
||||
extensions->end());
|
||||
}
|
||||
|
||||
RtpHeaderExtensions
|
||||
MediaSessionDescriptionFactory::audio_rtp_header_extensions() const {
|
||||
RtpHeaderExtensions extensions = audio_rtp_extensions_;
|
||||
if (is_unified_plan_) {
|
||||
AddUnifiedPlanExtensions(&extensions);
|
||||
if (!is_unified_plan_) {
|
||||
RemoveUnifiedPlanExtensions(&extensions);
|
||||
}
|
||||
|
||||
return extensions;
|
||||
@ -1389,8 +1384,8 @@ MediaSessionDescriptionFactory::audio_rtp_header_extensions() const {
|
||||
RtpHeaderExtensions
|
||||
MediaSessionDescriptionFactory::video_rtp_header_extensions() const {
|
||||
RtpHeaderExtensions extensions = video_rtp_extensions_;
|
||||
if (is_unified_plan_) {
|
||||
AddUnifiedPlanExtensions(&extensions);
|
||||
if (!is_unified_plan_) {
|
||||
RemoveUnifiedPlanExtensions(&extensions);
|
||||
}
|
||||
|
||||
return extensions;
|
||||
|
||||
@ -4441,50 +4441,6 @@ TEST_F(MediaSessionDescriptionFactoryTest, TestSetAudioCodecs) {
|
||||
EXPECT_EQ(no_codecs, sf.audio_sendrecv_codecs());
|
||||
}
|
||||
|
||||
// Checks that the RID extensions are added to the video RTP header extensions.
|
||||
// Note: This test somewhat shows that |set_video_rtp_header_extensions()| is
|
||||
// not very well defined, as calling set() and immediately get() will yield
|
||||
// an object that is not semantically equivalent to the set object.
|
||||
TEST_F(MediaSessionDescriptionFactoryTest, VideoHasRidExtensionsInUnifiedPlan) {
|
||||
TransportDescriptionFactory tdf;
|
||||
UniqueRandomIdGenerator ssrc_generator;
|
||||
MediaSessionDescriptionFactory sf(&tdf, &ssrc_generator);
|
||||
sf.set_is_unified_plan(true);
|
||||
cricket::RtpHeaderExtensions extensions;
|
||||
sf.set_video_rtp_header_extensions(extensions);
|
||||
cricket::RtpHeaderExtensions result = sf.video_rtp_header_extensions();
|
||||
// Check to see that RID extensions were added to the extension list
|
||||
EXPECT_GE(result.size(), 2u);
|
||||
EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri,
|
||||
RtpExtension::kMidUri)));
|
||||
EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri,
|
||||
RtpExtension::kRidUri)));
|
||||
EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri,
|
||||
RtpExtension::kRepairedRidUri)));
|
||||
}
|
||||
|
||||
// Checks that the RID extensions are added to the audio RTP header extensions.
|
||||
// Note: This test somewhat shows that |set_audio_rtp_header_extensions()| is
|
||||
// not very well defined, as calling set() and immediately get() will yield
|
||||
// an object that is not semantically equivalent to the set object.
|
||||
TEST_F(MediaSessionDescriptionFactoryTest, AudioHasRidExtensionsInUnifiedPlan) {
|
||||
TransportDescriptionFactory tdf;
|
||||
UniqueRandomIdGenerator ssrc_generator;
|
||||
MediaSessionDescriptionFactory sf(&tdf, &ssrc_generator);
|
||||
sf.set_is_unified_plan(true);
|
||||
cricket::RtpHeaderExtensions extensions;
|
||||
sf.set_audio_rtp_header_extensions(extensions);
|
||||
cricket::RtpHeaderExtensions result = sf.audio_rtp_header_extensions();
|
||||
// Check to see that RID extensions were added to the extension list
|
||||
EXPECT_GE(result.size(), 2u);
|
||||
EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri,
|
||||
RtpExtension::kMidUri)));
|
||||
EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri,
|
||||
RtpExtension::kRidUri)));
|
||||
EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri,
|
||||
RtpExtension::kRepairedRidUri)));
|
||||
}
|
||||
|
||||
namespace {
|
||||
// Compare the two vectors of codecs ignoring the payload type.
|
||||
template <class Codec>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user