Add MSID signaling compatibility for Unified Plan endpoints
This is intended to ensure compatibility between Plan B and
Unified Plan endpoints for the single audio - single video case.
If Unified Plan is the offerer, it will add a=msid and a=ssrc MSID
entries to its offer.
If Unified Plan is the answerer, it will use whatever MSID
signaling mechanism was used in the offer (either a=msid or
a=ssrc).
Bug: webrtc:7600
Change-Id: I6192dec19123fbb56f5d04540d2175c7fb30b9b6
Reviewed-on: https://webrtc-review.googlesource.com/44162
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21859}
diff --git a/pc/mediasession.cc b/pc/mediasession.cc
index 3f750d1..a2f47dc 100644
--- a/pc/mediasession.cc
+++ b/pc/mediasession.cc
@@ -1375,6 +1375,20 @@
return nullptr;
}
}
+
+ // The following determines how to signal MSIDs to ensure compatibility with
+ // older endpoints (in particular, older Plan B endpoints).
+ if (session_options.is_unified_plan) {
+ // Be conservative and signal using both a=msid and a=ssrc lines. Unified
+ // Plan answerers will look at a=msid and Plan B answerers will look at the
+ // a=ssrc MSID line.
+ offer->set_msid_signaling(cricket::kMsidSignalingMediaSection |
+ cricket::kMsidSignalingSsrcAttribute);
+ } else {
+ // Plan B always signals MSID using a=ssrc lines.
+ offer->set_msid_signaling(cricket::kMsidSignalingSsrcAttribute);
+ }
+
return offer.release();
}
@@ -1500,6 +1514,39 @@
}
}
+ // The following determines how to signal MSIDs to ensure compatibility with
+ // older endpoints (in particular, older Plan B endpoints).
+ if (session_options.is_unified_plan) {
+ // Unified Plan needs to look at what the offer included to find the most
+ // compatible answer.
+ if (offer->msid_signaling() == 0) {
+ // We end up here in one of three cases:
+ // 1. An empty offer. We'll reply with an empty answer so it doesn't
+ // matter what we pick here.
+ // 2. A data channel only offer. We won't add any MSIDs to the answer so
+ // it also doesn't matter what we pick here.
+ // 3. Media that's either sendonly or inactive from the remote endpoint.
+ // We don't have any information to say whether the endpoint is Plan B
+ // or Unified Plan, so be conservative and send both.
+ answer->set_msid_signaling(cricket::kMsidSignalingMediaSection |
+ cricket::kMsidSignalingSsrcAttribute);
+ } else if (offer->msid_signaling() ==
+ (cricket::kMsidSignalingMediaSection |
+ cricket::kMsidSignalingSsrcAttribute)) {
+ // If both a=msid and a=ssrc MSID signaling methods were used, we're
+ // probably talking to a Unified Plan endpoint so respond with just
+ // a=msid.
+ answer->set_msid_signaling(cricket::kMsidSignalingMediaSection);
+ } else {
+ // Otherwise, it's clear which method the offerer is using so repeat that
+ // back to them.
+ answer->set_msid_signaling(offer->msid_signaling());
+ }
+ } else {
+ // Plan B always signals MSID using a=ssrc lines.
+ answer->set_msid_signaling(cricket::kMsidSignalingSsrcAttribute);
+ }
+
return answer.release();
}