Network Working Group | S. Nandakumar |
Internet-Draft | C. Jennings |
Intended status: Informational | Cisco |
Expires: January 8, 2017 | July 7, 2016 |
SDP for the WebRTC
draft-ietf-rtcweb-sdp-02
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.
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 January 8, 2017.
Copyright (c) 2016 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.
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.
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].
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:
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.
A typical web based real-time multimedia communication session can be characterized as below:
The examples given in this document follow the conventions listed below:
For specific details, readers must refer to
[I-D.ietf-rtcweb-jsep] specification.
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) | |.....................................| | | | |
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 audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:60065 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] - Alice intends to use reduced size RTCP for this session |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] Alice supports RTP header extension to indicate audio levels |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Alice's audio stream SSRC. |
a=candidate:0 1 UDP 2122194687 192.168.1.4 61665 typ host | [RFC5245] - RTP Host Candidate |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] - RTP Server Reflexive ICE Candidate |
a=candidate:0 2 UDP 2122194687 192.168.1.4 61667 typ host | [RFC5245] - RTCP Host Candidate |
a=candidate:1 2 UDP 1685987071 24.23.204.141 60065 typ srflx raddr 192.168.1.4 rport 61667 | [RFC5245] - RTCP Server Reflexive ICE Candidate |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 0 8 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Bob can send and recv audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] Opus Codec |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:05067423 | [RFC5245] - ICE user fragment |
a=ice-pwd:1747d1ee3474a28a397a4c3f3af08a068 | [RFC5245] - ICE password parameter |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] - DTLS Fingerprint for SRTP |
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=rtcp-rsize | [RFC5506] - Bob intends to use reduced size RTCP for this session |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] Bob supports audio level RTP header extension as well |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] - Bob's audio stream SSRC. |
a=candidate:0 1 UDP 2122194687 192.168.1.7 51556 typ host | [RFC5245] - RTP/RTCP Host ICE Candidate |
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] - RTP/RTCP Server Reflexive ICE Candidate |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 | |............................................| | |
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 audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password parameter |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] - Alice intends to use reduced size RTCP for this session |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.4 61665 typ host | [RFC5245] - RTP/RTCP Host Candidate |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] - RTP/RTCP Server Reflexive ICE Candidate |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 54609 UDP/TLS/RTP/SAVPF 99 120 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] - Alice can send and recv video |
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=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] - Alice intends to use reduced size RTCP for this session |
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=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
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 audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Bob can send and recv audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Bob accepts only Opus Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] - ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - ICE password |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] - Bob intends to use reduced size RTCP for this session |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
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 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] - RTP/RTCP Server Reflexive ICE Candidate |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 49203 UDP/TLS/RTP/SAVPF 99 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] - Bob can send and recv video |
a=rtpmap:99 H264/90000 | [RFC3984] - Bob accepts H.264 Video Codec. |
a=fmtp:99 profile-level-id=4d0028;packetization-mode=1 | [RFC3984] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] - Bob intends to use reduced size RTCP for this session |
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=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
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 | |.................................| | | | |
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-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Application m=line ********* | ***************************** |
m=application 54609 UDP/DTLS/SCTP webrtc-datachannel | [I-D.ietf-rtcweb-data-channel] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sendrecv | [RFC3264] - Alice can send and recv non-media data |
a=sctp-port:5000 | [I-D.ietf-mmusic-sctp-sdp] |
a=max-message-size:100000 | [I-D.ietf-mmusic-sctp-sdp] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=connection:new | [RFC4145] |
a=ice-ufrag:074c6550 | [RFC5245] - Session Level ICE parameter |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - Session Level ICE parameter |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] - Session DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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] |
****** Application m=line ********* | ***************************** |
m=application 49203 UDP/DTLS/SCTP webrtc-datachannel | [I-D.ietf-mmusic-sctp-sdp] |
c=IN IP4 98.248.92.771 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sendrecv | [RFC3264] - Bob can send and recv non-media data |
a=sctp-port:5000 | [I-D.ietf-mmusic-sctp-sdp] |
a=max-message-size:100000 | [I-D.ietf-mmusic-sctp-sdp] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=ice-ufrag:c300d85b | [RFC5245] - Session Level ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - Session Level ICE password |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] - Session DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
Alice calls Bob, but when Bob answers he places Alice on hold by setting the SDP direction attribute to a=inactive in the Answer.
Audio On Hold Alice Bob | | | | | Offer(Audio:Opus) | |-------------------------------->| | | | | | Answer(Audio:Opus,a=inactive) | |<--------------------------------| | | | | | One-way Opus Audio | |.................................| | | |
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 audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=inactive | [RFC3264] - Bob puts call On Hold |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Bob accepts Opus Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] - ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - ICE password |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 51556 typ host | [RFC5245] - Host candidate |
a=candidate:1 1 UDP 1685987071 24.23.204.141 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] - Server Reflexive candidate |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 | |...................................................| | |
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 audio dtmf | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password parameter |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** DTMF m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 126 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:dtmf | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendonly | [RFC3264] - Alice can send DTMF Events |
a=rtpmap:126 telephone-event/8000 | [RFC2833] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] - DTLS Fingerprint for SRTP |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
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 audio dtmf | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Bob can send and receive Opus audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Bob accepts Opus Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] - ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - ICE password |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] - Fingerprint for SRTP |
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=rtcp-rsize | [RFC5506] - Alice intends to use reduced size RTCP for this session |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** DTMF m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 126 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:dtmf | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=recvonly | [RFC3264] - Alice can receive DTMF events |
a=rtpmap:126 telephone-event/8000 | [RFC2833] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] - Fingerprint for SRTP |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] - Bob intends to use reduced size RTCP for this session |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
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.| | | | |
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=group:BUNDLE audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendonly | [RFC3264] - Send only audio stream |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 24.23.204.141 54609 typ host | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 54609 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendonly | [RFC3264] - Send only video stream |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=content:slides | [RFC4796] -Alice's presentation video stream |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
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=group:BUNDLE audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=recvonly | [RFC3264] - Receive only audio stream |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 98.248.92.77 49203 typ host | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
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=recvonly | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=content:slides | [RFC4796]presentation stream |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
In this example, since Alice is unsure of the Bob's support of the BUNDLE framework, following steps are performed in order to negotiate and setup a BUNDLE Address for the session
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, | |Uses | |identical | |address | Answer(Audio:Opus Video:VP8) | |<-----------------------------------------------------| | | | 2 Way Call with Audio and Video Multiplexed | |......................................................| | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54610 IN IP4 24.23.204.141 | [RFC3605] - RTCP port different from RTP Port |
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=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.4 61665 typ host | [RFC5245] - RTP host candidate |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] - RTP Server Reflexive candidate |
a=candidate:0 2 UDP 2122194687 192.168.1.4 61666 typ host | [RFC5245] - RTCP host candidate |
a=candidate:1 2 UDP 1685987071 24.23.204.141 54610 typ srflx raddr 192.168.1.4 rport 61666 | [RFC5245] - RTCP Server Reflexive candidate |
****** Video m=line ********* | ***************************** |
m=video 62537 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:62538 IN IP4 24.23.204.141 | [RFC3605] |
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=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=ice-ufrag:6550074c | [RFC5245] |
a=ice-pwd:74af08a068a28a397a4c3f31747d1ee34 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.4 61886 typ host | [RFC5245] - RTP Host candidate |
a=candidate:1 1 UDP 1685987071 24.23.204.141 62537 typ srflx raddr 192.168.1.4 rport 61886 | [RFC5245] - RTP Server Reflexive candidate |
a=candidate:0 2 2122194687 192.168.1.4 61888 typ host | [RFC5245] - RTCP host candidate |
a=candidate:1 2 UDP 1685987071 24.23.204.141 62538 typ srflx raddr 192.168.1.4 rport 61888 | [RFC5245] - RTCP Server Reflexive candidate |
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=group:BUNDLE audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] Bob supports BUNDLE semantics. |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] Audio m=line part of the BUNDLE group |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.7 49203 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 98.248.92.77 51556 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] |
****** Video m=line ********* | ***************************** |
m=video 49203 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
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=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
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 | |............................................| | | | |
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=group:BUNDLE audio video data | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:audio | [RFC5888] |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 54609 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
****** Application m=line ********* | ***************************** |
m=application 54609 UDP/DTLS/SCTP webrtc-datachannel | [I-D.ietf-rtcweb-data-channel] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sctp-port:5000 | [I-D.ietf-mmusic-sctp-sdp] |
a=max-message-size:100000 | [I-D.ietf-mmusic-sctp-sdp] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] |
a=connection:new | [RFC4145] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
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 audio video data | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:audio | [RFC5888] |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 49203 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
****** Application m=line ********* | ***************************** |
m=application 49203 UDP/DTLS/SCTP webrtc-datachannel | [I-D.ietf-mmusic-sctp-sdp] |
c=IN IP4 98.248.92.771 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sctp-port:5000 | [I-D.ietf-mmusic-sctp-sdp] |
a=max-message-size:100000 | [I-D.ietf-mmusic-sctp-sdp] |
a=setup:active | [RFC4145] |
a=sendrecv | [RFC3264] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
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.
The same is indicated by dropping the "a=group:BUNDLE" line and BUNDLE RTP header extension in the Answer SDP.
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 | |......................................................| | | | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:55232 IN IP4 24.23.204.141 | [RFC3605] - RTCP port different from RTP port |
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=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=candidate:0 2 UDP 2122194687 192.168.1.4 61666 typ host | [RFC5245] |
a=candidate:1 2 UDP 1685987071 24.23.204.141 55232 typ srflx raddr 192.168.1.4 rport 61666 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 54332 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:60052 IN IP4 24.23.204.141 | [RFC3605] |
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=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=ice-ufrag:7872093 | [RFC5245] |
a=ice-pwd:ee3474af08a068a28a397a4c3f31747d1 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.4 71775 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 24.23.204.141 54332 typ srflx raddr 192.168.1.4 rport 71775 | [RFC5245] |
a=candidate:0 2 2122194687 192.168.1.4 71776 typ host | [RFC5245] |
a=candidate:1 2 UDP 1685987071 24.23.204.141 60052 typ srflx raddr 192.168.1.4 rport 71776 | [RFC5245] |
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-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 53214 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=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 98.248.92.77 53214 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=candidate:0 2 UDP 2122194687 192.168.1.7 51558 typ host | [RFC5245] |
a=candidate:1 2 UDP 1685987071 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 51558 | [RFC5245] |
****** Video m=line ********* | ***************************** |
m=video 58679 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:56507 IN IP4 98.248.92.77 | [RFC3605] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=ice-ufrag:85bC300 | [RFC5245] |
a=ice-pwd:325921d5d47efbabd9a2de4e99bd291c | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2122194687 192.168.1.7 61556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 98.248.92.77 58679 typ srflx raddr 192.168.1.7 rport 61556 | [RFC5245] |
a=candidate:0 1 UDP 2122194687 192.168.1.7 61558 typ host | [RFC5245] |
a=candidate:1 1 UDP 1685987071 98.248.92.77 56507 typ srflx raddr 192.168.1.7 rport 61558 | [RFC5245] |
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 section and not adding the "mid" identification tag to the BUNDLE group.
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 | |......................................................| | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 54609 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
****** Application m=line ********* | ***************************** |
m=application 10000 UDP/DTLS/SCTP webrtc-datachannel | [I-D.ietf-rtcweb-data-channel] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sctp-port:5000 | [I-D.ietf-mmusic-sctp-sdp] |
a=max-message-size:100000 | [I-D.ietf-mmusic-sctp-sdp] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] |
a=connection:new | [RFC4145] |
a=ice-ufrag:89819013 | [RFC5245] |
a=ice-pwd:1747d1ee3474af08a068a28a397a4c3f3 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 10000 typ host | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 49203 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 98.248.92.771 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
****** Application m=line ********* | ***************************** |
m=application 20000 UDP/DTLS/SCTP webrtc-datachannel | [I-D.ietf-mmusic-sctp-sdp] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sctp-port:5000 | [I-D.ietf-mmusic-sctp-sdp] |
a=max-message-size:100000 | [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-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 20000 typ host | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
This example involves 2 Offer/Answer exchanges. First one is used to negotiate and setup BUNDLE support for 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 | |......................................................| | | | |
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=group:BUNDLE audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] Alice adds audio m=line to the BUNDLE group |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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=group:BUNDLE audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 54609 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
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=group:BUNDLE audio video | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 49203 UDP/TLS/RTP/SAVPF 120 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:video | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
a=rtpmap:120 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
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.
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.
[I-D.ietf-mmusic-rid] framework is used to further constrain the media format encodings and map the payload types (PT) to the 'rid' identifiers.
[I-D.ietf-mmusic-sdp-simulcast] framework identifies the simulcast streams via their 'rid' identifiers.
bundle-only attribute is used for the video sources in the Offer to ensure enabling video sources in the context of BUNDLE alone.
BUNDLE grouping framework enables 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 | |.................................................| | | | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:m0 | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video-1 m=line ********* | ***************************** |
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=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=rtcp:54609 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=sendonly | [RFC3264] - Send only video stream |
a=rtpmap:98 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=rtpmap:100 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fmtp:100 max-fr=15 | [RFC4566] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-mux-only | [I-D.ietf-mmusic-mux-exclusive] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:22222 cname:EocUG1f0fcg/yvY7 | [RFC5576] [RFC7022] Camera-1,Encoding-1 SSRC with Session CNAME |
a=ssrc:33333 cname:EocUG1f0fcg/yvY7 | [RFC5576] [RFC7022] Camera-1,Encoding-2 SSRC with Session CNAME |
a=rid:1 send pt=98;max-width=1280;max-height=720; | [I-D.ietf-mmusic-rid] 1:1 rid mapping to payload type and specify resolution constraints |
a=rid:2 send pt=100;max-width=640;max-height=480; | [I-D.ietf-mmusic-rid] 1:1 rid mapping to payload type and specify resolution constraints |
a=simulcast: send 1;~2 | [I-D.ietf-mmusic-sdp-simulcast] Alice can send 2 resolutions identified by the 'rid' identifiers Also, the second stream is initially paused. |
****** Video-2 m=line ********* | ***************************** |
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=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=rtcp:54609 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=sendonly | [RFC3264] - Send only video stream |
a=rtpmap:101 H264/90000 | [RFC3984] |
a=rtpmap:102 H264/90000 | [RFC3984] |
a=fmtp:101 profile-level-id=42401f;packetization-mode=0;max-fr=30 | [RFC3984]Camera-2,Encoding-1 |
a=fmtp:102 profile-level-id=42401f;packetization-mode=1;max-fr=15 | [RFC3984]Camera-2,Encoding-2 |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-mux-only | [I-D.ietf-mmusic-mux-exclusive] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 | [RFC5576] [RFC7022] Camera-2,Encoding-1 SSRC with Session CNAME |
a=ssrc:55555 cname:EocUG1f0fcg/yvY7 | [RFC5576] [RFC7022] Camera-2,Encoding-2 SSRC with Session CNAME |
a=rid:3 send pt=101;max-width=1280;max-height=720; | [I-D.ietf-mmusic-rid] 1:1 rid mapping to payload type and specify resolution constraints |
a=rid:4 send pt=102;max-width=640;max-height=360; | [I-D.ietf-mmusic-rid] 1:1 rid mapping to payload type and specify resolution constraints |
a=simulcast: send 3;4 | [I-D.ietf-mmusic-sdp-simulcast] Alice can send 2 resolutions identified by the 'rid' identifiers |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:m0 | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=recvonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:77777 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video-1 m=line ********* | ***************************** |
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=rtcp:49203 IN IP4 98.248.92.77 | [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=recvonly | [RFC3264] - receive only video stream |
a=rtpmap:98 VP8/90000 | [I-D.ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=fmtp:100 max-fr=15 | [RFC4566] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5576] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:88888 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] - SSRC associated with the receiver report from Bob |
a=rid:1 recv pt=98;max-width=1280;max-height=720; | [I-D.ietf-mmusic-rid] Bob accepts the offered payload format constraints |
a=rid:2 recv pt=100;max-width=640;max-height=480; | [I-D.ietf-mmusic-rid] Bob accepts the offered payload format constraints |
a=simulcast: recv 1;2 | [I-D.ietf-mmusic-sdp-simulcast] Bob accepts the offered simulcast streams and removes the paused state of stream with 'rid' value 2. |
****** Video-2 m=line ********* | ***************************** |
m=video 49203 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:49203 IN IP4 98.248.92.77 | [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=recvonly | [RFC3264] |
a=rtpmap:101 H264/90000 | [RFC3984] |
a=rtpmap:102 H264/90000 | [RFC3984] |
a=fmtp:101 profile-level-id=42401f;packetization-mode=1;max-fr=30 | [RFC3984] |
a=fmtp:102 profile-level-id=42401f;packetization-mode=1;max-fr=15 | [RFC3984] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5576] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:99999 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] - SSRC associated with the receiver report from Bob |
a=rid:3 recv pt=101;max-width=1280;max-height=720; | [I-D.ietf-mmusic-rid] Bob accepts the offered payload format constraints |
a=rid:4 recv pt=102;max-width=640;max-height=360; | [I-D.ietf-mmusic-rid] Bob accepts the offered payload format constraints |
a=simulcast: recv 3;4 | [I-D.ietf-mmusic-sdp-simulcast] Bob accepts the offered simulcast streams. |
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 | |.................................................| | | | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 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=sendonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
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=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=rtcp:54609 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 (tc) |
a=sendonly | [RFC3264] - Send only video stream |
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=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:22222 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ssrc:33333 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
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=group:BUNDLE m0 m1 | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:m0 | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=recvonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:88888 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667326 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302206 98.248.92.77 49203 typ srflx raddr 192.168.1.5 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 49203 UDP/TLS/RTP/SAVPF 96 100 | BUNDLE accepted Bundle address same as audio m=line. |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [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=recvonly | [RFC3264] - Receive only video stream |
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=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:99999 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
This section shows an SDP Offer/Answer exchange for a simulcast scenario with 3 resolutions and has [RFC4588] style re-transmission flows.
[I-D.ietf-mmusic-rid] framework is used to specify all the (3) resolution constraints mapped to a single Payload Type (98).
[I-D.ietf-mmusic-sdp-simulcast] framework identifies the simulcast streams via their 'rid' identifiers.
Simulcast Streams with Retransmission Alice Bob | | | | |Alice offers single audio and simulcasted video streams | | | | | | Offer(Audio:Opus Video:VP8 with 3 resolutions) | | & RTX stream | |-------------------------------------------------------->| | | | | | Answer (Bob accepts Alice's offer) | |<--------------------------------------------------------| | | | | |One-Way 1 Opus, 3 VP8 and RTX video streams,all muxed | |.........................................................| | | | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 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=sendonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
m=video 0 UDP/TLS/RTP/SAVPF 98 103 | bundle-only video line with port number set to zero |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=mid:m1 | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendonly | [RFC3264] |
a=rtpmap:98 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=rtpmap:103 rtx/90000 | [RFC4588] |
a=fmtp:103 apt=98;rtx-time=200 | [RFC4588] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:22222 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-1 SSRC |
a=ssrc:33333 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-1 RTX SSRC |
a=ssrc-group:FID 22222 33333 | [RFC5888] |
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-2 SSRC |
a=ssrc:55555 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-2 RTX SSRC |
a=ssrc-group:FID 44444 55555 | [RFC5888] |
a=ssrc:66666 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-3 SSRC |
a=ssrc:77777 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-3 RTX SSRC |
a=ssrc-group:FID 66666 77777 | [RFC5888] |
a=rid:1 send pt=98;max-fs=921600;max-fr=30; | [I-D.ietf-mmusic-rid] |
a=rid:2 send pt=98;max-fs=614400;max-fr=15; | [I-D.ietf-mmusic-rid] |
a=rid:3 send pt=98;max-fs=230400;max-fr=30; | [I-D.ietf-mmusic-rid] |
a=simulcast: send 1;2;3 | [I-D.ietf-mmusic-sdp-simulcast] Alice can send all the simulcast streams |
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=group:BUNDLE m0 m1 | [I-D.ietf-mmusic-sdp-bundle-negotiation] Bob supports grouping of m=lines under BUNDLE semantics |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:m0 | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=recvonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667326 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302206 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
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=rtcp:49203 IN IP4 98.248.92.77 | [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=recvonly | [RFC3264] |
a=rtpmap:98 VP8/90000 | [I-D.ietf-payload-vp8] |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=rtpmap:103 rtx/90000 | [RFC4588] |
a=fmtp:103 apt=98;rtx-time=200 | [RFC4588] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=rid:1 recv pt=98;max-fs=921600;max-fr=30; | [I-D.ietf-mmusic-rid] |
a=rid:2 recv pt=98;max-fs=614400;max-fr=15; | [I-D.ietf-mmusic-rid] |
a=rid:3 recv pt=98;max-fs=230400;max-fr=30; | [I-D.ietf-mmusic-rid] |
a=simulcast: recv 1;2;3 | [I-D.ietf-mmusic-sdp-simulcast] Bob accepts the offered simulcast streams |
This section shows an SDP Offer/Answer exchange for a simulcast scenario with 2 two resolutions.
It also showcases where 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 | |.........................................................| | | | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:m0 | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
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=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:m1 | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb |
a=sendonly | [RFC3264] |
a=rtpmap:98 VP8/90000 | [I-D.ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [I-D.ietf-payload-vp8] |
a=rtpmap:101 rtx/90000 | [RFC4588] |
a=rtpmap:103 rtx/90000 | [RFC4588] |
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=200 | [RFC4588] |
a=fmtp:103 apt=100;rtx-time=200 | [RFC4588] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=rtcp-rsize | [RFC5506] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:22222 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-1 SSRC |
a=ssrc:33333 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-1 RTX SSRC |
a=ssrc-group:FID 22222 33333 | [RFC5888] |
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-2 SSRC |
a=ssrc:55555 cname:EocUG1f0fcg/yvY7 | [RFC5576] - Encoding-2 RTX SSRC |
a=ssrc-group:FID 44444 55555 | [RFC5888] |
a=rid:1 send pt=98; | [I-D.ietf-mmusic-rid] 1:1 mapping between the PT and the 'rid' identifier |
a=rid:2 send pt=100; | [I-D.ietf-mmusic-rid] 1:1 mapping between the PT and the 'rid' identifier |
a=simulcast: send 1;2 | [I-D.ietf-mmusic-sdp-simulcast] |
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=group:BUNDLE m0 m1 | [I-D.ietf-mmusic-sdp-bundle-negotiation] Bob supports grouping of m=lines under BUNDLE semantics |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:m0 | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=recvonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667326 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302206 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
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=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:m1 | [RFC5888] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=recvonly | [RFC3264] |
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=200 | [RFC4588] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=rid:1 recv pt=98; | [I-D.ietf-mmusic-rid] |
a=simulcast: recv 1 | [I-D.ietf-mmusic-sdp-simulcast] Bob rejects the second simulcast stream and the associated rtx stream. |
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 | |...............................................................| | | | | | |
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=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] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:m0 | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
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=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=rtcp:54609 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=sendonly | [RFC3264] |
a=rtpmap:98 VP8/90000 | [I-D.ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [I-D.ietf-payload-vp8] |
a=rtpmap:101 flexfec/90000 | [I-D.ietf-payload-flexible-fec-scheme] |
a=rtpmap:103 flexfec/90000 | [I-D.ietf-payload-flexible-fec-scheme] |
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; ToP=2; repair-window=200000 | [I-D.ietf-payload-flexible-fec-scheme] |
a=fmtp:103 L=5; D=10; ToP=2; repair-window=200000 | [I-D.ietf-payload-flexible-fec-scheme] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:22222 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ssrc:33333 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ssrc-group:FEC-FR 22222 33333 | [RFC5956] |
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ssrc:55555 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ssrc-group:FEC-FR 44444 55555 | [RFC5956] |
a=rid:1 send pt=98; | [I-D.ietf-mmusic-rid] 1:1 mapping between the PT and the 'rid' identifier |
a=rid:2 send pt=100; | [I-D.ietf-mmusic-rid] 1:1 mapping between the PT and the 'rid' identifier |
a=simulcast: send 1;2 | [I-D.ietf-mmusic-sdp-simulcast] |
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=group:BUNDLE m0 m1 | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [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=recvonly | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667326 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302206 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
****** Video m=line ********* | ***************************** |
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=rtcp:49203 IN IP4 98.248.92.77 | [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=recvonly | [RFC3264] |
a=rtpmap:98 VP8/90000 | [I-D.ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [I-D.ietf-payload-vp8] |
a=rtpmap:101 flexfec/90000 | [I-D.ietf-payload-flexible-fec-scheme] |
a=rtpmap:103 flexfec/90000 | [I-D.ietf-payload-flexible-fec-scheme] |
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; ToP=2; repair-window=200000 | [I-D.ietf-payload-flexible-fec-scheme] |
a=fmtp:103 L=5; D=10; ToP=2; repair-window=200000 | [I-D.ietf-payload-flexible-fec-scheme] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:98765 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=rid:1 recv pt=98; | [I-D.ietf-mmusic-rid] |
a=rid:2 recv pt=100; | [I-D.ietf-mmusic-rid] |
a=simulcast: recv 1;2 | [I-D.ietf-mmusic-sdp-simulcast] |
The examples in the section provide SDP Offer/Answer exchange for a variety of scenarios related to RTP Header extension for conference usages, Legacy Interop scenarios and more.
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 | | |
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=group:BUNDLE audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=rtpmap:0 PCMU/8000 | [RFC3551] |
a=rtpmap:8 PCMA/8000 | [RFC3551] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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=group:BUNDLE audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 0 98 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Bob can send and recv audio |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] - Bob accepts only Opus Codec |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:0 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203 |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 | | |
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 audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 | [RFC4566] |
c=IN IP4 24.23.204.141 | [RFC4566] |
a=rtcp:54609 IN IP4 24.23.204.141 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=rtpmap:109 opus/48000/2 | [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=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=extmap:1/recvonly urn:ietf:params:rtp-hdrext:csrc-audio-level | [RFC6465] |
a=extmap:2 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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 audio | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ice-options:trickle | [I-D.ietf-mmusic-trickle-ice] |
****** Audio m=line ********* | ***************************** |
m=audio 49203 UDP/TLS/RTP/SAVPF 109 0 98 | [RFC4566] |
c=IN IP4 98.248.92.77 | [RFC4566] |
a=rtcp:49203 IN IP4 98.248.92.77 | [RFC3605] |
a=mid:audio | [RFC5888] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [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=maxptime:120 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=extmap:1/sendonly urn:ietf:params:rtp-hdrext:csrc-audio-level | [RFC6465] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=end-of-candidates | [I-D.ietf-mmusic-trickle-ice] |
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,
NOTE: Since Alice is unaware of Bob's support for BUNDLE framework, Alice ensures to include separate RTP/RTCP ports and candidate information.
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 | |...........................................................| | | | |
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=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] |
****** Audio m=line ********* | ***************************** |
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=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [RFC5245] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576]E |
a=candidate:0 1 UDP 2113667327 192.168.1.4 61665 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 | [RFC5245] |
a=candidate:0 1 UDP 2113667326 192.168.1.4 61667 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 61667 | [RFC5245] |
****** Video-1 m=line ********* | ***************************** |
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=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=sendrecv | [RFC3264] |
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=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:56789 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
****** Video-2 m=line ********* | ***************************** |
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=bundle-only | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=mid:m2 | [RFC5888] Video m=line part of BUNDLE group |
a=msid:ma tc | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc) |
a=sendrecv | [RFC3264] |
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=rtcp-mux | [RFC5761] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid | [I-D.ietf-mmusic-sdp-bundle-negotiation] |
a=ssrc:67890 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
Answer SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=- 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s=- | [RFC4566] |
t=0 0 | [RFC4566] |
****** Audio m=line ********* | ***************************** |
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=sendrecv | [RFC3264] |
a=rtpmap:109 opus/48000/2 | [I-D.ietf-payload-rtp-opus] |
a=maxptime:120 | [RFC4566] |
a=ice-ufrag:ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=setup:active | [RFC4145] |
a=rtcp-rsize | [RFC5506] |
a=rtcp-fb:109 nack | [RFC5104] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=ssrc:54321 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 51556 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 51556 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 51558 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 51558 | [RFC5245] |
****** Video m=line ********* | ***************************** |
m=video 0 UDP/TLS/RTP/SAVPF 98 100 | Bob doesn't recognize bundle-only and hence the m=line is rejected implicitly due to port 0 |
****** Video m=line ********* | ***************************** |
m=video 0 UDP/TLS/RTP/SAVPF 98 100 | Bob doesn't recognize bundle-only and hence the m=line is rejected implicitly due to port 0 |
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.
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 | | |
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-256 6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 :DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 | [RFC5245] |
a=rtcp-rsize | [RFC5506] |
****** Audio m=line ********* | ***************************** |
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] |
****** Audio m=line ********* | ***************************** |
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 |
****** Audio m=line ********* | ***************************** |
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-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 :BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 | [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 |
****** Video m=line ********* | ***************************** |
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-256 DC:B8:5F:64:1A:24:C2:43:F0:A1:58:D0:A1:2C:19:08 :6B:8B:F0:65:5F:78:E2:51:3B:AC:6F:F3:3F:46:1B:35 | [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] |
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-256 BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2 :19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04 | [RFC5245] |
****** Audio m=line ********* | ***************************** |
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] |
****** Video m=line ********* | ***************************** |
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] |
This document requires no actions from IANA.
We would like to thank Justin Uberti, Chris Flo, Paul Kyzivat for their detailed review and inputs.
[RFC EDITOR NOTE: Please remove this section when publishing]
Changes from draft-ietf-rtcweb-sdp-01
Changes from draft-ietf-rtcweb-sdp-00
Changes from draft-nandakumar-rtcweb-sdp-08
Changes from draft-nandakumar-rtcweb-sdp-06 and draft-nandakumar-rtcweb-sdp-07
Changes from draft-nandakumar-rtcweb-sdp-05
Changes from draft-nandakumar-rtcweb-sdp-04
Changes from draft-nandakumar-rtcweb-sdp-03
Changes from draft-nandakumar-rtcweb-sdp-02
Changes from draft-nandakumar-rtcweb-sdp-01
Changes from draft-nandakumar-rtcweb-sdp-00