RFC 4317

Session Description Protocol (SDP) Offer/Answer Examples

πŸ“… published December 2005, from ietf

Session Description Protocol (SDP) Offer/Answer Examples πŸ¦‹

okay so the title block tells us this is RFC 4317 πŸŽ€, dated December 2005. It's an Informational doc from the Network Working Group, so it's not a standard, just a super useful cheat sheet πŸ’…. The authors are A. Johnston of Tello Corporation and R. Sparks of Estacado Systems 🫢. The title block doesn't list any RFCs it obsoletes or updates ✨.

Status of This Memo ✨

this memo is giving info for the Internet community πŸ“š. It does not specify an Internet standard of any kind πŸ™ˆ. Distribution of this memo is unlimited 🌈.

Copyright (C) The Internet Society (2005).

Abstract 🌸

this doc gives examples of SDP offer/answer exchanges, and the vibes are immaculate 😭. The examples cover codec negotiation and selection 🎧, hold and resume ⏸️, and adding and deleting media streams βž•. They show multiple media types, bidirectional, unidirectional, inactive streams, and dynamic payload types 🧚. Common Third Party Call Control (3pcc) examples are in here too πŸ‘‘.

Table of Contents πŸ“–

   1. Overview ........................................................3
   2. Codec Negotiation and Selection .................................3
      2.1. Audio and Video 1 ..........................................3
      2.2. Audio and Video 2 ..........................................4
      2.3. Audio and Video 3 ..........................................5
      2.4. Two Audio Streams ..........................................6
      2.5. Audio and Video 4 ..........................................7
      2.6. Audio Only 1 ...............................................8
      2.7. Audio and Video 5 ..........................................9
      2.8. Audio and Video 6 .........................................10
   3. Hold and Resume Scenarios ......................................12
      3.1. Hold and Unhold 1 .........................................12
      3.2. Hold with Two Streams .....................................13
   4. Addition and Deletion of Media Streams .........................15
      4.1. Second Audio Stream Added .................................15
      4.2. Audio, then Video Added ...................................16
      4.3. Audio and Video, Then Video Deleted .......................17
   5. Third Party Call Control (3pcc) ................................19
      5.1. No Media, Then Audio Added ................................19
      5.2. Hold and Unhold 2 .........................................20
      5.3. Hold and Unhold 3 .........................................21
   6. Security Considerations ........................................22
   7. Informative References .........................................22

1. Overview πŸ¦‹

okay so this doc walks through SDP offer/answer examples based on RFC 3264 [1] ✨. The SDP in these examples is defined by RFC 2327 [2] πŸ“. The offers and answers are assumed to get carried by something like Session Initiation Protocol (SIP) [3] πŸ“ž.

The examples cover codec negotiation and selection 🎧, hold and resume ⏸️, and adding and deleting media streams βž•. They show multiple media types, bidirectional, unidirectional, inactive streams, and dynamic payload types 🌸. Common Third Party Call Control (3pcc) [5] examples are included too πŸ’….

The following sections have examples where two parties, Alice and Bob, swap SDP offers and answers, and sometimes extra offers and answers on top πŸ’–. Note that the subject line (s=) contains a single space character πŸ™ˆ.

2. Codec Negotiation and Selection πŸŽ€

2.1. Audio and Video 1 πŸ’–

