Negotiate the MID header extension for Unified Plan
Bug: webrtc:4050
Change-Id: Icf02eb5186742bb0cbf1a41964daab9e35ae9b6f
Reviewed-on: https://webrtc-review.googlesource.com/65026
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22777}
diff --git a/pc/mediasession.cc b/pc/mediasession.cc
index 474c0b4..3bf931c 100644
--- a/pc/mediasession.cc
+++ b/pc/mediasession.cc
@@ -1297,8 +1297,8 @@
RtpHeaderExtensions audio_rtp_extensions;
RtpHeaderExtensions video_rtp_extensions;
- GetRtpHdrExtsToOffer(current_description, &audio_rtp_extensions,
- &video_rtp_extensions);
+ GetRtpHdrExtsToOffer(session_options, current_description,
+ &audio_rtp_extensions, &video_rtp_extensions);
// Must have options for each existing section.
if (current_description) {
@@ -1718,6 +1718,7 @@
}
void MediaSessionDescriptionFactory::GetRtpHdrExtsToOffer(
+ const MediaSessionOptions& session_options,
const SessionDescription* current_description,
RtpHeaderExtensions* offer_audio_extensions,
RtpHeaderExtensions* offer_video_extensions) const {
@@ -1753,12 +1754,12 @@
// Add our default RTP header extensions that are not in
// |current_description|.
- MergeRtpHdrExts(audio_rtp_header_extensions(), offer_audio_extensions,
- &all_regular_extensions, &all_encrypted_extensions,
- &used_ids);
- MergeRtpHdrExts(video_rtp_header_extensions(), offer_video_extensions,
- &all_regular_extensions, &all_encrypted_extensions,
- &used_ids);
+ MergeRtpHdrExts(audio_rtp_header_extensions(session_options.is_unified_plan),
+ offer_audio_extensions, &all_regular_extensions,
+ &all_encrypted_extensions, &used_ids);
+ MergeRtpHdrExts(video_rtp_header_extensions(session_options.is_unified_plan),
+ offer_video_extensions, &all_regular_extensions,
+ &all_encrypted_extensions, &used_ids);
// TODO(jbauch): Support adding encrypted header extensions to existing
// sessions.
@@ -2117,8 +2118,9 @@
if (!CreateMediaContentAnswer(
offer_audio_description, media_description_options, session_options,
filtered_codecs, sdes_policy, GetCryptos(current_content),
- audio_rtp_extensions_, enable_encrypted_rtp_header_extensions_,
- current_streams, bundle_enabled, audio_answer.get())) {
+ audio_rtp_header_extensions(session_options.is_unified_plan),
+ enable_encrypted_rtp_header_extensions_, current_streams,
+ bundle_enabled, audio_answer.get())) {
return false; // Fails the session setup.
}
@@ -2202,8 +2204,9 @@
if (!CreateMediaContentAnswer(
offer_video_description, media_description_options, session_options,
filtered_codecs, sdes_policy, GetCryptos(current_content),
- video_rtp_extensions_, enable_encrypted_rtp_header_extensions_,
- current_streams, bundle_enabled, video_answer.get())) {
+ video_rtp_header_extensions(session_options.is_unified_plan),
+ enable_encrypted_rtp_header_extensions_, current_streams,
+ bundle_enabled, video_answer.get())) {
return false; // Failed the sessin setup.
}
bool secure = bundle_transport ? bundle_transport->description.secure()
diff --git a/pc/mediasession.h b/pc/mediasession.h
index 4f30b7c..5b94539 100644
--- a/pc/mediasession.h
+++ b/pc/mediasession.h
@@ -124,16 +124,28 @@
void set_audio_rtp_header_extensions(const RtpHeaderExtensions& extensions) {
audio_rtp_extensions_ = extensions;
}
- const RtpHeaderExtensions& audio_rtp_header_extensions() const {
- return audio_rtp_extensions_;
+ RtpHeaderExtensions audio_rtp_header_extensions(bool unified_plan) const {
+ RtpHeaderExtensions extensions = audio_rtp_extensions_;
+ // If we are Unified Plan, also offer the MID header extension.
+ if (unified_plan) {
+ extensions.push_back(webrtc::RtpExtension(
+ webrtc::RtpExtension::kMidUri, webrtc::RtpExtension::kMidDefaultId));
+ }
+ return extensions;
}
const VideoCodecs& video_codecs() const { return video_codecs_; }
void set_video_codecs(const VideoCodecs& codecs) { video_codecs_ = codecs; }
void set_video_rtp_header_extensions(const RtpHeaderExtensions& extensions) {
video_rtp_extensions_ = extensions;
}
- const RtpHeaderExtensions& video_rtp_header_extensions() const {
- return video_rtp_extensions_;
+ RtpHeaderExtensions video_rtp_header_extensions(bool unified_plan) const {
+ RtpHeaderExtensions extensions = video_rtp_extensions_;
+ // If we are Unified Plan, also offer the MID header extension.
+ if (unified_plan) {
+ extensions.push_back(webrtc::RtpExtension(
+ webrtc::RtpExtension::kMidUri, webrtc::RtpExtension::kMidDefaultId));
+ }
+ return extensions;
}
const DataCodecs& data_codecs() const { return data_codecs_; }
void set_data_codecs(const DataCodecs& codecs) { data_codecs_ = codecs; }
@@ -167,7 +179,8 @@
AudioCodecs* audio_codecs,
VideoCodecs* video_codecs,
DataCodecs* data_codecs) const;
- void GetRtpHdrExtsToOffer(const SessionDescription* current_description,
+ void GetRtpHdrExtsToOffer(const MediaSessionOptions& session_options,
+ const SessionDescription* current_description,
RtpHeaderExtensions* audio_extensions,
RtpHeaderExtensions* video_extensions) const;
bool AddTransportOffer(