Network Working Group S. Nandakumar
Internet-Draft C. Jennings
Intended status: Informational Cisco
Expires: March 20, 2016 September 17, 2015

SDP for the WebRTC
draft-ietf-rtcweb-sdp-00

Abstract

The Web Real-Time Communication [WebRTC] working group is charged to provide protocol support for direct interactive rich communication using audio, video and data between two peers' web browsers. With in the WebRTC framework, Session Description protocol (SDP) [RFC4566] is used for negotiating session capabilities between the peers. Such a negotiation happens based on the SDP Offer/Answer exchange mechanism described in [RFC3264].

This document provides an informational reference in describing the role of SDP and the Offer/Answer exchange mechanism for the most common WebRTC use-cases.

This SDP examples provided in this document is still a work in progress, but it aims to align closest to the evolving standards work.

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 March 20, 2016.

Copyright Notice

Copyright (c) 2015 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

1. Introduction

Javascript Session Exchange Protocol(JSEP) [I-D.ietf-rtcweb-jsep] specifies a generic protocol needed to generate [RFC3264] Offers and Answers negotiated between the WebRTC peers for setting up, updating and tearing down a WebRTC session. For this purpose, SDP is used to construct [RFC3264] Offers/Answers for describing (media and non-media) streams as appropriate for the recipients of the session description to participate in the session.

The remainder of this document is organized as follows: Sections 3 and 4 provides an overview of SDP and the Offer/Answer exchange mechanism. Section 5 provides sample SDP generated for the most common WebRTC use-cases.

2. Terminology

The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

3. SDP and the WebRTC

The purpose of this section is to provide a general overview of SDP and its components. For a more in-depth understanding, the readers are advised to refer to [RFC4566].

The Session Description Protocol (SDP) [RFC4566] describes multimedia sessions, which can contain audio, video, whiteboard, fax, modem, and other streams. SDP provides a general purpose, standard representation to describe various aspects of multimedia session such as media capabilities, transport addresses and related metadata in a transport agnostic manner, for the purposes of session announcement, session invitation and parameter negotiation.

As of today SDP is widely used in the context of Session Initiation Protocol [RFC3261], Real-time Transport Protocol [RFC3550] and Real-time Streaming Protocol applications [RFC2326].

Below figure introduces high-level breakup of SDP into components that semantically describe a multimedia session, in our case, a WebRTC session [WebRTC]. It by no means captures everything about SDP and hence, should be used for informational purposes only.

                                                +---------------------+
                                                |        v=           |
                                                +---------------------+
                +---------------------+         +---------------------+
        ====    |   Session Metadata  |  =====  |        o=           |
        |       +---------------------+         +----------------------
        |                                       +---------------------+
        |                                       |        t=           |
        |                                       +---------------------+
        |
        |
        |                                       +---------------------+
        |                                       |        c=           |
        |                                       +---------------------+
        |       +---------------------+
        ====    | Network Description |   =====
        |       +---------------------+
        |                                       +---------------------+
        |                                       |    a=candidate      |
        |                                       +---------------------+
        |
        |
        |                                       +---------------------+
        |                                       |        m=           |
        |                                       +---------------------+
        |        +---------------------+        +---------------------+
        ====     | Stream Description  |  ===== |      a=rtpmap       |
        |        +---------------------+        +----------------------
        |                                       +---------------------+
        |                                       |      a=fmtp         |
        |                                       +---------------------+
        |                                       +---------------------+
        |                                       |      a=sendrecv..   |
        |                                       +---------------------+
+---------------+
|    SEMANTIC   |
| COMPONENTS OF |
|     SDP       |
+---------------+
        |                                       +---------------------+
        |                                       |      a=crypto       |
        |                                       +---------------------+
        |         +---------------------+       +---------------------+
        ====      |Security Descriptions|  =====|      a=ice-frag     |
        |         +---------------------+       +----------------------
        |                                       +---------------------+
        |                                       |      a=ice-pwd      |
        |                                       +---------------------+
        |                                       +---------------------+
        |                                       |     a=fingerprint   |
        |                                       +---------------------+
        |
        |
        |
        |                                       +---------------------+
        |                                       |      a=rtcp-fb      |
        |                                       +---------------------+
        |         +---------------------+       +---------------------+
        ====      |   Qos,Grouping      |       |                     |
                  |   Descriptions      |  =====|       a=group       |
                  +---------------------+       +----------------------
                                                +---------------------+
                                                |       a=rtcpmux     |
                                                +---------------------+




          

Figure 1: Semantic Components of SDP

[WebRTC] proposes JavaScript application to fully specify and control the signaling plane of a multimedia session as described in the JSEP specification [I-D.ietf-rtcweb-jsep]. JSEP provides mechanisms to create session characterization and media definition information to conduct the session based on SDP exchanges.

In this context, SDP serves two purposes:

  1. Provide grammatical structure syntactically.
  2. Semantically convey participant's intention and capabilities required to successfully negotiate a session.

4. Offer/Answer and the WebRTC

This section introduces SDP Offer/Answer Exchange mechanism mandated by WebRTC for negotiating session capabilities while setting up, updating and tearing down a WebRTC session. This section is intentionally brief in nature and interested readers are recommended to refer [RFC3264] for specific details on the protocol operation.

The Offer/Answer [RFC3264] model specifies rule for the bilateral exchange of Session Description Protocol (SDP) messages for creation of multimedia streams. It defines protocol with involved participants exchanging desired session characteristics from each others perspective constructed as SDP to negotiate the session between them.

In the most basic form,the protocol operation begins by one of the participants sending an initial SDP Offer describing its intent to start a multimedia communication session. The participant receiving the offer MAY generate an SDP Answer accepting the offer or it MAY reject the offer. If the session is accepted the Offer/Answer model guarantees a common view of the multimedia session between the participants.

At any time, either participant MAY generate a new SDP offer that updates the session in progress.

With in the context of WebRTC, the Offer/Answer model defines the state-machinery for WebRTC peers to negotiate session descriptions between them during the initial setup stages as well as for eventual session updates. Javascript Session Establishment Protocol specification [I-D.ietf-rtcweb-jsep] for WebRTC provides the mechanism for generating [RFC3264] SDP Offers and Answers in order for both sides of the session to agree upon details such as list of media formats to be sent/received, bandwidth information, crypto parameters, transport parameters, for example.

5. WebRTC Session Description Examples

A typical web based real-time multimedia communication session can be characterized as below:

5.1. Some Conventions

The examples given in this document follow the conventions listed below:

[OPEN ISSUE-1]: SDP Examples for Data Channel, Simulcast, SVC are still being discussed and doesn't represent the final solution.

5.2. Basic Examples

5.2.1. Audio Only Session

This common scenario shows SDP for secure two-way audio session with Alice offering Opus, PCMU, PCMA and Bob accepting all the offered audio codecs.

        2-Way Audio Only Session

Alice                                Bob
|                                     |
|                                     |
|    Offer(Audio:Opus,PCMU,PCMA)      |
|------------------------------------>|
|                                     |
|                                     |
|   Answer(Audio:Opus,PCMU,PCMA)      |
|<------------------------------------|
|                                     |
|                                     |
|Two-way Opus Audio (preferred-codec) |
|.....................................|
|                                     |
|                                     |

5.2.1 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp-mux [RFC5761] - Alice can perform RTP/RTCP Muxing
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels
a=ptime:60 [I-D.ietf-payload-rtp-opus] - Opus packetization of 60ms
a=rtpmap:0 PCMU/8000 [RFC3551] PCMU Audio Codec
a=rtpmap:8 PCMA/8000 [RFC3551] PCMA Audio Codec
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464] Alice supports RTP header extension to indicate audio levels
a=sendrecv [RFC3264] - Alice can send and recv audio
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=ice-ufrag:074c6550 [RFC5245] - ICE user fragment
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245] - ICE password
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245] - RTP Host Candidate
a=candidate:0 2 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245] - RTCP Host Candidate
a=candidate:1 1 UDP 1685987071 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245] - RTP Server Reflexive ICE Candidate
a=candidate:1 2 UDP 1685987071 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245] - RTCP Server Reflexive Candidate
a=rtcp-fb:109 nack [RFC5104] - Indicates NACK RTCP feedback support
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506] - Alice intends to use reduced size RTCP for this session
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.1 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 0 8 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] Opus Codec
a=ptime:60 [I-D.ietf-payload-rtp-opus] Packetization of 60ms
a=rtpmap:0 PCMU/8000 [RFC3551] PCMU Audio Codec
a=rtpmap:8 PCMA/8000 [RFC3551] PCMA Audio Codec
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464] Bob supports audio level RTP header extension as well
a=sendrecv [RFC3264] - Bob can send and recv audio
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-mux [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203
a=fingerprint:sha-1 c9:c7:70:9d:1f:66:79:a8:07:99:41:49:83:4a: 97:0e:1f:ef:6d:f7 [RFC5245] - DTLS Fingerprint for SRTP
a=ice-ufrag:05067423 [RFC5245] - ICE user fragment
a=ice-pwd:1747d1ee3474a28a397a4c3f3af08a068 [RFC5245] - ICE password parameter
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245] - RTP/RTCP Host ICE Candidate
a=candidate:1 1 UDP 1685987071 98.248.92.77 60654 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245] - RTP/RTCP Server Reflexive ICE Candidate
a=rtcp-fb:109 nack [RFC5104] - Indicates NACK RTCP feedback support
a=ssrc:54321 cname:NWs1ao1HmN4Xa5/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506] - Bob intends to use reduced size RTCP for this session
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]

5.2.2. Audio/Video Session

Alice and Bob establish a two-way audio and video session with Opus as the audio codec and H.264 as the video codec.


         2-Way Audio,Video Session

Alice                                       Bob
|                                            |
|                                            |
|Offer(Audio:Opus,PCMU,PCMA Video:H.264,VP8) |
|------------------------------------------->|
|                                            |
|                                            |
|      Answer(Audio:Opus,Video:H.264)        |
|<-------------------------------------------|
|                                            |
|                                            |
|     Two-way Opus Audio, H.264 Video        |
|............................................|
|                                            |

