Network Working Group J. Uberti Internet-Draft Google Intended status: Standards Track May 03, 2013 Expires: November 04, 2013 Plan B: a proposal for signaling multiple media sources in WebRTC. draft-uberti-rtcweb-plan-00 Abstract This document explains how multiple media sources can be signaled in WebRTC using SDP, in a fashion that avoids many common problems and provides a simple control surface to the receiver. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on November 04, 2013. Copyright Notice Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents Uberti Expires November 04, 2013 [Page 1] Internet-Draft WebRTC Plan B May 2013 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Design Goals . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1. Support for a large number of arbitrary sources . . . . . 4 2.2. Support for fine-grained receiver control of sources . . 4 2.3. Glareless addition and removal of sources . . . . . . . . 4 2.4. Interworking with legacy devices . . . . . . . . . . . . 5 2.5. Avoidance of unnecessary port allocation . . . . . . . . 5 2.6. Simple binding of MediaStreamTrack to SDP . . . . . . . . 5 2.7. Support for RTX, FEC, simulcast, layered coding . . . . . 5 2.8. Works with or without BUNDLE . . . . . . . . . . . . . . 5 3. Detailed Design . . . . . . . . . . . . . . . . . . . . . . . 6 3.1. One m= line per [media-type, content] tuple . . . . . . . 6 3.2. Transmit sources identified by SSRC in signaling . . . . 6 3.3. Receive sources requested using remote-ssrc . . . . . . . 7 3.4. RTX, FEC, Simulcast . . . . . . . . . . . . . . . . . . . 7 4. Signaling Behavior . . . . . . . . . . . . . . . . . . . . . 8 4.1. Negotiation of new or legacy behavior . . . . . . . . . . 9 4.2. New signaling flow . . . . . . . . . . . . . . . . . . . 9 4.3. Legacy signaling flow . . . . . . . . . . . . . . . . . . 9 4.4. Interactions with BUNDLE . . . . . . . . . . . . . . . . 10 5. Full Example . . . . . . . . . . . . . . . . . . . . . . . . 10 5.1. New endpoint . . . . . . . . . . . . . . . . . . . . . . 10 5.1.1. Offer 1 (A->B): (A indicates streams to B) . . . . . 10 5.1.2. Answer 1 (B->A): (B requests streams from A) . . . . 11 5.1.3. Offer 2 (B->A): (B indicates streams to A) . . . . . 11 5.1.4. Answer 2 (A->B): (A requests streams from B) . . . . 12 5.2. Legacy endpoint . . . . . . . . . . . . . . . . . . . . . 13 5.2.1. Offer 1 (A->B): (A indicates streams to B) . . . . . 13 5.2.2. Answer 1 (B->A): (A accepts B's offer) . . . . . . . 13 6. Security Considerations . . . . . . . . . . . . . . . . . . . 14 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 9.1. Normative References . . . . . . . . . . . . . . . . . . 14 9.2. Informative References . . . . . . . . . . . . . . . . . 15 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 15 1. Introduction "Plan B" describes a simple, flexible approach for the negotiation and exchange of multiple media sources (AKA MediaStreamTracks, or MSTs) between two WebRTC endpoints. Each media source can be individually accepted or rejected by the recipient, and preferences on these track requests (e.g. the relative priority of the tracks) can also be provided. Uberti Expires November 04, 2013 [Page 2] Internet-Draft WebRTC Plan B May 2013 One of the core problems with existing approaches that map media sources to individual m= lines, is that m= lines, by their very nature, specify information about how media should be transported. This means that if N m= lines are created, N media ports (and their corresponding STUN/TURN candidates) need to be allocated. This causes problems when even relatively small numbers of media sources are used, as each source can result in multiple m= lines when techniques like simulcast or RTX are used. Plan B takes a different approach, and creates a hierarchy within SDP; a m= line defines an "envelope", specifying codec and transport parameters, and [RFC5576] a=ssrc lines are used to describe individual media sources within that envelope. In this manner, Plan B disconnects media streams from transport, and solves the following problems: o Supports large numbers (>> 100) of sources o Glareless add/removal of sources o No need to allocate ports for each source o Simple binding of MediaStreamTrack to SDP o Simple use of RTX and FEC streams within a single RTP session o Impossible to get "out-of-sync" (e.g. getting RTX or FEC flow without its corresponding primary flow) o Does not require BUNDLE (although BUNDLE can still help) Plan B mostly uses existing IETF standards, introducing a single new draft [I-D.lennox-mmusic-sdp-source-selection] to specify how individual media sources can be accepted/rejected at the SSRC level via SDP. An extensive review of SDP attributes was performed, in order to determine which SDP attributes that exist at m= line level would need to also exist at "source" level; these attributes are (aside from some trivial exceptions, such as a=label) covered in the aforementioned draft. Note that at the wire level, RTP is handled identically to Plan A (which specifies separate m= line for each media source), after a successful BUNDLE, in that MSTs are all sent in a single RTP session, and demuxed by SSRC. Therefore, Plan B could be converted to Plan A by a signaling-only gateway (although it would lose the advantages mentioned above). Uberti Expires November 04, 2013 [Page 3] Internet-Draft WebRTC Plan B May 2013 2. Design Goals Plan B attempts to provide a comprehensive mechanism for handling large numbers of simultaneous media sources, as might commonly be the case in a video conference or TV guide application. It attempts to address the following concerns: 2.1. Support for a large number of arbitrary sources In cases such as a video conference, there may be dozens or hundreds of participants, each with their own audio and video sources. A participant may even want to browse conferences before joining one, meaning that there may be cases where there are many such conferences displayed simultaneously. In these conferences, participants may have varying capabilities and therefore video resolutions. In addition, depending on conference policy, user preference, and the desired UI, participants may be displayed in various layouts, including: o A single large main speaker with thumbnails for other participants o Multiple medium-sized main speakers, with or without thumbnails o Large slides + medium speaker, without thumbnails These layouts can change dynamically, depending on the conference content and the preferences of the receiver. As such, there are not well-defined 'roles', that could be used to group sources into specific 'large' or 'thumbnail' categories. As such, the requirement Plan B attempts to satisfy is support for sending and receiving up to hundreds of simultaneous, hetereogeneous sources. 2.2. Support for fine-grained receiver control of sources Since there may be large numbers of sources, which can be displayed in different layouts, it is imperative that the receiver can easily control which sources are received, and what resolution or quality is desired, for both audio and video. The receiver should also be able to prioritize the source it requests, so that if system limits or bandwidth force a reduction in quality, the sources chosen by the receiver as important will receive the best quality. These details must be exposed to the application via the API. 2.3. Glareless addition and removal of sources Sources may come and go frequently, as is the case in a conference where various participants are presenting, or an interaction between Uberti Expires November 04, 2013 [Page 4] Internet-Draft WebRTC Plan B May 2013 multiple distributed conference servers. Because of this, it is desirable that sources can be added to SDP in a way that avoids signaling glare. The m= line approach suffers from this problem, as each m= line is indicated by a numeric index, and either side may add a new m= line as the same numeric index. 2.4. Interworking with legacy devices When interacting with a legacy application that only knows how to deal with a small number of sources, it must be possible to degrade gracefully to a usable basic experience, where at least a single audio and video source are active on each side, using a typical offer /answer exchange. 2.5. Avoidance of unnecessary port allocation When there are dozens or hundreds of streams, it is desirable to avoid creating dozens or hundreds of transports, as empirical data shows a clear inverse relationship between number of transports (NAT bindings) and call success rate. While BUNDLE helps avoid creating large numbers of transports, it is also desirable to avoid creating large numbers of ports during call setup, since ICE pacing alone can lead to significant delays, and BUNDLE does not attempt to address this. 2.6. Simple binding of MediaStreamTrack to SDP In WebRTC, each media source is identified by a MediaStreamTrack object. In order to ensure that the MSTs created by the sender show up at the receiver, each MST's id attribute needs to be reflected in SDP. 2.7. Support for RTX, FEC, simulcast, layered coding For robust applications, techniques like RTX and FEC are used to protect media, and simulcast/layered coding can be used to provide support to hetereogeneous receivers. It needs to be possible to support these techniques, allow the receipient to optionally use or not use them on a source-by-source basis, and for simulcast/layered scenarios, control which simulcast streams or layers are received. 2.8. Works with or without BUNDLE Uberti Expires November 04, 2013 [Page 5] Internet-Draft WebRTC Plan B May 2013 While BUNDLE provides a major win in allowing the multiplexing of multiple m= lines over a single transport, it does not solve all transport-related problems. Moreover, like any new technology, it will take time to identify all the edge cases and deployment issues. Therefore not having a hard dependency on BUNDLE, while still keeping the ability to benefit from BUNDLE, is considered advantageous. 3. Detailed Design 3.1. One m= line per [media-type, content] tuple Regardless of how many sources are offered or used, only one m= line, by default, is used for each media type (e.g. audio, video, or application). If the application wishes, it can request that a given media source be placed onto a separate m= line, by setting a new .content property on the desired MediaStreamTrack; the values for the .content property are those defined for the a=content attribute in [RFC4796]. This helps with certain legacy interop cases, for example, an endpoint who expected a screenshare video source to be signaled on its own m=video line. It is expected that the number of scenarios that require this property setting are fairly limited, primarily to cases like this one. In these situations, the number of m= lines still remains manageable. By only using a m= line for each media type, as opposed to each media source, this approach reduces the number of transports required to 2 even in complex audio/video cases. Note that in the common case of a call with a single audio and video source, the result is identical to the m= line per source approach, and so there are no issues with legacy devices in this case. In more complex cases, the application can select which of the sources for each m= line should be sent when interacting with a legacy device. 3.2. Transmit sources identified by SSRC in signaling Media sources are identified in signaling by SSRC, via [RFC5576] a=ssrc attributes. Each provider of MSTs (i.e. endpoint) indicates the MSTs they wish to send in their signaling message, and describes them using one of more SSRCs; when techniques like simulcast or RTX are used, a media source can span multiple SSRCs. Correlation of MediaStreamTracks with SSRCs is performed by the MSID attribute, a per-ssrc attribute defined in [I-D.alvestrand-mmusic-msid] that contains the MST's "id" property, and thereby indicates which MST corresponds to which SSRC. In the example below, the SDP advertises 3 separate audio sources, each identified by a single SSRC. m=audio 49170 RTP/AVP 101 // main audio a=ssrc:1 msid:left-mic // declare 3 outgoing audio sources Uberti Expires November 04, 2013 [Page 6] Internet-Draft WebRTC Plan B May 2013 a=ssrc:2 msid:center-mic a=ssrc:3 msid:right-mic Note that because of the signaling of SSRCs, SSRC collision is not a major issue. Each endpoint can ensure that the SSRCs it chooses don't collide, because it already knows about the SSRCs it has already used, as well as the ones the remote side has signaled. In the few cases where it can still occur - perhaps because of simultaneous signaling by both endpoints, upon recognizing the collision, an endpoint can update its send sources to not collide. If a collision occurs on an in-progress media flow, or if an endpoint needs to change SSRCs, for whatever reason, the [RFC5576] a=previous- ssrc attribute can be used to change an existing SSRC to a new value, while retaining continuity of media playout. 3.3. Receive sources requested using remote-ssrc When the offerer advertises its streams, the remote side can select which of them it wants to receive in its answer message. This is performed via [I-D.lennox-mmusic-sdp-source-selection], which introduces the concept of an a=remote-ssrc attribute. Through use of this attribute, the remote side chooses which of the offered sources should be received, by turning each one on or off, and optionally specifying what resolution, framerate and priority the recipient suggests for a particular source. This can also be used to select simulcast streams, or enabling/disabling of techniques like RTX or FEC. In the example below, the SDP sent by the receiver asks for just one of the offered streams. m=audio 39170 RTP/AVP 101 // main audio a=remote-ssrc:1 recv:on // just turn on the center mic The exact rules for how this logic works are specified in the aforementioned draft. 3.4. RTX, FEC, Simulcast In cases where a media source needs to correspond to more than one RTP flow, e.g. RTX, FEC, or simulcast, the [RFC5576] a=ssrc-group concept is used to create a grouping of SSRCs for a single MST. Each SSRC is declared using a=ssrc attributes, the same MSID is shared between the SSRCs, and the a=ssrc-group attribute defines the behavior of the grouped SSRCs. These groupings are used to perform demux of the incoming RTP streams and associate them (by SSRC) with their primary flows; this is the Uberti Expires November 04, 2013 [Page 7] Internet-Draft WebRTC Plan B May 2013 only way that a RTX or FEC stream can be correlated with its primary flow, when many streams are multiplexed in a single RTP session. This multiplexing of RTX and FEC in a single RTP session is already well-defined; RTX SSRC-multiplexing behavior is defined in [RFC4588], and FEC SSRC-multiplexing behavior is defined in [RFC5956]. For multi-resolution simulcast, we can create a similar ssrc-group, and adapt the imageattr attribute defined in [RFC6236] for the a=ssrc line attribute to indicate the send resolution for a given simulcast stream. (This will be added to the source-selection draft). In the example below, the SDP advertises a simulcast of a camera source at two different resolutions, as well as a screenshare source that supports RTX; a=ssrc-group is used to correlate the different SSRCs as part of a single media source. m=video 62537 RTP/SAVPF 96 // main video a=ssrc:5 msid:center-cam // one source is simulcasting at two resolutions a=ssrc:5 imageattr:* [1280, 720] a=ssrc:51 msid:center-cam // different SSRC, same MSID for simulcasts a=ssrc:51 imageattr:* [640, 360] a=ssrc-group:SIMULCAST 5 51 a=ssrc:8 msid:slides a=ssrc:9 msid:slides // RTX SSRC a=ssrc-group:FID 8 9 As specified in [I-D.lennox-mmusic-sdp-source-selection], the usage of RTX and FEC can be enabled or disabled on a per-media-source basis, as the recipient can turn off these secondary flows in its SDP. However, it is not possible to get into undefined situations, such as receiving the FEC flow without the primary flow. Note that at the wire level, the RTP flows will be the same as BUNDLEd session-multiplexed flows - the flows are all multiplexed in a single RTP session, which means that SSRCs must be used to correlate a RTX or FEC flow with their primary flow. Using payload types for this correlation, while possible in certain simple cases, is not suitable for the general case of many media sources, since individual PTs would have to be declared for every [codec, media source, primary/RTX/FEC] tuple, which quickly becomes unworkable. 4. Signaling Behavior Uberti Expires November 04, 2013 [Page 8] Internet-Draft WebRTC Plan B May 2013 4.1. Negotiation of new or legacy behavior In order to know whether a given application supports Plan B, an attribute in the offer is needed. There are various options that could be used for this: o a=ssrc isn't enough, since you might not have any send streams, and therefore no a=ssrc attributes. o a=max-*-ssrc could work, but has additional semantics o a=msid-semantic indicates that you understand MSIDs. Because understanding MSID is a prerequisite to using plan B, the third option (presence of a=msid-semantic) is recommended. 4.2. New signaling flow When both sides support Plan B, to properly allow both sides to indicate which MSTs they have, and allow the remote side to select the desired MSTs to receive, a 3-way handshake is needed (this is just math; the offer can't select the answerer's MSTs until they know about them). The expected flow for this would be for the caller to send an offer with its sources, then the callee would send back an answer with the sources it wants the caller to send, followed immediately by an offer with the sources that the callee has available to send. Finally, the answerer will reply back with the sources that it wants to request from the callee. The entire sequence can be done in 1.5 RTT. Typically a race condition exists between the receipt of the callee answer and the receipt of the callee media. However, this is avoided with Plan B, with its 3-way handshake. In addition, since the sources are known ahead of time by the recipient of said sources, it is prepared to demux them by SSRC without any signaling/media race. 4.3. Legacy signaling flow In the legacy case, Plan B degrades gracefully back to a single offer-answer sequence. Since there's no brokering of which sources should be sent, the "new" endpoint picks a default media source for each m= line, and upon receiving an answer indicating lack of support for Plan B, it sends just the default sources to the legacy endpoint. When receiving media from the legacy endpoint, the new endpoint creates a "default" MediaStream (containing a single MediaStreamTrack) for each m= line, just as when talking to any other legacy endpoint, as specified in the MSID draft. Uberti Expires November 04, 2013 [Page 9] Internet-Draft WebRTC Plan B May 2013 Typically this will result in the negotiation of a single audio and single video MediaStreamTrack. However, if the .content property was used above, additional audio or video MediaStreamTracks could be specifically negotiated for the purpose of communicating with legacy equipment (e.g. an additional screenshare video source). 4.4. Interactions with BUNDLE Since Plan B already muxes streams of the same media type onto a single m= line, BUNDLE is not as critical to its success as other approaches. Regardless, BUNDLE can be used to get down to just a single transport, by multiplexing the various media types together, and Plan B works well with BUNDLE. Since all streams are pre- identified by their SSRC attributes, their RTP flows can be demuxed easily even when grouped on the same 5-tuple. 5. Full Example 5.1. New endpoint The example below shows two new endpoints, A and B, establishing a Plan B call with audio, video, screensharing, simulcast, and RTX; B decides to select a subset of the sources that A advertises. 5.1.1. Offer 1 (A->B): (A indicates streams to B) a=msid-semantics:WMS // I understand SSRCs and MSTs m=audio 49170 RTP/AVP 101 // main audio a=ssrc:1 msid:left-mic // declare 3 outgoing audio sources, each with unique MSID a=ssrc:2 msid:center-mic a=ssrc:3 msid:right-mic [Candidates] m=video 62537 RTP/SAVPF 96 // main video a=ssrc:4 msid:left-cam // declare 3 outgoing video sources a=ssrc:5 msid:center-cam // one source is simulcasting at two resolutions, same codec a=ssrc:5 imageattr:* [1280, 720] a=ssrc:51 msid:center-cam // different SSRC, same MSID for simulcasts a=ssrc:51 imageattr:* [640, 360] a=ssrc:6 msid:right-cam a=ssrc-group:SIMULCAST 5 51 [Candidates] m=video 62538 RTP/SAVPF 96 // presentation a=content:slides // [media, content] tuples must be unique in m= lines a=ssrc:8 msid:slides // app decision to do this; could have been put in the m=video line above a=ssrc:9 msid:slides // RTX SSRC Uberti Expires November 04, 2013 [Page 10] Internet-Draft WebRTC Plan B May 2013 a=ssrc-group:FID 8 9 // declaration that SSRC 9 is a repair flow for 8 [Candidates] 5.1.2. Answer 1 (B->A): (B requests streams from A) a=msid-semantics:WMS // I understand SSRCs and MSTs m=audio 39170 RTP/AVP 101 // main audio a=remote-ssrc:1 recv:on // just turn on the center mic [Candidates] m=video 52537 RTP/SAVPF 96 // main video a=remote-ssrc:5 recv:off // explicitly turn off the 720p feed a=remote-ssrc:51 recv:on // explicitly turn on the 360p feed a=remote-ssrc:51 priority:1 // lower priority than slides (in this application) [Candidates] m=video 52538 RTP/SAVPF 96 // presentation a=content:slides a=remote-ssrc:8 recv:on // turn on the slides feed with higher priority // FID is sent implicitly, unless explicitly rejected a=remote-ssrc:8 priority:2 // (sender uses priority when making BW decisions) [Candidates] 5.1.3. Offer 2 (B->A): (B indicates streams to A) Uberti Expires November 04, 2013 [Page 11] Internet-Draft WebRTC Plan B May 2013 a=msid-semantics:WMS // I understand SSRCs and MSTs m=audio 39170 RTP/AVP 101 // main audio a=ssrc:101 msid:center-mic a=remote-ssrc:1 recv:on // just turn on the center mic [Candidates] m=video 52537 RTP/SAVPF 96 // main video a=ssrc:105 msid:center-cam a=remote-ssrc:5 recv:off // explicitly turn off the 720p feed a=remote-ssrc:51 recv:on // explicitly turn on the 360p feed a=remote-ssrc:51 priority:1 // lower priority than slides (in this application) [Candidates] m=video 52538 RTP/SAVPF 96 // presentation a=content:slides a=remote-ssrc:8 recv:on // turn on the slides feed with higher priority // FID is sent implicitly (unless explicitly rejected) a=remote-ssrc:8 priority:2 // (sender uses priority when making BW decisions) [Candidates] 5.1.4. Answer 2 (A->B): (A requests streams from B) a=msid-semantics:WMS // I understand SSRCs and MSTs m=audio 49170 RTP/AVP 101 // main audio a=ssrc:1 msid:left-mic // declare 3 outgoing audio sources, each with unique MSID a=ssrc:2 msid:center-mic a=ssrc:3 msid:right-mic a=remote-ssrc:101 on [Candidates] m=video 62537 RTP/SAVPF 96 // main video a=ssrc:4 msid:left-cam // declare 3 outgoing video sources a=ssrc:5 msid:center-cam // one source is simulcasting at two resolutions, same codec a=ssrc:5 imageattr:* [1280, 720] a=ssrc:51 msid:center-cam // different SSRC, same MSID for simulcasts a=ssrc:51 imageattr:* [640, 360] a=ssrc:6 msid:right-cam a=ssrc-group:SIMULCAST 5 51 a=remote-ssrc:105 on [Candidates] m=video 62538 RTP/SAVPF 96 // presentation a=content:slides // [media, content] tuples must be unique in m= lines a=ssrc:8 msid:slides // app decision to do this; could have been put in the m=video line above a=ssrc:9 msid:slides // RTX SSRC Uberti Expires November 04, 2013 [Page 12] Internet-Draft WebRTC Plan B May 2013 a=ssrc-group:FID 8 9 // declaration that SSRC 9 is a repair flow for 8 [Candidates] 5.2. Legacy endpoint The example below shows a new endpoint, A, and a legacy endpoint, B, establishing a Plan B call with audio, video, and screensharing. Although A supports multiple media sources for audio and video, B receives only A's default streams. However, since screensharing was done as its own m= line, screensharing continues to work with the legacy endpoint. 5.2.1. Offer 1 (A->B): (A indicates streams to B) a=msid-semantics:WMS // I understand SSRCs and MSTs m=audio 49170 RTP/AVP 101 // main audio a=ssrc:1 msid:left-mic // declare 3 outgoing audio sources, each // with unique MSID a=ssrc:2 msid:center-mic a=ssrc:3 msid:right-mic [Candidates] m=video 62537 RTP/SAVPF 96 // main video a=ssrc:4 msid:left-cam // declare 3 outgoing video sources a=ssrc:5 msid:center-cam // one source is simulcasting at two // resolutions, same codec a=ssrc:5 imageattr:* [1280, 720] a=ssrc:51 msid:center-cam // different SSRC, same MSID for simulcasts a=ssrc:51 imageattr:* [640, 360] a=ssrc:6 msid:right-cam a=ssrc-group:SIMULCAST 5 51 [Candidates] m=video 62538 RTP/SAVPF 96 // presentation a=content:slides // [media, content] tuples must be unique // in m= lines a=ssrc:8 msid:slides // app decision to do this; could have been // put in the m=video line above a=ssrc:9 msid:slides // RTX SSRC a=ssrc-group:FID 8 9 // declaration that SSRC 9 is a repair // flow for 8 [Candidates] 5.2.2. Answer 1 (B->A): (A accepts B's offer) Uberti Expires November 04, 2013 [Page 13] Internet-Draft WebRTC Plan B May 2013 // Since endpoint doesn't understand a=ssrc or MSTs, A must decide // on a single media source to send for each m=line, e.g. center-mic, // center-cam (360p), slides m=audio 39170 RTP/AVP 101 // main audio [Candidates] m=video 52537 RTP/SAVPF 96 // main video [Candidates] m=video 52538 RTP/SAVPF 96 // presentation a=content:slides [Candidates] 6. Security Considerations None. 7. IANA Considerations None. 8. Acknowledgements Harald Alvestrand provided review and several suggestions on this document. 9. References 9.1. Normative References [I-D.alvestrand-mmusic-msid] Alvestrand, H., "Cross Session Stream Identification in the Session Description Protocol", draft-alvestrand- mmusic-msid-01 (work in progress), October 2012. [I-D.lennox-mmusic-sdp-source-selection] Lennox, J. and H. Schulzrinne, "Mechanisms for Media Source Selection in the Session Description Protocol (SDP)", draft-lennox-mmusic-sdp-source-selection-05 (work in progress), October 2012. [RFC4796] Hautakorpi, J. and G. Camarillo, "The Session Description Protocol (SDP) Content Attribute", RFC 4796, February 2007. Uberti Expires November 04, 2013 [Page 14] Internet-Draft WebRTC Plan B May 2013 [RFC5576] Lennox, J., Ott, J., and T. Schierl, "Source-Specific Media Attributes in the Session Description Protocol (SDP)", RFC 5576, June 2009. 9.2. Informative References [I-D.ietf-mmusic-sdp-bundle-negotiation] Holmberg, C., Alvestrand, H., and C. Jennings, "Multiplexing Negotiation Using Session Description Protocol (SDP) Port Numbers", draft-ietf-mmusic-sdp- bundle-negotiation-03 (work in progress), February 2013. [RFC4588] Rey, J., Leon, D., Miyazaki, A., Varsa, V., and R. Hakenberg, "RTP Retransmission Payload Format", RFC 4588, July 2006. [RFC5956] Begen, A., "Forward Error Correction Grouping Semantics in the Session Description Protocol", RFC 5956, September 2010. [RFC6236] Johansson, I. and K. Jung, "Negotiation of Generic Image Attributes in the Session Description Protocol (SDP)", RFC 6236, May 2011. Author's Address Justin Uberti Google 747 6th St S Kirkland, WA 98033 USA Email: justin@uberti.name Uberti Expires November 04, 2013 [Page 15]