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++));
|
webrtc::RtpExtension(webrtc::RtpExtension::kFrameMarkingUri, id++));
|
||||||
capabilities.header_extensions.push_back(
|
capabilities.header_extensions.push_back(
|
||||||
webrtc::RtpExtension(webrtc::RtpExtension::kColorSpaceUri, id++));
|
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")) {
|
if (webrtc::field_trial::IsEnabled("WebRTC-GenericDescriptorAdvertised")) {
|
||||||
capabilities.header_extensions.push_back(webrtc::RtpExtension(
|
capabilities.header_extensions.push_back(webrtc::RtpExtension(
|
||||||
webrtc::RtpExtension::kGenericFrameDescriptorUri00, id++));
|
webrtc::RtpExtension::kGenericFrameDescriptorUri00, id++));
|
||||||
|
|||||||
@ -531,6 +531,12 @@ RtpCapabilities WebRtcVoiceEngine::GetCapabilities() const {
|
|||||||
webrtc::RtpExtension(webrtc::RtpExtension::kAbsSendTimeUri, id++));
|
webrtc::RtpExtension(webrtc::RtpExtension::kAbsSendTimeUri, id++));
|
||||||
capabilities.header_extensions.push_back(webrtc::RtpExtension(
|
capabilities.header_extensions.push_back(webrtc::RtpExtension(
|
||||||
webrtc::RtpExtension::kTransportSequenceNumberUri, id++));
|
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;
|
return capabilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1357,30 +1357,25 @@ void MediaSessionDescriptionFactory::set_audio_codecs(
|
|||||||
ComputeAudioCodecsIntersectionAndUnion();
|
ComputeAudioCodecsIntersectionAndUnion();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AddUnifiedPlanExtensions(RtpHeaderExtensions* extensions) {
|
static void RemoveUnifiedPlanExtensions(RtpHeaderExtensions* extensions) {
|
||||||
RTC_DCHECK(extensions);
|
RTC_DCHECK(extensions);
|
||||||
|
|
||||||
rtc::UniqueNumberGenerator<int> unique_id_generator;
|
extensions->erase(
|
||||||
unique_id_generator.AddKnownId(0); // The first valid RTP extension ID is 1.
|
std::remove_if(extensions->begin(), extensions->end(),
|
||||||
for (const webrtc::RtpExtension& extension : *extensions) {
|
[](auto extension) {
|
||||||
const bool collision_free = unique_id_generator.AddKnownId(extension.id);
|
return extension.uri == webrtc::RtpExtension::kMidUri ||
|
||||||
RTC_DCHECK(collision_free);
|
extension.uri == webrtc::RtpExtension::kRidUri ||
|
||||||
}
|
extension.uri ==
|
||||||
|
webrtc::RtpExtension::kRepairedRidUri;
|
||||||
// Unified Plan also offers the MID and RID header extensions.
|
}),
|
||||||
extensions->push_back(webrtc::RtpExtension(webrtc::RtpExtension::kMidUri,
|
extensions->end());
|
||||||
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()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RtpHeaderExtensions
|
RtpHeaderExtensions
|
||||||
MediaSessionDescriptionFactory::audio_rtp_header_extensions() const {
|
MediaSessionDescriptionFactory::audio_rtp_header_extensions() const {
|
||||||
RtpHeaderExtensions extensions = audio_rtp_extensions_;
|
RtpHeaderExtensions extensions = audio_rtp_extensions_;
|
||||||
if (is_unified_plan_) {
|
if (!is_unified_plan_) {
|
||||||
AddUnifiedPlanExtensions(&extensions);
|
RemoveUnifiedPlanExtensions(&extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
return extensions;
|
return extensions;
|
||||||
@ -1389,8 +1384,8 @@ MediaSessionDescriptionFactory::audio_rtp_header_extensions() const {
|
|||||||
RtpHeaderExtensions
|
RtpHeaderExtensions
|
||||||
MediaSessionDescriptionFactory::video_rtp_header_extensions() const {
|
MediaSessionDescriptionFactory::video_rtp_header_extensions() const {
|
||||||
RtpHeaderExtensions extensions = video_rtp_extensions_;
|
RtpHeaderExtensions extensions = video_rtp_extensions_;
|
||||||
if (is_unified_plan_) {
|
if (!is_unified_plan_) {
|
||||||
AddUnifiedPlanExtensions(&extensions);
|
RemoveUnifiedPlanExtensions(&extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
return extensions;
|
return extensions;
|
||||||
|
|||||||
@ -4441,50 +4441,6 @@ TEST_F(MediaSessionDescriptionFactoryTest, TestSetAudioCodecs) {
|
|||||||
EXPECT_EQ(no_codecs, sf.audio_sendrecv_codecs());
|
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 {
|
namespace {
|
||||||
// Compare the two vectors of codecs ignoring the payload type.
|
// Compare the two vectors of codecs ignoring the payload type.
|
||||||
template <class Codec>
|
template <class Codec>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user