5.2.2 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp-mux [RFC5761] - Alice can perform RTP/RTCP Muxing
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels
a=ptime:60 [I-D.ietf-payload-rtp-opus] - Opus packetization of 60ms
a=rtpmap:0 PCMU/8000 [RFC3551] PCMU Audio Codec
a=rtpmap:8 PCMA/8000 [RFC3551] PCMA Audio Codec
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=sendrecv [RFC3264] - Alice can send and recv audio
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ice-ufrag:074c6550 [RFC5245] - ICE user fragment
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245] - ICE password parameter
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245] - RTP Host Candidate
a=candidate:0 2 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245] - RTCP Host Candidate
a=candidate:1 1 UDP 1685987071 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245] - RTP Server Reflexive ICE Candidate
a=candidate:1 2 UDP 1685987071 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245] - RTCP Server Reflexive Candidate.
a=rtcp-fb:109 nack [RFC5104] - Indicates NACK RTCP feedback support
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506] - Alice intends to use reduced size RTCP for this session
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 54609 UDP/TLS/RTP/SAVPF 99 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:video [RFC5888]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp-mux [RFC5761] - Alice can perform RTP/RTCP Muxing
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:99 H264/90000 [RFC3984] - H.264 Video Codec
a=fmtp:99 profile-level-id=4d0028;packetization-mode=1 [RFC3984]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8] - VP8 video codec
a=sendrecv [RFC3264] - Alice can send and recv video
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ice-ufrag:074c6550 [RFC5245] - ICE user fragment
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245] - ICE password parameter
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245] - RTP Host ICE Candidate
a=candidate:0 2 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245] - RTCP Host Candidate
a=candidate:1 1 UDP 1685987071 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245] - RTP Server Reflexive ICE Candidate
a=candidate:1 2 UDP 1685987071 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245] - RTCP Server Reflexive Candidate
a=rtcp-fb:99 nack [RFC5104] - Indicates NACK RTCP feedback support
a=rtcp-fb:99 nack pli [RFC5104] - Indicates support for Picture loss Indication and NACK
a=rtcp-fb:99 ccm fir [RFC5104] - Full Intra Frame Request-Codec Control Message support
a=rtcp-fb:120 nack [RFC5104] - Indicates NACK RTCP feedback support
a=rtcp-fb:120 nack pli [RFC5104] - Indicates support for Picture loss Indication and NACK
a=rtcp-fb:120 ccm fir [RFC5104] - Full Intra Frame Request-Codec Control Message support
a=ssrc:1366781083 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506] - Alice intends to use reduced size RTCP for this session
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.2 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp-mux [RFC5761] - Bob can perform RTP/RTCP Muxing
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Bob accepts only Opus Codec
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:60 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264] - Bob can send and recv audio
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=ice-ufrag:c300d85b [RFC5245] - ICE username frag
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245] - ICE password
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 3618095783 192.168.1.7 49203 typ host [RFC5245] - RTP/RTCP Host ICE Candidate
a=candidate:1 1 UDP 565689203 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245] - RTP/RTCP Server Reflexive ICE Candidate
a=ssrc:1366788312 cname:1f0fcgEocUG/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506] - Bob intends to use reduced size RTCP for this session
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 49203 UDP/TLS/RTP/SAVPF 99 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:video [RFC5888]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtpmap:99 H264/90000 [RFC3984] - Bob accepts H.264 Video Codec.
a=fmtp:99 profile-level-id=4d0028;packetization-mode=1 [RFC3984]
a=rtcp-mux [RFC5761] - Bob can perform RTP/RTCP Muxing
a=sendrecv [RFC3264] - Bob can send and recv video
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=ice-ufrag:c300d85b [RFC5245] - ICE username frag
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245] - ICE password
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245] - Host ICE Candidate for Opus Stream
a=candidate:1 1 UDP 1694302207 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245] - Server Reflexive ICE Candidate for the above host candidate
[RFC5245] - Server Reflexive Candidate for the Second Host Candidate a=rtcp-fb:99 nack
[RFC5104] - Indicates support for NACK based RTCP feedback a=rtcp-fb:99 nack pli
[RFC5104] - Indicates support for Picture loss Indication and NACK a=rtcp-fb:99 ccm fir
[RFC5104] - Full Intra Frame Request- Codec Control Message support a=ssrc:3229706345 cname:Q/NWs1ao1HmN4Xa5
[RFC5576] a=rtcp-rsize
[RFC5506] - Bob intends to use reduced size RTCP for this session a=ice-options:trickle
[I-D.ietf-mmusic-trickle-ice]

5.2.3. Data Only Session

This scenario illustrates SDP negotiated to setup a data-only session based on SCTP Data Channel, thus enabling use-cases such as file-transfer for example.


      2-Way DataChannel Session

Alice                            Bob
|                                 |
|                                 |
|                                 |
|      Offer(DataChannel)         |
|-------------------------------->|
|                                 |
|                                 |
|      Answer(DataChannel)        |
|<--------------------------------|
|                                 |
|                                 |
| Two-way SCTP based DataChannel  |
|.................................|
|                                 |
|                                 |

5.2.3 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=group:BUNDLE data [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-ufrag:074c6550 [RFC5245] - Session Level ICE parameter
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245] - Session Level ICE parameter
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245] - Session DTLS Fingerprint for SRTP
m=application 56966 DTLS/SCTP 5000 [I-D.ietf-rtcweb-data-channel]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:data [RFC5888]
a=sctpmap:5000 webrtc-DataChannel streams=16;label="channel 1"; subprotocol="chat"; [I-D.ietf-mmusic-sctp-sdp]
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=sendrecv [RFC3264] - Alice can send and recv non-media data
a=candidate:0 1 UDP 2113667327 192.168.1.7 56966 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 24.23.204.141 56966 typ srflx raddr 192.168.1.7 rport 56966 [RFC5245]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.3 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=group:BUNDLE data [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=application 55700 DTLS/SCTP 5000 [I-D.ietf-mmusic-sctp-sdp]
c=IN IP4 98.248.92.771 [RFC4566]
a=mid:data [RFC5888]
a=sctpmap:5000 webrtc-DataChannel:5000 streams=1;label="channel 1" ;subprotocol="chat"; [I-D.ietf-mmusic-sctp-sdp]
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=sendrecv [RFC3264] - Bob can send and recv non-media data
a=ice-ufrag:c300d85b [RFC5245] - Session Level ICE username frag
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245] - Session Level ICE password
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245] - Session DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2113667327 192.168.1.7 55700 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 55700 typ srflx raddr 192.168.1.7 rport 55700 [RFC5245]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]

5.2.4. Audio Call On Hold

Alice calls Bob, but when Bob answers he places Alice on hold by setting the SDP direction attribute to a=sendonly in the Answer.


           Audio On Hold

Alice                            Bob
|                                 |
|                                 |
|      Offer(Audio:Opus)          |
|-------------------------------->|
|                                 |
|                                 |
|  Answer(Audio:Opus,a=sendonly)  |
|<--------------------------------|
|                                 |
|                                 |
|      One-way Opus Audio         |
|.................................|
|                                 |
|
5.2.4 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp-mux [RFC5761] - Alice can perform RTP/RTCP Muxing
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus] - Opus packetization of 20ms
a=sendrecv [RFC3264] - Alice can send and recv audio
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ice-ufrag:074c6550 [RFC5245] - ICE user fragment
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245] - ICE password
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:109 nack [RFC5104] - Indicates NACK RTCP feedback support
a=ssrc:3229706345 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.4 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Bob accepts Opus Codec
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendonly [RFC3264] - Bob puts call On Hold
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-mux [RFC5761] - Bob can perform RTP/RTCP Muxing
a=ice-ufrag:c300d85b [RFC5245] - ICE username frag
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245] - ICE password
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:1366781083 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]

5.2.5. Audio with DTMF Session

In this example, Alice wishes to establish two separate audio streams, one for normal audio and the other for telephone-events. Alice offers first audio stream with three codecs and the other with [RFC2833] tones (for DTMF). Bob accepts both the audio streams by choosing Opus as the audio codec and telephone-event for the other stream.


            Audio Session with DTMF

Alice                                              Bob
|                                                   |
|                                                   |
|                                                   |
|  Offer(Audio:Opus,PCMU,PCMA Audio:telephone-event)|
|-------------------------------------------------->|
|                                                   |
|                                                   |
|    Answer(Audio:Opus, Audio:telephone-event)      |
|<--------------------------------------------------|
|                                                   |
|                                                   |
|   Opus audio stream and telephone-event stream    |
|...................................................|
|                                                   |
            
5.2.5 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio dtmf [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtcp-mux [RFC5761] - Alice can perform RTP/RTCP Muxing
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels
a=ptime:20 [I-D.ietf-payload-rtp-opus] - Opus packetization of 20ms
a=rtpmap:0 PCMU/8000 [RFC3551] PCMU Audio Codec
a=rtpmap:8 PCMA/8000 [RFC3551] PCMA Audio Codec
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=sendrecv [RFC3264] - Alice can send and recv audio
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ice-ufrag:074c6550 [RFC5245] - ICE user fragment
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245] - ICE password parameter
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:109 nack [RFC5104] - Indicates NACK RTCP feedback support
a=ssrc:3229706345 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 126 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:dtmf [RFC5888]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp-mux [RFC5761]
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:126 telephone-event/8000 [RFC2833]
a=sendonly [RFC3264] - Alice can send DTMF Events
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ice-ufrag:074c6550 [RFC5245] - ICE user fragment
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245] - ICE password parameter
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245] - DTLS Fingerprint for SRTP
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:109 nack [RFC5104] - Indicates NACK RTCP feedback support
a=ssrc:9032206345 cname:L/N9lk1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.5 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio dtmf [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Bob accepts Opus Codec
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264] - Bob can send and receive Opus audio
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-mux [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203
a=ice-ufrag:c300d85b [RFC5245] - ICE username frag
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245] - ICE password
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245] - Fingerprint for SRTP
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:0634322975 cname:Q/o1HmN4XNWs1aa5 [RFC5576]
a=rtcp-rsize [RFC5506] - Alice intends to use reduced size RTCP for this session
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 126 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:dtmf [RFC5888]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtpmap:126 telephone-event/8000 [RFC2833]
a=recvonly [RFC3264] - Alice can receive DTMF events
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-mux [RFC5761] - Alice can perform RTP/RTCP Muxing on port 54690
a=ice-ufrag:c300d85b [RFC5245] - ICE username frag
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245] - ICE password
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245] - Fingerprint for SRTP
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:6345903220 cname:L/k1aN9lo1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506] - Alice intends to use reduced size RTCP for this session
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]

