Network Working Group | S. Nandakumar |
Internet-Draft | C. Jennings |
Intended status: Informational | Cisco |
Expires: April 23, 2014 | October 20, 2013 |
SDP for the WebRTC
draft-nandakumar-rtcweb-sdp-03
The Web Real-Time Communication (WebRTC) [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 the RFC 3264 [RFC3264].
This documents provides an informational reference in describing the role of SDP and Offer/Answer exchange 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.
The IETF has been notified of intellectual property rights claimed in regard to some or all of the specification contained in this document. For more information consult the online list of claimed rights.
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 April 23, 2014.
Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
Javascript Session Exchange Protocol(JSEP) [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: Section 3 and 4 provides an overview of SDP and the Offer/Answer exchange mechanism. Section 5 and 6 provide 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.
[WEBRTC] proposes JavaScript application to fully specify and control the signaling plane of a multimedia session as described in the JSEP specification [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 [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:
This common scenario shows SDP for secure Two-way audio session with Alice offering Opus, PCMU, PCMA and Bob accepting all the audio codecs offered.
title 2-Way Audio Only Session participant Alice as Alice participant Bob as Bob Alice->Bob: Offer(Audio:Opus,PCMU,PCMA) Bob->Alice: Answer(Audio:Opus,PCMU,PCMA) Alice<->Bob: Two-way Opus Audio (preferred codec)
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 54609 RTP/SAVPF 109 0 8 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=ptime:20 | [draft-ietf-payload-rtp-opus] - Opus packetization of 20ms |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing on port 54609 |
b=AS:64 | [RFC4566] - Audio Session B/W of 64kbps |
b=RS:800 | [RFC3556] - RTCP b/w allocated to active data senders |
b=RR:2400 | [RFC3556] - RTCP b/w allocated to receivers |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] - Host ICE Candidate |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 49203 RTP/SAVPF 109 0 8 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] Opus Codec |
a=ptime:20 | [draft-ietf-payload-rtp-opus] Packetization of 20ms |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=sendrecv | [RFC3264] - Bob can send and recv audio |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203 |
b=AS:64 | [RFC4566] - Audio Session b/w of 64kbps |
b=RS:800 | [RFC3556] - RTCP b/w allocated to active data senders |
b=RR:2400 | [RFC3556] - RTCP b/w allocated to receivers |
a=fingerprint:sha-1 c9:c7:70:9d:1f:66:79:a8:07:99:41:49:83:4a:97:0e:1f:ef:6d:f7 | [RFC5245] - DTLS Fingerprint for SRTP |
a=ice-ufrag:05067423 | [RFC5245] - ICE user fragment |
a=ice-pwd:1747d1ee3474a28a397a4c3f3af08a068 | [RFC5245] - ICE password parameter |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Host ICE Candidate for Opus Stream |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=ssrc:54321 cname:NWs1ao1HmN4Xa5/yvY7 | [RFC5576] |
Alice and Bob establish an audio and video session with Opus as the audio codec and H.264 as the video codec. This example also illustrates the negotiation of NACK based RTCP feedback mechanisms - PLI and FIR for the video session [RFC5104].
title 2-Way Audio,Video with RTCP Feedback Alice->Bob: Offer(Audio:Opus,PCMU,PCMA Video:H.264,VP8) Bob->Alice: Answer(Audio:Opus, Video:H.264) Alice->Bob: Two-way Opus Audio, H.264 Video note right of Alice Session also suports RTCP feedback for audio and video streams end note
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 54609 RTP/SAVPF 109 0 8 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=ptime:20 | [draft-ietf-payload-rtp-opus] - Opus packetization of 20ms |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing on port 54609 |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password parameter |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] - Host ICE Candidate |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=ssrc:12345 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
m=video 62537 RTP/SAVPF 99 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
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 | [draft-ietf-payload-vp8] - VP8 video codec |
a=sendrecv | [RFC3264] - Alice can send and recv video |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing on port 62537 |
b=AS:256 | [RFC4566] - Audio Session B/W of 256kbps |
b=RS:800 | [RFC3556] - RTCP b/w allocated to active data senders |
b=RR:2400 | [RFC3556] - RTCP b/w allocated to receivers |
a=ice-ufrag:6550074c | [RFC5245] - ICE user fragment |
a=ice-pwd:f31747d1ee3a28a397a4c3474af08a068 | [RFC5245] - ICE password parameter |
a=fingerprint:sha-1 4a:97:0e:1f:ef:99:41:49:83:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.4 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:99 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=rtcp-fb:99 nack pli | [RFC5104] - Indicates support for Picture loss Indication and NACK |
a=rtcp-fb:99 ccm fir | [RFC5104] - Full Intra Frame Request-Codec Control Message support |
a=rtcp-fb:120 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=rtcp-fb:120 nack pli | [RFC5104] - Indicates support for Picture loss Indication and NACK |
a=rtcp-fb:120 ccm fir | [RFC5104] - Full Intra Frame Request-Codec Control Message support |
a=ssrc:1366781083 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 49203 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Bob accepts only Opus Codec |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] - Bob can send and recv audio |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203 |
a=ice-ufrag:c300d85b | [RFC5245] - ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Host ICE Candidate for Opus Stream |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=ssrc:1366788312 cname:1f0fcgEocUG/yvY7 | [RFC5576] |
m=video 63130 RTP/SAVPF 99 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 98.248.92.771 | [RFC4566] |
a=rtpmap:99 H264/90000 | [RFC3984] - Bob accepts H.264 Video Codec. |
a=fmtp:99 profile-level-id=4d0028;packetization-mode=1 | [RFC3984] |
a=sendrecv | [RFC3264] - Bob can send and recv video |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 63130 |
a=ice-ufrag:0d85c30b | [RFC5245] - ICE username frag |
a=ice-pwd:291c325921d5de4e99bdd47efbabd9a2 | [RFC5245] - ICE password |
a=fingerprint:sha-1 0e:1f:ef:6d:f7:99:41:49:83:4a:97:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] -DTLS Fingerprint for SRTP |
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] |
a=rtcp-fb:99 nack | [RFC5104] - Indicates support for NACK based RTCP feedback |
a=rtcp-fb:99 nack pli | [RFC5104] - Indicates support for Picture loss Indication and NACK |
a=rtcp-fb:99 ccm fir | [RFC5104] - Full Intra Frame Request-Codec Control Message support |
a=ssrc:3229706345 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
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.
title WebRTC Session - 2-Way Secure Audio,Video with RTCP Feedback Alice->Bob: Offer(DataChannel) Bob->Alice: Answer(Data-Channel) Alice->Bob: Two-way SCTP based Data-Channel
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] - Session Level ICE parameter |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - Session Level ICE parameter |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - Session DTLS Fingerprint for SRTP |
m=application 56966 DTLS/SCTP 5000 | [draft-ietf-rtcweb-data-channel] |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=sctpmap:5000 webrtc-Datachannel 1 | [draft-ietf-mmusic-sctp-sdp] - One data stream of type chat |
a=webrtc-Datachannel:5000 stream=1;label="channel 1";subprotocol="chat"; | [draft-ietf-mmusic-sctp-sdp] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=sendrecv | [RFC3264] - Alice can send and recv non-media data |
a=candidate:0 1 UDP 2113667327 192.168.1.7 56966 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 24.23.204.141 56966 typ srflx raddr 192.168.1.7 rport 56966 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 51641 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 51641 typ srflx raddr 192.168.1.7 rport 51641 | [RFC5245] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=application 55700 DTLS/SCTP 5000 | [draft-ietf-mmusic-sctp-sdp] |
c= IN IP4 98.248.92.771 | [RFC4566] |
a=sctpmap:5000 webrtc-Datachannel 1 | [draft-ietf-mmusic-sctp-sdp] |
a=webrtc-Datachannel:5000 stream=1;label="channel 1";subprotocol="chat"; | [draft-ietf-mmusic-sctp-sdp] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=sendrecv | [RFC3264] - Bob can send and recv non-media data |
a=ice-ufrag:c300d85b | [RFC5245] - Session Level ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - Session Level ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - Session DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 55700 typ host | [RFC5245] - Refer 4.1 SDP Offer |
a=candidate:1 1 UDP 1694302207 98.248.92.77 55700 typ srflx raddr 192.168.1.7 rport 55700 | [RFC5245] Refer 4.1 SDP Offer |
a=candidate:0 2 UDP 2113667326 192.168.1.7 58137 typ host | [RFC5245] Refer 4.1 SDP Offer |
a=candidate:1 2 UDP 1694302206 98.248.92.77 58137 typ srflx raddr 192.168.1.7 rport 581371 | [RFC5245] Refer 4.1 SDP Offer |
Alice calls Bob, but when Bob answers he places Alice on hold by setting the SDP direction attribute to a=sendonly in the Answer.
title Secure 2-Way Audio Only Session participant Alice as Alice participant Bob as Bob Alice->Bob: Offer(Audio:Opus) Bob->Alice: Answer(Audio:Opus,a=sendonly) Alice->Bob: One-way Opus Audio (preferred codec)
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=ptime:20 | [draft-ietf-payload-rtp-opus] - Opus packetization of 20ms |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing on port 54609 |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] - Host ICE Candidate |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=ssrc:3229706345 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 49203 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Bob accepts only Opus Codec |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendonly | [RFC3264] - Bob puts call On Hold |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203 |
a=ice-ufrag:c300d85b | [RFC5245] - ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Host ICE Candidate for Opus Stream |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=ssrc:1366781083 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
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 the telephone-event for the other stream.
title Audio Session with DTMF participant Alice as Alice participant Bob as Bob Alice->Bob: Offer(Audio:Opus,PCMU,PCMA Audio:telephone-event) Bob->Alice: Answer(Audio:Opus, Audio:telephone-event) Alice->Bob: Opus audio stream and telephone-event stream
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 54609 RTP/SAVPF 109 0 8 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=ptime:20 | [draft-ietf-payload-rtp-opus] - Opus packetization of 20ms |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:8 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing on port 54609 |
a=ice-ufrag:074c6550 | [RFC5245] - ICE user fragment |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - ICE password parameter |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] - Host ICE Candidate |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=ssrc:3229706345 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
m=audio 54690 RTP/SAVPF 126 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:126 telephone-event/8000 | [RFC2833] |
a=sendonly | [RFC3264] - Alice can send DTMF Events |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:6550074c | [RFC5245] - ICE user fragment |
a=ice-pwd:31747d1eea28a397a4af08a068 | [RFC5245] - ICE password parameter |
a=fingerprint:sha-1 0e:1f:ef:6d:f7:99:41:49:83:4a:97:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54690 typ host | [RFC5245] - Host ICE Candidate |
a=candidate:1 1 UDP 694302207 24.23.204.141 54690 typ srflx raddr 192.168.1.4 rport 54690 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=rtcp-fb:109 nack | [RFC5104] - Indicates NACK RTCP feedback support |
a=ssrc:9032206345 cname:L/N9lk1ao1HmN4Xa5 | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 49203 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Bob accepts Opus Codec |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] - Bob can send and receive Opus audio |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203 |
a=ice-ufrag:c300d85b | [RFC5245] - ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Host ICE Candidate for Opus Stream |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=ssrc:0634322975 cname:Q/o1HmN4XNWs1aa5 | [RFC5576] |
m=audio 54690 RTP/SAVPF 126 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:126 telephone-event/8000 | [RFC2833] |
a=recvonly | [RFC3264] - Alice can receive DTMF events |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing on port 54690 |
a=ice-ufrag:c3d85b00 | [RFC5245] - ICE username frag |
a=ice-pwd:bd291c32de4e995921d5d47efbabd9a2 | [RFC5245] - Session Level ICE password |
a=fingerprint:sha-1 83:4a:97:0e:1f99:41:49:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Host ICE Candidate for Opus Stream |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=ssrc:6345903220 cname:L/k1aN9lo1HmN4Xa5 | [RFC5576] |
In this scenario Alice and Bob engage in 1 way audio and video session with Bob receiving Alice's audio and her presentation slides as video stream.
title 1 Way Audio & Video Session - Document Camera note right of Alice Alice Offers sendonly audio and video streams. The video stream corresponds to her presentation slides via a=content SDP attribute) end note Alice->Bob: Offer(Audio:Opus, Video: VP8) note left of Bob Bob accepts Alice's offer end note Bob->Alice: Answer(Audio:Opus, Video: VP8) Alice->Bob: One-way Opus Audio, VP8 Video note right of Alice Bob can hear Alice and see her presentation slides. end note
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendonly | [RFC3264] - Send only audio stream |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5104] |
a=rtcp-fb:109 nack | [RFC5104] |
a=ssrc:6345903220 cname:L/k1aN9lo1HmN4Xa5 | [RFC5576] |
m=video 62537 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=content:slides | [RFC4796] -Alice's presentation video stream |
a=sendonly | [RFC3264] - Send only video stream |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:6550074c | [RFC5245] |
a=ice-pwd:1747d1ee3474af08a068a28a397a4c3f3 | [RFC5245] |
a=fingerprint:sha-1 1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07:99:41:49:83:4a:97:0e | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 62537 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 54721 typ host | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=ssrc:3429951804 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 49203 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=recvonly | [RFC3264] - Receive only audio stream |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=ssrc:9513429804 cname:Q/o1HmNWs1aN4Xa5 | [RFC5576] |
m=video 63130 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 98.248.92.771 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=content:slides | [RFC4796] |
a=recvonly | [RFC3264] - Receive Only Alice's presentation stream |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:85bc300d | [RFC5245] |
a=ice-pwd:325921d5d47efbabd9ade4e99bd291c2 | [RFC5245] |
a=fingerprint:sha-1 ef:6d:f7:c9:c7:70:9d:1h:99:41:49:83:4a:97:0e:1f:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 63130 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 56607 typ host | [RFC5245] |
a=ssrc:1366781083 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
The examples in this section show-cases using [draft-ietf-mmusic-sdp-bundle-negotiation] BUNDLE negotiation framework for the usage of a single 5-tuple for media associated with multiple SDP media descriptions ("m=" lines).
In this example, since Alice is unsure of the Bob's support for BUNDLE framework, following 3 step procedures are performed in order to negotiate and setup a unique 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.
title 2-Way Secure Audio,Video with BUNDLE support unknown Alice->Bob: Offer(Audio:Opus Video:VP8) note right of Alice Alice offers BUNDLE support with unique address for the audio and video m-line end note Bob->Alice: Answer(Audio:Opus Video:VP8) indicating its support for BUNDLE note left of Bob Bob uses identical addresses across the m=lines end note Alice->Bob: Updated Offer(Audio:Opus Video:VP8) for Bundle Address Synchronzation. Alice <-> Bob: 2Way Call with Audio and Video Multiplexed
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=mid:audio | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:109 nack | [RFC5104] |
m=video 62537 RTP/SAVPF 120 | [RFC4566] |
a=mid:video | [RFC5888] Video m=line part of the Bundle group with a unique port number |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:22222 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ice-ufrag:6550074c | [RFC5245] |
a=ice-pwd:74af08a068a28a397a4c3f31747d1ee34 | [RFC5245] |
a=fingerprint:sha-1 1f:ef:6d:f7:c9:c7:70:9d:1f:66:99:41:49:83:4a:97:0e79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 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 | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] Bob supports BUNDLE semantics. |
m=audio 49203 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:audio | [RFC5888] Audio m=line part of the BUNDLE group |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-fb:109 nack | [RFC5104] |
a=rtcp-mux | [RFC5761] |
a=ssrc:33333 cname:Q/1HmN4Xa5NWs1ao | [RFC5576] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] |
m=video 49203 RTP/SAVPF 120 | [RFC4566] |
a=mid:video | [RFC5888] Video m=line part of the BUNDLE group with the port from audio line repeated |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
b=AS:1756 | [RFC4566] |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ssrc:44444 cname:Q/2AqlmN4Xa5NWs | [RFC5576] |
a=ice-ufrag:85bc300d | [RFC5245] |
a=ice-pwd:bd2de4e9991c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 41:49:83:4a:99:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Candidate lines identical with the audio m-line. |
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] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:audio | [RFC5888] - Port number finalized as Bundle Address. |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:109 nack | [RFC5104] |
m=video 54609 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=mid:video | [RFC5888] - Same Bundle address from the audio m=line |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:22222 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
This use-case is a successful audio and video stream multiplexing scenario, with Alice and Bob aware of each others support for SDP BUNDLE framework [draft-ietf-mmusic-sdp-bundle-negotiation].
title 2-Way Secure Audio, Video with BUNDLE support Known Alice->Bob: Offer(Audio:Opus Video:VP8) note right of Alice Alice offers BUNDLE support with identical address across m-lines. end note Bob->Alice: Answer(Audio:Opus Video:VP8) indicating its support for BUNDLE note left of Bob Bob uses identical addresses across the m=lines end note Alice <-> Bob: 2Way Call with Audio and Video Multiplexed
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics. |
m=audio 10000 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:audio | [RFC5888] - Audio m=line part of BUNDLE group |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=sendrecv | [RFC3264] |
a=rtcp-mux | [RFC5761] |
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 10000 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 10000 typ srflx raddr 192.168.1.4 rport 10000 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:109 nack | [RFC5104] |
m=video 10000 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=mid:video | [RFC5888] - Video m=line with Bundle address same as the audio m=line |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:22222 cname:Q/1HmN4Xa5NWs1ao | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 10000 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 10000 typ srflx raddr 192.168.1.4 rport 10000 | [RFC5245] |
a=candidate:0 2 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] - Bob supports BUNDLE semantics. |
m=audio 20000 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:audio | [RFC5888] - Audio m=line part of the BUNDLE group |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ssrc:33333 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 20000 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 20000 typ srflx raddr 192.168.1.7 rport 20000 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] |
a=rtcp-fb:109 nack | [RFC5104] |
m=video 20000 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=mid:video | [RFC5888] - Video m=line with Bundle address same as the audio m=line |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ssrc:44444 cname:1f0fcgEocUG/yvY7 | [RFC5576] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 20000 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 20000 typ srflx raddr 192.168.1.7 rport 20000 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
This example show-cases SDP for negotiating a session with Audio, Video and data streams between Alice and Bob with [draft-ietf-mmusic-sdp-bundle-negotiation] support known
title Audio, Video, Data with BUNDLE support known Alice->Bob: Offer(Audio:Opus, Video:VP8, Data) note right of Alice Alice indicates BUNDLE support with identical address across all the m=lines. end note Bob->Alice: Answer(Audio:Opus Video:VP8, Data) note left of Bob Bob does the same end note Alice<->Bob: Two way Audio, Video and Data multiplexed
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video data | [draft-ietf-mmusic-sdp-bundle-negotiation] |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:audio | [RFC5888] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:109 nack | [RFC5104] |
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
m=video 54609 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:video | [RFC5888] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=ssrc:22222 cname:Q/aoNWs11HmN4Xa5 | [RFC5576] |
m=application 54609 DTLS/SCTP 5000 | [draft-ietf-rtcweb-data-channel] |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sctpmap:5000 webrtc-Datachannel 1 | [draft-ietf-mmusic-sctp-sdp] |
a=webrtc-Datachannel:5000 stream=1;label="channel 1";subprotocol="chat"; | [draft-ietf-mmusic-sctp-sdp] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 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] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video data | [draft-ietf-mmusic-sdp-bundle-negotiation] |
m=audio 49203 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=mid:audio | [RFC5888] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=rtcp-fb:109 nack | [RFC5104] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] |
a=ssrc:33333 cname:L/aoNWs11HmN4Xa5 | [RFC5576] |
m=video 49203 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 98.248.92.771 | [RFC4566] |
a=mid:video | [RFC5888] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
m=application 49203 DTLS/SCTP 5000 | [draft-ietf-mmusic-sctp-sdp] |
c= IN IP4 98.248.92.771 | [RFC4566] |
a=mid:data | [RFC5888] |
a=sctpmap:5000 webrtc-Datachannel 1 | [draft-ietf-mmusic-sctp-sdp] |
a=webrtc-Datachannel:5000 stream=1;label="channel 1";subprotocol="chat"; | [draft-ietf-mmusic-sctp-sdp] |
a=setup:active | [RFC4145] |
a=sendrecv | [RFC3264] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - Session Level ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
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] |
This use-case illustrates SDP Offer/Answer exchange when the far-end (Bob) either doesn't support media bundling or doesn't want to group m=lines over a single 5-tuple.
On successful Offer/Answer exchange, Alice and Bob each end up using separate RTP streams for audio and video media streams respectively.
title 2-Way Secure Audio,Video with BUNDLE Unsupported Alice->Bob: Offer(Audio:Opus Video:VP8) note right of Alice Alice offers BUNDLE support with unique address for the audio and video m-line end note Bob->Alice: Answer(Audio:Opus Video:VP8) note left of Bob Bob uses unique addresses as well since he doesn't understand BUNDLE end note Alice <-> Bob: 2Way Call with Audio and Video on different addresses.
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 55232 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:audio | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=sendrecv | [RFC3264] |
a=rtcp-mux | [RFC5761] |
a=rtcp-fb:109 nack | [RFC5104] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 55232 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 55232 typ srflx raddr 192.168.1.4 rport 55232 | [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] |
m=video 54332 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=mid:video | [RFC5888] Video m=line part of the BUNDLE group with a unique port number |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:22222 cname:yvY7/EocUG1f0fcg | [RFC5576] |
a=ice-ufrag:7872093 | [RFC5245] |
a=ice-pwd:ee3474af08a068a28a397a4c3f31747d1 | [RFC5245] |
a=fingerprint:sha-1 6d:f7:c9:c7:70:9d:1f:66:79:a8:07:99:41:49:83:4a:97:0e:1f:ef | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54332 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 24.23.204.141 54332 typ srflx raddr 192.168.1.4 rport 54332 | [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 | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 53214 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=sendrecv | [RFC3264] |
a=rtcp-fb:109 nack | [RFC5104] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 53214 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 53214 typ srflx raddr 192.168.1.7 rport 53214 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] |
m=video 58679 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=sendrecv | [RFC3264] |
a=ice-ufrag:85bC300 | [RFC5245] |
a=ice-pwd:325921d5d47efbabd9a2de4e99bd291c | [RFC5245] |
a=fingerprint:sha-1 9d:1f:66:79:a8:07:99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 58679 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 58679 typ srflx raddr 192.168.1.7 rport 58679 | [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] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
This section deals with scenarios dealing with multiresolution negotiation such as layered coding, simulcast, along with techniques that deal with providing robustness against transmission errors such as FEC and RTX.
This SDP below shows Offer/Answer exchange with an audio and two video streams each of which can be sent at two different resolutions.
One video stream supports VP8, while the other supports H.264.
bundle-only framework is used along with BUNDLE grouping framework to enable multiplexing of all the 5 streams (1 audio stream + 4 video streams) over a single RTP Session.
title 1 Way Successful Simulcast w/BUNDLE note right of Alice Alice offers 2 sendonly video streams with 2 simulcast encodings per stream end note Alice->Bob: Offer(Audio:Opus,Video1:VP8,Video2:H.264) with bundle-only for video note left of Bob Bob accepts Alice's offer and 2 encodings per stream end note Alice->Bob: One-Way 1 Opus, 2 H.264 and 2 VP8 video streams, all mulitplexed
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 m2 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendonly | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=rtcp-fb:109 nack | [RFC5104] |
a=ssrc:11111 EocUG1f0fcg | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
m=video 0 RTP/SAVPF 98 100 | bundle-only video line with port number set to zero |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=imageattr:98 [x=1280,y=720] | [RFC6236]Camera-1,Encoding-1 Resolution |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=imageattr:100 [x=640,y=480] | [RFC6236] Camera-1,Encoding-2 Resolution |
a=fmtp:100 max-fr=15 | [RFC4566] |
a=ssrc-group:SIMULCAST 12345 45678 | [RFC5576] |
a=ssrc:12345 cname:axzo1278npDlAzM73 | [RFC5576] [draft-rescorla-avtcore-6222bis] Camera-1,Encoding-1 SSRC with Session CNAME |
a=ssrc:45678 cname:axzo1278npDlAzM73 | [RFC5576] [draft-rescorla-avtcore-6222bis] Camera-1,Encoding-2 SSRC with Session CNAME |
a=sendonly | [RFC3264] - Send only video stream |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=rtcp-fb:98 nack | [RFC5104] |
a=rtcp-fb:98 nack pli | [RFC5104] |
a=rtcp-fb:98 ccm fir | [RFC5104] |
a=rtcp-fb:100 nack | [RFC5104] |
a=rtcp-fb:100 nack pli | [RFC5104] |
a=rtcp-fb:100 ccm fir | [RFC5104] |
m=video 0 RTP/SAVPF 101 102 | bundle-only video line with port number set to zero |
a=msid:ma tc | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m2 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:101 H264/90000 | [RFC3984] |
a=rtpmap:102 H264/90000 | [RFC3984] |
a=fmtp:101 profile-level-id=4d0028;packetization-mode=1;max-fr=30 | [RFC3984]Camera-2,Encoding-1 Resolution |
a=fmtp:102 profile-level-id=4d0028;packetization-mode=1;max-fr=15 | [RFC3984]Camera-1,Encoding-2 Resolution |
a=ssrc-group:SIMULCAST 67890 56789 | [RFC5576] |
a=ssrc:67890 cname:axzo1278npDlAzM73 | [RFC5576] [draft-rescorla-avtcore-6222bis] Camera-1,Encoding-1 SSRC with Session CNAME |
a=ssrc:56789 cname:axzo1278npDlAzM73 | [RFC5576] [draft-rescorla-avtcore-6222bis] Camera-1,Encoding-2 SSRC with Session CNAME |
a=sendonly | [RFC3264] - Send only video stream |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=rtcp-fb:101 nack | [RFC5104] |
a=rtcp-fb:101 nack pli | [RFC5104] |
a=rtcp-fb:101 ccm fir | [RFC5104] |
a=rtcp-fb:102 nack | [RFC5104] |
a=rtcp-fb:102 nack pli | [RFC5104] |
a=rtcp-fb:102 ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 m2 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendonly | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ssrc:22222 cname:y8/C90alEocUG1f0fcg | [RFC5576] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 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] |
m=video 54609 RTP/SAVPF 98 100 | BUNDLE accepted with port repeated from the audio port |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=imageattr:98 [x=1280,y=720] | [RFC6236]Camera-1,Encoding-1 Resolution |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=imageattr:100 [x=640,y=480] | [RFC6236] Camera-1,Encoding-2 Resolution |
a=fmtp:100 max-fr=15 | [RFC4566] |
a=recvonly | [RFC3264] - receive only video stream |
a=ssrc:54321 cname:axzo1278npDlAzM73 | [RFC5576] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 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=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5576] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
m=video 54609 RTP/SAVPF 101 102 | BUNDLE accepted with port repeated from the audio port |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=msid:ma tc | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc) |
a=mid:m2 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:101 H264/90000 | [RFC3984] |
a=rtpmap:102 H264/90000 | [RFC3984] |
a=recvonly | [RFC3264] - Send only video stream |
a=fmtp:101 profile-level-id=4d0028;packetization-mode=1;max-fr=30 | [RFC3984]Camera-2,Encoding-1 Resolution |
a=fmtp:102 profile-level-id=4d0028;packetization-mode=1;max-fr=15 | [RFC3984]Camera-1,Encoding-2 Resolution |
a=ssrc:90876 cname:axzo1278npDlAzM73 | [RFC5576] |
a=ice-ufrag:ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 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=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5576] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
This section shows an SDP Offer/Answer for a session with an audio and a single video stream. The video stream is 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.
title SVC Session - 3 Layers w/BUNDLE note right of Alice Alice offers 3 sendonly video stream with 3 layers of SVC end note Alice->Bob: Offer(Audio:Opus Video: H.264 SVC) bundle-only note left of Bob Bob accepts Alice's Offered Codec operation points end note Bob->Alice: Answer(Video: H.264) bundle-only Alice->Bob: One-Way H.264 Video with codec points as indicated by Bob.
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendonly | [RFC3264] |
a=rtcp-fb:109 nack | [RFC5104] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=ssrc:67890 cname:axzo1278npDlAzM73 | [RFC5576] |
m=video 0 RTP/SAVPF 96 97 100 | bundle-only video line with port number set to zero |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Audio m=line part of BUNDLE group |
a=msid:ma tb | |
a=rtpmap:96 H264/90000 | [RFC3984] |
a=fmtp:96 profile-level-id=4d0028;packetization-mode=1;max-fr=30;max-fs=8040 | [RFC3984]H.264 Layer 1 |
a=rtpmap:97 H264/90000 | [RFC3984] |
a=fmtp:97 profile-level-id=4d0028;packetization-mode=1;max-fr=15;max-fs=1200 | [RFC3984] H.264 Layer 2 |
a=rtpmap:100 H264-SVC/90000 | [RFC3984] |
a=fmtp:100 profile-level-id=4d0028;packetization-mode=1;max-fr=30;max-fs=8040 | [RFC3984] |
a=depend:100 lay m1:96,97; | [RFC5583]Layer 3 dependent on layers 1 and 2 |
a=sendonly | [RFC3264] - Send only video stream |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=ssrc:1732846380 cname:axzo1278npDlAzM73 | [RFC5576] |
a=ssrc:1732846381 cname:axzo1278npDlAzM73 | [RFC5576] |
a=ssrc:1732846382 cname:axzo1278npDlAzM73 | [RFC5576] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.142 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=recvonly | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.5 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.142 54609 typ srflx raddr 192.168.1.5 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.5 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.142 64678 typ srflx raddr 192.168.1.5 rport 64678 | [RFC5245] |
m=video 54609 RTP/SAVPF 96 100 | BUNDLE accepted Bundle address same as audio m=line. |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.142 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:96 H264/90000 | [RFC3984] |
a=fmtp:96 profile-level-id=4d0028;packetization-mode=1;max-fr=30;max-fs=8040 | [RFC3984]H.264 Layer 1 |
a=rtpmap:100 H264-SVC/90000 | [RFC3984] |
a=fmtp:100 profile-level-id=4d0028;packetization-mode=1;max-fr=30;max-fs=8040 | [RFC3984] |
a=depend:100 lay m1:96; | [RFC5583] Bob chooses 2 Codec Operation points |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.5 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.142 54609 typ srflx raddr 192.168.1.5 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.5 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.142 64678 typ srflx raddr 192.168.1.5 rport 64678 | [RFC5245] |
a=recvonly | [RFC3264] - Receive only video stream |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=ssrc:4638117328 cname:axzo1278npDlAzM73 | [RFC5576] |
This section shows an SDP Offer/Answer exchange for a simulcast scenario with 2 two resolutions and has [RFC4588] style re-transmission flows.
title Simulcast Streams with Retransmission note right of Alice Alice offers single audio and simulcasted video stream end note Alice->Bob: Offer(Audio:Opus Video:VP8 with 2 resolutions and RTX Stream) bundle-only note left of Bob Bob accepts all the streams offered by Alice end note Bob->Alice: Answer(Audio:Opus Video:VP8 with 2 resolutions and RTX Stream) bundle-only Alice<->Bob: 2 Way Audio and Simulcast Video with RTX Streams
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:11111 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
m=video 0 RTP/SAVPF 98 100 101 103 | bundle-only video line with port number set to zero |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Audio m=line part of BUNDLE group |
b=AS:1756 | [RFC4566] |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:101 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:103 VP8/90000 | [draft-ietf-payload-vp8] |
a=fmtp:98 max-fr=30;max-fs=8040 | [RFC4566] |
a=fmtp:100 max-fr=15;max-fs=1200 | [RFC4566] |
a=fmtp:101 apt=98;rtx-time=3000 | [RFC4588] |
a=fmtp:103 apt=100;rtx-time=3000 | [RFC4588] |
a=ssrc-group:SIMULCAST 12345 78990 | Simulcast group |
a=ssrc-group:FID 12345 34567 | [RFC5888] |
a=ssrc-group:FID 78990 90887 | [RFC5888] |
a=ssrc:12345 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:78990 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:34567 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:90887 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=sendrecv | [RFC3264] |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.142 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=ssrc:33333 cname:L/HmN4Xa5NWs1ao1 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.5 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.142 54609 typ srflx raddr 192.168.1.5 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.5 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.142 64678 typ srflx raddr 192.168.1.5 rport 64678 | [RFC5245] |
m=video 54609 RTP/SAVPF 98 100 101 103 | BUNDLE accepted with Bundle address identical to audio m-line |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.142 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:101 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:103 VP8/90000 | [draft-ietf-payload-vp8] |
a=fmtp:98 max-fr=30;max-fs=8040 | [RFC4566] |
a=fmtp:100 max-fr=15;max-fs=1200 | [RFC4566] |
a=fmtp:101 apt=98;rtx-time=3000 | [RFC4588] |
a=fmtp:103 apt=100;rtx-time=3000 | [RFC4588] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.5 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.142 54609 typ srflx raddr 192.168.1.5 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.5 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.142 64678 typ srflx raddr 192.168.1.5 rport 64678 | [RFC5245] |
a=ssrc-group:SIMULCAST 54321 77656 | Simulcast group |
a=ssrc-group:FID 54321 88776 | [RFC5888] |
a=ssrc-group:FID 77656 12908 | [RFC5888] |
a=ssrc:54321 cname:LP/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:77656 cname:LP/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:88776 cname:LP/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:12908 cname:LP/NWs1ao1HmN4Xa5 | [RFC5576] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
This section shows an SDP Offer/Answer exchange for a simulcast scenario with 2 two resolutions and has [RFC4588] style re-transmission flows.
It also showcases when Bob rejects one of the Simulcast Video Stream which results in the rejection of the associated repair stream implicitly
title Simulcast Streams with Retransmission Rejected note right of Alice Alice offers sendonly single audio and simulcasted video stream. end note Alice->Bob: Offer(Audio:Opus Video:VP8 with 2 resolutions and RTX Streams) bundle-only note left of Bob Bob accepts one simulcast,rtx and rejects the other end note Bob->Alice: Answer(Audio:Opus Video:VP8 with 1 resolution and the RTX Stream) bundle-only Alice->Bob: 1 Way Audio, Video Session note right of Alice Only 1 Video stream and its associated RTX stream is sent to Bob end note
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendonly | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:11111 cname:LP/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
m=video 0 RTP/SAVPF 98 100 101 103 | bundle-only video line with port number set to zero |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Audio m=line part of BUNDLE group |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:101 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:103 VP8/90000 | [draft-ietf-payload-vp8] |
a=fmtp:98 max-fr=30;max-fs=8040 | [RFC4566] |
a=fmtp:100 max-fr=15;max-fs=1200 | [RFC4566] |
a=fmtp:101 apt=98;rtx-time=3000 | [RFC4588] |
a=fmtp:103 apt=100;rtx-time=3000 | [RFC4588] |
a=ssrc-group:SIMULCAST 12345 78990 | Simulcast group |
a=ssrc-group:FID 12345 34567 | [RFC5888] |
a=ssrc-group:FID 78990 90887 | [RFC5888] |
a=ssrc:12345 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:78990 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:34567 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:90887 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=sendonly | [RFC3264] |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.142 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=recvonly | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.5 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.142 54609 typ srflx raddr 192.168.1.5 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.5 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.142 64678 typ srflx raddr 192.168.1.5 rport 64678 | [RFC5245] |
m=video 54609 RTP/SAVPF 98 101 | BUNDLE accepted with Bundle address identical to audio m-line |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.142 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:101 VP8/90000 | [draft-ietf-payload-vp8] |
a=fmtp:98 max-fr=30;max-fs=8040 | [RFC4566] |
a=fmtp:101 apt=98;rtx-time=3000 | [RFC4588] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.5 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.142 54609 typ srflx raddr 192.168.1.5 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.5 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.142 64678 typ srflx raddr 192.168.1.5 rport 64678 | [RFC5245] |
a=ssrc:54321 cname:NWs1ao1HmN4Xa5 | [RFC5576] |
a=recvonly | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
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 Offer/Answer exchange, one audio stream, 2 simulcast video streams and 2 associated FEC streams are sent over a single 5-Tuple as part of bundle-only and BUNDLE framework.
title Simulcast Streams with Forward Error Correction note right of Alice Alice offers sendonly single audio and simulcasted video stream end note Alice->Bob: Offer(Audio:Opus Video:VP8 with 2 resolutions with FEC Streams) bundle-only note left of Bob Bob accepts simulcast stream as well as FEC streams end note Bob->Alice: Answer(Audio:Opus Video:VP8 with 2 resolutions with FEC Streams) bundle-only Alice->Bob: 1 Way Audio, Video Session note right of Alice Successful Session with 4 video streams (Simulcast + FEC) and 1 Audio Stream
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:11111 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
m=video 0 RTP/SAVPF 98 100 101 103 | bundle-only video line with port number set to zero |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:101 1d-interleaved-parityfec/90000 | [RFC5956] |
a=rtpmap:103 1d-interleaved-parityfec/90000 | [RFC5956] |
a=fmtp:98 max-fr=30;max-fs=8040 | [RFC4566] |
a=fmtp:100 max-fr=15;max-fs=1200 | [RFC4566] |
a=fmtp:101 L=5; D=10; repair-window=200000 | [RFC5956] |
a=fmtp:103 L=5; D=10; repair-window=200000 | [RFC5956] |
a=ssrc-group:SIMULCAST 12345 78990 | Simulcast group |
a=ssrc-group:FEC-FR 12345 34567 | [RFC5888] |
a=ssrc-group:FEC-FR 78990 90887 | [RFC5888] |
a=ssrc:12345 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:78990 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:34567 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ssrc:90887 cname:Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=sendrecv | [RFC3264] |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ssrc:33333 cname:Y9/cZke09JAtpl98 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 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] |
m=video 54609 RTP/SAVPF 98 100 101 103 | BUNDLE accepted with Bundle Address identical to audio m=line. |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:101 1d-interleaved-parityfec/90000 | [RFC5956] |
a=rtpmap:103 1d-interleaved-parityfec/90000 | [RFC5956] |
a=fmtp:98 max-fr=30;max-fs=8040 | [RFC4566] |
a=fmtp:100 max-fr=15;max-fs=1200 | [RFC4566] |
a=fmtp:101 L=5; D=10; repair-window=200000 | [RFC5956] |
a=fmtp:103 L=5; D=10; repair-window=200000 | [RFC5956] |
a=ssrc-group:SIMULCAST 54321 77656 | Simulcast group |
a=ssrc-group:FEC-FR 54321 88776 | [RFC5888] |
a=ssrc-group:FEC-FR 77656 12908 | [RFC5888] |
a=ssrc:54321 cname:Q/1HmN4Xa5CClapa | [RFC5576] |
a=ssrc:77656 cname:Q/1HmN4Xa5CClapa | [RFC5576] |
a=ssrc:88776 cname:Q/1HmN4Xa5CClapa | [RFC5576] |
a=ssrc:12908 cname:Q/1HmN4Xa5CClapa | [RFC5576] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:* nack | [RFC5104] |
a=rtcp-fb:* nack pli | [RFC5104] |
a=rtcp-fb:* ccm fir | [RFC5104] |
The examples in the section provide SDP for a variety of scenarios related to RTCP configuration, RTP Header extension, Legacy Interop scenarios and more.
Alice wants to setup a secure RTCP feedback based video session with Bob, but also wants to negotiate support for Reduced Size RTCP as defined in RFC5506. Since Bob is capable of this feature, the includes a=rtcp-rsize in the Answer.
title Video Session with Reduced Size RTCP Support Alice->Bob: Offer(Video:H.264,VP8) note right of Alice Alice prefers reduced size RTCP Packets end note Bob->Alice: Answer(Video:H.264) note left of Bob Bob supports reduced-size RTCP packets and he prefers the same from Alice. end note Alice<->Bob: Two-way H.264 Video note right of Alice RTCP packets are generated per RFC5506 end note
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=video 62537 RTP/SAVPF 99 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 24.23.204.141 | [RFC4566] |
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 | [draft-ietf-payload-vp8] - VP8 video codec |
a=rtcp-rsize | [RFC5506] - Alice intends to use reduced size RTCP for this session |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 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:99 nack | [RFC5245] |
a=rtcp-fb:99 nack pli | [RFC5104] |
a=rtcp-fb:99 ccm fir | [RFC5104] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
a=ssrc:12908 cname:Q/1HmN4Xa5CClapa | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=video 63130 RTP/SAVPF 99 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
c= IN IP4 98.248.92.771 | [RFC4566] |
a=rtpmap:99 H264/90000 | [RFC3984] |
a=fmtp:99 profile-level-id=4d0028;packetization-mode=1 | [RFC3984] |
a=rtcp-rsize | [RFC5506] - Bob supports reduced size RTCP |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 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] |
a=rtcp-fb:99 nack pli | [RFC5104] |
a=rtcp-fb:99 ccm fir | [RFC5104] |
a=ssrc:11111 cname:QCL/1HmN4Xa5CClapa | [RFC5576] |
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.
title 2-Way Audio with VAD Alice->Bob: Offer(Audio:Opus,PCMU,PCMA) note right of Alice Alice indicates support for including audio-level end note Bob->Alice: Answer(Audio:Opus,PCMU,PCMA) note left of Bob Bob accepts and indicates his support as well end note Alice<->Bob: Two-way Opus Audio note right of Alice Per packet audio-level is included end note
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 54609 RTP/SAVPF 109 0 8 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtpmap:0 PCMU/8000 | [RFC3551] |
a=rtpmap:0 PCMA/8000 | [RFC3551] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:* nack | [RFC5104] |
a=ssrc:11111 cname:QCL/1HmN4Xa5CClapa | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 49203 RTP/SAVPF 109 0 98 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level | [RFC6464] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Bob accepts only Opus Codec |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:0 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=rtcp-fb:* nack | [RFC5104] |
a=sendrecv | [RFC3264] - Bob can send and recv audio |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203 |
a=ice-ufrag:c300d85b | [RFC5245] - Session Level ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - Session Level ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - Session DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Host ICE Candidate for Opus Stream |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=ssrc:1732846380 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
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.
title 2-Way Audio with VAD Alice->Bob: Offer(Audio:Opus,PCMU,PCMA) note right of Alice Alice indicates support for including audio-level end note Bob->Alice: Answer(Audio:Opus,PCMU,PCMA) note left of Bob Bob accepts and indicates his support as well end note Alice<->Bob: Two-way Opus Audio note right of Alice Per packet audio-level is included end note
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=rtcp-rsize | [RFC5506] - Alice intends to use reduced size RTCP for this session |
m=audio 54609 RTP/SAVPF 109 0 8 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=extmap:1/recvonly urn:ietf:params:rtp-hdrext:csrc-audio-level | [RFC6465] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels |
a=ptime:20 | [draft-ietf-payload-rtp-opus] - Opus packetization of 20ms |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:0 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=rtcp-fb:* nack | [RFC5104] |
a=sendrecv | [RFC3264] - Alice can send and recv audio |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] - Alice can perform RTP/RTCP Muxing on port 54609 |
a=ice-ufrag:074c6550 | [RFC5245] - Session Level ICE parameter |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] - Session Level ICE parameter |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - Session DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] - Host ICE Candidate |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=ssrc:11111 cname:QCL/1HmN4Xa5CClapa | [RFC5576] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] - Session Origin Information |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 49203 RTP/SAVPF 109 0 98 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=extmap:1/sendonly urn:ietf:params:rtp-hdrext:csrc-audio-level | [RFC6465] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] - Bob accepts only Opus Codec |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtpmap:0 PCMU/8000 | [RFC3551] PCMU Audio Codec |
a=rtpmap:0 PCMA/8000 | [RFC3551] PCMA Audio Codec |
a=rtcp-fb:* nack | [RFC5104] |
a=sendrecv | [RFC3264] - Bob can send and recv audio |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] - Bob can perform RTP/RTCP Muxing on port 49203 |
a=ice-ufrag:c300d85b | [RFC5245] - Session Level ICE username frag |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] - Session Level ICE password |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] - Session DTLS Fingerprint for SRTP |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] - Host ICE Candidate for Opus Stream |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] - Server Reflexive ICE Candidate for the above host candidate |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] - Second Host Candidate |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] - Server Reflexive Candidate for the Second Host Candidate |
a=ssrc:2222 cname:HmN4Xa5CC/lapa | [RFC5576] |
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,
title Successful 2-Way WebRTC <-> VOIP Interop note right of Alice Alice is a multistream capable WebRTC end-point & Bob is behind a legacy VOIP system end note Alice->Bob: Offer(Audio:Opus Video: 2 VP8, 2 H2.64 Streams) with bundle-only offer note right of Alice Alice marks both the video streams as bundle-only end note Bob->Alice: Answer(Audio:Opus) note left of Bob Bob accepts only Audio stream since he doesn't recognize bundle-only streams end note Alice<->Bob: Two-way Opus Audio
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE m0 m1 m2 | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m0 | [RFC5888] Audio m=line part of BUNDLE group with a unique port number |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendonly | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=ssrc:11111 cname:axzo1278npDlAzM73 | [RFC5576]E |
m=video 0 RTP/SAVPF 98 100 | bundle-only video line with port number set to zero |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m1 | [RFC5888] Video m=line part of BUNDLE group |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=imageattr:98 [x=1280,y=720] | [RFC6236]Camera-1,Encoding-1 Resolution |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=imageattr:100 [x=640,y=480] | [RFC6236] Camera-1,Encoding-2 Resolution |
a=fmtp:100 max-fr=15 | [RFC4566] |
a=ssrc-group:SIMULCAST 12345 45678 | [RFC5576] |
a=ssrc:12345 cname:axzo1278npDlAzM73 | [RFC5576]E |
a=ssrc:45678 cname:axzo1278npDlAzM73 | [RFC5576] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
m=video 0 RTP/SAVPF 101 103 | bundle-only video line with port number set to zero |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=mid:m2 | [RFC5888] Video m=line part of BUNDLE group |
a=msid:ma tc | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tc) |
a=rtpmap:101 H264/90000 | [RFC3984] |
a=rtpmap:103 H264/90000 | [RFC3984] |
a=fmtp:101 profile-level-id=4d0028;packetization-mode=1;max-fr=30 | [RFC3984]Camera-2,Encoding-1 Resolution |
a=fmtp:100 profile-level-id=4d0028;packetization-mode=1;max-fr=15 | [RFC3984]Camera-1,Encoding-2 Resolution |
a=ssrc-group:SIMULCAST 67890 56789 | [RFC5576] |
a=ssrc:67890 cname:axzo1278npDlAzM73 | [RFC5576] |
a=ssrc:56789 cname:axzo1278npDlAzM73 | [RFC5576] |
a=bundle-only | [draft-roach-mmusic-unified-plan] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20519 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendonly | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=ice-ufrag:ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.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] |
m=video 0 RTP/SAVPF 98 100 | Bob doesn't recognize bundle-only and hence rejects the video stream |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:98 VP8/90000 | [draft-ietf-payload-vp8] |
a=rtpmap:100 VP8/90000 | [draft-ietf-payload-vp8] |
a=imageattr:98 [x=1280,y=720] | [RFC6236]Camera-1,Encoding-1 Resolution |
a=fmtp:98 max-fr=30 | [RFC4566] |
a=imageattr:100 [x=640,y=480] | [RFC6236] Camera-1,Encoding-2 Resolution |
a=fmtp:100 max-fr=15 | [RFC4566] |
m=video 0 RTP/SAVPF 98 100 | Bob doesn't recognize bundle-only and hence rejects the video stream |
c= IN IP4 24.23.204.141 | [RFC4566] |
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=fmtp:100 profile-level-id=4d0028;packetization-mode=1;max-fr=15 | [RFC3984]Camera-1,Encoding-2 Resolution |
In this example Alice and Bob negotiate using Tricke ICE to perform ICE candiate generation and connectivity checks. This example also multiplexes audio and video stream via SDP BUNDLE framework.
title Audio/Video Session with ICE Trickle note right of Alice Alice and Bob know that they both support BUNDLE. end note Alice->Bob: Offer(Audio:Opus Video:VP8) note right of Alice Alice indicates support for ICE Trickle and BUNDLE end note Bob->Alice: Answer(Audio:Opus Video:VP8) indicating its support for BUNDLE note left of Bob Bob also indicates ICE Trickle support. end note Alice <-> Bob: 2Way Call with Audio and Video Multiplexed
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] Alice supports grouping of m=lines under BUNDLE semantics. |
m=audio 10000 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:foo | [RFC5888] - Audio m=line part of BUNDLE group |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=rtcp-fb:109 nack | [RFC5104] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:11111 cname=Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=ice-options:trickle | [draft-ivov-mmusic-trickle-ice] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 10000 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
m=video 10000 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=mid:bar | [RFC5888] - Video m=line with Bundle address same as the audio m=line |
c= IN IP4 24.23.204.141 | [RFC4566] |
b=AS:1000 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:actpass | [RFC4145] - Alice can perform DTLS before Answer arrives |
a=rtcp-mux | [RFC5761] |
a=ssrc:22222 Q/NWs1ao1HmN4Xa5 | [RFC5576] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=ice-options:trickle | [draft-ivov-mmusic-trickle-ice] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 10000 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=group:BUNDLE audio video | [draft-ietf-mmusic-sdp-bundle-negotiation] - Bob supports BUNDLE semantics. |
m=audio 20000 RTP/SAVPF 109 | [RFC4566] |
a=msid:ma ta | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (ta) |
a=mid:foo | [RFC5888] - Audio m=line part of the BUNDLE group |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000/2 | [draft-ietf-payload-rtp-opus] |
a=ptime:20 | [draft-ietf-payload-rtp-opus] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-fb:109 nack | [RFC5104] |
a=rtcp-mux | [RFC5761] |
a=ssrc:33333 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=ice-options:trickle | [draft-ivov-mmusic-trickle-ice] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 20000 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
m=video 20000 RTP/SAVPF 120 | [RFC4566] |
a=msid:ma tb | Identifies RTCMediaStream ID (ma) and RTCMediaStreamTrack ID (tb) |
a=mid:bar | [RFC5888] - Video m=line with Bundle address same as the audio m=line |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=setup:active | [RFC4145] - Bob carries out DTLS Handshake in parallel |
a=rtcp-mux | [RFC5761] |
a=ssrc:44444 cname:EocUG1f0fcg/yvY7 | [RFC5576] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=ice-options:trickle | [draft-ivov-mmusic-trickle-ice] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 20000 typ host | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=rtcp-fb:120 nack | [RFC5104] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
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 sends [RFC3264] Offer with two sets of media descriptions per media type.
On the other hand, Bob being a Legacy VOIP end-point, recognizes only the media descriptions with RTP/AVP as the application protocol. The security and fedback requirements for the session are either handled by a intermediate gateway or with some combination of Bob's capabilities and the intermediate gateway.
title Successful 2-Way WebRTC <-> VOIP Interop note right of Alice Alice is on a WebRTC end-point & Bob is behind a legacy VOIP system end note Alice->Bob: Offer(Audio:Opus Video:VP8) note right of Alice Alice includes 2 copies of media descriptions 1. WebRTC compliant media description (RTP/SAVPF) 2. Legacy compliant media description (RTP/AVP) end note Bob->Alice: Answer(Audio:Opus Video:VP8) note right of Bob Bob recognizes"legacy compliant" media description from Alice. and accepts the same. end note Alice->Bob: Two-way Opus Audio, VP8 Video note right of Alice Session also suports RTP/RTCP Mux, RTCP feedback (nack,pli) end note
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=alice 20518 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=ice-ufrag:074c6550 | [RFC5245] |
a=ice-pwd:a28a397a4c3f31747d1ee3474af08a068 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=rtcp-rsize | [RFC5506] |
m=audio 54609 RTP/SAVPF 109 | [RFC4566] |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:109 opus/48000 | |
a=ptime:20 | |
a=sendrecv | [RFC3264] |
a=rtcp-mux | [RFC5761] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54609 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 54609 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:109 nack | [RFC5104] |
m=video 62537 RTP/SAVPF 120 | [RFC4566] |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-ietf-payload-vp8] |
a=sendrecv | [RFC3264] |
a=rtcp-mux | [RFC5761] |
a=candidate:0 1 UDP 2113667327 192.168.1.4 62537 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 24.23.204.141 62537 typ srflx raddr 192.168.1.4 rport 62537 | [RFC5245] |
a=candidate:0 2 2113667326 192.168.1.4 54721 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 54721 typ srflx raddr 192.168.1.4 rport 54721 | [RFC5245] |
a=rtcp-fb:120 nack pli | [RFC5104] |
a=rtcp-fb:120 ccm fir | [RFC5104] |
--------------- | These set of media descriptions are for Legacy Inter-op purposes |
m=audio 54732 RTP/AVP 109 | [RFC4566]Alice includes RTP/AVP audio stream description |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:7f:7d:f9:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=rtpmap:109 opus/48000 | |
a=ptime:20 | |
a=sendrecv | [RFC3264] |
a=rtcp-mux | [RFC5761]Alice still includes RTP/RTCP Mux support |
a=candidate:0 1 UDP 2113667327 192.168.1.4 54732 typ host | [RFC5245] |
a=candidate:1 1 UDP 694302207 24.23.204.141 54732 typ srflx raddr 192.168.1.4 rport 54732 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.4 64678 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 24.23.204.141 64678 typ srflx raddr 192.168.1.4 rport 64678 | [RFC5245] |
a=rtcp-fb:109 nack | [RFC5104]She adds her intent for NACK RTCP feedback support |
m=video 62445 RTP/AVP 120 | [RFC4566]Alice includes RTP/AVP video stream description |
c= IN IP4 24.23.204.141 | [RFC4566] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:7d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
a=rtpmap:120 VP8/90000 | [draft-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] |
SDP Contents | RFC#/Notes |
---|---|
v=0 | [RFC4566] |
o=bob 16833 0 IN IP4 0.0.0.0 | [RFC4566] |
s= | [RFC4566] |
t=0 0 | [RFC4566] |
a=ice-ufrag:c300d85b | [RFC5245] |
a=ice-pwd:de4e99bd291c325921d5d47efbabd9a2 | [RFC5245] |
a=fingerprint:sha-1 99:41:49:83:4a:97:0e:1f:ef:6d:f7:c9:c7:70:9d:1f:66:79:a8:07 | [RFC5245] |
m=audio 49203 RTP/AVP 109 | [RFC4566] Bob accepts RTP/AVP based audio stream |
c= IN IP4 98.248.92.77 | [RFC4566] |
a=rtpmap:109 opus/48000 | |
a=ptime:20 | |
a=sendrecv | [RFC3264] |
a=candidate:0 1 UDP 2113667327 192.168.1.7 49203 typ host | [RFC5245] |
a=candidate:1 1 UDP 1694302207 98.248.92.77 49203 typ srflx raddr 192.168.1.7 rport 49203 | [RFC5245] |
a=candidate:0 2 UDP 2113667326 192.168.1.7 60065 typ host | [RFC5245] |
a=candidate:1 2 UDP 1694302206 98.248.92.77 60065 typ srflx raddr 192.168.1.7 rport 60065 | [RFC5245] |
m=video 63130 RTP/SAVP 120 | [RFC4566] Bob accepts RTP/AVP based video stram |
c= IN IP4 98.248.92.771 | [RFC4566] |
a=rtpmap:120 VP8/90000 | [draft-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.
[RFC EDITOR NOTE: Please remove this section when publishing]
Changes from draft-nandakumar-rtcweb-sdp-02
Changes from draft-nandakumar-rtcweb-sdp-01
Changes from draft-nandakumar-rtcweb-sdp-00
[RFC3264] | Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, June 2002. |
[RFC4566] | Handley, M., Jacobson, V. and C. Perkins, "SDP: Session Description Protocol", RFC 4566, July 2006. |
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. |