RFC 5369

Framework for Transcoding with the Session Initiation Protocol (SIP)

πŸ“… published October 2008, from ietf

Okay bestie, this is RFC 5369 πŸŽ€

Framework for Transcoding with the Session Initiation Protocol (SIP) πŸ’– It was written by G. Camarillo from Ericsson and published in October 2008 as part of the Network Working Group series. Its category is Informational πŸ“š, so it's here to share info and not to be an Internet standard. It doesn't list any RFC that it obsoletes or updates, so it's kind of a standalone queen πŸ‘‘.

Status of This Memo ✨

This memo gives information to the Internet community 🌸. It is not an Internet standard of any kind. Distribution of it is unlimited πŸ¦‹.

Abstract 🌈

Okay so this doc lays out a framework for transcoding with SIP ✨. It covers how you figure out that you need transcoding in a session, and how you actually call those transcoding services in. There are two models for invoking them: the conference bridge model and the third-party call control model πŸ’…. Both of them meet the SIP requirements for transcoding services invocation that exist to support deaf, hard of hearing, and speech-impaired people 🫢. Honestly iconic.

Table of Contents 🧚

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . 2
   2.  Discovery of the Need for Transcoding Services  . . . . . . . . 2
   3.  Transcoding Services Invocation . . . . . . . . . . . . . . . . 4
     3.1.  Third-Party Call Control Transcoding Model  . . . . . . . . 4
     3.2.  Conference Bridge Transcoding Model . . . . . . . . . . . . 6
   4.  Security Considerations . . . . . . . . . . . . . . . . . . . . 7
   5.  Contributors  . . . . . . . . . . . . . . . . . . . . . . . . . 8
   6.  References  . . . . . . . . . . . . . . . . . . . . . . . . . . 8
     6.1.  Normative References  . . . . . . . . . . . . . . . . . . . 8
     6.2.  Informative References  . . . . . . . . . . . . . . . . . . 9

1. Introduction πŸ’«

Okay, picture this: two user agents in a SIP [RFC3261] dialog πŸ“ž might find it impossible to set up a media session because they're just incompatible. Assuming both of them understand the same session description format (like SDP [RFC4566]) πŸ’–, the incompatibilities can show up at the user agent level and at the user level πŸ™ˆ. At the user agent level, the terminals might not support any common codec, or they might not support common media types (like a text-only terminal talking to an audio-only terminal) 😭. At the user level, a deaf person won't understand anything said over an audio stream 🫢.

So to make communication possible even with these incompatibilities, user agents need to bring in intermediaries that provide transcoding services to a session ✨. From the SIP point of view, adding a transcoder works the same way whether you're fixing a user level or a user agent level problem πŸ’…. That means the invocation mechanisms in this doc are generally applicable to any type of incompatibility about how the information being communicated is encoded. Iconic consistency, honestly πŸ‘‘.

Also, even though this framework is mainly about transcoding, the mechanisms here apply to media manipulation in general πŸ”₯. You could use them, for example, to invoke a server that just turns up the volume of an audio stream πŸ”Š.

This document does not describe media server discovery πŸ™…β€β™€οΈ. That's a separate problem, and you can handle it with user agent provisioning or other methods 🌸.

Here's how the rest of the doc is laid out πŸ—ΊοΈ. Section 2 is about discovering that a particular session needs transcoding services πŸ”. Section 3 introduces the third-party call control and conference bridge transcoding invocation models, and those get their own deeper dives in Sections 3.1 and 3.2, respectively πŸ¦‹. Both models meet the requirements about transcoding services invocation in RFC 3351 [RFC3351], which exist to support deaf, hard of hearing, and speech-impaired people πŸ’œ.

2. Discovery of the Need for Transcoding Services πŸ”Ž

Okay so the one-party consent model defined in RFC 3238 [RFC3238] says that services doing media manipulation are best invoked by one of the endpoints in the communication πŸ™Œ, rather than by some intermediary in the network 🌐. Following that principle, one of the endpoints should be the one who detects that transcoding is needed for a particular session πŸ’….