5.2.6. One Way Audio/Video Session - Document Camera

In this scenario Alice and Bob engage in a 1 way audio and video session with Bob receiving Alice's audio and her presentation slides as video stream.



   One Way Audio & Video Session - Document Camera


Alice                                                 Bob
|                                                      |
|                                                      |
|                                                      |
|   Alice Offers sendonly audio and video streams.     |
|  The video stream corresponds to her presentation    |
|                                                      |
|           Offer(Audio:Opus, Video: VP8)              |
|----------------------------------------------------->|
|                                                      |
|                                                      |
|            (Audio:Opus, Video: VP8)                  |
|<-----------------------------------------------------|
|                                                      |
|                                                      |
|          One-way Opus Audio, VP8 Video               |
|......................................................|
|   Bob can hear Alice and see her presentation slides.|
|                                                      |
|                                                      |

5.2.6 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp-mux [RFC5761]
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendonly [RFC3264] - Send only audio stream
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 24.23.204.141 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2122194687 24.23.204.141 54609 typ host [RFC5104]
a=rtcp-fb:109 nack [RFC5104]
a=ssrc:6345903220 cname:L/k1aN9lo1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 54609 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:video [RFC5888]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp-mux [RFC5761]
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=content:slides [RFC4796] -Alice's presentation video stream
a=sendonly [RFC3264] - Send only video stream
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 24.23.204.141 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2113667326 24.23.204.141 54609 typ host [RFC5104]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=ssrc:3429951804 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.6 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=recvonly [RFC3264] - Receive only audio stream
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-mux [RFC5761]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 98.248.92.77 49203 typ host [RFC5245]
a=ssrc:9513429804 cname:Q/o1HmNWs1aN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 49203 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:video [RFC5888]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=content:slides [RFC4796]
a=recvonly [RFC3264] - Receive Only Alice's presentation stream
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-mux [RFC5761]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 98.248.92.77 49203 typ host [RFC5245]
a=ssrc:1366781083 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]

5.2.7. Audio, Video Session with BUNDLE Support Unknown

In this example, since Alice is unsure of the Bob's support of the BUNDLE framework, following 3 step procedures are performed in order to negotiate and setup a BUNDLE Address for the session

  • An SDP Offer, in which the Alice assigns unique addresses to each "m=" line in the BUNDLE group, and requests the Answerer to select the Offerer's BUNDLE address.
  • An SDP Answer, in which the Bob indicates its support for BUNDLE, and assigns its own BUNDLE address for the BUNDLED m= lines.
  • A subsequent SDP Offer from Alice, which is used to perform BUNDLE Address Synchronization (BAS).

Once the Offer/Answer exchange completes, both Alice and Bob each end up using single RTP Session for both the Media Streams.



 Two-Way Secure Audio,Video with BUNDLE support unknown

Alice                                                 Bob
|                                                      |
|                                                      |
|   Alice offers BUNDLE support with unique address    |
|        for the audio and video m-line                |
|                                                      |
|                                                      |
|          Offer(Audio:Opus Video:VP8)                 |
|----------------------------------------------------->|
|                                                      |Bob
|                                                      |supports
|                                                      |BUNDLE
|          Answer(Audio:Opus Video:VP8)                |
|<-----------------------------------------------------|
|                                                      |
|                                                      |Bob uses
|                                                      |identical
|                                                      |addresses
|                                                      |
|  Updated Offer for Bundle Address Synchronization.   |
|----------------------------------------------------->|
|                                                      |
|                                                      |
|       Answer (Bob accepts the updated offer)         |
|<-----------------------------------------------------|
|                                                      |
|                                                      |
|    2 Way Call with Audio and Video Multiplexed       |
|......................................................|
|                                                      |

5.2.7 SDP Offer w/BUNDLE
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888] Audio m=line part of BUNDLE group with a unique port number
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp-mux [RFC5761]
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:109 nack [RFC5104]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 62537 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:video [RFC5888] Video m=line part of the Bundle group with a unique port number
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp-mux [RFC5761]
a=rtcp:62537 IN IP4 24.23.204.141 [RFC3605] - Port for RTCP data
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=ssrc:22222 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ice-ufrag:6550074c [RFC5245]
a=ice-pwd:74af08a068a28a397a4c3f31747d1ee34 [RFC5245]
a=fingerprint:sha-1 1f:ef:6d:f7:c9:c7:70:9d:1f:66:99:41:49:83: 4a:97:0e79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 62537 typ host [RFC5245]
a=candidate:0 2 2122194687 192.168.1.4 62537 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 62537 typ srflx raddr 192.168.1.4 rport 62537 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 62537 typ srflx raddr 192.168.1.4 rport 62537 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.7 SDP Answer w/BUNDLE
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation] Bob supports BUNDLE semantics.
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=mid:audio [RFC5888] Audio m=line part of the BUNDLE group
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=sendrecv [RFC3264]
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-fb:109 nack [RFC5104]
a=rtcp-mux [RFC5761]
a=ssrc:33333 cname:Q/1HmN4Xa5NWs1ao [RFC5576]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 49203 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:video [RFC5888] Video m=line part of the BUNDLE group with the port from audio line repeated
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=rtcp-mux [RFC5761]
a=ssrc:44444 cname:Q/2AqlmN4Xa5NWs [RFC5576]
a=ice-ufrag:85bc300d [RFC5245]
a=ice-pwd:bd2de4e9991c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 41:49:83:4a:99:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.7 SDP Offer for BAS
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=mid:audio [RFC5888] - Port number finalized as Bundle Address.
a=rtcp-mux [RFC5761]
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:109 nack [RFC5104]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 54609 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=mid:video [RFC5888]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ssrc:22222 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]

5.2.8. Audio, Video and Data Session

This example shows SDP for negotiating a session with Audio, Video and data streams between Alice and Bob with BUNDLE support known.



    Audio,Video,Data with BUNDLE support known

Alice                                       Bob
|                                            |
|                                            |
|Alice indicates BUNDLE support with         |
|identical address across all the m=lines    |
|                                            |
|                                            |
|     Offer(Audio:Opus Video:VP8 Data)       |
|------------------------------------------->|
|                                            |Bob does
|                                            |the same
|    Answer(Audio:Opus,Video:VP8 Data)       |
|<-------------------------------------------|
|                                            |
|                                            |
|                                            |
|    Two-way Audio,Video, Data multiplexed   |
|............................................|
|                                            |
|                                            |

5.2.8 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video data [I-D.ietf-mmusic-sdp-bundle-negotiation]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605]
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2122194687 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:109 nack [RFC5104]
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=video 54609 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605]
a=mid:video [RFC5888]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=ssrc:22222 cname:Q/aoNWs11HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=application 54609 DTLS/SCTP 5000 [I-D.ietf-rtcweb-data-channel]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:data [RFC5888]
a=sctpmap:5000 webrtc-DataChannel streams=1;label="channel 1"; subprotocol="chat"; [I-D.ietf-mmusic-sctp-sdp]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
5.2.8 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video data [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice] Bob's trickle support support is indicated at the session level
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=rtcp-fb:109 nack [RFC5104]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:33333 cname:L/aoNWs11HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
m=video 49203 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=mid:video [RFC5888]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506]
m=application 49203 DTLS/SCTP 5000 [I-D.ietf-mmusic-sctp-sdp]
c=IN IP4 98.248.92.771 [RFC4566]
a=mid:data [RFC5888]
a=sctpmap:5000 webrtc-DataChannel streams=16;label="channel 1"; subprotocol="chat"; [I-D.ietf-mmusic-sctp-sdp]
a=setup:active [RFC4145]
a=sendrecv [RFC3264]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]

5.2.9. Audio, Video Session with BUNDLE Unsupported

This use-case illustrates SDP Offer/Answer exchange where the far-end (Bob) either doesn't support media bundling or doesn't want to group m=lines over a single 5-tuple.

On successful Offer/Answer exchange, Alice and Bob each end up using unique 5-tuple for audio and video media streams respectively.



   Two-Way Secure Audio,Video with BUNDLE Unsupported

Alice                                                 Bob
|                                                      |
|                                                      |
|     Alice offers BUNDLE support with unique address  |
|           for the audio and video m-line             |
|                                                      |
|                                                      |
|           Offer(Audio:Opus Video:VP8)                |
|----------------------------------------------------->|
|                                                      |Bob
|                                                      |doesn't
|                                                      |support
|                                                      |BUNDLE
|           Answer(Audio:Opus Video:VP8)               |
|<-----------------------------------------------------|
|                                                      |Bob uses
|                                                      |unique
|                                                      |addresses
|                                                      |across the
|                                                      |m=lines
|                                                      |
|2Way Call with Audio and Video on different 5-tuples  |
|......................................................|
|                                                      |
|                                                      |