this is a super common scenario 🌷: a video and audio session where multiple codecs get offered but only one gets accepted 😌. After the exchange below, Alice and Bob may send only PCMU audio and MPV video. Note: Dynamic payload type 97 is used for iLBC codec [6] 🧚.

    [Offer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 0 8 97
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:97 iLBC/8000
      m=video 51372 RTP/AVP 31 32
      a=rtpmap:31 H261/90000
      a=rtpmap:32 MPV/90000

    [Answer]

      v=0
      o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 host.biloxi.example.com
      t=0 0
      m=audio 49174 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      m=video 49170 RTP/AVP 32
      a=rtpmap:32 MPV/90000

2.2. Audio and Video 2 🌈

Alice can handle PCMU, PCMA, and iLBC codecs, but only one at a time πŸ™ƒ. So she offers all three to boost her chances of a successful exchange, and Bob accepts two of them 🀝. An audio-only session gets set up in the first exchange between Alice and Bob, using either PCMU or PCMA (the payload type in the RTP packet tells you which one is in use) 🎢. Since Alice only supports one audio codec at a time, a second offer goes out with just that one codec, so the codec choice is limited to just one ✨.

Note: the version number is incremented in both SDP messages in the second exchange πŸ”’. After this exchange, only the PCMU codec may be used for the media session between Alice and Bob 🎧.

Note: the declined video stream is still present in the second SDP exchange, with its port set to zero πŸ™ˆ.

    [Offer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 0 8 97
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:97 iLBC/8000
      m=video 51372 RTP/AVP 31 32
      a=rtpmap:31 H261/90000
      a=rtpmap:32 MPV/90000

    [Answer]

      v=0
      o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 host.biloxi.example.com
      t=0 0
      m=audio 49172 RTP/AVP 0 8
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      m=video 0 RTP/AVP 31
      a=rtpmap:31 H261/90000

    [Second-Offer]

      v=0
      o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 51372 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      m=video 0 RTP/AVP 31
      a=rtpmap:31 H261/90000

    [Second-Answer]

      v=0
      o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 host.biloxi.example.com
      t=0 0
      m=audio 49172 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      m=video 0 RTP/AVP 31
      a=rtpmap:31 H261/90000

2.3. Audio and Video 3 πŸ“

Alice offers three audio codecs and two video codecs 🎡, and Bob accepts with a single audio codec and a single video codec πŸ¦‹. The result is that Bob and Alice use iLBC for audio and H261 for video πŸ’œ.

Note: changing the dynamic payload type from 97 to 99 between the offer and the answer is OK, since the same codec is referenced 🌸.

    [Offer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 0 8 97
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:97 iLBC/8000
      m=video 51372 RTP/AVP 31 32
      a=rtpmap:31 H261/90000
      a=rtpmap:32 MPV/90000

    [Answer]

      v=0
      o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 host.biloxi.example.com
      t=0 0
      m=audio 49172 RTP/AVP 99
      a=rtpmap:99 iLBC/8000
      m=video 51374 RTP/AVP 31
      a=rtpmap:31 H261/90000

2.4. Two Audio Streams πŸŽ™οΈ

in this one, Alice wants two separate audio streams 🎧: one for normal audio, and one for telephone-events πŸ“±. So she offers two streams, one audio stream with two codecs and another with RFC 2833 [4] tones (for DTMF) ☎️. Bob accepts both audio streams, picking the iLBC codec and telephone-events πŸ’–.

    [Offer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 0 97
      a=rtpmap:0 PCMU/8000
      a=rtpmap:97 iLBC/8000
      m=audio 49172 RTP/AVP 98
      a=rtpmap:98 telephone-event/8000
      a=sendonly

    [Answer]

      v=0
      o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 host.biloxi.example.com
      t=0 0
      m=audio 49172 RTP/AVP 97
      a=rtpmap:97 iLBC/8000
      m=audio 49174 RTP/AVP 98
      a=rtpmap:98 telephone-event/8000
      a=recvonly

2.5. Audio and Video 4 🫧

Alice and Bob set up an audio and video session with a single audio codec and a single video codec 🎬. In a second exchange, Bob changes his media address, and Alice accepts with the same SDP as the initial exchange 🌷. As a result, she does not increment the version number πŸ”’.

    [Offer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 97
      a=rtpmap:97 iLBC/8000
      m=video 51372 RTP/AVP 31
      a=rtpmap:31 H261/90000

    [Answer]

      v=0
      o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 host.biloxi.example.com
      t=0 0
      m=audio 49174 RTP/AVP 97
      a=rtpmap:97 iLBC/8000
      m=video 49170 RTP/AVP 31
      a=rtpmap:31 H261/90000

    [Second-Offer]

      v=0
      o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 newhost.biloxi.example.com
      t=0 0
      m=audio 49178 RTP/AVP 97
      a=rtpmap:97 iLBC/8000
      m=video 49188 RTP/AVP 31
      a=rtpmap:31 H261/90000

    [Second-Answer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 97
      a=rtpmap:97 iLBC/8000
      m=video 51372 RTP/AVP 31
      a=rtpmap:31 H261/90000

2.6. Audio Only 1 🎧

Alice wants an audio session with Bob, using either the PCMU codec or the iLBC codec with RFC2833 tones 🎢, but not both at once πŸ™…β€β™€οΈ. The offer contains these two media streams πŸ“¨. Bob declines the first one and accepts the second πŸ™Œ. If both media streams had been accepted, Alice would have sent a second offer declining one of the streams, as shown in Section 4.3 πŸ’….

    [Offer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      m=audio 51372 RTP/AVP 97 101
      a=rtpmap:97 iLBC/8000
      a=rtpmap:101 telephone-event/8000

    [Answer]

      v=0
      o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
      s=
      c=IN IP4 host.biloxi.example.com
      t=0 0
      m=audio 0 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      m=audio 49170 RTP/AVP 97 101
      a=rtpmap:97 iLBC/8000
      a=rtpmap:101 telephone-event/8000

2.7. Audio and Video 5 πŸŽ€

Okay so Alice and Bob start with an audio and video session using one audio codec and one video codec πŸ“žπŸŽ₯. Then in the second exchange, Alice slides in a second video codec, and Bob's like yesss and accepts it πŸ’…. Now they can flip between the two video codecs whenever they want without doing another offer/answer exchange πŸ¦‹

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 99
a=rtpmap:99 iLBC/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 99
a=rtpmap:99 iLBC/8000
m=video 51374 RTP/AVP 31
a=rtpmap:31 H261/90000

[Second-Offer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 99
a=rtpmap:99 iLBC/8000
m=video 51372 RTP/AVP 31 32
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000

[Second-Answer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 99
a=rtpmap:99 iLBC/8000
m=video 51374 RTP/AVP 31 32
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000

2.8. Audio and Video 6 πŸ–₯️

This one is giving conferencing vibes πŸŽ€. Bob accepts an audio and video offer, but he wants the video sent to a different address than the audio. That's super common in conferencing, where audio and video mixing happen on different servers. Alice offers audio and video, and Bob accepts with his own twist ✨

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0 8 97
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
m=video 51372 RTP/AVP 31 32
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49174 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 49172 RTP/AVP 32
c=IN IP4 otherhost.biloxi.example.com
a=rtpmap:32 MPV/90000

3. Hold and Resume Scenarios ⏸️

3.1. Hold and Unhold 1

Alice calls Bob, but when Bob picks up he puts Alice on hold πŸ“΅. Then in the second offer, Bob takes her off hold, and Alice changes her port number in the second exchange πŸ”„. The media session between them is active once Alice's second answer lands πŸŽ‰ Note that a=sendrecv could be present in both the second offer and answer exchange. This is a common flow in 3pcc [5] scenarios πŸ’œ

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0 97
a=rtpmap:0 PCMU/8000
a=rtpmap:97 iLBC/8000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 placeholder.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 97
a=rtpmap:97 iLBC/8000
a=sendonly

[Second-Offer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Second-Answer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49178 RTP/AVP 97
a=rtpmap:97 iLBC/8000

3.2. Hold with Two Streams 🎢

In this one, two audio streams get set up in the first offer/answer exchange 🎧. In the second exchange, one of them gets put on hold. Alice offers two media streams: a bidirectional audio stream and a send-only telephone event stream. Bob accepts both. Then Bob puts Alice's audio stream on hold but leaves the tone stream alone πŸ”‡ Alice responds with identical SDP to the initial offer 🫢

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0 97
a=rtpmap:0 PCMU/8000
a=rtpmap:97 iLBC/8000
m=audio 49172 RTP/AVP 98
a=rtpmap:98 telephone-event/8000
a=sendonly

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=audio 49174 RTP/AVP 98
a=rtpmap:98 telephone-event/8000
a=recvonly

[Second-Offer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 97
a=rtpmap:97 iLBC/8000
a=sendonly
m=audio 49174 RTP/AVP 98
a=rtpmap:98 telephone-event/8000
a=recvonly

[Second-Answer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0 97
a=rtpmap:0 PCMU/8000
a=rtpmap:97 iLBC/8000
m=audio 49172 RTP/AVP 98
a=rtpmap:98 telephone-event/8000
a=sendonly

4. Addition and Deletion of Media Streams βž•βž–

This section shows streams getting added and deleted 🧁

4.1. Second Audio Stream Added

In this example, the first offer/answer exchange sets up a single audio stream with a single codec 🎡. The second exchange adds a second audio stream for telephone events. Bob's media server (which has a different connection address) adds it to receive RFC 2833 telephone-events (DTMF digits, typically) from Alice πŸ“± Alice accepts. Even though the second stream is unidirectional, Alice receives RTCP packets on port 49173 from the media server 🀯

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0 97
a=rtpmap:0 PCMU/8000
a=rtpmap:97 iLBC/8000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Second-Offer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=audio 48282 RTP/AVP 98
c=IN IP4 mediaserver.biloxi.example.com
a=rtpmap:98 telephone-event/8000
a=recvonly

[Second-Answer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=audio 49172 RTP/AVP 98
c=IN IP4 host.atlanta.example.com
a=rtpmap:98 telephone-event/8000
a=sendonly

4.2. Audio, then Video Added πŸ“Ή

An audio-only session gets set up in the initial exchange between Alice and Bob using the PCMU codec πŸŽ™οΈ. Then Alice adds a video stream, and Bob accepts it πŸ’–

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 0
a=rtpmap:0 PCMU/8000

[Second-Offer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 49172 RTP/AVP 31
a=rtpmap:31 H261/90000

[Second-Answer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 49168 RTP/AVP 31
a=rtpmap:31 H261/90000

4.3. Audio and Video, Then Video Deleted πŸ—‘οΈ

Alice and Bob set up an audio and video session πŸŽ₯🎀. In a second exchange, Bob deletes the video session, which leaves an audio-only session behind 😭

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49174 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=video 49170 RTP/AVP 31
a=rtpmap:31 H261/90000

[Second-Offer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49174 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=video 0 RTP/AVP 31
a=rtpmap:31 H261/90000

[Second-Answer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=video 0 RTP/AVP 31
a=rtpmap:31 H261/90000

5. Third Party Call Control (3pcc) 🧚

This section shows examples that are common in Third Party Call Control (3pcc) flows [5] πŸ’…. Call hold and resume flows are also common in 3pcc.

5.1. No Media, Then Audio Added 🌸

The first offer from Alice has no media lines, so Bob accepts with no media lines too πŸ™ˆ. In the second exchange, Alice adds an audio stream, and Bob accepts it 🫢

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0

[Second-Offer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Second-Answer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 97
a=rtpmap:97 iLBC/8000

5.2. Hold and Unhold 2 πŸ¦‹

okay so in this one, Alice's first offer has the connection address 0.0.0.0 and a random port number πŸ™ˆ. That means Bob can not send media to Alice (the media stream is "black holed" or "bh") πŸ’€. Bob accepts with normal SDP ✨. Then in the second exchange Alice changes the connection address, Bob accepts, and boom, a media session is established πŸ”₯

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 0.0.0.0
t=0 0
m=audio 23442 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Second-Offer]

v=0
o=alice 2890844526 2890844527 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Second-Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

5.3. Hold and Unhold 3 πŸ’œ

this one flips it around πŸ™ƒ. Alice's first offer has an audio stream, but Bob's answer comes back with the connection address 0.0.0.0 and a random port number, so now Alice can not send media to Bob (the media stream is "black holed" or "bh") 😭. In the second exchange Bob changes the connection address, Alice accepts, and the media session is finally established πŸŽ€

[Offer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Answer]

v=0
o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
s=
c=IN IP4 0.0.0.0
t=0 0
m=audio 9322 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Second-Offer]

v=0
o=bob 2808844564 2808844565 IN IP4 host.biloxi.example.com
s=
c=IN IP4 host.biloxi.example.com
t=0 0
m=audio 49172 RTP/AVP 97
a=rtpmap:97 iLBC/8000

[Second-Answer]

v=0
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
s=
c=IN IP4 host.atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000

6. Security Considerations πŸ”’

okay bestie, this part is SERIOUS 😀. SDP offer and answer messages can carry private info about addresses and sessions that parties want to set up. So if that info needs to stay private, some security mechanism in the protocol that carries the offers and answers must be used. For SIP, that means using TLS transport and/or S/MIME encryption of the SDP message body 🫢

It is also super important that SDP offer and answer messages be properly authenticated and authorized before anyone uses them to establish a media session. Examples of SIP mechanisms include SIP Digest, certs, and cryptographically-verified SIP identity. Don't skip this part, periodt πŸ’…

7. Informative References πŸ“š

  • [1] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, June 2002.
  • [2] Handley, M. and V. Jacobson, "SDP: Session Description Protocol", RFC 2327, April 1998.
  • [3] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002.
  • [4] Schulzrinne, H. and S. Petrack, "RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals", RFC 2833, May 2000.
  • [5] Rosenberg, J., Peterson, J., Schulzrinne, H., and G. Camarillo, "Best Current Practices for Third Party Call Control (3pcc) in the Session Initiation Protocol (SIP)", BCP 85, RFC 3725, April 2004.
  • [6] Duric, A. and S. Andersen, "Real-time Transport Protocol (RTP) Payload Format for internet Low Bit Rate Codec (iLBC) Speech", RFC 3952, December 2004.

Authors' Addresses ✍️

Alan Johnston
Tello Corporation
999 Baker Way, Suite 250
San Mateo, CA 94404

EMail: ajohnston@tello.com


Robert J. Sparks
Estacado Systems

EMail: rjsparks@estacado.net

the legal bits, but make them cute 🌸

Copyright (C) The Internet Society (2005).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property 🧠

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.

Acknowledgement 🌈

Funding for the RFC Editor function is currently provided by the Internet Society. thank you, Internet Society πŸŒˆπŸ’–

πŸ“¦ where this page comes from