To decide whether transcoding is needed, a user agent has to know what the remote user agent can do πŸ€”. A user agent acting as an offerer [RFC3264] usually gets this info in one of two ways: by downloading a presence document that includes media capabilities (like "Bob is available on a terminal that only supports audio") πŸ“„, or by getting an SDP description of media capabilities as defined in RFC 3264 [RFC3264] πŸŽ€.

Presence documents typically come in a NOTIFY request [RFC3265] as a result of a subscription πŸ’Œ. SDP media capabilities descriptions are typically received either in a 200 (OK) response to an OPTIONS request, or in a 488 (Not Acceptable Here) response to an INVITE πŸ“¬.

Now, if there's no presence info, routing logic with parallel forking to several user agents can make it hard (or even impossible) for the caller to know which user agent will answer the next call attempt πŸ˜΅β€πŸ’«. For example, one call attempt might hit the user's voicemail while the next one reaches a SIP phone where the user is actually available πŸ“±. If both terminating user agents have different capabilities, the caller can't know, even after the first attempt, whether transcoding will be needed for the session πŸ’€. This is a well-known SIP problem called HERFP (Heterogeneous Error Response Forking Problem) πŸ₯². Resolving HERFP is outside the scope of this document πŸ™…β€β™€οΈ.

It is recommended that an offerer does not invoke transcoding services before making sure the answerer doesn't support the capabilities needed for the session βœ‹. Making wrong assumptions about the answerer's capabilities can lead to situations where two transcoders get introduced (one by the offerer and one by the answerer) in a session that wouldn't need any transcoding services at all 😩. Two transcoders when you need zero?? Not it πŸ™ƒ.

Here's a super relatable example πŸ“: a call between two GSM (Global System for Mobile Communications) phones, without using transcoding-free operation πŸ“±. Both phones use a GSM codec, but the speech gets converted from GSM to PCM (Pulse Code Modulation) by the originating MSC (Mobile Switching Center), and then from PCM back to GSM by the terminating MSC πŸ”. Literally the same codec going in and out, lol πŸ’€.

Also, note that transcoding services can be symmetric (like speech-to-text plus text-to-speech) πŸ”„, or asymmetric (like a one-way speech-to-text transcoding for a hearing-impaired user who can talk) 🫢. Both are valid, bestie πŸ’–.


Part 1 wraps here 🌷 Part 2 is coming with Section 3 and everything after it, so stay tuned, bestie πŸ’œβœ¨

3.2. Conference Bridge Transcoding Model ✨

okay so picture a centralized conference πŸŽ€ there are a bunch of media streams going between the conference server and each participant. for any given media type (like audio), the conference server sends each person the media it got from all the other streams, usually mixing it together 🎢. and if everyone in the call doesn't have the same capabilities, the server might have to send audio to different people using different audio codecs. it's giving complicated, bestie πŸ’…

so we can model a transcoding service as a two-party conference server πŸ¦‹ that can change not just the codec, but also the format of the media (like turning audio into text). iconic, honestly πŸ‘‘

using this model, T acts as a B2BUA (Back-to-Back User Agent) 🧚 and the whole A-T-B session gets set up the way it's described in [RFC5370]. Figure 2 shows who talks to whom through signalling πŸ’œ

                    +-------+
                    |       |**
                    |   T   |  **
                    |       |\   **
                    +-------+ \\   **
                      ^   *     \\   **
                      |   *       \\   **
                      |   *         SIP  **
                     SIP  *           \\   **
                      |   *             \\   **
                      |   *               \\   **
                      v   *                 \    **
                    +-------+               +-------+
                    |       |               |       |
                    |   A   |               |   B   |
                    |       |               |       |
                    +-------+               +-------+

                     <-SIP-> Signalling
                     ******* Media

                     Figure 2: Conference Bridge Model

in the conference bridge model, the endpoint that invokes the transcoder usually has way fewer signalling exchanges than in the 3pcc model 🌸 which is a big deal if you're on a low-bandwidth or high-delay link (think some wireless setups) 🫢

BUT ngl, this model is less flexible than 3pcc 😭 you can't use different transcoders for different streams, or even for different directions of the same stream πŸ’€

also, invoking a transcoder in the middle of an ongoing session, or swapping one transcoder for another, needs the remote endpoint to support the Replaces [RFC3891] extension. and rn not a lot of user agents support it, so be careful πŸ™ˆ