5.2.9 SDP Offer w/BUNDLE
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 55232 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=mid:audio [RFC5888] Audio m=line part of BUNDLE group with a unique port number
a=rtcp:55232 IN IP4 24.23.204.141 [RFC3605]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=sendrecv [RFC3264]
a=rtcp-mux [RFC5761]
a=rtcp-fb:109 nack [RFC5104]
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 55232 typ host [RFC5245]
a=candidate:0 2 UDP 2122194687 192.168.1.4 55232 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 55232 typ srflx raddr 192.168.1.4 rport 55232 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 55232 typ srflx raddr 192.168.1.4 rport 55232 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 54332 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=mid:video [RFC5888] Video m=line part of the BUNDLE group with a unique port number
a=rtcp:54332 IN IP4 24.23.204.141 [RFC3605]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145] - Alice can perform DTLS before Answer arrives
a=rtcp-mux [RFC5761]
a=ssrc:22222 cname:yvY7/EocUG1f0fcg [RFC5576]
a=ice-ufrag:7872093 [RFC5245]
a=ice-pwd:ee3474af08a068a28a397a4c3f31747d1 [RFC5245]
a=fingerprint:sha-1 6d:f7:c9:c7:70:9d:1f:66:79:a8:07:99:41: 49:83:4a:97:0e:1f:ef [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.4 54332 typ host [RFC5245]
a=candidate:0 2 2122194687 192.168.1.4 54332 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 24.23.204.141 54332 typ srflx raddr 192.168.1.4 rport 54332 [RFC5245]
a=candidate:1 2 UDP 1685987071 24.23.204.141 54332 typ srflx raddr 192.168.1.4 rport 54332 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
5.2.9 SDP Answer without BUNDLE
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 53214 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=sendrecv [RFC3264]
a=rtcp-fb:109 nack [RFC5104]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 53214 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 53214 typ srflx raddr 192.168.1.7 rport 53214 [RFC5245]
a=candidate:0 2 UDP 2122194687 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1685987071 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 58679 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:56507 IN IP4 98.248.92.77 [RFC3605]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=setup:active [RFC4145] - Bob carries out DTLS Handshake in parallel
a=sendrecv [RFC3264]
a=ice-ufrag:85bC300 [RFC5245]
a=ice-pwd:325921d5d47efbabd9a2de4e99bd291c [RFC5245]
a=fingerprint:sha-1 9d:1f:66:79:a8:07:99:41:49:83:4a:97:0e:1f: ef:6d:f7:c9:c7:70 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 58679 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 58679 typ srflx raddr 192.168.1.7 rport 58679 [RFC5245]
a=candidate:0 1 UDP 2122194687 192.168.1.7 56507 typ host [RFC5245]
a=candidate:1 1 UDP 1685987071 98.248.92.77 56507 typ srflx raddr 192.168.1.7 rport 58679 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]

5.2.10. Audio, Video BUNDLED, but Data (Not BUNDLED)

This example show-cases SDP for negotiating a session with Audio, Video and data streams between Alice and Bob with data stream not being part of the BUNDLE group. This is shown by assigning unique port for data media sections.


       Audio, Video, with Data (Not in BUNDLE)

Alice                                                 Bob
|                                                      |
|                                                      |
|Alice wants to multiplex audio, video but not data    |
|                                                      |
|                                                      |
|  Offer(Audio:Opus Video:VP8, Data(not in BUNDLE))    |
|----------------------------------------------------->|
|                                                      |
|                                                      |
|       Answer(Audio:Opus Video:VP8, Data)             |
|<-----------------------------------------------------|
|                                                      |
|                                                      |
|2 Way Call with Audio, Video Multiplexed except data  |
|......................................................|
|                                                      |


5.2.10 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice wants to BUNDLE only audio and video media.
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605]
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 54609 typ host [RFC5245]
a=rtcp-fb:109 nack [RFC5104]
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
m=video 54609 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:54609 IN IP4 24.23.204.141 [RFC3605]
a=mid:video [RFC5888]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 54609 typ host [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=ssrc:22222 cname:Q/aoNWs11HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
m=application 10000 DTLS/SCTP 5000 [I-D.ietf-rtcweb-data-channel]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:data [RFC5888]
a=sctpmap:5000 webrtc-DataChannel streams=16;label="channel 1"; subprotocol="chat"; [I-D.ietf-mmusic-sctp-sdp]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=ice-ufrag:89819013 [RFC5245]
a=ice-pwd:1747d1ee3474af08a068a28a397a4c3f3 [RFC5245]
a=fingerprint:sha-1 0e:1f:ef:6d:f7:c9:c7:70:99:41:49:83:4a:97: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 10000 typ host [RFC5245]
5.2.10 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=rtcp-fb:109 nack [RFC5104]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7: 70:9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=ssrc:33333 cname:L/aoNWs11HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
m=video 49203 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 98.248.92.771 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=mid:video [RFC5888]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506]
m=application 20000 DTLS/SCTP 5000 [I-D.ietf-mmusic-sctp-sdp]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:data [RFC5888]
a=sctpmap:5000 webrtc-DataChannel streams=1;label="channel 1"; subprotocol="chat"; [I-D.ietf-mmusic-sctp-sdp]
a=setup:active [RFC4145]
a=sendrecv [RFC3264]
a=ice-ufrag:991Ca2a5e [RFC5245]
a=ice-pwd:921d5d47efbabd9a2de4e99bd291c325 [RFC5245]
a=fingerprint:sha-1 6d:f7:c9:c7:70:9d:1f:66:79:a8:07:99:41:49: 83:4a:97:0e:1f:ef [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 20000 typ host [RFC5245]

5.2.11. Audio Only, Add Video to BUNDLE

This example involves 2 Offer/Answer exchanges. First one setting up Audio-only session followed by an updated Offer/Answer exchange to add video stream to the ongoing session. Also the newly added video stream is BUNDLED with the audio stream.



         Audio Only , Add Video and BUNDLE

Alice                                                 Bob
|                                                      |
|                                                      |
|        Alice indicates support for BUNDLE            |
|                                                      |
|                Offer(Audio:Opus)                     |
|----------------------------------------------------->|
|                                                      |Bob
|                                                      |supports
|                                                      |BUNDLE
|                Answer(Audio:Opus)                    |
|<-----------------------------------------------------|
|                                                      |Alice adds
|                                                      |video stream
|        Updated Offer(Audio:Opus, Video:VP8)          |to BUNDLE
|----------------------------------------------------->|
|                                                      |
|                                                      |Bob accepts
|        Updated Answer(Audio:Opus, Video:VP8)         |
|<-----------------------------------------------------|
|                                                      |
|   2Way Call with Audio and Video Multiplexed         |
|......................................................|
|                                                      |
|                                                      |

5.2.11 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice wants to BUNDLE only audio and video media.
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-fb:109 nack [RFC5104]
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
5.2.10 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=rtcp-fb:109 nack [RFC5104]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7: 70:9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:33333 cname:L/aoNWs11HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
5.2.11 SDP Updated Offer
SDP Contents RFC#/Notes
v=1 Version number incremented [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice wants to BUNDLE only audio and video media.
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-fb:109 nack [RFC5104]
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
m=video 54609 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:video [RFC5888]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=ssrc:22222 cname:Q/aoNWs11HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
5.2.11 SDP Updated Answer
SDP Contents RFC#/Notes
v=1 [RFC4566] Version number incremented
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio video [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:audio [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=rtcp-fb:109 nack [RFC5104]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:33333 cname:L/aoNWs11HmN4Xa5 [RFC5576]
a=rtcp-rsize [RFC5506]
m=video 49203 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:video [RFC5888]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=rtcp-fb:120 nack [RFC5104]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506]

5.3. MultiResolution, RTX, FEC Examples

This section deals with scenarios related to multi-source, multi-stream negotiation such as layered coding, simulcast, along with techniques that deal with providing robustness against transmission errors such as FEC and RTX. Also to note, mechanisms such as FEC and RTX could be envisioned in the above basic scenarios as well.

5.3.1. Sendonly Simulcast Session with 2 cameras and 2 encodings per camera

The SDP below shows Offer/Answer exchange with one audio and two video sources. Each of the video source can be sent at two different resolutions.

One video source corresponds to VP8 encoding, while the other corresponds to H.264 encoding.

bundle-only framework is used along with BUNDLE grouping framework to enable multiplexing of all the 5 streams (1 audio stream + 4 video streams) over a single RTP Session.


       1 Way Successful Simulcast w/BUNDLE

Alice                                            Bob
|                                                 |
|                                                 |
|     Alice offers 2 sendonly video sources       |
|     with 2 simulcast encodings per source       |
|           and bundle-only for video             |
|                                                 |
|                                                 |
|   Offer(Audio:Opus,Video1:VP8,Video2:H.264)     |
|------------------------------------------------>|
|                                                 |
|                                                 |
|    Answer(Audio:Opus Video1:VP8,Video2:H.264)   |
|<------------------------------------------------|
|                                                 |
|One-Way 1 Opus, 2 H.264 and 2 VP8 video streams, |
| all multiplexed                                 |
|.................................................|
|                                                 |
|                                                 |


5.3.1 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 m2 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m0 [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendonly [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=rtcp-fb:109 nack [RFC5104]
a=ssrc:11111 C90alEocUG1f0fcg [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 98 100 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m1 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=imageattr:98 [x=1280,y=720] [RFC6236]Camera-1,Encoding-1 Resolution
a=fmtp:98 max-fr=30 [RFC4566]
a=imageattr:100 [x=640,y=480] [RFC6236] Camera-1,Encoding-2 Resolution
a=fmtp:100 max-fr=15 [RFC4566]
a=simulcast: send 98;100 [I-D.ietf-mmusic-sdp-simulcast] Alice can send 2 resolutions
a=ssrc:12345 cname:axzo1278npDlAzM73 [RFC5576] [RFC7022] Camera-1,Encoding-1 SSRC with Session CNAME
a=ssrc:45678 cname:axzo1278npDlAzM73 [RFC5576] [RFC7022] Camera-1,Encoding-2 SSRC with Session CNAME
a=sendonly [RFC3264] - Send only video stream
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-fb:98 nack [RFC5104]
a=rtcp-fb:98 nack pli [RFC5104]
a=rtcp-fb:98 ccm fir [RFC5104]
a=rtcp-fb:100 nack [RFC5104]
a=rtcp-fb:100 nack pli [RFC5104]
a=rtcp-fb:100 ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 101 102 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tc Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m2 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:101 H264/90000 [RFC3984]
a=rtpmap:102 H264/90000 [RFC3984]
a=fmtp:101 profile-level-id=4d0028;packetization-mode=1;max-fr=30 [RFC3984]Camera-2,Encoding-1 Resolution
a=fmtp:102 profile-level-id=4d0028;packetization-mode=1;max-fr=15 [RFC3984]Camera-2,Encoding-2 Resolution
a=simulcast: send 101;102 [I-D.ietf-mmusic-sdp-simulcast]
a=ssrc:67890 cname:axzo1278npDlAzM73 [RFC5576] [RFC7022] Camera-2,Encoding-1 SSRC with Session CNAME
a=ssrc:56789 cname:axzo1278npDlAzM73 [RFC5576] [RFC7022] Camera-2,Encoding-2 SSRC with Session CNAME
a=sendonly [RFC3264] - Send only video stream
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-fb:101 nack [RFC5104]
a=rtcp-fb:101 nack pli [RFC5104]
a=rtcp-fb:101 ccm fir [RFC5104]
a=rtcp-fb:102 nack [RFC5104]
a=rtcp-fb:102 nack pli [RFC5104]
a=rtcp-fb:102 ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
5.3.1 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 m2 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m0 [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=rtcp-fb:109 nack [RFC5104]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ssrc:22222 cname:y8/C90alEocUG1f0fcg [RFC5576]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 2 UDP 694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.4 rport 49203 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 49203 UDP/TLS/RTP/SAVPF 98 100 BUNDLE accepted with port repeated from the audio port
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m1 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=imageattr:98 [x=1280,y=720] [RFC6236]Camera-1,Encoding-1 Resolution
a=fmtp:98 max-fr=30 [RFC4566]
a=imageattr:100 [x=640,y=480] [RFC6236] Camera-1,Encoding-2 Resolution
a=fmtp:100 max-fr=15 [RFC4566]
a=recvonly [RFC3264] - receive only video stream
a=simulcast: recv 98;100 [I-D.ietf-mmusic-sdp-simulcast]
a=ssrc:54321 cname:y8/C90alEocUG1f0fcg [RFC5576]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.4 rport 60065 [RFC5245]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5576]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-rsize [RFC5506]
m=video 54609 UDP/TLS/RTP/SAVPF 101 102 BUNDLE accepted with port repeated from the audio port
c=IN IP4 98.248.92.77 [RFC4566]
a=rtcp:56503 IN IP4 98.248.92.77 [RFC3605]
a=msid:ma tc Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc)
a=mid:m2 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:101 H264/90000 [RFC3984]
a=rtpmap:102 H264/90000 [RFC3984]
a=recvonly [RFC3264]
a=fmtp:101 profile-level-id=4d0028;packetization-mode=1;max-fr=30 [RFC3984]
a=fmtp:102 profile-level-id=4d0028;packetization-mode=1;max-fr=15 [RFC3984]
a=simulcast: recv 101;102 [I-D.ietf-mmusic-sdp-simulcast] Bob accepts to receieve the offered simulcast streams
a=ssrc:90876 cname:axzo1278npDlAzM73 [RFC5576]
a=ice-ufrag:ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5576]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-rsize [RFC5506]

5.3.2. Successful SVC Video Session

This section shows an SDP Offer/Answer for a session with an audio and a single video source. The video source is encoded as layered coding at 3 different resolutions based on [RFC5583]. The video m=line shows 3 streams with last stream (payload 100) dependent on streams with payload 96 and 97 for decoding.


        SVC Session - 3 Layers w/BUNDLE

Alice                                            Bob
|                                                 |
|                                                 |
|      Alice offers 3 sendonly video streams      |
|      as 3 layers of SVC and bundle-only         |
|               for video streams.                |
|                                                 |
|            Offer(Video:H.264 SVC)               |
|------------------------------------------------>|
|                                                 |
|                                                 |Bob accepts Alice's
|                                                 |offered Codec
|                                                 |operation points
|                                                 |
|             Answer(Video:H.264)                 |
|<------------------------------------------------|
|                                                 |
|One-Way  H.264 SVC video streams                 |
|.................................................|
|                                                 |
|                                                 |


5.3.2 SDP Offer with SVC
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m0 [RFC5888] Audio m=line part of BUNDLE group with a unique port number
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=sendonly [RFC3264]
a=rtcp-fb:109 nack [RFC5104]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=ssrc:67890 cname:axzo1278npDlAzM73 [RFC5576]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 96 97 100 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m1 [RFC5888] Audio m=line part of BUNDLE group
a=msid:ma tb
a=rtpmap:96 H264/90000 [RFC3984]
a=fmtp:96 profile-level-id=4d0028; packetization-mode=1;max-fr=30;max-fs=8040 [RFC3984]H.264 Layer 1
a=rtpmap:97 H264/90000 [RFC3984]
a=fmtp:97 profile-level-id=4d0028;packetization-mode=1; max-fr=15;max-fs=1200 [RFC3984] H.264 Layer 2
a=rtpmap:100 H264-SVC/90000 [RFC3984]
a=fmtp:100 profile-level-id=4d0028;packetization-mode=1; max-fr=30;max-fs=8040 [RFC3984]
a=depend:100 lay m1:96,97; [RFC5583]Layer 3 dependent on layers 1 and 2
a=sendonly [RFC3264] - Send only video stream
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=ssrc:1732846380 cname:axzo1278npDlAzM73 [RFC5576]
a=ssrc:1732846381 cname:axzo1278npDlAzM73 [RFC5576]
a=ssrc:1732846382 cname:axzo1278npDlAzM73 [RFC5576]
a=rtcp-fb:* nack [RFC5104]
a=rtcp-fb:* nack pli [RFC5104]
a=rtcp-fb:* ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
5.3.2 SDP Answer with SVC
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m0 [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.5 rport 60065 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 54609 UDP/TLS/RTP/SAVPF 96 100 BUNDLE accepted Bundle address same as audio m=line.
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:56503 IN IP4 98.248.92.77 [RFC3605]
a=mid:m1 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:96 H264/90000 [RFC3984]
a=fmtp:96 profile-level-id=4d0028;packetization-mode=1; max-fr=30;max-fs=8040 [RFC3984]H.264 Layer 1
a=rtpmap:100 H264-SVC/90000 [RFC3984]
a=fmtp:100 profile-level-id=4d0028;packetization-mode=1; max-fr=30;max-fs=8040 [RFC3984]
a=depend:100 lay m1:96; [RFC5583] Bob chooses 2 Codec Operation points
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.5 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.142 64678 typ srflx raddr 192.168.1.5 rport 64678 [RFC5245]
a=recvonly [RFC3264] - Receive only video stream
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=ssrc:4638117328 cname:axzo1278npDlAzM73 [RFC5576]
a=rtcp-rsize [RFC5506]

5.3.3. Successful Simulcast Video Session with Retransmission

This section shows an SDP Offer/Answer exchange for a simulcast scenario with 2 two resolutions and has [RFC4588] style re-transmission flows.



      Simulcast Streams with Retransmission

Alice                                                    Bob
|                                                         |
|                                                         |
|Alice offers single audio and simulcasted video streams  |
|                                                         |
|                                                         |
|    Offer(Audio:Opus Video:VP8 with 2 resolutions)       |
|    & RTX stream                                         |
|-------------------------------------------------------->|
|                                                         |
|                                                         |
|          Answer (Bob accepts Alice's offer)             |
|<--------------------------------------------------------|
|                                                         |
|                                                         |
|One-Way 1 Opus, 2 VP8 and RTX video streams,all muxed    |
|.........................................................|
|                                                         |
|                                                         |

5.3.3 SDP Offer w/Simulcast, RTX
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m0 [RFC5888] Audio m=line part of BUNDLE group with a unique port number
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=sendonly [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7: 70:9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 98 100 101 103 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m1 [RFC5888]
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:101 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:103 VP8/90000 [I-D.ietf-payload-vp8]
a=fmtp:98 max-fr=30;max-fs=8040 [RFC4566]
a=fmtp:100 max-fr=15;max-fs=1200 [RFC4566]
a=fmtp:101 apt=98;rtx-time=3000 [RFC4588]
a=fmtp:103 apt=100;rtx-time=3000 [RFC4588]
a=simulast: send 98;100 [I-D.ietf-mmusic-sdp-simulcast]
a=ssrc-group:FID 12345 34567 [RFC5888]
a=ssrc-group:FID 78990 90887 [RFC5888]
a=ssrc:12345 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:78990 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:34567 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:90887 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=sendonly [RFC3264]
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-fb:* nack [RFC5104]
a=rtcp-fb:* nack pli [RFC5104]
a=rtcp-fb:* ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
5.3.3 SDP Answer w/Simulcast, RTX
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m0 [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ssrc:33333 cname:L/HmN4Xa5NWs1ao1 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 64678 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 49203 UDP/TLS/RTP/SAVPF 98 100 101 103 BUNDLE accepted with Bundle address identical to audio m-line
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m1 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:101 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:103 VP8/90000 [I-D.ietf-payload-vp8]
a=fmtp:98 max-fr=30;max-fs=8040 [RFC4566]
a=fmtp:100 max-fr=15;max-fs=1200 [RFC4566]
a=fmtp:101 apt=98;rtx-time=3000 [RFC4588]
a=fmtp:103 apt=100;rtx-time=3000 [RFC4588]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7: 70:9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.772 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=simulcast: recv 98;100 [I-D.ietf-mmusic-sdp-simulcast]
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-fb:* nack [RFC5104]
a=rtcp-fb:* nack pli [RFC5104]
a=rtcp-fb:* ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]

5.3.4. Successful 1-way Simulcast Session with 2 resolutions and RTX - One resolution rejected

This section shows an SDP Offer/Answer exchange for a simulcast scenario with 2 two resolutions.

It also showcases when Bob rejects one of the Simulcast Video Stream which results in the rejection of the associated repair stream implicitly.



     Simulcast Streams with Retransmission Rejected

Alice                                                    Bob
|                                                         |
|                                                         |
|Alice offers single audio and simulcasted video streams  |
| with bundle-only for video                              |
|                                                         |
|                                                         |
|Offer(Audio:Opus Video:VP8 with 2 resolutions,RTX Stream)|
|-------------------------------------------------------->|
|                                                         |
|                                                         |Bob accepts 1
|                                                         |simulcast,rtx
|                                                         |rejects the
|                                                         |other
|   Answer(Audio:Opus Video:VP8 with 1 res & RTX Stream)  |
|<--------------------------------------------------------|
|                                                         |
|                                                         |
|1-way audio,video session and its associated RTX stream, |
| all multiplexed                                         |
|.........................................................|
|                                                         |
|                                                         |


5.3.4 SDP Offer w/Simulcast, RTX
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m0 [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=sendonly [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ssrc:11111 cname:LP/NWs1ao1HmN4Xa5 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 98 100 101 103 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m1 [RFC5888]
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:101 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:103 VP8/90000 [I-D.ietf-payload-vp8]
a=fmtp:98 max-fr=30;max-fs=8040 [RFC4566]
a=fmtp:100 max-fr=15;max-fs=1200 [RFC4566]
a=fmtp:101 apt=98;rtx-time=3000 [RFC4588]
a=fmtp:103 apt=100;rtx-time=3000 [RFC4588]
a=simulcast: send 98;100 [I-D.ietf-mmusic-sdp-simulcast]
a=ssrc-group:FID 12345 34567 [RFC5888]
a=ssrc-group:FID 78990 90887 [RFC5888]
a=ssrc:12345 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:78990 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:34567 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:90887 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=sendonly [RFC3264]
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-fb:* nack [RFC5104]
a=rtcp-fb:* nack pli [RFC5104]
a=rtcp-fb:* ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
5.3.4 SDP Answer no Simulcast
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:49203 IN IP4 98.248.92.77 [RFC3605]
a=mid:m0 [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 49203 UDP/TLS/RTP/SAVPF 98 101 BUNDLE accepted with Bundle address identical to audio m-line
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m1 [RFC5888]
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:101 VP8/90000 [I-D.ietf-payload-vp8]
a=fmtp:98 max-fr=30;max-fs=8040 [RFC4566]
a=fmtp:101 apt=98;rtx-time=3000 [RFC4588]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.5 rport 60065 [RFC5245]
a=simulcast: recv 98 [I-D.ietf-mmusic-sdp-simulcast] Bob accepts only one simulcast resolution
a=ssrc:54321 cname:NWs1ao1HmN4Xa5 [RFC5576]
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-rsize [RFC5506]

5.3.5. Simulcast Video Session with Forward Error Correction

This section shows an SDP Offer/Answer exchange for Simulcast video stream at two resolutions and and has [RFC5956] style FEC flows.

On completion of the Offer/Answer exchange mechanism we end up one audio stream, 2 simulcast video streams and 2 associated FEC streams are sent over a single 5-tuple.


      Simulcast Streams with Forward Error Correction

Alice                                                            Bob
|                                                               |
|                                                               |
|                                                               |
|Alice offers single audio and simulcasted video streams        |
|with bundle-only                                               |
|                                                               |
|                                                               |
|Offer(Audio:Opus Video:VP8 with 2 resolutions with FEC Streams)|
|-------------------------------------------------------------->|
|                                                               |
|                                                               |Bob
|                                                               |accepts
|                                                               |Alice's
|                                                               |offer
|Answer(Audio:Opus Video:VP8 with 2 resolutions w/FEC Streams)  |
|<--------------------------------------------------------------|
|                                                               |
|One-Way Audio,Video session with 4 video streams(Simulcast     |
| and FEC) all multiplexed                                      |
|...............................................................|
|                                                               |
|                                                               |
|                                                               |

5.3.5 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m0 [RFC5888]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=sendonly [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 98 100 101 103 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m1 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:101 1d-interleaved-parityfec/90000 [RFC5956]
a=rtpmap:103 1d-interleaved-parityfec/90000 [RFC5956]
a=fmtp:98 max-fr=30;max-fs=8040 [RFC4566]
a=fmtp:100 max-fr=15;max-fs=1200 [RFC4566]
a=fmtp:101 L=5; D=10; repair-window=200000 [RFC5956]
a=fmtp:103 L=5; D=10; repair-window=200000 [RFC5956]
a=simulcast: send 98;100 [I-D.ietf-mmusic-sdp-simulcast]
a=depend:98 fec m1:101 TBD
a=depend:100 fec m1:103 TBD
a=ssrc-group:FEC-FR 12345 34567 [RFC5888]
a=ssrc-group:FEC-FR 78990 90887 [RFC5888]
a=ssrc:12345 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:78990 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:34567 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=ssrc:90887 cname:Q/NWs1ao1HmN4Xa5 [RFC5576]
a=sendonly [RFC3264]
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=rtcp-fb:* nack [RFC5104]
a=rtcp-fb:* nack pli [RFC5104]
a=rtcp-fb:* ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]
5.3.5 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS m0 [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m0 [RFC5888] Audio m=line part of BUNDLE group with a unique port number
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ssrc:33333 cname:Y9/cZke09JAtpl98 [RFC5576]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d: 1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 49203 UDP/TLS/RTP/SAVPF 98 100 101 103 BUNDLE accepted with Bundle Address identical to audio m=line.
c=IN IP4 98.248.92.77 [RFC4566]
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=mid:m1 [RFC5888] Video m=line part of BUNDLE group
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:101 1d-interleaved-parityfec/90000 [RFC5956]
a=rtpmap:103 1d-interleaved-parityfec/90000 [RFC5956]
a=fmtp:98 max-fr=30;max-fs=8040 [RFC4566]
a=fmtp:100 max-fr=15;max-fs=1200 [RFC4566]
a=fmtp:101 L=5; D=10; repair-window=200000 [RFC5956]
a=fmtp:103 L=5; D=10; repair-window=200000 [RFC5956]
a=simulcast: recv 98;100 [I-D.ietf-mmusic-sdp-simulcast]
a=depend:98 fec m1:101 TBD
a=depend:100 fec m1:103 TBD
a=recvonly [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=bundle-only [UNIFIED-PLAN]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=rtcp-fb:* nack [RFC5104]
a=rtcp-fb:* nack pli [RFC5104]
a=rtcp-fb:* ccm fir [RFC5104]
a=rtcp-rsize [RFC5506]

5.4. Others

The examples in the section provide SDP for a variety of scenarios related to RTP Header extension, Legacy Interop scenarios and more.

5.4.1. Audio Session - Voice Activity Detection

This example shows Alice indicating the support of the RTP header extension to include the audio-level of the audio sample carried in the RTP packet.

           2-Way Audio with VAD

 Alice                                    Bob
 |                                         |
 |                                         |
 |Alice indicates support for including    |
 |audio level in RTP header                |
 |                                         |
 |     Offer(Audio:Opus,PCMU,PCMA)         |
 |---------------------------------------->|
 |                                         |
 |                                         |
 |     Answer(Audio:Opus,PCMU,PCMA)        |
 |<----------------------------------------|
 |                                         |
 |                                         |Bob accepts and
 |                                         |indicates his
 |                                         |support as well
 |                                         |
 |     Two way Opus Audio                  |
 |.........................................|
 |                                         |
 |Per packet audio-level is included in the|
 |RTP header                               |
 |                                         |


5.4.1 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtpmap:0 PCMU/8000 [RFC3551]
a=rtpmap:0 PCMA/8000 [RFC3551]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7: 70:9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-fb:* nack [RFC5104]
a=ssrc:11111 cname:QCL/1HmN4Xa5CClapa [RFC5576]
a=rtcp-rsize [RFC5506]
5.4.1 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 0 98 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus] - Bob accepts only Opus Codec
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtpmap:0 PCMU/8000 [RFC3551] PCMU Audio Codec
a=rtpmap:0 PCMA/8000 [RFC3551] PCMA Audio Codec
a=rtcp-fb:* nack [RFC5104]
a=sendrecv [RFC3264] - Bob can send and recv audio
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:1732846380 cname:EocUG1f0fcg/yvY7 [RFC5576]
a=rtcp-rsize [RFC5506]

5.4.2. Audio Conference - Voice Activity Detection

This example shows SDP for RTP header extension that allows RTP-level mixers in audio conferences to deliver information about the audio level of individual participants.



     Audio Conference with VAD Support

Alice                                    Mixer
|                                         |
|Alice indicates her interest to audio    |
|levels for the contributing sources      |
|                                         |
|Offer(Audio:Opus,PCMU,PCMA)              |
|---------------------------------------->|
|                                         |
|                                         |
|Answer(Audio:Opus,PCMU,PCMA)             |
|<----------------------------------------|
|                                         |
|                                         |Mixer indicates
|                                         |it can provide
|                                         |audio-levels
|Two way Opus Audio                       |
|.........................................|
|                                         |
|Audio-levels per CSRCS is included in the|
|RTP header                               |
|                                         |


5.4.2 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=extmap:1/recvonly urn:ietf:params:rtp-hdrext:csrc-audio-level [RFC6465]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtpmap:0 PCMU/8000 [RFC3551] PCMU Audio Codec
a=rtpmap:0 PCMA/8000 [RFC3551] PCMA Audio Codec
a=rtcp-fb:* nack [RFC5104]
a=sendrecv [RFC3264] - Alice can send and recv audio
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=ssrc:11111 cname:QCL/1HmN4Xa5CClapa [RFC5576]
a=rtcp-rsize [RFC5506]
5.4.2 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566] - Session Origin Information
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE audio [I-D.ietf-mmusic-sdp-bundle-negotiation]
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 0 98 [RFC4566]
c=IN IP4 98.248.92.77 [RFC4566]
a=mid:audio [RFC5888]
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtcp:60065 IN IP4 98.248.92.77 [RFC3605]
a=extmap:1/sendonly urn:ietf:params:rtp-hdrext:csrc-audio-level [RFC6465]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtpmap:0 PCMU/8000 [RFC3551] PCMU Audio Codec
a=rtpmap:0 PCMA/8000 [RFC3551] PCMA Audio Codec
a=rtcp-fb:* nack [RFC5104]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7: 70:9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=ssrc:2222 cname:HmN4Xa5CC/lapa [RFC5576]
a=rtcp-rsize [RFC5506]

5.4.3. Successful legacy Interop Fallback with bundle-only

In the scenario described below, Alice is a multi-stream capable WebRTC endpoint while Bob is a legacy VOIP end-point. The SDP Offer/Answer exchange demonstrates successful session setup with fallback to audio only stream negotiated via bundle-only framework between the end-points. Specifically,

  • Offer from Alice describes 2 cameras via 2 video m=lines with both marked as bundle-only.
  • Since Bob doesnot recognize either the BUNDLE mechanism or the bundle-only attribute, he accepts only the audio stream from Alice.


         Successful 2-Way WebRTC <-> VOIP Interop

Alice                                                       Bob
|                                                           |
|                                                           |
|       Alice is a multistream capable WebRTC end-point     |
|          & Bob is behind a legacy VOIP system             |
|                                                           |
|Offer(Audio:Opus Video:2 VP8,2 H2.64 Streams) with         |
|          bundle-only                                      |
|---------------------------------------------------------->|
|     Alice marks both the video streams as bundle-only     |
|                                                           |
|                                                           |
|                  Answer(Audio:Opus)                       |
|<----------------------------------------------------------|
|                                                           |Bob
|                                                           |accepts
|                                                           |audio
|                                                           |stream,
|                                                           |since he
|                                                           |doesn't
|                                                           |recognize
|                                                           |bundle-only
|                                                           |
|                   Two way Opus Audio                      |
|...........................................................|
|                                                           |
|                                                           |

5.4.3 SDP Simulcast bundle-only
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=msid-semantic:WMS ma [I-D.ietf-mmusic-msid]
a=group:BUNDLE m0 m1 m2 [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics
a=ice-options:trickle [I-D.ietf-mmusic-trickle-ice]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m0 [RFC5888] Audio m=line part of BUNDLE group with a unique port number
a=msid:ma ta Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta)
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=sendrecv [RFC3264]
a=setup:actpass [RFC4145]
a=rtcp-mux [RFC5761]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70: 9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=ssrc:11111 cname:axzo1278npDlAzM73 [RFC5576]E
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 98 100 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m1 [RFC5888] Video m=line part of BUNDLE group
a=msid:ma tb Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb)
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=imageattr:98 [x=1280,y=720] [RFC6236]
a=fmtp:98 max-fr=30 [RFC4566]
a=ssrc:12345 cname:axzo1278npDlAzM73 [RFC5576]
a=bundle-only [UNIFIED-PLAN]
a=sendrecv [RFC3264]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 101 103 bundle-only video line with port number set to zero
c=IN IP4 24.23.204.141 [RFC4566]
a=rtcp:64678 IN IP4 24.23.204.141 [RFC3605]
a=mid:m2 [RFC5888] Video m=line part of BUNDLE group
a=msid:ma tc Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc)
a=rtpmap:101 H264/90000 [RFC3984]
a=rtpmap:103 H264/90000 [RFC3984]
a=fmtp:101 profile-level-id=4d0028;packetization-mode=1;max-fr=30 [RFC3984]Camera-2,Encoding-1 Resolution
a=ssrc:67890 cname:axzo1278npDlAzM73 [RFC5576]
a=bundle-only [UNIFIED-PLAN]
a=sendrecv [RFC3264]
a=rtcp-rsize [RFC5506]
5.4.3 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20519 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
m=audio 49203 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=rtcp:60065 IN IP4 24.23.204.141 [RFC3605]
a=rtpmap:109 opus/48000/2 [I-D.ietf-payload-rtp-opus]
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level [RFC6464]
a=ptime:20 [I-D.ietf-payload-rtp-opus]
a=rtcp-fb:109 nack [RFC5104]
a=sendrecv [RFC3264]
a=setup:active [RFC4145]
a=ice-ufrag:ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7: 70:9d:1f:66:79:a8:07 [RFC5245]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
a=rtcp-rsize [RFC5506]
m=video 0 UDP/TLS/RTP/SAVPF 98 100 Bob doesn't recognize bundle-only and hence rejects the video stream
c=IN IP4 98.248.92.77 [RFC4566]
a=rtpmap:98 VP8/90000 [I-D.ietf-payload-vp8]
a=rtpmap:100 VP8/90000 [I-D.ietf-payload-vp8]
a=imageattr:98 [x=1280,y=720] [RFC6236]
a=fmtp:98 max-fr=30 [RFC4566]
m=video 0 UDP/TLS/RTP/SAVPF 98 100 Bob doesn't recognize bundle-only and hence rejects the video stream
c=IN IP4 98.248.92.77 [RFC4566]
a=rtpmap:101 H264/90000 [RFC3984]
a=fmtp:101 profile-level-id=4d0028;packetization-mode=1;max-fr=30 [RFC3984]Camera-2,Encoding-1 Resolution

5.4.4. Legacy Interop with RTP/AVP profile

In this section, we attempt to provide session descriptions showcasing inter-operability between a WebRTC end-point and a Legacy VOIP end-point. The ideas included in here are not fully baked into the standards and might be controversial in nature. The hope here is to demonstrate a plausible SDP composition to enchance seamless inter-operability between the aforementioned communication systems.

In the scenario desribed below, Alice is a legacy end-point which sends [RFC3264] Offer with two sets of media descriptions per media type.

  • One set that correponds to [WebRTC] compliant UDP/TLS/RTP/SAVPF based audio and video descriptions.
  • Another set with RTP/AVP based audio and video descriptions for the legacy Interop purposes.
  • Also to note, Alice includes session level DTLS information and media level RTCP feedback information as applicable to both the sets of media descriptions

On the other hand, Bob being a WebRTC end-point, recognizes accepts the media descriptions with RTP/AVP profile. The security and feedback requirements for the session are either handled by a intermediate gateway or with some combination of Alice's capabilities and the intermediate gateway.


           Successful 2-Way WebRTC <-> VOIP Interop

Alice                                                          Bob
|                                                               |
|                                                               |
|  Alice is a legacy VOIP End-point & Bob is a WebRTC End-Point |
|                                                               |
|                                                               |
|                                                               |
|              Offer(Audio:Opus Video:H.264)                    |
|-------------------------------------------------------------->|
|                                                               |
|                                                               |
|Alice includes 2 copies of media descriptions                  |
|1. WebRTC compliant media description (UDP/TLS/RTP/SAVPF)      |
|2. Legacy compliant media description (RTP/AVP)                |
|                                                               |
|                                                               |
|             Answer(Audio:Opus, Video:H.264)                   |
|<--------------------------------------------------------------|
|                                                               |Bob
|                                                               |accepts
|                                                               |"legacy
|                                                               |compliant"
|                                                               |m=line
|                                                               |
|                                                               |
|             Two way Opus Audio, H.264 Video                   |
|...............................................................|
|       Session also suports RTP/RTCP Mux, RTCP Feedback        |
|                                                               |

5.4.5 SDP Offer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 20518 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=ice-ufrag:074c6550 [RFC5245]
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 [RFC5245]
a=rtcp-rsize [RFC5506]
m=audio 54609 UDP/TLS/RTP/SAVPF 109 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=rtpmap:109 opus/48000
a=ptime:20
a=sendrecv [RFC3264]
a=rtcp-mux [RFC5761]
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-fb:109 nack [RFC5104]
m=video 62537 UDP/TLS/RTP/SAVPF 120 [RFC4566]
c=IN IP4 24.23.204.141 [RFC4566]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=rtcp-mux [RFC5761]
a=candidate:0 1 UDP 2113667327 192.168.1.4 62537 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 24.23.204.141 62537 typ srflx raddr 192.168.1.4 rport 62537 [RFC5245]
a=candidate:0 2 2113667326 192.168.1.4 54721 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 54721 typ srflx raddr 192.168.1.4 rport 54721 [RFC5245]
a=rtcp-fb:120 nack pli [RFC5104]
a=rtcp-fb:120 ccm fir [RFC5104]
--------------- These set of media descriptions are for Legacy Inter-op purposes
m=audio 54732 RTP/AVP 109 [RFC4566]Alice includes RTP/AVP audio stream description
c=IN IP4 24.23.204.141 [RFC4566]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:7f:7d:f9:c9:c7:70:9d:1f:66:79:a8:07 [RFC5245]
a=rtpmap:109 opus/48000
a=ptime:20
a=sendrecv [RFC3264]
a=rtcp-mux [RFC5761]Alice still includes RTP/RTCP Mux support
a=candidate:0 1 UDP 2113667327 192.168.1.4 54732 typ host [RFC5245]
a=candidate:1 1 UDP 694302207 24.23.204.141 54732 typ srflx raddr 192.168.1.4 rport 54732 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 [RFC5245]
a=rtcp-fb:109 nack [RFC5104]She adds her intent for NACK RTCP feedback support
m=video 62445 RTP/AVP 120 [RFC4566]Alice includes RTP/AVP video stream description
c=IN IP4 24.23.204.141 [RFC4566]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:7d:f7:c9:c7:70:9d:1f:66:79:a8:07 [RFC5245]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=rtcp-mux [RFC5761]Alice intends to perform RTP/RTCP Mux
a=candidate:0 1 UDP 2113667327 192.168.1.4 62445 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 24.23.204.141 62537 typ srflx raddr 192.168.1.4 rport 62445 [RFC5245]
a=candidate:0 2 2113667326 192.168.1.4 54721 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 24.23.204.141 54721 typ srflx raddr 192.168.1.4 rport 54721 [RFC5245]
a=rtcp-fb:120 nack pli [RFC5104] Alice indicates support for Picture loss Indication and NACK RTCP feedback
a=rtcp-fb:120 ccm fir [RFC5104]
5.4.5 SDP Answer
SDP Contents RFC#/Notes
v=0 [RFC4566]
o=- 16833 0 IN IP4 0.0.0.0 [RFC4566]
s=- [RFC4566]
t=0 0 [RFC4566]
a=ice-ufrag:c300d85b [RFC5245]
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 [RFC5245]
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 [RFC5245]
m=audio 49203 RTP/AVP 109 [RFC4566] Bob accepts RTP/AVP based audio stream
c=IN IP4 98.248.92.77 [RFC4566]
a=rtpmap:109 opus/48000
a=ptime:20
a=sendrecv [RFC3264]
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 [RFC5245]
m=video 63130 RTP/SAVP 120 [RFC4566] Bob accepts RTP/AVP based video stram
c=IN IP4 98.248.92.771 [RFC4566]
a=rtpmap:120 VP8/90000 [I-D.ietf-payload-vp8]
a=sendrecv [RFC3264]
a=candidate:0 1 UDP 2113667327 192.168.1.7 63130 typ host [RFC5245]
a=candidate:1 1 UDP 1694302207 98.248.92.77 63130 typ srflx raddr 192.168.1.7 rport 63130 [RFC5245]
a=candidate:0 2 UDP 2113667326 192.168.1.7 56607 typ host [RFC5245]
a=candidate:1 2 UDP 1694302206 98.248.92.77 56607 typ srflx raddr 192.168.1.7 rport 56607 [RFC5245]

6. IANA Considerations

This document requires no actions from IANA.

7. Acknowledgments

We would like to thank Justin Uberti, Chris Flo for their detailed review and inputs.

8. Change Log

[RFC EDITOR NOTE: Please remove this section when publishing]

Changes from draft-nandakumar-rtcweb-sdp-08

  • Fixed typos
  • Moved to a WG version

Changes from draft-nandakumar-rtcweb-sdp-06 and draft-nandakumar-rtcweb-sdp-07

  • Added clarification on Call-Flow diagram usage
  • More cleanups

Changes from draft-nandakumar-rtcweb-sdp-05

  • Added Ascii chart for all the SDP Eaxamples
  • Improved text and updated SDP Examples for Simulcast and FEC
  • Fixed MediaStream ID Semantics SDP Errors

Changes from draft-nandakumar-rtcweb-sdp-04

  • Interim version of the draft to avert expiry
  • Corrected placement of c= line as per RFC4566
  • Updated simulcast SDP to reflect draft-westerlund-avtcore-rtp-simulcast-04

Changes from draft-nandakumar-rtcweb-sdp-03

  • Aligned more closely with JSEP version -05
  • Added Conventions to help readability
  • Add more examples to clarify BUNDLE use-cases

Changes from draft-nandakumar-rtcweb-sdp-02

  • Major refactoring was done to group the examples in to categories
  • SDP was updated through out to reflect JSEP-04 style of defining attributes per m=line than at the session level.
  • Added 8 new examples.
  • Updated references for Trickle, Unified Plan
  • Add section to explain the syntax conventions followed in the examples.

Changes from draft-nandakumar-rtcweb-sdp-01

  • Updated references to OPUS RTP Payload Specification.
  • Updated BUNDLE examples based on the latest draft-ietf-mmusic-sdp-bundle-negotiation.
  • Added examples for multiple audio and video flows based on Unified Plan.
  • Added new examples for RTX and FEC streams
  • Updated Simulcast and SVC examples

Changes from draft-nandakumar-rtcweb-sdp-00

  • Fixed editorial comments on the mailing list.
  • Updated Data-channel SDP information based on draft-ietf-mmusic-sctp-sdp.
  • Updated BUNDLE examples based on draft-ietf-mmusic-sdp-bundle-negotiation.
  • Added examples for few more BUNDLE variants
  • Added new examples for Simulcast and SVC

9. Informative References

[RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, DOI 10.17487/RFC3264, June 2002.
[RFC4145] Yon, D. and G. Camarillo, "TCP-Based Media Transport in the Session Description Protocol (SDP)", RFC 4145, DOI 10.17487/RFC4145, September 2005.
[RFC4566] Handley, M., Jacobson, V. and C. Perkins, "SDP: Session Description Protocol", RFC 4566, DOI 10.17487/RFC4566, July 2006.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.
[RFC5245] Rosenberg, J., "Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols", RFC 5245, DOI 10.17487/RFC5245, April 2010.
[RFC5506] Johansson, I. and M. Westerlund, "Support for Reduced-Size Real-Time Transport Control Protocol (RTCP): Opportunities and Consequences", RFC 5506, DOI 10.17487/RFC5506, April 2009.
[RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio and Video Conferences with Minimal Control", STD 65, RFC 3551, DOI 10.17487/RFC3551, July 2003.
[RFC3952] Duric, A. and S. Andersen, "Real-time Transport Protocol (RTP) Payload Format for internet Low Bit Rate Codec (iLBC) Speech", RFC 3952, DOI 10.17487/RFC3952, December 2004.
[RFC4796] Hautakorpi, J. and G. Camarillo, "The Session Description Protocol (SDP) Content Attribute", RFC 4796, DOI 10.17487/RFC4796, February 2007.
[RFC5761] Perkins, C. and M. Westerlund, "Multiplexing RTP Data and Control Packets on a Single Port", RFC 5761, DOI 10.17487/RFC5761, April 2010.
[RFC3556] Casner, S., "Session Description Protocol (SDP) Bandwidth Modifiers for RTP Control Protocol (RTCP) Bandwidth", RFC 3556, DOI 10.17487/RFC3556, July 2003.
[RFC5104] Wenger, S., Chandra, U., Westerlund, M. and B. Burman, "Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF)", RFC 5104, DOI 10.17487/RFC5104, February 2008.
[RFC4588] Rey, J., Leon, D., Miyazaki, A., Varsa, V. and R. Hakenberg, "RTP Retransmission Payload Format", RFC 4588, DOI 10.17487/RFC4588, July 2006.
[RFC5956] Begen, A., "Forward Error Correction Grouping Semantics in the Session Description Protocol", RFC 5956, DOI 10.17487/RFC5956, September 2010.
[RFC5888] Camarillo, G. and H. Schulzrinne, "The Session Description Protocol (SDP) Grouping Framework", RFC 5888, DOI 10.17487/RFC5888, June 2010.
[RFC6236] Johansson, I. and K. Jung, "Negotiation of Generic Image Attributes in the Session Description Protocol (SDP)", RFC 6236, DOI 10.17487/RFC6236, May 2011.
[RFC3984] Wenger, S., Hannuksela, M., Stockhammer, T., Westerlund, M. and D. Singer, "RTP Payload Format for H.264 Video", RFC 3984, DOI 10.17487/RFC3984, February 2005.
[RFC5583] Schierl, T. and S. Wenger, "Signaling Media Decoding Dependency in the Session Description Protocol (SDP)", RFC 5583, DOI 10.17487/RFC5583, July 2009.
[RFC5576] Lennox, J., Ott, J. and T. Schierl, "Source-Specific Media Attributes in the Session Description Protocol (SDP)", RFC 5576, DOI 10.17487/RFC5576, June 2009.
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, July 2003.
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, DOI 10.17487/RFC3261, June 2002.
[RFC2326] Schulzrinne, H., Rao, A. and R. Lanphier, "Real Time Streaming Protocol (RTSP)", RFC 2326, DOI 10.17487/RFC2326, April 1998.
[RFC3605] Huitema, C., "Real Time Control Protocol (RTCP) attribute in Session Description Protocol (SDP)", RFC 3605, DOI 10.17487/RFC3605, October 2003.
[RFC2833] Schulzrinne, H. and S. Petrack, "RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals", RFC 2833, DOI 10.17487/RFC2833, May 2000.
[RFC6464] Lennox, J., Ivov, E. and E. Marocco, "A Real-time Transport Protocol (RTP) Header Extension for Client-to-Mixer Audio Level Indication", RFC 6464, DOI 10.17487/RFC6464, December 2011.
[RFC6465] Ivov, E., Marocco, E. and J. Lennox, "A Real-time Transport Protocol (RTP) Header Extension for Mixer-to-Client Audio Level Indication", RFC 6465, DOI 10.17487/RFC6465, December 2011.
[RFC7022] Begen, A., Perkins, C., Wing, D. and E. Rescorla, "Guidelines for Choosing RTP Control Protocol (RTCP) Canonical Names (CNAMEs)", RFC 7022, DOI 10.17487/RFC7022, September 2013.
[I-D.ietf-mmusic-sdp-bundle-negotiation] Holmberg, C., Alvestrand, H. and C. Jennings, "Negotiating Media Multiplexing Using the Session Description Protocol (SDP)", Internet-Draft draft-ietf-mmusic-sdp-bundle-negotiation-23, July 2015.
[I-D.ietf-mmusic-sdp-simulcast] Burman, B., Westerlund, M., Nandakumar, S. and M. Zanaty, "Using Simulcast in SDP and RTP Sessions", Internet-Draft draft-ietf-mmusic-sdp-simulcast-01, July 2015.
[I-D.ietf-payload-rtp-opus] Spittka, J., Vos, K. and J. Valin, "RTP Payload Format for the Opus Speech and Audio Codec", Internet-Draft draft-ietf-payload-rtp-opus-11, April 2015.
[I-D.ietf-payload-vp8] Westin, P., Lundin, H., Glover, M., Uberti, J. and F. Galligan, "RTP Payload Format for VP8 Video", Internet-Draft draft-ietf-payload-vp8-17, September 2015.
[I-D.ietf-rtcweb-jsep] Uberti, J., Jennings, C. and E. Rescorla, "Javascript Session Establishment Protocol", Internet-Draft draft-ietf-rtcweb-jsep-11, July 2015.
[I-D.ietf-mmusic-trickle-ice] Ivov, E., Rescorla, E. and J. Uberti, "Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol", Internet-Draft draft-ietf-mmusic-trickle-ice-02, January 2015.
[I-D.ietf-mmusic-msid] Alvestrand, H., "WebRTC MediaStream Identification in the Session Description Protocol", Internet-Draft draft-ietf-mmusic-msid-10, April 2015.
[I-D.ietf-mmusic-sctp-sdp] Holmberg, C., Loreto, S. and G. Camarillo, "Stream Control Transmission Protocol (SCTP)-Based Media Transport in the Session Description Protocol (SDP)", Internet-Draft draft-ietf-mmusic-sctp-sdp-15, September 2015.
[I-D.ietf-rtcweb-data-channel] Jesup, R., Loreto, S. and M. Tuexen, "WebRTC Data Channels", Internet-Draft draft-ietf-rtcweb-data-channel-13, January 2015.
[WebRTC] , , "WebRTC 1.0: Real-time Communication Between Browsers", <http://dev.w3.org/2011/webrtc/editor/webrtc.html>
[UNIFIED-PLAN] Roach, A., Uberti, J. and M. Thomson, "A Unified Plan for Using SDP with Large Numbers of Media Flows", Internet-Draft draft-roach-mmusic-unified-plan, July 2013.

Authors' Addresses

Suhas Nandakumar Cisco 170 West Tasman Drive San Jose, CA 95134 USA EMail: snandaku@cisco.com
Cullen Jennings Cisco 170 West Tasman Drive San Jose, CA 95134 USA Phone: +1 408 421-9990 EMail: fluffy@cisco.com