and simple endpoints that can't do 3pcc at all? they have to use the conference bridge model. no other option, periodt πŸ“

4. Security Considerations πŸ”₯

⚠️ this section is serious, main character stuff. read it all, bestie πŸ’œ

okay so the specs for the 3pcc and conferencing transcoding models talk about security issues that come up when you actually implement them πŸ” on top of that, there are some considerations that apply to transcoding in general 🌈

in a session, a transcoder can get access to at least some of the media going between the endpoints πŸ‘€ so to stop rogue transcoders from snooping, it is recommended that endpoints authenticate the transcoder. TLS [RFC5246] and S/MIME [RFC3850] can be used for this πŸŽ€

for a higher level of privacy, endpoints following the 3pcc transcoding model can use one transcoder in one direction and a different one in the other direction πŸ¦‹ that way, no single transcoder gets access to all the media between the endpoints. divide and conquer, iykyk ✨

because transcoders have to access the media between the endpoints, endpoints can't use end-to-end media security mechanisms 😭 media encryption would stop the transcoder from reading the media, and media integrity protection would stop it from modifying the media (which it obviously needs to do to transcode) πŸ’€ but endpoints can still use media security between the transcoder and themselves 🫢

5. Contributors 🌸

this document is the result of discussions amongst the conferencing design team πŸ’– the members of that team are Eric Burger, Henning Schulzrinne, and Arnoud van Wijk. slay, the whole squad πŸ‘‘

6. References πŸ“š

6.1. Normative References

[RFC3238]  Floyd, S. and L. Daigle, "IAB Architectural and Policy
           Considerations for Open Pluggable Edge Services",
           RFC 3238, January 2002.

[RFC3261]  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.

[RFC3264]  Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
           with Session Description Protocol (SDP)", RFC 3264,
           June 2002.

[RFC3265]  Roach, A.B., "Session Initiation Protocol (SIP)-Specific
           Event Notification", RFC 3265, June 2002.

[RFC3351]  Charlton, N., Gasson, M., Gybels, G., Spanner, M., and A.
           van Wijk, "User Requirements for the Session Initiation
           Protocol (SIP) in Support of Deaf, Hard of Hearing and
           Speech-impaired Individuals", RFC 3351, August 2002.

[RFC3725]  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.

[RFC3850]  Ramsdell, B., "Secure/Multipurpose Internet Mail
           Extensions (S/MIME) Version 3.1 Certificate Handling",
           RFC 3850, July 2004.

[RFC3891]  Mahy, R., Biggs, B., and R. Dean, "The Session Initiation
           Protocol (SIP) "Replaces" Header", RFC 3891,
           September 2004.

[RFC4117]  Camarillo, G., Burger, E., Schulzrinne, H., and A. van
           Wijk, "Transcoding Services Invocation in the Session
           Initiation Protocol (SIP) Using Third Party Call Control
           (3pcc)", RFC 4117, June 2005.

[RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security
           (TLS) Protocol Version 1.2", RFC 5246, August 2008.

[RFC5370]  Camarillo, G., "The Session Initiation Protocol (SIP)
           Conference Bridge Transcoding Model", RFC 5370,
           October 2008.

6.2. Informative References

[RFC4566]  Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
           Description Protocol", RFC 4566, July 2006.

Author's Address πŸ¦‹

Gonzalo Camarillo
Ericsson
Hirsalantie 11
Jorvas  02420
Finland

EMail: Gonzalo.Camarillo@ericsson.com
Copyright (C) The IETF Trust (2008).

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, THE IETF TRUST 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 on 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 on whether any license under such rights might or might not be available. it also doesn't claim it has made any independent effort to identify any such rights. info on the procedures for rights in RFC documents can be found in BCP 78 and BCP 79 ✨

copies of IPR disclosures made to the IETF Secretariat, any assurances of licenses to be made available, or the result of an attempt to get a general license or permission for implementers or users to use those proprietary rights 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, patent applications, or other proprietary rights that may cover technology needed to implement this standard. please send that info to the IETF at:

ietf-ipr@ietf.org

🫢 that's the whole doc, bestie. you're officially caught up on RFC 5369 πŸ’–

πŸ“¦ where this page comes from