rfc8853xml2.original.xml | rfc8853.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
<?rfc toc="yes"?> | nsus="true" docName="draft-ietf-mmusic-sdp-simulcast-14" indexInclude="true" ipr | |||
<?rfc tocompact="yes"?> | ="trust200902" number="8853" prepTime="2021-01-17T00:22:15" scripts="Common,Lati | |||
<?rfc tocdepth="3"?> | n" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude= | |||
<?rfc tocindent="yes"?> | "true" xml:lang="en"> | |||
<?rfc symrefs="yes"?> | <link href="https://datatracker.ietf.org/doc/draft-ietf-mmusic-sdp-simulcast-1 | |||
<?rfc sortrefs="yes"?> | 4" rel="prev"/> | |||
<?rfc comments="yes"?> | <link href="https://dx.doi.org/10.17487/rfc8853" rel="alternate"/> | |||
<?rfc inline="yes"?> | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="std" docName="draft-ietf-mmusic-sdp-simulcast-14" | ||||
ipr="trust200902" submissionType="IETF"> | ||||
<front> | <front> | |||
<title abbrev="Simulcast">Using Simulcast in SDP and RTP Sessions</title> | <title abbrev="Simulcast">Using Simulcast in Session Description Protocol (S | |||
DP) and RTP Sessions</title> | ||||
<seriesInfo name="RFC" value="8853" stream="IETF"/> | ||||
<author fullname="Bo Burman" initials="B." surname="Burman"> | <author fullname="Bo Burman" initials="B." surname="Burman"> | |||
<organization>Ericsson</organization> | <organization showOnFrontPage="true">Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Gronlandsgatan 31</street> | <street>Gronlandsgatan 31</street> | |||
<city>SE-164 60 Stockholm</city> | <city>SE-164 60 Stockholm</city> | |||
<region/> | <region/> | |||
<code/> | <code/> | |||
<country>Sweden</country> | <country>Sweden</country> | |||
</postal> | </postal> | |||
<phone/> | <phone/> | |||
<facsimile/> | ||||
<email>bo.burman@ericsson.com</email> | <email>bo.burman@ericsson.com</email> | |||
<uri/> | <uri/> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Magnus Westerlund" initials="M." surname="Westerlund"> | <author fullname="Magnus Westerlund" initials="M." surname="Westerlund"> | |||
<organization>Ericsson</organization> | <organization showOnFrontPage="true">Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Torshamnsgatan 23</street> | <street>Torshamnsgatan 23</street> | |||
<city>SE-164 83 Stockholm</city> | <city>SE-164 83 Stockholm</city> | |||
<country>Sweden</country> | <country>Sweden</country> | |||
</postal> | </postal> | |||
<phone>+46 10 714 82 87</phone> | ||||
<email>magnus.westerlund@ericsson.com</email> | <email>magnus.westerlund@ericsson.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar"> | <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar"> | |||
<organization>Cisco</organization> | <organization showOnFrontPage="true">Cisco</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>170 West Tasman Drive</street> | <street>170 West Tasman Drive</street> | |||
<city>San Jose</city> | <city>San Jose</city> | |||
<region>CA</region> | <region>CA</region> | |||
<code>95134</code> | <code>95134</code> | |||
<country>United States of America</country> | ||||
<country>USA</country> | ||||
</postal> | </postal> | |||
<phone/> | <phone/> | |||
<facsimile/> | ||||
<email>snandaku@cisco.com</email> | <email>snandaku@cisco.com</email> | |||
<uri/> | <uri/> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Mo Zanaty" initials="M." surname="Zanaty"> | <author fullname="Mo Zanaty" initials="M." surname="Zanaty"> | |||
<organization>Cisco</organization> | <organization showOnFrontPage="true">Cisco</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>170 West Tasman Drive</street> | <street>170 West Tasman Drive</street> | |||
<city>San Jose</city> | <city>San Jose</city> | |||
<region>CA</region> | <region>CA</region> | |||
<code>95134</code> | <code>95134</code> | |||
<country>United States of America</country> | ||||
<country>USA</country> | ||||
</postal> | </postal> | |||
<phone/> | <phone/> | |||
<facsimile/> | ||||
<email>mzanaty@cisco.com</email> | <email>mzanaty@cisco.com</email> | |||
<uri/> | <uri/> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="01" year="2021"/> | ||||
<date day="5" month="March" year="2019"/> | <keyword>Conference</keyword> | |||
<keyword>multi-party</keyword> | ||||
<abstract> | <keyword>middlebox</keyword> | |||
<t>In some application scenarios it may be desirable to send multiple | <keyword>MCU</keyword> | |||
<keyword>SFU</keyword> | ||||
<keyword>media</keyword> | ||||
<keyword>video</keyword> | ||||
<keyword>restrictions</keyword> | ||||
<keyword>RTCP</keyword> | ||||
<keyword>RID</keyword> | ||||
<keyword>RtpStreamId</keyword> | ||||
<abstract pn="section-abstract"> | ||||
<t indent="0" pn="section-abstract-1">In some application scenarios, it ma | ||||
y be desirable to send multiple | ||||
differently encoded versions of the same media source in different RTP | differently encoded versions of the same media source in different RTP | |||
streams. This is called simulcast. This document describes how to | streams. This is called simulcast. This document describes how to | |||
accomplish simulcast in RTP and how to signal it in SDP. The described | accomplish simulcast in RTP and how to signal it in the Session | |||
solution uses an RTP/RTCP identification method to identify RTP streams | Description Protocol (SDP). The described solution uses an RTP/RTCP | |||
belonging to the same media source, and makes an extension to SDP to | identification method to identify RTP streams | |||
relate those RTP streams as being different simulcast formats of that | belonging to the same media source and makes an extension to SDP to | |||
media source. The SDP extension consists of a new media level SDP | indicate that those RTP streams are different simulcast formats of that | |||
media source. The SDP extension consists of a new media-level SDP | ||||
attribute that expresses capability to send and/or receive simulcast RTP | attribute that expresses capability to send and/or receive simulcast RTP | |||
streams.</t> | streams.</t> | |||
</abstract> | </abstract> | |||
<boilerplate> | ||||
<section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | ||||
"exclude" pn="section-boilerplate.1"> | ||||
<name slugifiedName="name-status-of-this-memo">Status of This Memo</name | ||||
> | ||||
<t indent="0" pn="section-boilerplate.1-1"> | ||||
This is an Internet Standards Track document. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-2"> | ||||
This document is a product of the Internet Engineering Task Force | ||||
(IETF). It represents the consensus of the IETF community. It has | ||||
received public review and has been approved for publication by | ||||
the Internet Engineering Steering Group (IESG). Further | ||||
information on Internet Standards is available in Section 2 of | ||||
RFC 7841. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-3"> | ||||
Information about the current status of this document, any | ||||
errata, and how to provide feedback on it may be obtained at | ||||
<eref target="https://www.rfc-editor.org/info/rfc8853" brackets="non | ||||
e"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
ude" pn="section-boilerplate.2"> | ||||
<name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
<t indent="0" pn="section-boilerplate.2-1"> | ||||
Copyright (c) 2021 IETF Trust and the persons identified as the | ||||
document authors. All rights reserved. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.2-2"> | ||||
This document is subject to BCP 78 and the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(<eref target="https://trustee.ietf.org/license-info" brackets="none | ||||
"/>) 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. | ||||
</t> | ||||
</section> | ||||
</boilerplate> | ||||
<toc> | ||||
<section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
n="section-toc.1"> | ||||
<name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
c.1-1"> | ||||
<li pn="section-toc.1-1.1"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref der | ||||
ivedContent="1" format="counter" sectionFormat="of" target="section-1"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-introduction"> | ||||
Introduction</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2"> | ||||
<t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" form | ||||
at="counter" sectionFormat="of" target="section-2"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-definitions">Definitions</xref></t | ||||
> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.2.2"> | ||||
<li pn="section-toc.1-1.2.2.1"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1">< | ||||
xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2. | ||||
1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-te | ||||
rminology">Terminology</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.2"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.2.1">< | ||||
xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2. | ||||
2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-re | ||||
quirements-language">Requirements Language</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.3"> | ||||
<t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" form | ||||
at="counter" sectionFormat="of" target="section-3"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-use-cases">Use Cases</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.3.2"> | ||||
<li pn="section-toc.1-1.3.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent= | ||||
"3.1" format="counter" sectionFormat="of" target="section-3.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-reaching-a-diverse-set | ||||
-of-r">Reaching a Diverse Set of Receivers</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent= | ||||
"3.2" format="counter" sectionFormat="of" target="section-3.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-application-specific-m | ||||
edia-">Application-Specific Media Source Handling</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent= | ||||
"3.3" format="counter" sectionFormat="of" target="section-3.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-receiver-media-source- | ||||
prefe">Receiver Media-Source Preferences</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" form | ||||
at="counter" sectionFormat="of" target="section-4"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-overview">Overview</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5"> | ||||
<t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" form | ||||
at="counter" sectionFormat="of" target="section-5"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-detailed-description">Detailed Des | ||||
cription</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.5.2"> | ||||
<li pn="section-toc.1-1.5.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent= | ||||
"5.1" format="counter" sectionFormat="of" target="section-5.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-simulcast-attribute">S | ||||
imulcast Attribute</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent= | ||||
"5.2" format="counter" sectionFormat="of" target="section-5.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-simulcast-capability"> | ||||
Simulcast Capability</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent= | ||||
"5.3" format="counter" sectionFormat="of" target="section-5.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-offer-answer-use">Offe | ||||
r/Answer Use</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.5.2.3.2"> | ||||
<li pn="section-toc.1-1.5.2.3.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.3.2.1.1"><xref derived | ||||
Content="5.3.1" format="counter" sectionFormat="of" target="section-5.3.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-generating | ||||
-the-initial-sdp-">Generating the Initial SDP Offer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.3.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.3.2.2.1"><xref derived | ||||
Content="5.3.2" format="counter" sectionFormat="of" target="section-5.3.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-creating-t | ||||
he-sdp-answer">Creating the SDP Answer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.3.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.3.2.3.1"><xref derived | ||||
Content="5.3.3" format="counter" sectionFormat="of" target="section-5.3.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-offerer-pr | ||||
ocessing-the-sdp-">Offerer Processing the SDP Answer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.3.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.3.2.4.1"><xref derived | ||||
Content="5.3.4" format="counter" sectionFormat="of" target="section-5.3.4"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-modifying- | ||||
the-session">Modifying the Session</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.4.1"><xref derivedContent= | ||||
"5.4" format="counter" sectionFormat="of" target="section-5.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-use-with-declarative-s | ||||
dp">Use with Declarative SDP</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.5"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.5.1"><xref derivedContent= | ||||
"5.5" format="counter" sectionFormat="of" target="section-5.5"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-relating-simulcast-str | ||||
eams">Relating Simulcast Streams</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.6"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.6.1"><xref derivedContent= | ||||
"5.6" format="counter" sectionFormat="of" target="section-5.6"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-signaling-examples">Si | ||||
gnaling Examples</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.5.2.6.2"> | ||||
<li pn="section-toc.1-1.5.2.6.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.6.2.1.1"><xref derived | ||||
Content="5.6.1" format="counter" sectionFormat="of" target="section-5.6.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-single-sou | ||||
rce-client">Single-Source Client</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.6.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.6.2.2.1"><xref derived | ||||
Content="5.6.2" format="counter" sectionFormat="of" target="section-5.6.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-multisourc | ||||
e-client">Multisource Client</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.6.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.6.2.3.1"><xref derived | ||||
Content="5.6.3" format="counter" sectionFormat="of" target="section-5.6.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-simulcast- | ||||
and-redundancy">Simulcast and Redundancy</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.6"> | ||||
<t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" form | ||||
at="counter" sectionFormat="of" target="section-6"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-rtp-aspects">RTP Aspects</xref></t | ||||
> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.6.2"> | ||||
<li pn="section-toc.1-1.6.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent= | ||||
"6.1" format="counter" sectionFormat="of" target="section-6.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-outgoing-from-endpoint | ||||
-with">Outgoing from Endpoint with Media Source</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent= | ||||
"6.2" format="counter" sectionFormat="of" target="section-6.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-rtp-middlebox-to-recei | ||||
ver">RTP Middlebox to Receiver</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.6.2.2.2"> | ||||
<li pn="section-toc.1-1.6.2.2.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.2.2.1.1"><xref derived | ||||
Content="6.2.1" format="counter" sectionFormat="of" target="section-6.2.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-media-swit | ||||
ching-mixer">Media-Switching Mixer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.2.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.2.2.2.1"><xref derived | ||||
Content="6.2.2" format="counter" sectionFormat="of" target="section-6.2.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-selective- | ||||
forwarding-middle">Selective Forwarding Middlebox</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent= | ||||
"6.3" format="counter" sectionFormat="of" target="section-6.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-rtp-middlebox-to-rtp-m | ||||
iddle">RTP Middlebox to RTP Middlebox</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7"> | ||||
<t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" form | ||||
at="counter" sectionFormat="of" target="section-7"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-network-aspects">Network Aspects</ | ||||
xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.7.2"> | ||||
<li pn="section-toc.1-1.7.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent= | ||||
"7.1" format="counter" sectionFormat="of" target="section-7.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-bitrate-adaptation">Bi | ||||
trate Adaptation</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.8"> | ||||
<t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" form | ||||
at="counter" sectionFormat="of" target="section-8"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-limitation">Limitation</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9"> | ||||
<t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" form | ||||
at="counter" sectionFormat="of" target="section-9"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-iana-considerations">IANA Consider | ||||
ations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.10"> | ||||
<t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" fo | ||||
rmat="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-security-considerations">Securit | ||||
y Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11"> | ||||
<t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" fo | ||||
rmat="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-references">References</xref></t | ||||
> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.11.2"> | ||||
<li pn="section-toc.1-1.11.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent | ||||
="11.1" format="counter" sectionFormat="of" target="section-11.1"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-normative-reference | ||||
s">Normative References</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent | ||||
="11.2" format="counter" sectionFormat="of" target="section-11.2"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-informative-referen | ||||
ces">Informative References</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.12"> | ||||
<t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="Append | ||||
ix A" format="default" sectionFormat="of" target="section-appendix.a"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-requirements">R | ||||
equirements</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.13"> | ||||
<t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgeme | ||||
nts</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.14"> | ||||
<t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-contributors">Contributors</xre | ||||
f></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.15"> | ||||
<t indent="0" pn="section-toc.1-1.15.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Add | ||||
resses</xref></t> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</toc> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="sec-intro" title="Introduction"> | <section anchor="sec-intro" numbered="true" toc="include" removeInRFC="false | |||
<t>Most of today's multiparty video conference solutions make use of | " pn="section-1"> | |||
<name slugifiedName="name-introduction">Introduction</name> | ||||
<t indent="0" pn="section-1-1">Most of today's multiparty video-conference | ||||
solutions make use of | ||||
centralized servers to reduce the bandwidth and CPU consumption in the | centralized servers to reduce the bandwidth and CPU consumption in the | |||
endpoints. Those servers receive RTP streams from each participant and | endpoints. Those servers receive RTP streams from each participant and | |||
send some suitable set of possibly modified RTP streams to the rest of | send some suitable set of possibly modified RTP streams to the rest of | |||
the participants, which usually have heterogeneous capabilities (screen | the participants, which usually have heterogeneous capabilities (screen | |||
size, CPU, bandwidth, codec, etc). One of the biggest issues is how to | size, CPU, bandwidth, codec, etc.). One of the biggest issues is how to | |||
perform RTP stream adaptation to different participants' constraints | perform RTP stream adaptation to different participants' constraints | |||
with the minimum possible impact on both video quality and server | with the minimum possible impact on both video quality and server | |||
performance.</t> | performance.</t> | |||
<t indent="0" pn="section-1-2">Simulcast is defined in this memo as the ac | ||||
<t>Simulcast is defined in this memo as the act of simultaneously | t of simultaneously | |||
sending multiple different encoded streams of the same media source, | sending multiple different encoded streams of the same media source -- | |||
e.g. the same video source encoded with different video encoder types or | e.g., the same video source encoded with different video-encoder types or | |||
image resolutions. This can be done in several ways and for different | image resolutions. This can be done in several ways and for different | |||
purposes. This document focuses on the case where it is desirable to | purposes. This document focuses on the case where it is desirable to | |||
provide a media source as multiple encoded streams over <xref | provide a media source as multiple encoded streams over <xref target="RFC3 | |||
target="RFC3550">RTP</xref> towards an intermediary so that the | 550" format="default" sectionFormat="of" derivedContent="RFC3550">RTP</xref> tow | |||
ards an intermediary so that the | ||||
intermediary can provide the wanted functionality by selecting which RTP | intermediary can provide the wanted functionality by selecting which RTP | |||
stream(s) to forward to other participants in the session, and more | stream(s) to forward to other participants in the session, and more | |||
specifically how the identification and grouping of the involved RTP | specifically how the identification and grouping of the involved RTP | |||
streams are done.</t> | streams are done.</t> | |||
<t indent="0" pn="section-1-3">The intended scope of the defined mechanism | ||||
<t>The intended scope of the defined mechanism is to support negotiation | is to support negotiation | |||
and usage of simulcast when using SDP offer/answer and media transport | and usage of simulcast when using SDP offer/answer and media transport | |||
over RTP. The media transport topologies considered are point to point | over RTP. The media transport topologies considered are point-to-point | |||
RTP sessions as well as centralized multi-party RTP sessions, where a | RTP sessions, as well as centralized multiparty RTP sessions, where a | |||
media sender will provide the simulcasted streams to an RTP middlebox or | media sender will provide the simulcasted streams to an RTP middlebox or | |||
endpoint, and middleboxes may further distribute the simulcast streams | endpoint, and middleboxes may further distribute the simulcast streams | |||
to other middleboxes or endpoints. Simulcast could, as part of a | to other middleboxes or endpoints. Simulcast could be used point to point | |||
distributed multi-party scenario, be used point-to-point between | between | |||
middleboxes. Usage of multicast or broadcast transport is out of scope | middleboxes as part of a distributed multiparty scenario. Usage of | |||
multicast or broadcast transport is out of scope | ||||
and left for future extensions.</t> | and left for future extensions.</t> | |||
<t indent="0" pn="section-1-4">This document describes a few scenarios tha | ||||
<t>This document describes a few scenarios that motivate the use of | t motivate the use of | |||
simulcast, and also defines the needed RTP/RTCP and SDP signaling for | simulcast and also defines the needed RTP/RTCP and SDP signaling for | |||
it.</t> | it.</t> | |||
</section> | </section> | |||
<section anchor="sec-definitions" numbered="true" toc="include" removeInRFC= | ||||
<section anchor="sec-definitions" title="Definitions"> | "false" pn="section-2"> | |||
<t/> | <name slugifiedName="name-definitions">Definitions</name> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-2.1 | ||||
<section title="Terminology"> | "> | |||
<t>This document makes use of the terminology defined in <xref | <name slugifiedName="name-terminology">Terminology</name> | |||
target="RFC7656">RTP Taxonomy</xref>, and <xref target="RFC7667">RTP | <t indent="0" pn="section-2.1-1">This document makes use of the terminol | |||
Topologies</xref>. The following terms are especially noted or here | ogy defined in <xref target="RFC7656" format="default" sectionFormat="of" derive | |||
defined:<list style="hanging"> | dContent="RFC7656">"A Taxonomy of Semantics and | |||
<t hangText="RTP Mixer:">An RTP middle node, defined in <xref | Mechanisms for Real-Time | |||
target="RFC7667"/> (Section 3.6 to 3.9).</t> | Transport Protocol (RTP) Sources"</xref> and <xref target="RFC7667" forma | |||
t="default" sectionFormat="of" derivedContent="RFC7667">"RTP Topologies"</xref>. | ||||
<t hangText="RTP Session:">An association among a group of | The following terms are | |||
participants communicating with RTP, as defined in <xref | especially noted or here defined:</t> | |||
target="RFC3550"/> and amended by <xref target="RFC7656"/>.</t> | <dl newline="false" spacing="normal" indent="3" pn="section-2.1-2"> | |||
<dt pn="section-2.1-2.1">RTP mixer:</dt> | ||||
<t hangText="RTP Stream:">A stream of RTP packets containing media | <dd pn="section-2.1-2.2">An RTP middlebox, in the wide sense of the te | |||
data, as defined in <xref target="RFC7656"/>.</t> | rm, encompassing | |||
Sections <xref target="RFC7667" section="3.6" sectionFormat="bare" for | ||||
<t hangText="RTP Switch:">A common short term for the terms | mat="default" derivedLink="https://rfc-editor.org/rfc/rfc7667#section-3.6" deriv | |||
edContent="RFC7667"/> | ||||
to <xref target="RFC7667" section="3.9" sectionFormat="bare" format="d | ||||
efault" derivedLink="https://rfc-editor.org/rfc/rfc7667#section-3.9" derivedCont | ||||
ent="RFC7667"/> of | ||||
<xref target="RFC7667" format="default" sectionFormat="of" derivedCont | ||||
ent="RFC7667"/>.</dd> | ||||
<dt pn="section-2.1-2.3">RTP session:</dt> | ||||
<dd pn="section-2.1-2.4">An association among a group of | ||||
participants communicating with RTP, as defined in <xref target="RFC | ||||
3550" format="default" sectionFormat="of" derivedContent="RFC3550"/> and amended | ||||
by <xref target="RFC7656" format="default" sectionFormat="of" derivedContent="R | ||||
FC7656"/>.</dd> | ||||
<dt pn="section-2.1-2.5">RTP stream:</dt> | ||||
<dd pn="section-2.1-2.6">A stream of RTP packets containing media | ||||
data, as defined in <xref target="RFC7656" format="default" sectionF | ||||
ormat="of" derivedContent="RFC7656"/>.</dd> | ||||
<dt pn="section-2.1-2.7">RTP switch:</dt> | ||||
<dd pn="section-2.1-2.8">A common short term for the terms | ||||
"switching RTP mixer", "source projecting middlebox", and "video | "switching RTP mixer", "source projecting middlebox", and "video | |||
switching MCU" as discussed in <xref target="RFC7667"/>.</t> | switching Multipoint Control Unit (MCU)", as discussed in <xref targ | |||
et="RFC7667" format="default" sectionFormat="of" derivedContent="RFC7667"/>.</dd | ||||
<t hangText="Simulcast Stream:">One encoded stream or dependent | > | |||
<dt pn="section-2.1-2.9">Simulcast stream:</dt> | ||||
<dd pn="section-2.1-2.10">One encoded stream or dependent | ||||
stream from a set of concurrently transmitted encoded streams and | stream from a set of concurrently transmitted encoded streams and | |||
optional dependent streams, all sharing a common media source, as | optional dependent streams, all sharing a common media source, as | |||
defined in <xref target="RFC7656"/>. For example, HD and thumbnail | defined in <xref target="RFC7656" format="default" sectionFormat="of " derivedContent="RFC7656"/>. For example, HD and thumbnail | |||
video simulcast versions of a single media source sent | video simulcast versions of a single media source sent | |||
concurrently as separate RTP Streams.</t> | concurrently as separate RTP streams.</dd> | |||
<dt pn="section-2.1-2.11">Simulcast format:</dt> | ||||
<t hangText="Simulcast Format:">Different formats of a simulcast | <dd pn="section-2.1-2.12">Different formats of a simulcast | |||
stream serve the same purpose as alternative RTP payload types in | stream serve the same purpose as alternative RTP payload types in | |||
non-simulcast SDP: to allow multiple alternative media formats for | nonsimulcast SDP: to allow multiple alternative media formats for | |||
a given RTP stream. As for multiple RTP payload types on the | a given RTP stream. As for multiple RTP payload types on the | |||
m-line in <xref target="RFC3264">offer/answer</xref>, any one of | "m=" line in <xref target="RFC3264" format="default" sectionFormat=" of" derivedContent="RFC3264">offer/answer</xref>, any one of | |||
the negotiated alternative formats can be used in a single RTP | the negotiated alternative formats can be used in a single RTP | |||
stream at a given point in time, but not more than one (based on | stream at a given point in time, but not more than one (based on | |||
RTP timestamp). What format is used can change dynamically from | RTP timestamp). What format is used can change dynamically from | |||
one RTP packet to another.</t> | one RTP packet to another.</dd> | |||
</list></t> | </dl> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-2.2 | ||||
<section title="Requirements Language"> | "> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <name slugifiedName="name-requirements-language">Requirements Language</ | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | name> | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | <t indent="0" pn="section-2.2-1"> | |||
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
when, they appear in all capitals, as shown here.</t> | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | ||||
to be interpreted as | ||||
described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="o | ||||
f" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFor | ||||
mat="of" derivedContent="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-use-cases" numbered="true" toc="include" removeInRFC="f | ||||
<section anchor="sec-use-cases" title="Use Cases"> | alse" pn="section-3"> | |||
<t>The use cases of simulcast described in this document relate to a | <name slugifiedName="name-use-cases">Use Cases</name> | |||
multi-party communication session where one or more central nodes are | <t indent="0" pn="section-3-1">The use cases of simulcast described in thi | |||
s document relate to a | ||||
multiparty communication session where one or more central nodes are | ||||
used to adapt the view of the communication session towards individual | used to adapt the view of the communication session towards individual | |||
participants, and facilitate the media transport between participants. | participants and facilitate the media transport between participants. | |||
Thus, these cases target the RTP Mixer type of topology.</t> | Thus, these cases target the RTP mixer type of topology.</t> | |||
<t indent="0" pn="section-3-2">There are two principal approaches for an R | ||||
<t>There are two principal approaches for an RTP Mixer to provide this | TP mixer to provide this | |||
adapted view of the communication session to each receiving | adapted view of the communication session to each receiving | |||
participant:<list style="symbols"> | participant:</t> | |||
<t>Transcoding (decoding and re-encoding) received RTP streams with | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-3 | |||
"> | ||||
<li pn="section-3-3.1">Transcoding (decoding and re-encoding) received R | ||||
TP streams with | ||||
characteristics adapted to each receiving participant. This often | characteristics adapted to each receiving participant. This often | |||
include mixing or composition of media sources from multiple | includes mixing or composition of media sources from multiple | |||
participants into a mixed media source originated by the RTP Mixer. | participants into a mixed media source originated by the RTP mixer. | |||
The main advantage of this approach is that it achieves close to | The main advantage of this approach is that it achieves | |||
optimal adaptation to individual receiving participants. The main | close-to-optimal adaptation to individual receiving | |||
participants. The main | ||||
disadvantages are that it can be very computationally expensive to | disadvantages are that it can be very computationally expensive to | |||
the RTP Mixer, typically degrades media Quality of Experience (QoE) | the RTP mixer, typically degrades media Quality of Experience (QoE) | |||
such as end-to-end delay for the receiving participants, and | such as creating end-to-end delay for the receiving participants, and | |||
requires RTP Mixer access to media content.</t> | requires the RTP mixer to have access to media content.</li> | |||
<li pn="section-3-3.2">Switching a subset of all received RTP streams or | ||||
<t>Switching a subset of all received RTP streams or sub-streams to | substreams to | |||
each receiving participant, where the used subset is typically | each receiving participant, where the used subset is typically | |||
specific to each receiving participant. The main advantages of this | specific to each receiving participant. The main advantages of this | |||
approach are that it is computationally cheap to the RTP Mixer, has | approach are that it is computationally cheap to the RTP mixer, has | |||
very limited impact on media QoE, and does not require RTP Mixer | very limited impact on media QoE, and does not require the RTP mixer | |||
(full) access to media content. The main disadvantage is that it can | to have (full) access to media content. The main disadvantage is | |||
be difficult to combine a subset of received RTP streams into a | that it can be difficult to combine a subset of received RTP streams in | |||
perfect fit to the resource situation of a receiving participant. It | to a | |||
perfect fit for the resource situation of a receiving participant. It | ||||
is also a disadvantage that sending multiple RTP streams consumes | is also a disadvantage that sending multiple RTP streams consumes | |||
more network resources from the sending participant to the RTP | more network resources from the sending participant to the RTP | |||
Mixer.</t> | mixer.</li> | |||
</list></t> | </ul> | |||
<t indent="0" pn="section-3-4">The use of simulcast relates to the latter | ||||
<t>The use of simulcast relates to the latter approach, where it is more | approach, where it is more | |||
important to reduce the load on the RTP Mixer and/or minimize QoE impact | important to reduce the load on the RTP mixer and/or minimize QoE impact | |||
than to achieve an optimal adaptation of resource usage.</t> | than to achieve an optimal adaptation of resource usage.</t> | |||
<section anchor="sec-diverse-receivers" numbered="true" toc="include" remo | ||||
<section anchor="sec-diverse-receivers" | veInRFC="false" pn="section-3.1"> | |||
title="Reaching a Diverse Set of Receivers"> | <name slugifiedName="name-reaching-a-diverse-set-of-r">Reaching a Divers | |||
<t>The media sources provided by a sending participant potentially | e Set of Receivers</name> | |||
<t indent="0" pn="section-3.1-1">The media sources provided by a sending | ||||
participant potentially | ||||
need to reach several receiving participants that differ in terms of | need to reach several receiving participants that differ in terms of | |||
available resources. The receiver resources that typically differ | available resources. The receiver resources that typically differ | |||
include, but are not limited to:<list style="hanging"> | include, but are not limited to:</t> | |||
<t hangText="Codec:">This includes codec type (such as RTP payload | <dl newline="false" spacing="normal" indent="3" pn="section-3.1-2"> | |||
<dt pn="section-3.1-2.1">Codec:</dt> | ||||
<dd pn="section-3.1-2.2">This includes codec type (such as RTP payload | ||||
format MIME type) and can include codec configuration. A couple of | format MIME type) and can include codec configuration. A couple of | |||
codec resources that differ only in codec configuration will be | codec resources that differ only in codec configuration will be | |||
"different" if they are somehow not "compatible", like if they | "different" if they are somehow not "compatible", such as if they | |||
differ in video codec profile, or the transport packetization | differ in video codec profile or the transport packetization | |||
configuration.</t> | configuration.</dd> | |||
<dt pn="section-3.1-2.3">Sampling:</dt> | ||||
<t hangText="Sampling:">This relates to how the media source is | <dd pn="section-3.1-2.4">This relates to how the media source is | |||
sampled, in spatial as well as in temporal domain. For video | sampled, in spatial as well as temporal domain. For video | |||
streams, spatial sampling affects image resolution and temporal | streams, spatial sampling affects image resolution, and temporal | |||
sampling affects video frame rate. For audio, spatial sampling | sampling affects video frame rate. For audio, spatial sampling | |||
relates to the number of audio channels and temporal sampling | relates to the number of audio channels, and temporal sampling | |||
affects audio bandwidth. This may be used to suit different | affects audio bandwidth. This may be used to suit different | |||
rendering capabilities or needs at the receiving endpoints.</t> | rendering capabilities or needs at the receiving endpoints.</dd> | |||
<dt pn="section-3.1-2.5">Bitrate:</dt> | ||||
<t hangText="Bitrate:">This relates to the number of bits sent per | <dd pn="section-3.1-2.6">This relates to the number of bits sent per | |||
second to transmit the media source as an RTP stream, which | second to transmit the media source as an RTP stream, which | |||
typically also affects the QoE for the receiving user.</t> | typically also affects the QoE for the receiving user.</dd> | |||
</list>Letting the sending participant create a simulcast of a few | </dl> | |||
<t indent="0" pn="section-3.1-3">Letting the sending participant create | ||||
a simulcast of a few | ||||
differently configured RTP streams per media source can be a good | differently configured RTP streams per media source can be a good | |||
tradeoff when using an RTP switch as middlebox, instead of sending a | trade-off when using an RTP switch as middlebox, instead of sending a | |||
single RTP stream and using an RTP mixer to create individual | single RTP stream and using an RTP mixer to create individual | |||
transcodings to each receiving participant.</t> | transcodings to each receiving participant.</t> | |||
<t indent="0" pn="section-3.1-4">This requires that the receiving partic | ||||
<t>This requires that the receiving participants can be categorized in | ipants can be categorized in | |||
terms of available resources and that the sending participant can | terms of available resources and that the sending participant can | |||
choose a matching configuration for a single RTP stream per category | choose a matching configuration for a single RTP stream per category | |||
and media source. For example, a set of receiving participants differ | and media source. For example, a set of receiving participants differ | |||
only in screen resolution; some are able to display video with at most | only in screen resolution; some are able to display video with at most | |||
360p resolution and some support 720p resolution. A sending | 360p resolution, and some support 720p resolution. A sending | |||
participant can then reach all receivers with best possible resolution | participant can then reach all receivers with best possible resolution | |||
by creating a simulcast of RTP streams with 360p and 720p resolution | by creating a simulcast of RTP streams with 360p and 720p resolution | |||
for each sent video media source.</t> | for each sent video media source.</t> | |||
<t indent="0" pn="section-3.1-5">The maximum number of simulcasted RTP s | ||||
<t>The maximum number of simulcasted RTP streams that can be sent is | treams that can be sent is | |||
mainly limited by the amount of processing and uplink network | mainly limited by the amount of processing and uplink network | |||
resources available to the sending participant.</t> | resources available to the sending participant.</t> | |||
</section> | </section> | |||
<section anchor="sec-application-specific" numbered="true" toc="include" r | ||||
<section anchor="sec-application-specific" | emoveInRFC="false" pn="section-3.2"> | |||
title="Application Specific Media Source Handling"> | <name slugifiedName="name-application-specific-media-">Application-Speci | |||
<t>The application logic that controls the communication session may | fic Media Source Handling</name> | |||
<t indent="0" pn="section-3.2-1">The application logic that controls the | ||||
communication session may | ||||
include special handling of some media sources. It is, for example, | include special handling of some media sources. It is, for example, | |||
commonly the case that the media from a sending participant is not | commonly the case that the media from a sending participant is not | |||
sent back to itself.</t> | sent back to itself.</t> | |||
<t indent="0" pn="section-3.2-2">It is also common that a currently acti | ||||
<t>It is also common that a currently active speaker participant is | ve speaker participant is | |||
shown in larger size or higher quality than other participants (the | shown in larger size or higher quality than other participants (the | |||
sampling or bitrate aspects of <xref target="sec-diverse-receivers"/>) | sampling or bitrate aspects of <xref target="sec-diverse-receivers" form at="default" sectionFormat="of" derivedContent="Section 3.1"/>) | |||
in a receiving client. Many conferencing systems do not send the | in a receiving client. Many conferencing systems do not send the | |||
active speaker's media back to the sender itself, which means there is | active speaker's media back to the sender itself, which means there is | |||
some other participant's media that instead is forwarded to the active | some other participant's media that instead is forwarded to the active | |||
speaker; typically the previous active speaker. This way, the | speaker -- typically the previous active speaker. This way, the | |||
previously active speaker is needed both in larger size (to current | previously active speaker is needed both in larger size (to current | |||
active speaker) and in small size (to the rest of the participants), | active speaker) and in small size (to the rest of the participants), | |||
which can be solved with a simulcast from the previously active | which can be solved with a simulcast from the previously active | |||
speaker to the RTP switch.</t> | speaker to the RTP switch.</t> | |||
</section> | </section> | |||
<section anchor="sec-receiver-preferences" numbered="true" toc="include" r | ||||
<section anchor="sec-receiver-preferences" | emoveInRFC="false" pn="section-3.3"> | |||
title="Receiver Media Source Preferences"> | <name slugifiedName="name-receiver-media-source-prefe">Receiver Media-So | |||
<t>The application logic that controls the communication session may | urce Preferences</name> | |||
<t indent="0" pn="section-3.3-1">The application logic that controls the | ||||
communication session may | ||||
allow receiving participants to state preferences on the | allow receiving participants to state preferences on the | |||
characteristics of the RTP stream they like to receive, for example in | characteristics of the RTP stream they like to receive, for example in | |||
terms of the aspects listed in <xref target="sec-diverse-receivers"/>. | terms of the aspects listed in <xref target="sec-diverse-receivers" form at="default" sectionFormat="of" derivedContent="Section 3.1"/>. | |||
Sending a simulcast of RTP streams is one way of accommodating | Sending a simulcast of RTP streams is one way of accommodating | |||
receivers with conflicting or otherwise incompatible preferences.</t> | receivers with conflicting or otherwise incompatible preferences.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-overview" numbered="true" toc="include" removeInRFC="fa | ||||
<section anchor="sec-overview" title="Overview"> | lse" pn="section-4"> | |||
<t>This memo defines <xref target="RFC4566">SDP</xref> signaling that | <name slugifiedName="name-overview">Overview</name> | |||
<t indent="0" pn="section-4-1">This memo defines <xref target="RFC4566" fo | ||||
rmat="default" sectionFormat="of" derivedContent="RFC4566">SDP</xref> signaling | ||||
that | ||||
covers the above described simulcast use cases and functionalities. A | covers the above described simulcast use cases and functionalities. A | |||
number of requirements for such signaling are elaborated in <xref | number of requirements for such signaling are elaborated in <xref target=" | |||
target="sec-requirements"/>.</t> | sec-requirements" format="default" sectionFormat="of" derivedContent="Appendix A | |||
"/>.</t> | ||||
<t>The RID mechanism, as defined in <xref | <t indent="0" pn="section-4-2">The Restriction Identifier (RID) mechanism, | |||
target="I-D.ietf-mmusic-rid"/>, enables an SDP offerer or answerer to | as defined in <xref target="RFC8851" format="default" sectionFormat="of" derive | |||
dContent="RFC8851"/>, enables an SDP offerer or answerer to | ||||
specify a number of different RTP stream restrictions for a rid-id by | specify a number of different RTP stream restrictions for a rid-id by | |||
using the "a=rid" line. Examples of such restrictions are maximum | using the "a=rid" line. Examples of such restrictions are maximum | |||
bitrate, maximum spatial video resolution (width and height), maximum | bitrate, maximum spatial video resolution (width and height), maximum | |||
video framerate, etc. Each rid-id may also be restricted to use only a | video frame rate, etc. Each rid-id may also be restricted to use only a | |||
subset of the RTP payload types in the associated SDP media description. | subset of the RTP payload types in the associated SDP media description. | |||
Those RTP payload types can have their own configurations and parameters | Those RTP payload types can have their own configurations and parameters | |||
affecting what can be sent or received, using the "a=fmtp" line as well | affecting what can be sent or received, using the "a=fmtp" line as well | |||
as other SDP attributes.</t> | as other SDP attributes.</t> | |||
<t indent="0" pn="section-4-3">A new SDP media-level attribute, "a=simulca | ||||
<t>A new SDP media level attribute "a=simulcast" is defined. The | st", is defined. The | |||
attribute describes, independently for send and receive directions, the | attribute describes, independently for "send" and "receive" directions, th | |||
e | ||||
number of simulcast RTP streams as well as potential alternative formats | number of simulcast RTP streams as well as potential alternative formats | |||
for each simulcast RTP stream. Each simulcast RTP stream, including | for each simulcast RTP stream. Each simulcast RTP stream, including | |||
alternatives, is identified using the RID identifier (rid-id), defined | alternatives, is identified using the RID identifier (rid-id), defined | |||
in <xref target="I-D.ietf-mmusic-rid"/>.</t> | in <xref target="RFC8851" format="default" sectionFormat="of" derivedConte | |||
nt="RFC8851"/>.</t> | ||||
<figure align="left"> | <sourcecode type="sdp" markers="false" pn="section-4-4"> | |||
<artwork align="left"><![CDATA[a=simulcast:send 1;2,3 recv 4 | a=simulcast:send 1;2,3 recv 4 | |||
]]></artwork> | </sourcecode> | |||
</figure> | <t indent="0" pn="section-4-5">If this line is included in an SDP offer, t | |||
he "send" part | ||||
<t>If the above line is included in an SDP offer, the "send" part | ||||
indicates the offerer's capability and proposal to send two simulcast | indicates the offerer's capability and proposal to send two simulcast | |||
RTP streams. Each simulcast stream is described by one or more RTP | RTP streams. Each simulcast stream is described by one or more RTP | |||
stream identifiers (rid-id), each group of rid-ids for a simulcast | stream identifiers (rid-ids), and each group of rid-ids for a simulcast | |||
stream is separated by a semicolon (";"). When a simulcast stream has | stream is separated by a semicolon (";"). When a simulcast stream has | |||
multiple rid-ids that are separated by a comma (","), they describe | multiple rid-ids that are separated by a comma (","), they describe | |||
alternative representations for that particular simulcast RTP stream. | alternative representations for that particular simulcast RTP stream. | |||
Thus, the above "send" part is interpreted as an intention to send two | Thus, the "send" part shown above is interpreted as an intention to send t wo | |||
simulcast RTP streams. The first simulcast RTP stream is identified and | simulcast RTP streams. The first simulcast RTP stream is identified and | |||
restricted according to rid-id 1. The second simulcast RTP stream can be | restricted according to rid-id 1. The second simulcast RTP stream can be | |||
sent as two alternatives, identified and restricted according to rid-ids | sent as two alternatives, identified and restricted according to rid-ids | |||
2 and 3. The "recv" part of the above line indicates that the offerer | 2 and 3. The "recv" part of the line shown here indicates that the offerer | |||
desires to receive a single RTP stream (no simulcast) according to | desires to receive a single RTP stream (no simulcast) according to | |||
rid-id 4.</t> | rid-id 4.</t> | |||
<t indent="0" pn="section-4-6">A more complete example SDP-offer media des | ||||
<t>A more complete example SDP offer media description is provided | cription is provided | |||
below:</t> | in <xref target="fig-md-offer" format="default" sectionFormat="of" derived | |||
Content="Figure 1"/>.</t> | ||||
<figure align="center" anchor="fig-md-offer" | <figure anchor="fig-md-offer" align="left" suppress-title="false" pn="figu | |||
title="Example Simulcast Media Description in Offer"> | re-1"> | |||
<artwork align="left"><![CDATA[ | <name slugifiedName="name-example-simulcast-media-des">Example Simulcast | |||
Media Description in Offer</name> | ||||
<sourcecode type="sdp" markers="false" pn="section-4-7.1"> | ||||
m=video 49300 RTP/AVP 97 98 99 | m=video 49300 RTP/AVP 97 98 99 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=rtpmap:99 VP8/90000 | a=rtpmap:99 VP8/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=fmtp:99 max-fs=240; max-fr=30 | a=fmtp:99 max-fs=240; max-fr=30 | |||
a=rid:1 send pt=97;max-width=1280;max-height=720 | a=rid:1 send pt=97;max-width=1280;max-height=720 | |||
a=rid:2 send pt=98;max-width=320;max-height=180 | a=rid:2 send pt=98;max-width=320;max-height=180 | |||
a=rid:3 send pt=99;max-width=320;max-height=180 | a=rid:3 send pt=99;max-width=320;max-height=180 | |||
a=rid:4 recv pt=97 | a=rid:4 recv pt=97 | |||
a=simulcast:send 1;2,3 recv 4 | a=simulcast:send 1;2,3 recv 4 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<t indent="0" pn="section-4-8">The SDP media description in <xref target=" | ||||
<t>The above SDP media description can be interpreted at a high level to | fig-md-offer" format="default" sectionFormat="of" derivedContent="Figure 1"/> ca | |||
say that the offerer is capable of sending two simulcast RTP streams, | n be | |||
interpreted at a high level to | ||||
say that the offerer is capable of sending two simulcast RTP streams: | ||||
one H.264 encoded stream in up to 720p resolution, and one additional | one H.264 encoded stream in up to 720p resolution, and one additional | |||
stream encoded as either H.264 or VP8 with a maximum resolution of | stream encoded as either H.264 or VP8 with a maximum resolution of | |||
320x180 pixels. The offerer can receive one H.264 stream with maximum | 320x180 pixels. The offerer can receive one H.264 stream with maximum | |||
720p resolution.</t> | 720p resolution.</t> | |||
<t indent="0" pn="section-4-9">The receiver of this SDP offer can generate | ||||
<t>The receiver of this SDP offer can generate an SDP answer that | an SDP answer that | |||
indicates what it accepts. It uses the "a=simulcast" attribute to | indicates what it accepts. It uses the "a=simulcast" attribute to | |||
indicate simulcast capability and specify what simulcast RTP streams and | indicate simulcast capability and specify what simulcast RTP streams and | |||
alternatives to receive and/or send. An example of such answering | alternatives to receive and/or send. An example of such an answering | |||
"a=simulcast" attribute, corresponding to the above offer, is:</t> | "a=simulcast" attribute, corresponding to the above offer, is:</t> | |||
<sourcecode type="sdp" markers="false" pn="section-4-10"> | ||||
<figure align="left"> | a=simulcast:recv 1;2 send 4 | |||
<artwork align="left"><![CDATA[a=simulcast:recv 1;2 send 4 | </sourcecode> | |||
]]></artwork> | <t indent="0" pn="section-4-11">With this SDP answer, the answerer indicat | |||
</figure> | es in the "recv" part that | |||
<t>With this SDP answer, the answerer indicates in the "recv" part that | ||||
it wants to receive the two simulcast RTP streams. It has removed an | it wants to receive the two simulcast RTP streams. It has removed an | |||
alternative that it doesn't support (rid-id 3). The send part confirms | alternative that it doesn't support (rid-id 3). The "send" part confirms | |||
to the offerer that it will receive one stream for this media source | to the offerer that it will receive one stream for this media source | |||
according to rid-id 4. The corresponding, more complete example SDP | according to rid-id 4. The corresponding, more complete example SDP | |||
answer media description could look like:</t> | answer media description could look like <xref target="fig-md-answer" form | |||
at="default" sectionFormat="of" derivedContent="Figure 2"/>.</t> | ||||
<figure align="center" anchor="fig-md-answer" | <figure anchor="fig-md-answer" align="left" suppress-title="false" pn="fig | |||
title="Example Simulcast Media Description in Answer"> | ure-2"> | |||
<artwork align="left"><![CDATA[ | <name slugifiedName="name-example-simulcast-media-desc">Example Simulcas | |||
t Media Description in Answer</name> | ||||
<sourcecode type="sdp" markers="false" pn="section-4-12.1"> | ||||
m=video 49674 RTP/AVP 97 98 | m=video 49674 RTP/AVP 97 98 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=rid:1 recv pt=97;max-width=1280;max-height=720 | a=rid:1 recv pt=97;max-width=1280;max-height=720 | |||
a=rid:2 recv pt=98;max-width=320;max-height=180 | a=rid:2 recv pt=98;max-width=320;max-height=180 | |||
a=rid:4 send pt=97 | a=rid:4 send pt=97 | |||
a=simulcast:recv 1;2 send 4 | a=simulcast:recv 1;2 send 4 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<t indent="0" pn="section-4-13">It is assumed that a single SDP media desc | ||||
<t>It is assumed that a single SDP media description is used to describe | ription is used to describe | |||
a single media source. This is aligned with the concepts defined in | a single media source. This is aligned with the concepts defined in | |||
<xref target="RFC7656"/> and will work in a WebRTC context, both with | <xref target="RFC7656" format="default" sectionFormat="of" derivedContent= | |||
and without <xref | "RFC7656"/> and will work in a WebRTC context, both with | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref> grouping | and without BUNDLE grouping of media descriptions <xref target="RFC8843" f | |||
of media descriptions.</t> | ormat="default" sectionFormat="of" derivedContent="RFC8843"/>.</t> | |||
<t indent="0" pn="section-4-14">To summarize, the "a=simulcast" line descr | ||||
<t>To summarize, the "a=simulcast" line describes send and receive | ibes "send"- and | |||
direction simulcast streams separately. Each direction can in turn | "receive"-direction simulcast streams separately. Each direction can in | |||
describe one or more simulcast streams, separated by semicolon. The | turn describe one or more simulcast streams, separated by semicolons. The | |||
identifiers describing simulcast streams on the "a=simulcast" line are | identifiers describing simulcast streams on the "a=simulcast" line are | |||
rid-id, as defined by "a=rid" lines in <xref | rid-ids, as defined by "a=rid" lines in <xref target="RFC8851" format="def | |||
target="I-D.ietf-mmusic-rid"/>. Each simulcast stream can be offered as | ault" sectionFormat="of" derivedContent="RFC8851"/>. Each simulcast stream can b | |||
a list of alternative rid-id, with each alternative separated by comma | e offered as | |||
(not in the examples above). A detailed specification can be found in | a list of alternative rid-ids, with each alternative separated by a comma | |||
<xref target="sec-details"/> and more detailed examples are outlined in | as shown in the example offer in <xref target="fig-md-offer" format="defau | |||
<xref target="sec-ex"/>.</t> | lt" sectionFormat="of" derivedContent="Figure 1"/>. A detailed specification can | |||
be found in | ||||
<xref target="sec-details" format="default" sectionFormat="of" derivedCont | ||||
ent="Section 5"/>, and more detailed examples are outlined in | ||||
<xref target="sec-ex" format="default" sectionFormat="of" derivedContent=" | ||||
Section 5.6"/>.</t> | ||||
</section> | </section> | |||
<section anchor="sec-details" numbered="true" toc="include" removeInRFC="fal | ||||
<section anchor="sec-details" title="Detailed Description"> | se" pn="section-5"> | |||
<t>This section further details the overview <xref | <name slugifiedName="name-detailed-description">Detailed Description</name | |||
target="sec-overview">above</xref>. First, formal syntax is <xref | > | |||
target="sec-attr">provided</xref>, followed by the rest of the SDP | <t indent="0" pn="section-5-1">This section provides further details to th | |||
attribute definition in <xref target="sec-cap"/>. <xref | e overview in <xref target="sec-overview" format="default" sectionFormat="of" de | |||
target="sec-relating">Relating Simulcast Streams </xref> provides the | rivedContent="Section 4"/>. First, formal syntax is <xref target="sec-attr" form | |||
definition of the RTP/RTCP mechanisms used. The section is concluded | at="default" sectionFormat="of" derivedContent="Section 5.1">provided</xref>, fo | |||
llowed by the rest of the SDP | ||||
attribute definition in <xref target="sec-cap" format="default" sectionFor | ||||
mat="of" derivedContent="Section 5.2"/>. <xref target="sec-relating" format="def | ||||
ault" sectionFormat="of" derivedContent="Section 5.5">"Relating Simulcast Stream | ||||
s"</xref> provides the | ||||
definition of the RTP/RTCP mechanisms used. The section concludes | ||||
with a number of examples.</t> | with a number of examples.</t> | |||
<section anchor="sec-attr" numbered="true" toc="include" removeInRFC="fals | ||||
<section anchor="sec-attr" title="Simulcast Attribute"> | e" pn="section-5.1"> | |||
<t>This document defines a new SDP media-level "a=simulcast" | <name slugifiedName="name-simulcast-attribute">Simulcast Attribute</name | |||
attribute, with value according to the following <xref | > | |||
target="RFC5234">ABNF</xref> syntax and its update for <xref | <t indent="0" pn="section-5.1-1">This document defines a new SDP media-l | |||
target="RFC7405">Case-Sensitive String Support in ABNF</xref>:</t> | evel "a=simulcast" | |||
attribute, with value according to the syntax in <xref target="fig-abnf" | ||||
<figure align="center" anchor="fig-abnf" | format="default" sectionFormat="of" derivedContent="Figure 3"/>, which uses <xr | |||
title="ABNF for Simulcast Value"> | ef target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234" | |||
<artwork align="center"><![CDATA[ | >ABNF</xref> and its update, <xref target="RFC7405" format="default" sectionForm | |||
at="of" derivedContent="RFC7405">"Case-Sensitive String Support in ABNF"</xref>: | ||||
</t> | ||||
<figure anchor="fig-abnf" align="left" suppress-title="false" pn="figure | ||||
-3"> | ||||
<name slugifiedName="name-abnf-for-simulcast-value">ABNF for Simulcast | ||||
Value</name> | ||||
<sourcecode type="abnf" markers="false" pn="section-5.1-2.1"> | ||||
sc-value = ( sc-send [SP sc-recv] ) / ( sc-recv [SP sc-send] ) | sc-value = ( sc-send [SP sc-recv] ) / ( sc-recv [SP sc-send] ) | |||
sc-send = %s"send" SP sc-str-list | sc-send = %s"send" SP sc-str-list | |||
sc-recv = %s"recv" SP sc-str-list | sc-recv = %s"recv" SP sc-str-list | |||
sc-str-list = sc-alt-list *( ";" sc-alt-list ) | sc-str-list = sc-alt-list *( ";" sc-alt-list ) | |||
sc-alt-list = sc-id *( "," sc-id ) | sc-alt-list = sc-id *( "," sc-id ) | |||
sc-id-paused = "~" | sc-id-paused = "~" | |||
sc-id = [sc-id-paused] rid-id | sc-id = [sc-id-paused] rid-id | |||
; SP defined in [RFC5234] | ; SP defined in [RFC5234] | |||
; rid-id defined in [I-D.ietf-mmusic-rid] | ; rid-id defined in [RFC8851] | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<t indent="0" pn="section-5.1-3">The "a=simulcast" attribute has a param | ||||
<t><list style="empty"> | eter in the form of one or | |||
<t>Note to RFC Editor: Replace "I-D.ietf-mmusic-rid" in the above | ||||
figure with RFC number of draft-ietf-mmusic-rid before publication | ||||
of this document.</t> | ||||
</list></t> | ||||
<t>The "a=simulcast" attribute has a parameter in the form of one or | ||||
two simulcast stream descriptions, each consisting of a direction | two simulcast stream descriptions, each consisting of a direction | |||
("send" or "recv"), followed by a list of one or more simulcast | ("send" or "recv"), followed by a list of one or more simulcast | |||
streams. Each simulcast stream consists of one or more alternative | streams. Each simulcast stream consists of one or more alternative | |||
simulcast formats. Each simulcast format is identified by a simulcast | simulcast formats. Each simulcast format is identified by a simulcast | |||
stream identifier (rid-id). The rid-id MUST have the form of an RTP | stream identifier (rid-id). The rid-id <bcp14>MUST</bcp14> have the form | |||
stream identifier, as described by <xref | of an RTP | |||
target="I-D.ietf-mmusic-rid">RTP Payload Format | stream identifier, as described by <xref target="RFC8851" format="defaul | |||
Restrictions</xref>.</t> | t" sectionFormat="of" derivedContent="RFC8851">"RTP Payload Format Restrictions" | |||
</xref>.</t> | ||||
<t>In the list of simulcast streams, each simulcast stream is | <t indent="0" pn="section-5.1-4">In the list of simulcast streams, each | |||
separated by a semicolon (";"). Each simulcast stream can in turn be | simulcast stream is | |||
separated by a semicolon (";"). Each simulcast stream can, in turn, be | ||||
offered in one or more alternative formats, represented by rid-ids, | offered in one or more alternative formats, represented by rid-ids, | |||
separated by a comma (","). Each rid-id can also be specified as | separated by commas (","). Each rid-id can also be specified as | |||
initially <xref target="RFC7728">paused</xref>, indicated by | initially <xref target="RFC7728" format="default" sectionFormat="of" der | |||
ivedContent="RFC7728">paused</xref>, indicated by | ||||
prepending a "~" to the rid-id. The reason to allow separate initial | prepending a "~" to the rid-id. The reason to allow separate initial | |||
pause states for each rid-id is that pause capability can be specified | pause states for each rid-id is that pause capability can be specified | |||
individually for each RTP payload type referenced by an rid-id. Since | individually for each RTP payload type referenced by a rid-id. Since | |||
pause capability specified via the "a=rtcp-fb" attribute applies only | pause capability specified via the "a=rtcp-fb" attribute applies only | |||
to specified payload types and rid-id specified by "a=rid" can refer | to specified payload types, and a rid-id specified by "a=rid" can refer | |||
to multiple different payload types, it is unfeasible to pause streams | to multiple different payload types, it is unfeasible to pause streams | |||
with rid-id where any of the related RTP payload type(s) do not have | with rid-id where any of the related RTP payload type(s) do not have | |||
pause capability.</t> | pause capability.</t> | |||
</section> | </section> | |||
<section anchor="sec-cap" numbered="true" toc="include" removeInRFC="false | ||||
<section anchor="sec-cap" title="Simulcast Capability"> | " pn="section-5.2"> | |||
<t>Simulcast capability is expressed through a new media level <xref | <name slugifiedName="name-simulcast-capability">Simulcast Capability</na | |||
target="sec-attr">SDP attribute, "a=simulcast"</xref>. The use of this | me> | |||
<t indent="0" pn="section-5.2-1">Simulcast capability is expressed throu | ||||
gh a new media-level <xref target="sec-attr" format="default" sectionFormat="of" | ||||
derivedContent="Section 5.1">SDP attribute, "a=simulcast"</xref>. The use of th | ||||
is | ||||
attribute at the session level is undefined. Implementations of this | attribute at the session level is undefined. Implementations of this | |||
specification MUST NOT use it at the session level and MUST ignore it | specification <bcp14>MUST NOT</bcp14> use it at the session level and <b cp14>MUST</bcp14> ignore it | |||
if received at the session level. Extensions to this specification may | if received at the session level. Extensions to this specification may | |||
define such session level usage. Each SDP media description MUST | define such session-level usage. Each SDP media description <bcp14>MUST< /bcp14> | |||
contain at most one "a=simulcast" line.</t> | contain at most one "a=simulcast" line.</t> | |||
<t indent="0" pn="section-5.2-2">There are separate and independent sets | ||||
<t>There are separate and independent sets of simulcast streams in | of simulcast streams in the | |||
send and receive directions. When listing multiple directions, each | "send" and "receive" directions. When listing multiple directions, each | |||
direction MUST NOT occur more than once on the same line.</t> | direction <bcp14>MUST NOT</bcp14> occur more than once on the same line. | |||
</t> | ||||
<t>Simulcast streams using undefined rid-id MUST NOT be used as valid | <t indent="0" pn="section-5.2-3">Simulcast streams using undefined rid-i | |||
simulcast streams by an RTP stream receiver. The direction for an | ds <bcp14>MUST NOT</bcp14> be used as valid | |||
rid-id MUST be aligned with the direction specified for the | simulcast streams by an RTP stream receiver. The direction for a | |||
rid-id <bcp14>MUST</bcp14> be aligned with the direction specified for t | ||||
he | ||||
corresponding RTP stream identifier on the "a=rid" line.</t> | corresponding RTP stream identifier on the "a=rid" line.</t> | |||
<t indent="0" pn="section-5.2-4">The listed number of simulcast streams | ||||
<t>The listed number of simulcast streams for a direction sets a limit | for a direction sets a limit | |||
to the number of supported simulcast streams in that direction. The | to the number of supported simulcast streams in that direction. The | |||
order of the listed simulcast streams in the "send" direction suggests | order of the listed simulcast streams in the "send" direction suggests | |||
a proposed order of preference, in decreasing order: the rid-id listed | a proposed order of preference, in decreasing order: the rid-id listed | |||
first is the most preferred and subsequent streams have progressively | first is the most preferred, and subsequent streams have progressively | |||
lower preference. The order of the listed rid-id in the "recv" | lower preference. The order of the listed rid-ids in the "recv" | |||
direction expresses which simulcast streams that are preferred, with | direction expresses which simulcast streams are preferred, with | |||
the leftmost being most preferred. This can be of importance if the | the leftmost being most preferred. This can be of importance if the | |||
number of actually sent simulcast streams have to be reduced for some | number of actually sent simulcast streams has to be reduced for some | |||
reason.</t> | reason.</t> | |||
<t indent="0" pn="section-5.2-5">rid-ids that have explicit <xref target | ||||
<t>rid-id that have explicit <xref | ="RFC5583" format="default" sectionFormat="of" derivedContent="RFC5583">dependen | |||
target="RFC5583">dependencies</xref> <xref | cies</xref> <xref target="RFC8851" format="default" sectionFormat="of" derivedCo | |||
target="I-D.ietf-mmusic-rid"/> to other rid-id (even in the same media | ntent="RFC8851"/> to other rid-ids (even in the same media | |||
description) MAY be used.</t> | description) <bcp14>MAY</bcp14> be used.</t> | |||
<t indent="0" pn="section-5.2-6">Use of more than a single, alternative | ||||
<t>Use of more than a single, alternative simulcast format for a | simulcast format for a | |||
simulcast stream MAY be specified as part of the attribute parameters | simulcast stream <bcp14>MAY</bcp14> be specified as part of the | |||
by expressing the simulcast stream as a comma-separated list of | attribute parameters by expressing the simulcast stream as a | |||
alternative rid-id. The order of the rid-id alternatives within a | comma-separated list of alternative rid-ids. The order of the rid-id | |||
simulcast stream is significant; the rid-id alternatives are listed | alternatives within a simulcast stream is significant; the rid-id | |||
from (left) most preferred to (right) least preferred. For the use of | alternatives are listed from (left) most preferred to (right) least | |||
simulcast, this overrides the normal codec preference as expressed by | preferred. For the use of simulcast, this overrides the normal codec | |||
format type ordering on the "m=" line, using regular SDP rules. This | preference as expressed by format-type ordering on the "m=" line, | |||
is to enable a separation of general codec preferences and simulcast | using regular SDP rules. This is to enable a separation of general | |||
stream configuration preferences. However, the choice of which | codec preferences and simulcast-stream configuration | |||
alternative to use per simulcast stream is independent, and there is | preferences. However, the choice of which alternative to use per | |||
currently no mechanism to align the choice between alternative rid-ids | simulcast stream is independent, and there is currently no mechanism | |||
between different simulcast streams.</t> | for the offerer to force the answerer to choose the same alternative | |||
for multiple simulcast streams. | ||||
<t>A simulcast stream can use a codec defined such that the same RTP | </t> | |||
SSRC can change RTP payload type multiple times during a session, | <t indent="0" pn="section-5.2-7">A simulcast stream can use a codec defi | |||
possibly even on a per-packet basis. A typical example can be a speech | ned such that the same RTP | |||
codec that makes use of <xref target="RFC3389">Comfort Noise</xref> | synchronization source (SSRC) can change RTP payload type multiple | |||
and/or <xref target="RFC4733">DTMF</xref> formats.</t> | times during a session, possibly even on a per-packet basis. A typical | |||
example is a speech codec that makes use of formats for <xref target="RF | ||||
<t>If <xref target="RFC7728">RTP stream pause/resume</xref> is | C3389" format="default" sectionFormat="of" derivedContent="RFC3389">Comfort Nois | |||
supported, any rid-id MAY be prefixed by a "~" character to indicate | e</xref> and/or <xref target="RFC4733" format="default" sectionFormat="of" deriv | |||
that the corresponding simulcast stream is initially paused already | edContent="RFC4733">dual-tone multifrequency | |||
from start of the RTP session. In this case, support for RTP stream | (DTMF)</xref>.</t> | |||
pause/resume MUST also be included under the same "m=" line where | <t indent="0" pn="section-5.2-8">If <xref target="RFC7728" format="defau | |||
lt" sectionFormat="of" derivedContent="RFC7728">RTP stream | ||||
pause/resume</xref> is supported, any rid-id <bcp14>MAY</bcp14> be | ||||
prefixed by a "~" character to indicate that the corresponding | ||||
simulcast stream is paused already from the start of the RTP | ||||
session. In this case, support for RTP stream pause/resume | ||||
<bcp14>MUST</bcp14> also be included under the same "m=" line where | ||||
"a=simulcast" is included. All RTP payload types related to such an | "a=simulcast" is included. All RTP payload types related to such an | |||
initially paused simulcast stream MUST be listed in the SDP as | initially paused simulcast stream <bcp14>MUST</bcp14> be listed in the | |||
pause/resume capable as specified by <xref target="RFC7728"/>, e.g. by | SDP as pause/resume capable as specified by <xref target="RFC7728" forma | |||
using the "*" wildcard format for "a=rtcp-fb".</t> | t="default" sectionFormat="of" derivedContent="RFC7728"/> -- e.g., by using the | |||
"*" wildcard format for | ||||
<t>An initially paused simulcast stream in "send" direction for the | "a=rtcp-fb".</t> | |||
endpoint sending the SDP MUST be considered equivalent to an | <t indent="0" pn="section-5.2-9">An initially paused simulcast stream in | |||
unsolicited locally paused stream, and be handled accordingly. | the "send" direction for the | |||
endpoint sending the SDP <bcp14>MUST</bcp14> be considered equivalent to | ||||
an | ||||
unsolicited locally paused stream and handled accordingly. | ||||
Initially paused simulcast streams are resumed as described by the RTP | Initially paused simulcast streams are resumed as described by the RTP | |||
pause/resume specification. An RTP stream receiver that wishes to | pause/resume specification. An RTP stream receiver that wishes to | |||
resume an unsolicited locally paused stream needs to know the SSRC of | resume an unsolicited locally paused stream needs to know the SSRC of | |||
that stream. The SSRC of an initially paused simulcast stream can be | that stream. | |||
obtained from an RTP stream sender RTCP Sender Report (SR) including | ||||
both the desired SSRC as "SSRC of sender", and the rid-id value in an | ||||
<xref target="I-D.ietf-avtext-rid">RtpStreamId RTCP SDES | ||||
item</xref>.</t> | ||||
<t>If the endpoint sending the SDP includes an "recv" direction | The SSRC of an initially paused simulcast stream can be obtained from | |||
an RTP stream sender RTCP Sender Report (SR) or Receiver Report (RR) | ||||
that includes both the desired SSRC as initial SSRC in the source | ||||
description (SDES) chunk, optionally a <xref target="RFC8843" format="def | ||||
ault" sectionFormat="of" derivedContent="RFC8843">MID SDES item</xref> (if used | ||||
and if rid-ids are not | ||||
unique across "m=" lines), and the rid-id value in an <xref target="RFC88 | ||||
52" format="default" sectionFormat="of" derivedContent="RFC8852">RtpStreamId RTC | ||||
P SDES | ||||
item</xref>.</t> | ||||
<t indent="0" pn="section-5.2-10">If the endpoint sending the SDP includ | ||||
es a "recv"-direction | ||||
simulcast stream that is initially paused, then the remote RTP sender | simulcast stream that is initially paused, then the remote RTP sender | |||
receiving the SDP SHOULD put its RTP stream in a unsolicited locally | receiving the SDP <bcp14>SHOULD</bcp14> put its RTP stream in an unsolic ited locally | |||
paused state. The simulcast stream sender does not put the stream in | paused state. The simulcast stream sender does not put the stream in | |||
the locally paused state if there are other RTP stream receivers in | the locally paused state if there are other RTP stream receivers in | |||
the session that do not mark the simulcast stream as initially paused. | the session that do not mark the simulcast stream as initially paused. | |||
However, in centralized conferencing the RTP sender usually does not | However, in centralized conferencing, the RTP sender usually does not | |||
see the SDP signalling from RTP receivers and cannot make this | see the SDP signaling from RTP receivers and cannot make this | |||
determination. The reason to require an initially paused "recv" stream | determination. The reason for requiring that an initially paused "recv" | |||
to be considered locally paused by the remote RTP sender, instead of | stream | |||
making it equivalent to implicitly sending a pause request, is because | be considered locally paused by the remote RTP sender instead of | |||
making it equivalent to implicitly sending a pause request is that | ||||
the pausing RTP sender cannot know which receiving SSRC owns the | the pausing RTP sender cannot know which receiving SSRC owns the | |||
restriction when Temporary Maximum Media Stream Bit Rate Request | restriction when Temporary Maximum Media Stream Bit Rate Request | |||
(TMMBR) and Temporary Maximum Media Stream Bit Rate Notification | (TMMBR) and Temporary Maximum Media Stream Bit Rate Notification | |||
(TMMBN) are used for pause/resume signaling (<xref | (TMMBN) are used for pause/resume signaling (<xref target="RFC7728" sect | |||
target="RFC7728">Section 5.6 of </xref>) since the RTP receiver's SSRC | ionFormat="of" section="5.6" format="default" derivedLink="https://rfc-editor.or | |||
in send direction is sometimes not yet known.</t> | g/rfc/rfc7728#section-5.6" derivedContent="RFC7728"/>); this is because the RTP | |||
receiver's SSRC | ||||
<t>Use of the <xref target="RFC2198">redundant audio data</xref> | in the "send" direction is sometimes not yet known.</t> | |||
format could be seen as a form of simulcast for loss protection | <t indent="0" pn="section-5.2-11">Use of the redundant audio data format | |||
purposes, but is not considered conflicting with the mechanisms | <xref target="RFC2198" format="default" sectionFormat="of" derivedContent="RFC2 | |||
described in this memo and MAY therefore be used as any other format. | 198"/> | |||
In this case the "red" format, rather than the carried formats, SHOULD | could be seen as a form of simulcast for loss-protection | |||
purposes, but it is not considered conflicting with the mechanisms | ||||
described in this memo and <bcp14>MAY</bcp14> therefore be used as any o | ||||
ther format. | ||||
In this case, the "red" format, rather than the carried formats, <bcp14> | ||||
SHOULD</bcp14> | ||||
be the one to list as a simulcast stream on the "a=simulcast" | be the one to list as a simulcast stream on the "a=simulcast" | |||
line.</t> | line.</t> | |||
<t indent="0" pn="section-5.2-12">The media formats and corresponding ch | ||||
<t>The media formats and corresponding characteristics of simulcast | aracteristics of simulcast | |||
streams SHOULD be chosen such that they are different, e.g. as | streams <bcp14>SHOULD</bcp14> be chosen such that they are different -- | |||
e.g., as | ||||
different SDP formats with differing "a=rtpmap" and/or "a=fmtp" lines, | different SDP formats with differing "a=rtpmap" and/or "a=fmtp" lines, | |||
or as differently defined RTP payload format restrictions. If this | or as differently defined RTP payload format restrictions. If this | |||
difference is not required, it is RECOMMENDED to use <xref | difference is not required, it is <bcp14>RECOMMENDED</bcp14> to use RTP | |||
target="RFC7104">RTP duplication</xref> procedures instead of | duplication | |||
simulcast. To avoid complications in implementations, a single rid-id | procedures <xref target="RFC7104" format="default" sectionFormat="of" der | |||
MUST NOT occur more than once per "a=simulcast" line. Note that this | ivedContent="RFC7104"/> instead of simulcast. To avoid | |||
complications in implementations, a single rid-id | ||||
<bcp14>MUST NOT</bcp14> occur more than once per "a=simulcast" line. Not | ||||
e that this | ||||
does not eliminate use of simulcast as an RTP duplication mechanism, | does not eliminate use of simulcast as an RTP duplication mechanism, | |||
since it is possible to define multiple different rid-id that are | since it is possible to define multiple different rid-ids that are | |||
effectively equivalent.</t> | effectively equivalent.</t> | |||
</section> | </section> | |||
<section anchor="sec-offer-answer" numbered="true" toc="include" removeInR | ||||
<section anchor="sec-offer-answer" title="Offer/Answer Use"> | FC="false" pn="section-5.3"> | |||
<t><list style="empty"> | <name slugifiedName="name-offer-answer-use">Offer/Answer Use</name> | |||
<t>Note: The inclusion of "a=simulcast" or the use of simulcast | <dl indent="3" newline="false" spacing="normal" pn="section-5.3-1"> | |||
<dt pn="section-5.3-1.1">Note:</dt> | ||||
<dd pn="section-5.3-1.2">The inclusion of "a=simulcast" or the use of | ||||
simulcast | ||||
does not change any of the interpretation or Offer/Answer | does not change any of the interpretation or Offer/Answer | |||
procedures for other SDP attributes, like "a=fmtp" or "a=rid".</t> | procedures for other SDP attributes, such as "a=fmtp" or "a=rid".</d | |||
</list></t> | d> | |||
</dl> | ||||
<section title="Generating the Initial SDP Offer"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-5 | |||
<t>An offerer wanting to use simulcast for a media description SHALL | .3.1"> | |||
<name slugifiedName="name-generating-the-initial-sdp-">Generating the | ||||
Initial SDP Offer</name> | ||||
<t indent="0" pn="section-5.3.1-1">An offerer wanting to use simulcast | ||||
for a media description <bcp14>SHALL</bcp14> | ||||
include one "a=simulcast" attribute in that media description in the | include one "a=simulcast" attribute in that media description in the | |||
offer. An offerer listing a set of receive simulcast streams and/or | offer. An offerer listing a set of receive simulcast streams and/or | |||
alternative formats as rid-id in the offer MUST be prepared to | alternative formats as rid-ids in the offer <bcp14>MUST</bcp14> be pre pared to | |||
receive RTP streams for any of those simulcast streams and/or | receive RTP streams for any of those simulcast streams and/or | |||
alternative formats from the answerer.</t> | alternative formats from the answerer.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-5 | ||||
<section title="Creating the SDP Answer"> | .3.2"> | |||
<t>An answerer that does not understand the concept of simulcast | <name slugifiedName="name-creating-the-sdp-answer">Creating the SDP An | |||
swer</name> | ||||
<t indent="0" pn="section-5.3.2-1">An answerer that does not understan | ||||
d the concept of simulcast | ||||
will also not know the attribute and will remove it in the SDP | will also not know the attribute and will remove it in the SDP | |||
answer, as defined in existing <xref target="RFC3264">SDP | answer, as defined in existing SDP offer/answer procedures <xref targe | |||
Offer/Answer</xref> procedures. Since SDP session level simulcast is | t="RFC3264" format="default" sectionFormat="of" derivedContent="RFC3264"/>. Sinc | |||
e SDP session-level simulcast is | ||||
undefined in this memo, an answerer that receives an offer with the | undefined in this memo, an answerer that receives an offer with the | |||
"a=simulcast" attribute on SDP session level SHALL remove it in the | "a=simulcast" attribute on the SDP session level <bcp14>SHALL</bcp14> remove it in the | |||
answer. An answerer that understands the attribute but receives | answer. An answerer that understands the attribute but receives | |||
multiple "a=simulcast" attributes in the same media description | multiple "a=simulcast" attributes in the same media description | |||
SHALL disable use of simulcast by removing all "a=simulcast" lines | <bcp14>SHALL</bcp14> disable use of simulcast by removing all "a=simul cast" lines | |||
for that media description in the answer.</t> | for that media description in the answer.</t> | |||
<t indent="0" pn="section-5.3.2-2">An answerer that does understand th | ||||
<t>An answerer that does understand the attribute and that wants to | e attribute and wants to | |||
support simulcast in an indicated direction SHALL reverse | support simulcast in an indicated direction <bcp14>SHALL</bcp14> rever | |||
directionality of the unidirectional direction parameters; "send" | se | |||
becomes "recv" and vice versa, and include it in the answer.</t> | directionality of the unidirectional direction parameters -- "send" | |||
becomes "recv" and vice versa -- and include it in the answer.</t> | ||||
<t>An answerer that receives an offer with simulcast containing an | <t indent="0" pn="section-5.3.2-3">An answerer that receives an offer | |||
"a=simulcast" attribute listing alternative rid-id MAY keep all the | with simulcast containing an | |||
alternative rid-id in the answer, but it MAY also choose to remove | "a=simulcast" attribute listing alternative rid-ids <bcp14>MAY</bcp14> | |||
any non-desirable alternative rid-id in the answer. The answerer | keep all the | |||
MUST NOT add any alternative rid-id in send direction in the answer | alternative rid-ids in the answer, but it <bcp14>MAY</bcp14> also choo | |||
se to remove | ||||
any nondesirable alternative rid-ids in the answer. The answerer | ||||
<bcp14>MUST NOT</bcp14> add any alternative rid-ids in the "send" dire | ||||
ction in the answer | ||||
that were not present in the offer receive direction. The answerer | that were not present in the offer receive direction. The answerer | |||
MUST be prepared to receive any of the receive direction rid-id | <bcp14>MUST</bcp14> be prepared to receive any of the receive-directio | |||
alternatives and MAY send any of the send direction alternatives | n rid-id | |||
alternatives and <bcp14>MAY</bcp14> send any of the "send"-direction a | ||||
lternatives | ||||
that are part of the answer.</t> | that are part of the answer.</t> | |||
<t indent="0" pn="section-5.3.2-4">An answerer that receives an offer | ||||
<t>An answerer that receives an offer with simulcast that lists a | with simulcast that lists a | |||
number of simulcast streams, MAY reduce the number of simulcast | number of simulcast streams <bcp14>MAY</bcp14> reduce the number of si | |||
streams in the answer, but MUST NOT add simulcast streams.</t> | mulcast | |||
streams in the answer, but it <bcp14>MUST NOT</bcp14> add simulcast st | ||||
<t>An answerer that receives an offer without RTP stream | reams.</t> | |||
pause/resume capability MUST NOT mark any simulcast streams as | <t indent="0" pn="section-5.3.2-5">An answerer that receives an offer | |||
without RTP stream | ||||
pause/resume capability <bcp14>MUST NOT</bcp14> mark any simulcast str | ||||
eams as | ||||
initially paused in the answer.</t> | initially paused in the answer.</t> | |||
<t indent="0" pn="section-5.3.2-6">An RTP stream answerer capable of p | ||||
<t>An RTP stream pause/resume capable answerer that receives an | ause/resume that receives an | |||
offer with RTP stream pause/resume capability MAY mark any rid-id | offer with RTP stream pause/resume capability <bcp14>MAY</bcp14> mark | |||
any rid-ids | ||||
that refer to pause/resume capable formats as initially paused in | that refer to pause/resume capable formats as initially paused in | |||
the answer.</t> | the answer.</t> | |||
<t indent="0" pn="section-5.3.2-7">An answerer that receives indicatio | ||||
<t>An answerer that receives indication in an offer of an rid-id | n in an offer of a rid-id | |||
being initially paused SHOULD mark that rid-id as initially paused | being initially paused <bcp14>SHOULD</bcp14> mark that rid-id as initi | |||
ally paused | ||||
also in the answer, regardless of direction, unless it has good | also in the answer, regardless of direction, unless it has good | |||
reason for the rid-id not being initially paused. One reason to | reason for the rid-id not being initially paused. One reason to | |||
remove an initial pause in the answer compared to the offer could, | remove an initial pause in the answer compared to the offer could be, | |||
for example, be that all receive direction simulcast streams for a | for example, that all "receive"-direction simulcast streams for a | |||
media source the answerer accepts in the answer would otherwise be | media source the answerer accepts in the answer would otherwise be | |||
paused.</t> | paused.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-5 | ||||
<section title="Offerer Processing the SDP Answer"> | .3.3"> | |||
<t>An offerer that receives an answer without "a=simulcast" MUST NOT | <name slugifiedName="name-offerer-processing-the-sdp-">Offerer Process | |||
ing the SDP Answer</name> | ||||
<t indent="0" pn="section-5.3.3-1">An offerer that receives an answer | ||||
without "a=simulcast" <bcp14>MUST NOT</bcp14> | ||||
use simulcast towards the answerer. An offerer that receives an | use simulcast towards the answerer. An offerer that receives an | |||
answer with "a=simulcast" without any rid-id in a specified | answer with "a=simulcast" without any rid-id in a specified | |||
direction MUST NOT use simulcast in that direction.</t> | direction <bcp14>MUST NOT</bcp14> use simulcast in that direction.</t> | |||
<t indent="0" pn="section-5.3.3-2">An offerer that receives an answer | ||||
<t>An offerer that receives an answer where some rid-id alternatives | where some rid-id alternatives | |||
are kept MUST be prepared to receive any of the kept send direction | are kept <bcp14>MUST</bcp14> be prepared to receive any of the kept "s | |||
rid-id alternatives, and MAY send any of the kept receive direction | end"-direction | |||
rid-id alternatives and <bcp14>MAY</bcp14> send any of the kept "recei | ||||
ve"-direction | ||||
rid-id alternatives.</t> | rid-id alternatives.</t> | |||
<t indent="0" pn="section-5.3.3-3">An offerer that receives an answer | ||||
<t>An offerer that receives an answer where some of the rid-id are | where some of the rid-ids are | |||
removed compared to the offer MAY release the corresponding | removed compared to the offer <bcp14>MAY</bcp14> release the correspon | |||
resources (codec, transport, etc) in its receive direction and MUST | ding | |||
NOT send any RTP packets corresponding to the removed rid-id.</t> | resources (codec, transport, etc) in its "receive" direction and <bcp1 | |||
4>MUST NOT</bcp14> send any RTP packets corresponding to the removed rid-ids.</t | ||||
<t>An offerer that offered some of its rid-id as initially paused | > | |||
and that receives an answer that does not indicate RTP stream | <t indent="0" pn="section-5.3.3-4">An offerer that offered some of its | |||
pause/resume capability, MUST NOT initially pause any simulcast | rid-ids as initially paused | |||
and receives an answer that does not indicate RTP stream | ||||
pause/resume capability <bcp14>MUST NOT</bcp14> initially pause any si | ||||
mulcast | ||||
streams.</t> | streams.</t> | |||
<t indent="0" pn="section-5.3.3-5">An offerer with RTP stream pause/re | ||||
<t>An offerer with RTP stream pause/resume capability that receives | sume capability that receives | |||
an answer where some rid-id are marked as initially paused, SHOULD | an answer where some rid-ids are marked as initially paused <bcp14>SHO | |||
initially pause those RTP streams regardless if they were marked as | ULD</bcp14> | |||
initially pause those RTP streams, even if they were marked as | ||||
initially paused also in the offer, unless it has good reason for | initially paused also in the offer, unless it has good reason for | |||
those RTP streams not being initially paused. One such reason could, | those RTP streams not being initially paused. One such reason could be | |||
for example, be that the answerer would otherwise initially not | , | |||
for example, that the answerer would otherwise initially not | ||||
receive any media of that type at all.</t> | receive any media of that type at all.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-5 | ||||
<section title="Modifying the Session"> | .3.4"> | |||
<t>Offers inside an existing session follow the same rules as for | <name slugifiedName="name-modifying-the-session">Modifying the Session | |||
initial SDP offer, with these additions:<list style="numbers"> | </name> | |||
<t>rid-id marked as initially paused in the offerer's send | <t indent="0" pn="section-5.3.4-1">Offers inside an existing session f | |||
direction SHALL reflect the offerer's opinion of the current | ollow the same rules as for | |||
initial SDP offer, with these additions:</t> | ||||
<ol spacing="normal" type="1" indent="adaptive" start="1" pn="section- | ||||
5.3.4-2"> | ||||
<li pn="section-5.3.4-2.1" derivedCounter="1.">rid-ids marked as ini | ||||
tially paused in the offerer's "send" | ||||
direction <bcp14>SHALL</bcp14> reflect the offerer's opinion of th | ||||
e current | ||||
pause state at the time of creating the offer. This is purely | pause state at the time of creating the offer. This is purely | |||
informational, and <xref target="RFC7728">RTP stream | informational, and RTP stream | |||
pause/resume</xref> signaling in the ongoing session SHALL take | pause/resume signaling <xref target="RFC7728" format="default" sec | |||
precedence in case of any conflict or ambiguity.</t> | tionFormat="of" derivedContent="RFC7728"/> in the ongoing | |||
session <bcp14>SHALL</bcp14> take precedence in case of any conflic | ||||
<t>rid-id marked as initially paused in the offerer's receive | t or | |||
direction SHALL (as in an initial offer) reflect the offerer's | ambiguity.</li> | |||
<li pn="section-5.3.4-2.2" derivedCounter="2.">rid-ids marked as ini | ||||
tially paused in the offerer's "receive" | ||||
direction <bcp14>SHALL</bcp14> (as in an initial offer) reflect th | ||||
e offerer's | ||||
desired rid-id pause state. Except for the case where the | desired rid-id pause state. Except for the case where the | |||
offerer already paused the corresponding RTP stream through | offerer already paused the corresponding RTP stream through | |||
<xref target="RFC7728">RTP stream pause/resume</xref> signaling | <xref target="RFC7728" format="default" sectionFormat="of" derived | |||
, this is identical to the conditions at an initial offer.</t> | Content="RFC7728">RTP stream pause/resume</xref> signaling, | |||
</list></t> | this is identical to the conditions at an initial offer.</li> | |||
</ol> | ||||
<t>Creation of SDP answers and processing of SDP answers inside an | <t indent="0" pn="section-5.3.4-3">Creation of SDP answers and process | |||
ing of SDP answers inside an | ||||
existing session follow the same rules as described above for | existing session follow the same rules as described above for | |||
initial SDP offer/answer.</t> | initial SDP offer/answer.</t> | |||
<t indent="0" pn="section-5.3.4-4">Session modification restrictions i | ||||
<t>Session modification restrictions in section 6.5 of <xref | n <xref target="RFC8851" sectionFormat="of" section="6.5" format="default" deriv | |||
target="I-D.ietf-mmusic-rid">RTP payload format restrictions</xref> | edLink="https://rfc-editor.org/rfc/rfc8851#section-6.5" derivedContent="RFC8851" | |||
>"RTP Payload Format | ||||
Restrictions"</xref> | ||||
also apply.</t> | also apply.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-5.4 | ||||
<section title="Use with Declarative SDP"> | "> | |||
<t>This document does not define the use of "a=simulcast" in | <name slugifiedName="name-use-with-declarative-sdp">Use with Declarative | |||
declarative SDP, partly motivated by use of the <xref | SDP</name> | |||
target="I-D.ietf-mmusic-rid">simulcast format identification</xref> | <t indent="0" pn="section-5.4-1">This document does not define the use o | |||
not being defined for use in declarative SDP. If concrete use cases | f "a=simulcast" in | |||
declarative SDP, partly because use of the <xref target="RFC8851" format | ||||
="default" sectionFormat="of" derivedContent="RFC8851">simulcast format identifi | ||||
cation</xref> | ||||
is not defined for use in declarative SDP. If concrete use cases | ||||
for simulcast in declarative SDP are identified in the future, the | for simulcast in declarative SDP are identified in the future, the | |||
authors of this memo expect that additional specifications will | authors of this memo expect that additional specifications will | |||
address such use.</t> | address such use.</t> | |||
</section> | </section> | |||
<section anchor="sec-relating" numbered="true" toc="include" removeInRFC=" | ||||
<section anchor="sec-relating" title="Relating Simulcast Streams"> | false" pn="section-5.5"> | |||
<t>Simulcast RTP streams MUST be related on RTP level through <xref | <name slugifiedName="name-relating-simulcast-streams">Relating Simulcast | |||
target="I-D.ietf-avtext-rid">RtpStreamId</xref>, as specified in the | Streams</name> | |||
SDP <xref target="sec-cap">"a=simulcast" attribute </xref> parameters. | <t indent="0" pn="section-5.5-1">Simulcast RTP streams <bcp14>MUST</bcp1 | |||
4> be related on the RTP | ||||
level through <xref target="RFC8852" format="default" sectionFormat="of" | ||||
derivedContent="RFC8852">RtpStreamId</xref>, as specified in the | ||||
SDP <xref target="sec-cap" format="default" sectionFormat="of" derivedCo | ||||
ntent="Section 5.2">"a=simulcast" attribute | ||||
</xref> parameters. | ||||
This is sufficient as long as there is only a single media source per | This is sufficient as long as there is only a single media source per | |||
SDP media description. When using <xref | SDP media description. When using <xref target="RFC8843" format="default | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref>, where | " sectionFormat="of" derivedContent="RFC8843">BUNDLE</xref>, where | |||
multiple SDP media descriptions jointly specify a single RTP session, | multiple SDP media descriptions jointly specify a single RTP session, | |||
the SDES MID identification mechanism in BUNDLE allows relating RTP | the SDES MID (Media Identification) mechanism in BUNDLE allows relating | |||
streams back to individual media descriptions, after which the above | RTP | |||
described RtpStreamId relations can be used. Use of the <xref | streams back to individual media descriptions, after which the | |||
target="RFC8285">RTP header extension</xref> for both MID and | RtpStreamId relations described above can be used. | |||
RtpStreamId identifications can be important to ensure rapid initial | ||||
reception, required to correctly interpret and process the RTP | ||||
streams. Implementers of this specification MUST support the RTCP | ||||
source description (SDES) item method and SHOULD support RTP header | ||||
extension method to signal RtpStreamId on RTP level.<list | ||||
style="hanging"> | ||||
<t hangText="NOTE:">For the case where it is clear from SDP that | ||||
RTP PT uniquely maps to corresponding RtpStreamId, an RTP receiver | ||||
can use RTP PT to relate simulcast streams. This can sometimes | ||||
enable decoding even in advance to receiving RtpStreamId | ||||
information in RTCP SDES and/or RTP header extensions.</t> | ||||
</list></t> | ||||
<t>RTP streams MUST only use a single alternative rid-id at a time | Use of the RTP header extension for the <xref target="RFC7941" format="de | |||
(based on RTP timestamps), but MAY change format (and rid-id) on a | fault" sectionFormat="of" derivedContent="RFC7941">RTCP | |||
per-RTP packet basis. This corresponds to the existing (non-simulcast) | source description items</xref> for both MID | |||
and RtpStreamId identifications can be important to ensure rapid | ||||
initial reception, required to correctly interpret and process the RTP | ||||
streams. Implementers of this specification <bcp14>MUST</bcp14> | ||||
support the RTCP source description (SDES) item method and | ||||
<bcp14>SHOULD</bcp14> support RTP header extension method to signal | ||||
RtpStreamId on the RTP level.</t> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-5.5-2"> | ||||
<dt pn="section-5.5-2.1">NOTE:</dt> | ||||
<dd pn="section-5.5-2.2">For the case where it is clear from SDP that | ||||
the | ||||
RTP PT uniquely maps to a corresponding RtpStreamId, an RTP receiver | ||||
can use RTP PT to relate simulcast streams. This can sometimes | ||||
enable decoding even in advance of receiving RtpStreamId | ||||
information in RTCP SDES and/or RTP header extensions.</dd> | ||||
</dl> | ||||
<t indent="0" pn="section-5.5-3">RTP streams <bcp14>MUST</bcp14> only us | ||||
e a single alternative rid-id at a time | ||||
(based on RTP timestamps) but <bcp14>MAY</bcp14> change format (and rid- | ||||
id) on a | ||||
per-RTP packet basis. This corresponds to the existing (nonsimulcast) | ||||
SDP offer/answer case when multiple formats are included on the "m=" | SDP offer/answer case when multiple formats are included on the "m=" | |||
line in the SDP answer, enabling per-RTP packet change of RTP payload | line in the SDP answer, enabling per-RTP packet change of RTP payload | |||
type.</t> | type.</t> | |||
</section> | </section> | |||
<section anchor="sec-ex" numbered="true" toc="include" removeInRFC="false" | ||||
<section anchor="sec-ex" title="Signaling Examples"> | pn="section-5.6"> | |||
<t>These examples describe a client to video conference service, using | <name slugifiedName="name-signaling-examples">Signaling Examples</name> | |||
<t indent="0" pn="section-5.6-1">These examples describe a client-to-vid | ||||
eo-conference service, using | ||||
a centralized media topology with an RTP mixer.</t> | a centralized media topology with an RTP mixer.</t> | |||
<figure anchor="fig-mixer-four-party" align="left" suppress-title="false | ||||
<figure align="center" anchor="fig-mixer-four-party" | " pn="figure-4"> | |||
title="Four-party Mixer-based Conference"> | <name slugifiedName="name-four-party-mixer-based-conf">Four-Party Mixe | |||
<artwork align="center"><![CDATA[ | r-Based Conference</name> | |||
<artwork align="center" name="" type="" alt="" pn="section-5.6-2.1"> | ||||
+---+ +-----------+ +---+ | +---+ +-----------+ +---+ | |||
| A |<---->| |<---->| B | | | A |<---->| |<---->| B | | |||
+---+ | | +---+ | +---+ | | +---+ | |||
| Mixer | | | Mixer | | |||
+---+ | | +---+ | +---+ | | +---+ | |||
| F |<---->| |<---->| J | | | F |<---->| |<---->| J | | |||
+---+ +-----------+ +---+]]></artwork> | +---+ +-----------+ +---+</artwork> | |||
</figure> | </figure> | |||
---+ +-----------+ <span class="insert">+---+</artwork></span> | ||||
<section anchor="sec-ex-single-source" title="Single-Source Client"> | <section anchor="sec-ex-single-source" numbered="true" toc="include" rem | |||
<t>Alice is calling in to the mixer with a simulcast-enabled client | oveInRFC="false" pn="section-5.6.1"> | |||
<name slugifiedName="name-single-source-client">Single-Source Client</ | ||||
name> | ||||
<t indent="0" pn="section-5.6.1-1">Alice is calling in to the mixer wi | ||||
th a simulcast-enabled client | ||||
capable of a single media source per media type. The client can send | capable of a single media source per media type. The client can send | |||
a simulcast of 2 video resolutions and frame rates: HD 1280x720p | a simulcast of 2 video resolutions and frame rates: HD 1280x720p | |||
30fps and thumbnail 320x180p 15fps. This is defined below using the | 30fps and thumbnail 320x180p 15fps. This is defined below using the | |||
<xref target="RFC6236">"imageattr"</xref>. In this example, only the | <xref target="RFC6236" format="default" sectionFormat="of" derivedCont | |||
"pt" "a=rid" parameter is used, effectively achieving a 1:1 mapping | ent="RFC6236">"imageattr"</xref>. In this example, only the | |||
between RtpStreamId and media formats (RTP payload types), to | "pt" "a=rid" parameter is used to | |||
describe simulcast stream formats. Alice's Offer:</t> | describe simulcast stream formats, effectively achieving a 1:1 mapping | |||
between RtpStreamId and media formats (RTP payload types). Alice's Off | ||||
<figure align="center" anchor="fig-up-offer" | er:</t> | |||
title="Single-Source Simulcast Offer"> | <figure anchor="fig-up-offer" align="left" suppress-title="false" pn=" | |||
<artwork align="left"><![CDATA[ | figure-5"> | |||
<name slugifiedName="name-single-source-simulcast-off">Single-Source | ||||
Simulcast Offer</name> | ||||
<sourcecode type="sdp" markers="false" pn="section-5.6.1-2.1"> | ||||
v=0 | v=0 | |||
o=alice 2362969037 2362969040 IN IP4 192.0.2.156 | o=alice 2362969037 2362969040 IN IP4 192.0.2.156 | |||
s=Simulcast Enabled Client | s=Simulcast-Enabled Client | |||
c=IN IP4 192.0.2.156 | c=IN IP4 192.0.2.156 | |||
t=0 0 | t=0 0 | |||
m=audio 49200 RTP/AVP 0 | m=audio 49200 RTP/AVP 0 | |||
a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
m=video 49300 RTP/AVP 97 98 | m=video 49300 RTP/AVP 97 98 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | |||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | |||
a=rid:1 send pt=97 | a=rid:1 send pt=97 | |||
a=rid:2 send pt=98 | a=rid:2 send pt=98 | |||
a=rid:3 recv pt=97 | a=rid:3 recv pt=97 | |||
a=simulcast:send 1;2 recv 3 | a=simulcast:send 1;2 recv 3 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<t indent="0" pn="section-5.6.1-3">The only thing in the SDP that indi | ||||
<t>The only thing in the SDP that indicates simulcast capability is | cates simulcast capability is | |||
the line in the video media description containing the "simulcast" | the line in the video media description containing the "simulcast" | |||
attribute. The included "a=fmtp" and "a=imageattr" parameters | attribute. The included "a=fmtp" and "a=imageattr" parameters | |||
indicates that sent simulcast streams can differ in video | indicate that sent simulcast streams can differ in video | |||
resolution. The RTP header extension for RtpStreamId is offered to | resolution. The RTP header extension for RtpStreamId is offered to | |||
avoid issues with the initial binding between RTP streams (SSRCs) | avoid issues with the initial binding between RTP streams (SSRCs) | |||
and the RtpStreamId identifying the simulcast stream and its | and the RtpStreamId identifying the simulcast stream and its | |||
format.</t> | format.</t> | |||
<t indent="0" pn="section-5.6.1-4">The answer from the server indicate | ||||
<t>The Answer from the server indicates that it too is simulcast | s that it, too, is simulcast | |||
capable. Should it not have been simulcast capable, the | capable. Should it not have been simulcast capable, the | |||
"a=simulcast" line would not have been present and communication | "a=simulcast" line would not have been present, and communication | |||
would have started with the media negotiated in the SDP. Also the | would have started with the media negotiated in the SDP. Also, the | |||
usage of the RtpStreamId RTP header extension is accepted.</t> | usage of the RtpStreamId RTP header extension is accepted.</t> | |||
<figure anchor="fig-up-answer" align="left" suppress-title="false" pn= | ||||
<figure align="center" anchor="fig-up-answer" | "figure-6"> | |||
title="Single-Source Simulcast Answer"> | <name slugifiedName="name-single-source-simulcast-ans">Single-Source | |||
<artwork align="left"><![CDATA[ | Simulcast Answer</name> | |||
<sourcecode type="sdp" markers="false" pn="section-5.6.1-5.1"> | ||||
v=0 | v=0 | |||
o=server 823479283 1209384938 IN IP4 192.0.2.2 | o=server 823479283 1209384938 IN IP4 192.0.2.2 | |||
s=Answer to Simulcast Enabled Client | s=Answer to Simulcast-Enabled Client | |||
c=IN IP4 192.0.2.43 | c=IN IP4 192.0.2.43 | |||
t=0 0 | t=0 0 | |||
m=audio 49672 RTP/AVP 0 | m=audio 49672 RTP/AVP 0 | |||
a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
m=video 49674 RTP/AVP 97 98 | m=video 49674 RTP/AVP 97 98 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | |||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | |||
a=rid:1 recv pt=97 | a=rid:1 recv pt=97 | |||
a=rid:2 recv pt=98 | a=rid:2 recv pt=98 | |||
a=rid:3 send pt=97 | a=rid:3 send pt=97 | |||
a=simulcast:recv 1;2 send 3 | a=simulcast:recv 1;2 send 3 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<t indent="0" pn="section-5.6.1-6">Since the server is the simulcast m | ||||
<t>Since the server is the simulcast media receiver, it reverses the | edia receiver, it reverses the | |||
direction of the "simulcast" and "rid" attribute parameters.</t> | direction of the "simulcast" and "rid" attribute parameters.</t> | |||
</section> | </section> | |||
<section anchor="sec-ex-multi-source" numbered="true" toc="include" remo | ||||
<section anchor="sec-ex-multi-source" title="Multi-Source Client"> | veInRFC="false" pn="section-5.6.2"> | |||
<t>Fred is calling in to the same conference as in the example above | <name slugifiedName="name-multisource-client">Multisource Client</name | |||
> | ||||
<t indent="0" pn="section-5.6.2-1">Fred is calling in to the same conf | ||||
erence as in the example above | ||||
with a two-camera, two-display system, thus capable of handling two | with a two-camera, two-display system, thus capable of handling two | |||
separate media sources in each direction, where each media source is | separate media sources in each direction, where each media source is | |||
simulcast-enabled in the send direction. Fred's client is restricted | simulcast enabled in the "send" direction. Fred's client is restricted | |||
to a single media source per media description.</t> | to a single media source per media description.</t> | |||
<t indent="0" pn="section-5.6.2-2">The first two simulcast streams for | ||||
<t>The first two simulcast streams for the first media source use | the first media source use | |||
different codecs, <xref target="RFC6190">H264-SVC</xref> and <xref | different codecs, <xref target="RFC6190" format="default" sectionForma | |||
target="RFC6184">H264</xref>. These two simulcast streams also have | t="of" derivedContent="RFC6190">H264-SVC</xref> and <xref target="RFC6184" forma | |||
a temporal dependency. Two different video codecs, <xref | t="default" sectionFormat="of" derivedContent="RFC6184">H264</xref>. These two s | |||
target="RFC7741">VP8</xref> and H264, are offered as alternatives | imulcast streams also have | |||
a temporal dependency. Two different video codecs, <xref target="RFC77 | ||||
41" format="default" sectionFormat="of" derivedContent="RFC7741">VP8</xref> and | ||||
H264, are offered as alternatives | ||||
for the third simulcast stream for the first media source. Only the | for the third simulcast stream for the first media source. Only the | |||
highest fidelity simulcast stream is sent from start, the lower | highest-fidelity simulcast stream is sent from start, the | |||
fidelity streams being initially paused.</t> | lower-fidelity streams being initially paused.</t> | |||
<t indent="0" pn="section-5.6.2-3">The second media source is offered | ||||
<t>The second media source is offered with three different simulcast | with three different simulcast | |||
streams. All video streams of this second media source are loss | streams. All video streams of this second media source are loss | |||
protected by <xref target="RFC4588">RTP retransmission</xref>. Also | protected by <xref target="RFC4588" format="default" sectionFormat="of | |||
here, all but the highest fidelity simulcast stream are initially | " derivedContent="RFC4588">RTP retransmission</xref>. In | |||
paused. Note that the lower resolution is more prioritized than the | addition, all but the highest-fidelity simulcast stream are | |||
medium resolution simulcast stream.</t> | initially paused. Note that the lower resolution is more prioritized | |||
than the medium-resolution simulcast stream.</t> | ||||
<t>Fred's client is also using BUNDLE to send all RTP streams from | <t indent="0" pn="section-5.6.2-4">Fred's client is also using BUNDLE | |||
to send all RTP streams from | ||||
all media descriptions in the same RTP session on a single media | all media descriptions in the same RTP session on a single media | |||
transport. Although using many different simulcast streams in this | transport. Although using many different simulcast streams in this | |||
example, the use of RtpStreamId as simulcast stream identification | example, the use of RtpStreamId as simulcast stream identification | |||
enables use of a low number of RTP payload types. Note that the use | enables use of a low number of RTP payload types. | |||
of both <xref | ||||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref> and | ||||
<xref target="I-D.ietf-mmusic-rid">"a=rid"</xref> recommends using | ||||
the <xref target="RFC8285">RTP header extension</xref> for carrying | ||||
these RTP stream identification fields, which is consequently also | ||||
included in the SDP. Note also that for "a=rid", the corresponding | ||||
RtpStreamId SDES attribute RTP header extension is named <xref | ||||
target="I-D.ietf-avtext-rid">rtp-stream-id</xref>.</t> | ||||
<figure anchor="fig-ms-offer" | Note that when using both <xref target="RFC8843" format="default" secti | |||
title="Fred's Multi-Source Simulcast Offer"> | onFormat="of" derivedContent="RFC8843">BUNDLE</xref> and <xref target="RFC8851" | |||
<artwork><![CDATA[ | format="default" sectionFormat="of" derivedContent="RFC8851">"a=rid"</xref>, it | |||
is recommended to use the RTP | ||||
header extension for the <xref target="RFC7941" format="default" sectio | ||||
nFormat="of" derivedContent="RFC7941">RTCP | ||||
source descriptions items</xref> for carrying | ||||
these RTP stream-identification fields, which is consequently also | ||||
included in the SDP. | ||||
Note also that for "a=rid", | ||||
the corresponding RtpStreamId SDES attribute RTP header extension is | ||||
named <xref target="RFC8852" format="default" sectionFormat="of" derive | ||||
dContent="RFC8852">rtp-stream-id</xref>.</t> | ||||
<figure anchor="fig-ms-offer" align="left" suppress-title="false" pn=" | ||||
figure-7"> | ||||
<name slugifiedName="name-freds-multisource-simulcast">Fred's Multis | ||||
ource Simulcast Offer</name> | ||||
<sourcecode type="sdp" markers="false" pn="section-5.6.2-5.1"> | ||||
v=0 | v=0 | |||
o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | |||
s=Offer from Simulcast Enabled Multi-Source Client | s=Offer from Simulcast-Enabled Multi-Source Client | |||
c=IN IP6 2001:db8::c000:27d | c=IN IP6 2001:db8::c000:27d | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar zen | a=group:BUNDLE foo bar zen | |||
m=audio 49200 RTP/AVP 99 | m=audio 49200 RTP/AVP 99 | |||
a=mid:foo | a=mid:foo | |||
a=rtpmap:99 G722/8000 | a=rtpmap:99 G722/8000 | |||
m=video 49600 RTP/AVPF 100 101 103 | m=video 49600 RTP/AVPF 100 101 103 | |||
a=mid:bar | a=mid:bar | |||
a=rtpmap:100 H264-SVC/90000 | a=rtpmap:100 H264-SVC/90000 | |||
a=rtpmap:101 H264/90000 | a=rtpmap:101 H264/90000 | |||
skipping to change at line 979 ¶ | skipping to change at line 1063 ¶ | |||
a=rtpmap:104 rtx/90000 | a=rtpmap:104 rtx/90000 | |||
a=fmtp:104 apt=96;rtx-time=200 | a=fmtp:104 apt=96;rtx-time=200 | |||
a=rid:1 send max-fs=921600;max-fps=30 | a=rid:1 send max-fs=921600;max-fps=30 | |||
a=rid:2 send max-fs=614400;max-fps=15 | a=rid:2 send max-fs=614400;max-fps=15 | |||
a=rid:3 send max-fs=230400;max-fps=30 | a=rid:3 send max-fs=230400;max-fps=30 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | |||
a=rtcp-fb:* ccm pause nowait | a=rtcp-fb:* ccm pause nowait | |||
a=simulcast:send 1;~3;~2 | a=simulcast:send 1;~3;~2 | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-5 | ||||
.6.3"> | ||||
<name slugifiedName="name-simulcast-and-redundancy">Simulcast and Redu | ||||
ndancy</name> | ||||
<t indent="0" pn="section-5.6.3-1">The example in this section looks a | ||||
t applying simulcast with | ||||
audio and video redundancy formats. | ||||
<section title="Simulcast and Redundancy"> | The audio media description uses codec and bitrate restrictions, | |||
<t>The example in this section looks at applying simulcast with | combined with the <xref target="RFC2198" format="default" sectionFormat=" | |||
audio and video redundancy formats. The audio media description uses | of" derivedContent="RFC2198">RTP | |||
codec and bitrate restrictions, combining it with <xref | payload for redundant audio data</xref> for enhanced packet-loss | |||
target="RFC2198">RTP Payload for Redundant Audio Data</xref> for | resilience. The video media description applies both resolution and | |||
enhanced packet loss resilience. The video media description applies | bitrate restrictions, combined with Forward Error Correction (FEC) | |||
both resolution and bitrate restrictions, combining it with FEC in | in the form of <xref target="RFC8627" format="default" sectionFormat="of" | |||
the form of <xref | derivedContent="RFC8627">flexible | |||
target="I-D.ietf-payload-flexible-fec-scheme">Flexible FEC</xref> | FEC</xref> and <xref target="RFC4588" format="default" sectionFormat="of" | |||
and <xref target="RFC4588">RTP Retransmission</xref>.</t> | derivedContent="RFC4588">RTP | |||
retransmission</xref>.</t> | ||||
<t>The audio source is offered to be sent as two simulcast streams. | <t indent="0" pn="section-5.6.3-2"> | |||
The first simulcast stream is encoded with Opus, restricted to 50 | The audio source is offered to be sent as two simulcast | |||
kbps (rid-id=5), and the second simulcast stream is encoded either | streams. The first simulcast stream is encoded with Opus, | |||
with G.711 (rid-id=7) or with G.711 combined with LPC for redundancy | restricted to 64 kbps (rid-id=1), and the second simulcast stream | |||
(rid-id=6). In this example, stand-alone LPC is not offered as an | (rid-id=2) is encoded with either G.711, or G.711 combined with | |||
possible payload type for the second simulcast stream's RID, which | linear predictive coding (LPC) for redundancy and explicit comfort | |||
could e.g. be motivated by not providing sufficient quality.</t> | noise (CN). Both simulcast streams include telephone-event | |||
capability. In this example, stand-alone LPC is not offered as a | ||||
<t>The video source is offered to be sent as two simulcast streams, | possible payload type for the second simulcast stream's RID, which | |||
could be motivated by, for example, not providing sufficient | ||||
quality. | ||||
</t> | ||||
<t indent="0" pn="section-5.6.3-3">The video source is offered to be s | ||||
ent as two simulcast streams, | ||||
both with two alternative simulcast formats. Redundancy and repair | both with two alternative simulcast formats. Redundancy and repair | |||
are offered in the form of both Flexible FEC and RTP Retransmission. | are offered in the form of both flexible FEC and RTP retransmission. | |||
The Flexible FEC is not bound to any particular RTP streams and is | The flexible FEC is not bound to any particular RTP streams and is | |||
therefore possible to use across all RTP streams that are being sent | therefore able to be used across all RTP streams that are being sent | |||
as part of this media description.</t> | as part of this media description.</t> | |||
<figure anchor="fig-sim-red" align="left" suppress-title="false" pn="f | ||||
<figure anchor="fig-sim-red" | igure-8"> | |||
title="Simulcast and Redundancy Example"> | <name slugifiedName="name-simulcast-and-redundancy-ex">Simulcast and | |||
<artwork><![CDATA[v=0 | Redundancy Example</name> | |||
<sourcecode type="sdp" markers="false" pn="section-5.6.3-4.1"> | ||||
o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | |||
s=Offer from Simulcast Enabled Client using Redundancy | s=Offer from Simulcast-Enabled Client using Redundancy | |||
c=IN IP6 2001:db8::c000:27d | c=IN IP6 2001:db8::c000:27d | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar | a=group:BUNDLE foo bar | |||
m=audio 49200 RTP/AVP 97 98 99 100 101 102 | m=audio 49200 RTP/AVP 97 98 99 100 101 102 | |||
a=mid:foo | a=mid:foo | |||
a=rtpmap:97 G711/8000 | a=rtpmap:97 G711/8000 | |||
a=rtpmap:98 LPC/8000 | a=rtpmap:98 LPC/8000 | |||
a=rtpmap:99 OPUS/48000/1 | a=rtpmap:99 OPUS/48000/1 | |||
a=rtpmap:100 RED/8000/1 | a=rtpmap:100 RED/8000/1 | |||
a=rtpmap:101 CN/8000 | a=rtpmap:101 CN/8000 | |||
skipping to change at line 1046 ¶ | skipping to change at line 1134 ¶ | |||
a=mid:bar | a=mid:bar | |||
a=rtpmap:103 H264/90000 | a=rtpmap:103 H264/90000 | |||
a=rtpmap:104 VP8/90000 | a=rtpmap:104 VP8/90000 | |||
a=rtpmap:105 rtx/90000 | a=rtpmap:105 rtx/90000 | |||
a=rtpmap:106 rtx/90000 | a=rtpmap:106 rtx/90000 | |||
a=rtpmap:107 flexfec/90000 | a=rtpmap:107 flexfec/90000 | |||
a=fmtp:103 profile-level-id=42c00d;max-fs=3600;max-mbps=108000 | a=fmtp:103 profile-level-id=42c00d;max-fs=3600;max-mbps=108000 | |||
a=fmtp:104 max-fs=3600; max-fr=30 | a=fmtp:104 max-fs=3600; max-fr=30 | |||
a=fmtp:105 apt=103;rtx-time=200 | a=fmtp:105 apt=103;rtx-time=200 | |||
a=fmtp:106 apt=104;rtx-time=200 | a=fmtp:106 apt=104;rtx-time=200 | |||
a=fmtp:107 repair-window=2000 | a=fmtp:107 repair-window=100000 | |||
a=rid:1 send pt=103;max-width=1280;max-height=720;max-fps=30 | a=rid:1 send pt=103;max-width=1280;max-height=720;max-fps=30 | |||
a=rid:2 send pt=104;max-width=1280;max-height=720;max-fps=30 | a=rid:2 send pt=104;max-width=1280;max-height=720;max-fps=30 | |||
a=rid:3 send pt=103;max-width=640;max-height=360;max-br=300000 | a=rid:3 send pt=103;max-width=640;max-height=360;max-br=300000 | |||
a=rid:4 send pt=104;max-width=640;max-height=360;max-br=300000 | a=rid:4 send pt=104;max-width=640;max-height=360;max-br=300000 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | |||
a=rtcp-fb:* ccm pause nowait | a=rtcp-fb:* ccm pause nowait | |||
a=simulcast:send 1,2;3,4 | a=simulcast:send 1,2;3,4 | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<t/> | ||||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-rtp-aspects" numbered="true" toc="include" removeInRFC= | ||||
<section anchor="sec-rtp-aspects" title="RTP Aspects"> | "false" pn="section-6"> | |||
<t>This section discusses what the different entities in a simulcast | <name slugifiedName="name-rtp-aspects">RTP Aspects</name> | |||
media path can expect to happen on RTP level. This is explored from | <t indent="0" pn="section-6-1">This section discusses what the different e | |||
ntities in a simulcast | ||||
media path can expect to happen on the RTP level. This is explored from | ||||
source to sink by starting in an endpoint with a media source that is | source to sink by starting in an endpoint with a media source that is | |||
simulcasted to an RTP middlebox. That RTP middlebox sends media sources | simulcasted to an RTP middlebox. That RTP middlebox sends media sources | |||
both to other RTP middleboxes (cascaded middleboxes), as well as | to other RTP middleboxes (cascaded middleboxes), as well as | |||
selecting some simulcast format of the media source and sending it to | selecting some simulcast format of the media source and sending it to | |||
receiving endpoints. Different types of RTP middleboxes and their usage | receiving endpoints. Different types of RTP middleboxes and their usage | |||
of the different simulcast formats results in several different | of the different simulcast formats results in several different | |||
behaviors.</t> | behaviors.</t> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-6.1 | ||||
<section title="Outgoing from Endpoint with Media Source"> | "> | |||
<t>The most straightforward simulcast case is the RTP streams being | <name slugifiedName="name-outgoing-from-endpoint-with">Outgoing from End | |||
point with Media Source</name> | ||||
<t indent="0" pn="section-6.1-1">The most straightforward simulcast case | ||||
is the RTP streams being | ||||
emitted from the endpoint that originates a media source. When | emitted from the endpoint that originates a media source. When | |||
simulcast has been negotiated in the sending direction, the endpoint | simulcast has been negotiated in the sending direction, the endpoint | |||
can transmit up to the number of RTP streams needed for the negotiated | can transmit up to the number of RTP streams needed for the negotiated | |||
simulcast streams for that media source. Each RTP stream (SSRC) is | simulcast streams for that media source. Each RTP stream (SSRC) is | |||
identified by <xref target="sec-relating">associating</xref> it with | identified by associating it (<xref target="sec-relating" format="defaul t" sectionFormat="of" derivedContent="Section 5.5"/>) with | |||
an RtpStreamId SDES item, transmitted in RTCP and possibly also as an | an RtpStreamId SDES item, transmitted in RTCP and possibly also as an | |||
RTP header extension. In cases where multiple media sources have been | RTP header extension. In cases where multiple media sources have been | |||
negotiated for the same RTP session and thus <xref | negotiated for the same RTP session and thus <xref target="RFC8843" form | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref> is used, | at="default" sectionFormat="of" derivedContent="RFC8843">BUNDLE</xref> is used, | |||
also the MID SDES item will be sent similarly to the RtpStreamId.</t> | the MID SDES item will also be | |||
sent, similarly to the RtpStreamId.</t> | ||||
<t>Each RTP stream might not be continuously transmitted due to any of | <t indent="0" pn="section-6.1-2">Each RTP stream might not be continuous | |||
the following reasons; temporarily paused using <xref | ly transmitted due to any of | |||
target="RFC7728">Pause/Resume</xref>, sender side application logic | the following reasons: temporarily paused using <xref target="RFC7728" f | |||
ormat="default" sectionFormat="of" derivedContent="RFC7728">Pause/Resume</xref>, | ||||
sender-side application logic | ||||
temporarily pausing it, or lack of network resources to transmit this | temporarily pausing it, or lack of network resources to transmit this | |||
simulcast stream. However, all simulcast streams that have been | simulcast stream. However, all simulcast streams that have been | |||
negotiated have active and maintained SSRC (at least in regular RTCP | negotiated have active and maintained SSRCs (at least in regular RTCP | |||
reports), even if no RTP packets are currently transmitted. The | reports), even if no RTP packets are currently transmitted. The | |||
relation between an RTP Stream (SSRC) and a particular simulcast | relation between an RTP stream (SSRC) and a particular simulcast | |||
stream is not expected to change, except in exceptional situations | stream is not expected to change, except in exceptional situations | |||
such as SSRC collisions. At SSRC changes, the usage of MID and | such as SSRC collisions. At SSRC changes, the usage of MID and | |||
RtpStreamId should enable the receiver to correctly identify the RTP | RtpStreamId should enable the receiver to correctly identify the RTP | |||
streams even after an SSRC change.</t> | streams even after an SSRC change.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-6.2 | ||||
<section title="RTP Middlebox to Receiver"> | "> | |||
<t>RTP streams in a multi-party RTP session can be used in multiple | <name slugifiedName="name-rtp-middlebox-to-receiver">RTP Middlebox to Re | |||
different ways, when the session utilizes simulcast at least on the | ceiver</name> | |||
media source to middlebox legs. This is to a large degree due to the | <t indent="0" pn="section-6.2-1">RTP streams in a multiparty RTP session | |||
can be used in multiple | ||||
different ways when the session utilizes simulcast at least on the | ||||
media-source-to-middlebox legs. This is to a large degree due to the | ||||
different RTP middlebox behaviors, but also the needs of the | different RTP middlebox behaviors, but also the needs of the | |||
application. This text assumes that the RTP middlebox will select a | application. This text assumes that the RTP middlebox will select a | |||
media source and choose which simulcast stream for that media source | media source and choose which simulcast stream for that media source | |||
to deliver to a specific receiver. In many cases, at most one | to deliver to a specific receiver. In many cases, at most one | |||
simulcast stream per media source will be forwarded to a particular | simulcast stream per media source will be forwarded to a particular | |||
receiver at any instant in time, even if the selected simulcast stream | receiver at any instant in time, even if the selected simulcast stream | |||
may vary. For cases where this does not hold due to application needs, | may vary. For cases where this does not hold due to application needs, | |||
then the RTP stream aspects will fall under the middlebox to middlebox | the RTP stream aspects will fall under the middlebox-to-middlebox | |||
case <xref target="sec-rtp-box-box"/>.</t> | case (<xref target="sec-rtp-box-box" format="default" sectionFormat="of" | |||
derivedContent="Section 6.3"/>).</t> | ||||
<t>The selection of which simulcast streams to forward towards the | <t indent="0" pn="section-6.2-2">The selection of which simulcast stream | |||
receiver, is application specific. However, in conferencing | s to forward towards the | |||
receiver is application specific. However, in conferencing | ||||
applications, active speaker selection is common. In case the number | applications, active speaker selection is common. In case the number | |||
of media sources possible to forward, N, is less than the total amount | of media sources possible to forward, N, is less than the total number | |||
of media sources available in an multi-media session, the current and | of media sources available in a multimedia session, the current and | |||
previous speakers (up to N in total) are often the ones forwarded. To | previous speakers (up to N in total) are often the ones forwarded. To | |||
avoid the need for media specific processing to determine the current | avoid the need for media-specific processing to determine the current | |||
speaker(s) in the RTP middlebox, the endpoint providing a media source | speaker(s) in the RTP middlebox, the endpoint providing a media source | |||
may include meta data, such as the <xref target="RFC6464">RTP Header | may include metadata, such as the <xref target="RFC6464" format="default | |||
Extension for Client-to-Mixer Audio Level Indication</xref>.</t> | " sectionFormat="of" derivedContent="RFC6464">RTP header | |||
extension for client-to-mixer audio level indication</xref>.</t> | ||||
<t>The possibilities for stream switching are media type specific, but | <t indent="0" pn="section-6.2-3">The possibilities for stream switching | |||
are media type specific, but | ||||
for media types with significant interframe dependencies in the | for media types with significant interframe dependencies in the | |||
encoding, like most video coding, the switching needs to be made at | encoding, like most video coding, the switching needs to be made at | |||
suitable switching points in the media stream that breaks or otherwise | suitable switching points in the media stream that breaks or otherwise | |||
deals with the dependency structure. Even if switching points can be | deals with the dependency structure. Even if switching points can be | |||
included periodically, it is common to use mechanisms like <xref | included periodically, it is common to use mechanisms like <xref target= | |||
target="RFC5104">Full Intra Requests</xref> to request switching | "RFC5104" format="default" sectionFormat="of" derivedContent="RFC5104">Full Intr | |||
a Requests</xref> to request switching | ||||
points from the endpoint performing the encoding of the media | points from the endpoint performing the encoding of the media | |||
source.</t> | source.</t> | |||
<t indent="0" pn="section-6.2-4">Inclusion of the RtpStreamId SDES item | ||||
<t>Inclusion of the RtpStreamId SDES item for an SSRC in the middlebox | for an SSRC in the | |||
to receiver direction should only occur when use of RtpStreamId has | middlebox-to-receiver direction should only occur when use of | |||
RtpStreamId has | ||||
been negotiated in that direction. It is worth noting that one can | been negotiated in that direction. It is worth noting that one can | |||
signal multiple RtpStreamIds when simulcast signalling indicates only | signal multiple RtpStreamIds when simulcast signaling indicates only | |||
a single simulcast stream, allowing one to use all of the RtpStreamIds | a single simulcast stream, allowing one to use all of the RtpStreamIds | |||
as alternatives for that simulcast stream. One reason for including | as alternatives for that simulcast stream. One reason for including | |||
the RtpStreamId in the middlebox to receiver direction for an RTP | the RtpStreamId in the middlebox-to-receiver direction for an RTP | |||
stream is to let the receiver know which restrictions apply to the | stream is to let the receiver know which restrictions apply to the | |||
currently delivered RTP stream. In case the RtpStreamId is negotiated | currently delivered RTP stream. In case the RtpStreamId is negotiated | |||
to be used, it is important to remember that the used identifiers will | to be used, it is important to remember that the used identifiers will | |||
be specific to each signalling session. Even if the central entity can | be specific to each signaling session. Even if the central entity can | |||
attempt to coordinate, it is likely that the RtpStreamIds need to be | attempt to coordinate, it is likely that the RtpStreamIds need to be | |||
translated to the leg specific values. The below cases will have as | translated to the leg-specific values. The below cases will assume | |||
base line that RtpStreamId is not used in the mixer to receiver | that RtpStreamId is not used in the mixer to receiver | |||
direction.</t> | direction.</t> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-6 | ||||
<section title="Media-Switching Mixer"> | .2.1"> | |||
<t>This section discusses the behavior in cases where the RTP | <name slugifiedName="name-media-switching-mixer">Media-Switching Mixer | |||
middlebox behaves like the Media-Switching Mixer (Section 3.6.2) in | </name> | |||
<xref target="RFC7667">RTP Topologies</xref>. The fundamental aspect | <t indent="0" pn="section-6.2.1-1">This section discusses the behavior | |||
in cases where the RTP | ||||
middlebox behaves like the media-switching mixer in | ||||
RTP topologies (<xref target="RFC7667" sectionFormat="of" section="3.6 | ||||
.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7667#section-3.6 | ||||
.2" derivedContent="RFC7667"/>). The | ||||
fundamental aspect | ||||
here is that the media sources delivered from the middlebox will be | here is that the media sources delivered from the middlebox will be | |||
the mixer's conceptual or functional ones. For example, one media | the mixer's conceptual or functional ones. For example, one media | |||
source may be the main speaker in high resolution video, while a | source may be the main speaker in high-resolution video, while a | |||
number of other media sources are thumbnails of each | number of other media sources are thumbnails of each | |||
participant.</t> | participant.</t> | |||
<t indent="0" pn="section-6.2.1-2">The above results in the RTP stream | ||||
<t>The above results in that the RTP stream produced by the mixer is | produced by the mixer being | |||
one that switches between a number of received incoming RTP streams | one that switches between a number of received incoming RTP streams | |||
for different media sources and in different simulcast versions. The | for different media sources and in different simulcast versions. The | |||
mixer selects the media source to be sent as one of the RTP streams, | mixer selects the media source to be sent as one of the RTP streams | |||
and then selects among the available simulcast streams for the most | and then selects among the available simulcast streams for the most | |||
appropriate one. The selection criteria include available bandwidth | appropriate one. The selection criteria include available bandwidth | |||
on the mixer to receiver path and restrictions based on the | on the mixer-to-receiver path and restrictions based on the | |||
functional usage of the RTP stream delivered to the receiver. As an | functional usage of the RTP stream delivered to the receiver. As an | |||
example of the latter, it is unnecessary to forward a full HD video | example of the latter, it is unnecessary to forward a full HD video | |||
to a receiver if the display area is just a thumbnail. Thus, | to a receiver if the display area is just a thumbnail. Thus, | |||
restrictions may exist to not allow some simulcast streams to be | restrictions may exist to not allow some simulcast streams to be | |||
forwarded for some of the mixer's media sources.</t> | forwarded for some of the mixer's media sources.</t> | |||
<t indent="0" pn="section-6.2.1-3">This will result in a single RTP st | ||||
<t>This will result in a single RTP stream being used for each of | ream being used for each of | |||
the RTP mixer's media sources. This RTP stream is at any point in | the RTP mixer's media sources. At any point in time, this RTP stream | |||
time a selection of one particular RTP stream arriving to the mixer, | is a selection of one particular RTP stream arriving to the mixer, | |||
where the RTP header field values are rewritten to provide a | where the RTP header-field values are rewritten to provide a | |||
consistent, single RTP stream. If the RTP mixer doesn't receive any | consistent, single RTP stream. If the RTP mixer doesn't receive any | |||
incoming stream matched to this media source, the SSRC will not | incoming stream matched to this media source, the SSRC will not | |||
transmit, but be kept alive using RTCP. The SSRC and thus RTP stream | transmit but be kept alive using RTCP. The SSRC and thus RTP stream | |||
for the mixer's media source is expected to be long term stable. It | for the mixer's media source is expected to be long-term stable. It | |||
will only be changed by signalling or other disruptive events. Note | will only be changed by signaling or other disruptive events. Note | |||
that although the above talks about a single RTP stream, there can | that although the above talks about a single RTP stream, there can | |||
in some cases be multiple RTP streams carrying the selected | in some cases be multiple RTP streams carrying the selected | |||
simulcast stream for the originating media source, including | simulcast stream for the originating media source, including | |||
redundancy or other auxiliary RTP streams.</t> | redundancy or other auxiliary RTP streams.</t> | |||
<t indent="0" pn="section-6.2.1-4">The mixer may communicate the ident | ||||
<t>The mixer may communicate the identity of the originating media | ity of the originating media | |||
source to the receiver by including the CSRC field with the | source to the receiver by including the Contributing Source (CSRC) fie | |||
ld with the | ||||
originating media source's SSRC value. Note that due to the | originating media source's SSRC value. Note that due to the | |||
possibility that the RTP mixer switches between simulcast versions | possibility that the RTP mixer switches between simulcast versions | |||
of the media source, the CSRC value may change, even if the media | of the media source, the CSRC value may change, even if the media | |||
source is kept the same.</t> | source is kept the same.</t> | |||
<t indent="0" pn="section-6.2.1-5">It is important to note that any MI | ||||
<t>It is important to note that any MID SDES item from the | D SDES item from the | |||
originating media source needs to be removed and not be associated | originating media source needs to be removed and not be associated | |||
with the RTP stream's SSRC. That is, there is nothing in the | with the RTP stream's SSRC. That is, there is nothing in the | |||
signalling between the mixer and the receiver that is structured | signaling between the mixer and the receiver that is structured | |||
around the originating media sources, only the mixer's media | around the originating media sources, only the mixer's media | |||
sources. If they would be associated with the SSRC, the receiver | sources. If they were associated with the SSRC, the receiver | |||
would likely believe that there has been an SSRC collision, and that | would likely believe that there has been an SSRC collision and | |||
the RTP stream is spurious as it doesn't carry the identifiers used | the RTP stream is spurious, because it doesn't carry the identifiers u | |||
sed | ||||
to relate it to the correct context. However, this is not true for | to relate it to the correct context. However, this is not true for | |||
CSRC values, as long as they are never used as SSRC. In these cases | CSRC values, as long as they are never used as an SSRC. In these cases , | |||
one could provide CNAME and MID as SDES items. A receiver could use | one could provide CNAME and MID as SDES items. A receiver could use | |||
this to determine which CSRC values that are associated with the | this to determine which CSRC values that are associated with the | |||
same originating media source.</t> | same originating media source.</t> | |||
<t indent="0" pn="section-6.2.1-6">If RtpStreamIds are used in the sce | ||||
<t>If RtpStreamIds are used in the scenario described by this | nario described by this | |||
section, it should be noted that the RtpStreamId on a particular | section, it should be noted that the RtpStreamId on a particular | |||
SSRC will change based on the actual simulcast stream selected for | SSRC will change based on the actual simulcast stream selected for | |||
switching. These RtpStreamId identifiers will be local to this leg's | switching. These RtpStreamId identifiers will be local to this leg's | |||
signalling context. In addition, the defined RtpStreamIds and their | signaling context. In addition, the defined RtpStreamIds and their | |||
parameters need to cover all the media sources and simulcast streams | parameters need to cover all the media sources and simulcast streams | |||
received by the RTP mixer that can be switched into this media | received by the RTP mixer that can be switched into this media | |||
source, sent by the RTP mixer.</t> | source, sent by the RTP mixer.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-6 | ||||
<section title="Selective Forwarding Middlebox"> | .2.2"> | |||
<t>This section discusses the behavior in cases where the RTP | <name slugifiedName="name-selective-forwarding-middle">Selective Forwa | |||
middlebox behaves like the Selective Forwarding Middlebox (Section | rding Middlebox</name> | |||
3.7) in <xref target="RFC7667">RTP Topologies</xref>. Applications | <t indent="0" pn="section-6.2.2-1">This section discusses the behavior | |||
for this type of RTP middlebox results in that each originating | in cases where the RTP | |||
media source will have a corresponding media source on the leg | middlebox behaves like the Selective Forwarding Middlebox in RTP | |||
topologies (<xref target="RFC7667" sectionFormat="of" section="3.7" for | ||||
mat="default" derivedLink="https://rfc-editor.org/rfc/rfc7667#section-3.7" deriv | ||||
edContent="RFC7667"/>). Applications | ||||
for this type of RTP middlebox result in each originating | ||||
media source having a corresponding media source on the leg | ||||
between the middlebox and the receiver. A Selective Forwarding | between the middlebox and the receiver. A Selective Forwarding | |||
Middlebox (SFM) could go as far as exposing all the simulcast | Middlebox (SFM) could go as far as exposing all the simulcast | |||
streams for an media source, however this section will focus on | streams for a media source; however, this section will focus on | |||
having a single simulcast stream that can contain any of the | having a single simulcast stream that can contain any of the | |||
simulcast formats. This section will assume that the SFM projection | simulcast formats. This section will assume that the SFM projection | |||
mechanism works on media source level, and maps one of the media | mechanism works on the media-source level and maps one of the media | |||
source's simulcast streams onto one RTP stream from the SFM to the | source's simulcast streams onto one RTP stream from the SFM to the | |||
receiver.</t> | receiver.</t> | |||
<t indent="0" pn="section-6.2.2-2">This usage will result in the indiv | ||||
<t>This usage will result in that the individual RTP stream(s) for | idual RTP stream(s) for | |||
one media source can switch between being active to paused, based on | one media source being able to switch between being active and | |||
paused, based on | ||||
the subset of media sources the SFM wants to provide the receiver | the subset of media sources the SFM wants to provide the receiver | |||
for the moment. With SFMs there exist no reasons to use CSRC to | for the moment. With SFMs, there exist no reasons to use CSRC to | |||
indicate the originating stream, as there is a one to one media | indicate the originating stream, as there is a one-to-one | |||
source mapping. If the application requires knowing the simulcast | media-source mapping. If the application requires knowing the | |||
simulcast | ||||
version received to function well, then RtpStreamId should be | version received to function well, then RtpStreamId should be | |||
negotiated on the SFM to receiver leg. Which simulcast stream that | negotiated on the SFM to receiver leg. Which simulcast stream that | |||
is being forwarded is not made explicit unless RtpStreamId is used | is being forwarded is not made explicit unless RtpStreamId is used | |||
on the leg.</t> | on the leg.</t> | |||
<t indent="0" pn="section-6.2.2-3">Any MID SDES items being sent by th | ||||
<t>Any MID SDES items being sent by the SFM to the receiver are only | e SFM to the receiver are only | |||
those agreed between the SFM and the receiver, and no MID values | those agreed between the SFM and the receiver, and no MID values | |||
from the originating side of the SFM are to be forwarded.</t> | from the originating side of the SFM are to be forwarded.</t> | |||
<t indent="0" pn="section-6.2.2-4">An SFM could expose corresponding R | ||||
<t>A SFM could expose corresponding RTP streams for all the media | TP streams for all the media | |||
sources and their simulcast streams, and then for any media source | sources and their simulcast streams and then, for any media source | |||
that is to be provided forward one selected simulcast stream. | that is to be provided, forward one selected simulcast stream. | |||
However, this is not recommended as it would unnecessarily increase | However, this is not recommended, as it would unnecessarily increase | |||
the number of RTP streams and require the receiver to timely detect | the number of RTP streams and require the receiver to timely detect | |||
switching between simulcast streams. The above usage requires the | switching between simulcast streams. The above usage requires the | |||
same SFM functionality for switching, while avoiding the | same SFM functionality for switching, while avoiding the | |||
uncertainties of timely detecting that a RTP stream ends. The | uncertainties of timely detecting that an RTP stream ends. The | |||
benefit would be that the received simulcast stream would be | benefit would be that the received simulcast stream would be | |||
implicitly provided by which RTP stream would be active for a media | implicitly provided by which RTP stream would be active for a media | |||
source. However, using RtpStreamId to make this explicit also | source. However, using RtpStreamId to make this explicit also | |||
exposes which alternative format is used. The conclusion is that | exposes which alternative format is used. The conclusion is that | |||
using one RTP stream per simulcast stream is unnecessary. The issue | using one RTP stream per simulcast stream is unnecessary. The issue | |||
with timely detecting end of streams, independent if they are | with timely detecting end of streams, independent of whether they are | |||
stopped temporarily or long term, is that there is no explicit | stopped temporarily or long term, is that there is no explicit | |||
indication that the transmission has intentionally been stopped. The | indication that the transmission has intentionally been stopped. The | |||
RTCP based <xref target="RFC7728">Pause and Resume mechanism</xref> | RTCP-based <xref target="RFC7728" format="default" sectionFormat="of" | |||
derivedContent="RFC7728">pause and resume | ||||
mechanism</xref> | ||||
includes a PAUSED indication that provides the last RTP sequence | includes a PAUSED indication that provides the last RTP sequence | |||
number transmitted prior to the pause. Due to usage, the timeliness | number transmitted prior to the pause. Due to usage, the timeliness | |||
of this solution depends on when delivery using RTCP can occur in | of this solution depends on when delivery using RTCP can occur in | |||
relation to the transmission of the last RTP packet. If no explicit | relation to the transmission of the last RTP packet. If no explicit | |||
information is provided at all, then detection based on non | information is provided at all, then detection based on | |||
increasing RTCP SR field values and timers need to be used to | nonincreasing RTCP SR field values and timers need to be used to | |||
determine pause in RTP packet delivery. This results in that one can | determine pause in RTP packet delivery. As a result, when the last | |||
usually not determine when the last RTP packet arrives (if it | RTP packet arrives (if it arrives), one usually | |||
arrives) that this will be the last. That it was the last is | cannot determine that this will be the last. That it was the last is | |||
something that one learns later.</t> | something that one learns later.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-rtp-box-box" numbered="true" toc="include" removeInRF | ||||
<section anchor="sec-rtp-box-box" title="RTP Middlebox to RTP Middlebox"> | C="false" pn="section-6.3"> | |||
<t>This relates to the transmission of simulcast streams between RTP | <name slugifiedName="name-rtp-middlebox-to-rtp-middle">RTP Middlebox to | |||
RTP Middlebox</name> | ||||
<t indent="0" pn="section-6.3-1">This relates to the transmission of sim | ||||
ulcast streams between RTP | ||||
middleboxes or other usages where one wants to enable the delivery of | middleboxes or other usages where one wants to enable the delivery of | |||
multiple simultaneous simulcast streams per media source, but the | multiple simultaneous simulcast streams per media source, but the | |||
transmitting entity is not the originating endpoint. For a particular | transmitting entity is not the originating endpoint. For a particular | |||
direction between middlebox A and B, this looks very similar to the | direction between middleboxes A and B, this looks very similar to the | |||
originating to middlebox case on a media source basis. However, in | originating-to-middlebox case on a media-source basis. However, in | |||
this case there is usually multiple media sources, originating from | this case, there are usually multiple media sources, originating from | |||
multiple endpoints. This can create situations where limitations in | multiple endpoints. This can create situations where limitations in | |||
the number of simultaneously received media streams can arise, for | the number of simultaneously received media streams can arise -- for | |||
example due to limitation in network bandwidth. In this case, a subset | example, due to limitation in network bandwidth. In this case, a subset | |||
of not only the simulcast streams, but also media sources can be | of not only the simulcast streams but also media sources can be | |||
selected. This results in that individual RTP streams can be become | selected. As a result, individual RTP streams can become | |||
paused at any point and later being resumed based on various | paused at any point and later be resumed based on various criteria.</t> | |||
criteria.</t> | <t indent="0" pn="section-6.3-2">The MIDs used between A and B are the o | |||
nes agreed between these two | ||||
<t>The MIDs used between A and B are the ones agreed between these two | identities in signaling. The RtpStreamId values will also be provided | |||
identities in signalling. The RtpStreamId values will also be provided | ||||
to ensure explicit information about which simulcast stream they are. | to ensure explicit information about which simulcast stream they are. | |||
The RTP stream to MID and RtpStreamId associations should here be long | The RTP-stream-to-MID and -RtpStreamId associations should here be | |||
term stable.</t> | long-term stable.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-network-aspects" numbered="true" toc="include" removeIn | ||||
<section anchor="sec-network-aspects" title="Network Aspects"> | RFC="false" pn="section-7"> | |||
<t>Simulcast is in this memo defined as the act of sending multiple | <name slugifiedName="name-network-aspects">Network Aspects</name> | |||
alternative encoded streams of the same underlying media source. When | <t indent="0" pn="section-7-1">Simulcast is in this memo defined as the ac | |||
transmitting multiple independent streams that originate from the same | t of sending multiple | |||
source, it could potentially be done in several different ways using | alternative encoded streams of the same underlying media | |||
source. Transmitting multiple independent streams that originate from | ||||
the same | ||||
source could potentially be done in several different ways using | ||||
RTP. A general discussion on considerations for use of the different RTP | RTP. A general discussion on considerations for use of the different RTP | |||
multiplexing alternatives can be found in <xref | multiplexing alternatives can be found in <xref target="RFC8872" format="d | |||
target="I-D.ietf-avtcore-multiplex-guidelines">Guidelines for | efault" sectionFormat="of" derivedContent="RFC8872">"Guidelines for Using the Mu | |||
Multiplexing in RTP</xref>. Discussion and clarification on how to | ltiplexing Features of | |||
handle multiple streams in an RTP session can be found in <xref | RTP to Support Multiple Media Streams"</xref>. Discussion and | |||
target="RFC8108"/>.</t> | clarification on how to handle multiple streams in an RTP session can be | |||
found in <xref target="RFC8108" format="default" sectionFormat="of" derive | ||||
<t>The network aspects that are relevant for simulcast are:<list | dContent="RFC8108"/>.</t> | |||
style="hanging"> | <t indent="0" pn="section-7-2">The network aspects that are relevant for s | |||
<t hangText="Quality of Service:">When using simulcast it might be | imulcast are:</t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-7-3"> | ||||
<dt pn="section-7-3.1">Quality of Service (QoS):</dt> | ||||
<dd pn="section-7-3.2">When using simulcast, it might be | ||||
of interest to prioritize a particular simulcast stream, rather than | of interest to prioritize a particular simulcast stream, rather than | |||
applying equal treatment to all streams. For example, lower bitrate | applying equal treatment to all streams. For example, lower-bitrate | |||
streams may be prioritized over higher bitrate streams to minimize | streams may be prioritized over higher-bitrate streams to minimize | |||
congestion or packet losses in the low bitrate streams. Thus, there | congestion or packet losses in the low-bitrate streams. Thus, there | |||
is a benefit to use a simulcast solution with good QoS support.</t> | is a benefit to using a simulcast solution with good QoS support.</dd> | |||
<dt pn="section-7-3.3">NAT/FW Traversal (Network Address Translator / Fi | ||||
<t hangText="NAT/FW Traversal:">Using multiple RTP sessions incurs | rewall Traversal):</dt> | |||
more cost for NAT/FW traversal unless they can re-use the same | <dd pn="section-7-3.4">Using multiple RTP sessions incurs | |||
transport flow, which can be achieved by <xref | more cost for NAT/FW traversal unless they can reuse the same | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">Multiplexing | transport flow, which can be achieved by <xref target="RFC8843" format | |||
Negotiation Using SDP Port Numbers</xref>.</t> | ="default" sectionFormat="of" derivedContent="RFC8843">multiplexing negotiation | |||
</list></t> | using SDP port | |||
numbers</xref>.</dd> | ||||
<t/> | </dl> | |||
<t indent="0" pn="section-7-4"/> | ||||
<section title="Bitrate Adaptation"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-7.1 | |||
<t>Use of multiple simulcast streams can require a significant amount | "> | |||
<name slugifiedName="name-bitrate-adaptation">Bitrate Adaptation</name> | ||||
<t indent="0" pn="section-7.1-1">Use of multiple simulcast streams can r | ||||
equire a significant amount | ||||
of network resources. The aggregate bandwidth for all simulcast | of network resources. The aggregate bandwidth for all simulcast | |||
streams for a media source (and thus SDP media description) is bounded | streams for a media source (and thus SDP media description) is bounded | |||
by any SDP "b=" line applicable to that media source. It is assumed | by any SDP "b=" line applicable to that media source. It is assumed | |||
that a suitable congestion control mechanism is used by the | that a suitable congestion-control mechanism is used by the | |||
application to ensure that it doesn't cause persistent congestion. If | application to ensure that it doesn't cause persistent congestion. If | |||
the amount of available network resources varies during an RTP session | the amount of available network resources varies during an RTP session | |||
such that it does not match what is negotiated in SDP, the bitrate | such that it does not match what is negotiated in SDP, the bitrate | |||
used by the different simulcast streams may have to be reduced | used by the different simulcast streams may have to be reduced | |||
dynamically. When a simulcasting media source uses a single media | dynamically. When a simulcasting media source uses a single media | |||
transport for all of the simulcast streams, it is likely that a joint | transport for all of the simulcast streams, it is likely that a joint | |||
congestion control across all simulcast streams is used for that media | congestion control across all simulcast streams is used for that media | |||
source. What simulcast streams to prioritize when allocating available | source. What simulcast streams to prioritize when allocating available | |||
bitrate among the simulcast streams in such adaptation SHOULD be taken | bitrate among the simulcast streams in such adaptation <bcp14>SHOULD</bc p14> be taken | |||
from the simulcast stream order on the "a=simulcast" line and ordering | from the simulcast stream order on the "a=simulcast" line and ordering | |||
of alternative simulcast formats <xref target="sec-cap"/>. Simulcast | of alternative simulcast formats (<xref target="sec-cap" format="default " sectionFormat="of" derivedContent="Section 5.2"/>). Simulcast | |||
streams that have pause/resume capability and that would be given such | streams that have pause/resume capability and that would be given such | |||
low bitrate by the adaptation process that they are considered not | low bitrate by the adaptation process that they are considered not | |||
really useful can be temporarily paused until the limiting condition | really useful can be temporarily paused until the limiting condition | |||
clears.</t> | clears.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-limitation" numbered="true" toc="include" removeInRFC=" | ||||
<section anchor="sec-limitation" title="Limitation"> | false" pn="section-8"> | |||
<t>The chosen approach has a limitation that relates to the use of a | <name slugifiedName="name-limitation">Limitation</name> | |||
<t indent="0" pn="section-8-1">The chosen approach has a limitation that r | ||||
elates to the use of a | ||||
single RTP session for all simulcast formats of a media source, which | single RTP session for all simulcast formats of a media source, which | |||
comes from sending all simulcast streams related to a media source under | comes from sending all simulcast streams related to a media source under | |||
the same SDP media description.</t> | the same SDP media description.</t> | |||
<t indent="0" pn="section-8-2">It is not possible to use different simulca | ||||
<t>It is not possible to use different simulcast streams on different | st streams on different | |||
media transports, limiting the possibilities to apply different QoS to | media transports, which limits the possibilities for applying different Qo | |||
S to | ||||
different simulcast streams. When using unicast, QoS mechanisms based on | different simulcast streams. When using unicast, QoS mechanisms based on | |||
individual packet marking are feasible, since they do not require | individual packet marking are feasible, since they do not require | |||
separation of simulcast streams into different RTP sessions to apply | separation of simulcast streams into different RTP sessions to apply | |||
different QoS.</t> | different QoS.</t> | |||
<t indent="0" pn="section-8-3">It is also not possible to separate differe | ||||
<t>It is also not possible to separate different simulcast streams into | nt simulcast streams into | |||
different multicast groups to allow a multicast receiver to pick the | different multicast groups to allow a multicast receiver to pick the | |||
stream it wants, rather than receive all of them. In this case, the only | stream it wants, rather than receive all of them. In this case, the only | |||
reasonable implementation is to use different RTP sessions for each | reasonable implementation is to use different RTP sessions for each | |||
multicast group so that reporting and other RTCP functions operate as | multicast group so that reporting and other RTCP functions operate as | |||
intended. Such simulcast usage in multicast context is out of scope for | intended. Such simulcast usage in a multicast context is out of scope for | |||
the current document and would require additional specification.</t> | the current document and would require additional specification.</t> | |||
</section> | </section> | |||
<section anchor="sec-iana" numbered="true" toc="include" removeInRFC="false" | ||||
<section anchor="sec-iana" title="IANA Considerations"> | pn="section-9"> | |||
<t>This document requests to register a new media-level SDP attribute, | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
<t indent="0" pn="section-9-1">This document registers a new media-level S | ||||
DP attribute, | ||||
"simulcast", in the "att-field (media level only)" registry within the | "simulcast", in the "att-field (media level only)" registry within the | |||
SDP parameters registry, according to the procedures of <xref | "Session Description Protocol (SDP) Parameters" registry, according to the | |||
target="RFC4566"/> and <xref | procedures of <xref target="RFC4566" format="default" sectionFormat="of" d | |||
target="I-D.ietf-mmusic-sdp-mux-attributes"/>.<list style="hanging"> | erivedContent="RFC4566"/> and <xref target="RFC8859" format="default" sectionFor | |||
<t hangText="Contact name, email:">The IESG (iesg@ietf.org)</t> | mat="of" derivedContent="RFC8859"/>.</t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-9-2"> | ||||
<t hangText="Attribute name:">simulcast</t> | <dt pn="section-9-2.1">Contact name, email:</dt> | |||
<dd pn="section-9-2.2">The IESG (iesg@ietf.org)</dd> | ||||
<t hangText="Long-form attribute name:">Simulcast stream | <dt pn="section-9-2.3">Attribute name:</dt> | |||
description</t> | <dd pn="section-9-2.4">simulcast</dd> | |||
<dt pn="section-9-2.5">Long-form attribute name:</dt> | ||||
<t hangText="Charset dependent:">No</t> | <dd pn="section-9-2.6">Simulcast stream description</dd> | |||
<dt pn="section-9-2.7">Charset dependent:</dt> | ||||
<t hangText="Attribute value:">sc-value; see <xref | <dd pn="section-9-2.8">No</dd> | |||
target="sec-attr"/> of RFC XXXX.</t> | <dt pn="section-9-2.9">Attribute value:</dt> | |||
<dd pn="section-9-2.10">sc-value; see <xref target="sec-attr" format="de | ||||
<t hangText="Purpose:">Signals simulcast capability for a set of RTP | fault" sectionFormat="of" derivedContent="Section 5.1"/> of RFC | |||
streams</t> | 8853.</dd> | |||
<dt pn="section-9-2.11">Purpose:</dt> | ||||
<t hangText="MUX category:">NORMAL</t> | <dd pn="section-9-2.12">Signals simulcast capability for a set of RTP | |||
</list>Note to RFC Editor: Please replace "RFC XXXX" with the assigned | streams</dd> | |||
number of this RFC.</t> | <dt pn="section-9-2.13">Mux category:</dt> | |||
<dd pn="section-9-2.14">NORMAL</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section anchor="sec-security" numbered="true" toc="include" removeInRFC="fa | ||||
<section anchor="sec-security" title="Security Considerations"> | lse" pn="section-10"> | |||
<t>The simulcast capability, configuration attributes, and parameters | <name slugifiedName="name-security-considerations">Security Considerations | |||
</name> | ||||
<t indent="0" pn="section-10-1">The simulcast capability, configuration at | ||||
tributes, and parameters | ||||
are vulnerable to attacks in signaling.</t> | are vulnerable to attacks in signaling.</t> | |||
<t indent="0" pn="section-10-2">A false inclusion of the "a=simulcast" att | ||||
<t>A false inclusion of the "a=simulcast" attribute may result in | ribute may result in | |||
simultaneous transmission of multiple RTP streams that would otherwise | simultaneous transmission of multiple RTP streams that would otherwise | |||
not be generated. The impact is limited by the media description joint | not be generated. The impact is limited by the media description joint | |||
bandwidth, shared by all simulcast streams irrespective of their number. | bandwidth, shared by all simulcast streams irrespective of their number. | |||
There may however be a large number of unwanted RTP streams that will | However, there may be a large number of unwanted RTP streams that will | |||
impact the share of bandwidth allocated for the originally wanted RTP | impact the share of bandwidth allocated for the originally wanted RTP | |||
stream.</t> | stream.</t> | |||
<t indent="0" pn="section-10-3">A hostile removal of the "a=simulcast" att | ||||
<t>A hostile removal of the "a=simulcast" attribute will result in | ribute will result in | |||
simulcast not being used.</t> | simulcast not being used.</t> | |||
<t indent="0" pn="section-10-4"> | ||||
<t>Neither of the above will likely have any major consequences and can | Integrity protection and source authentication of all SDP signaling, | |||
be mitigated by signaling that is at least integrity and source | including simulcast attributes, can mitigate the risks of such attacks | |||
authenticated to prevent an attacker to change it.</t> | that attempt to alter signaling. | |||
</t> | ||||
<t>Security considerations related to the use of "a=rid" and the | <t indent="0" pn="section-10-5">Security considerations related to the use | |||
RtpStreamId SDES item is covered in <xref target="I-D.ietf-mmusic-rid"/> | of "a=rid" and the | |||
and <xref target="I-D.ietf-avtext-rid"/>. There are no additional | RtpStreamId SDES item are covered in <xref target="RFC8851" format="defaul | |||
t" sectionFormat="of" derivedContent="RFC8851"/> | ||||
and <xref target="RFC8852" format="default" sectionFormat="of" derivedCont | ||||
ent="RFC8852"/>. There are no additional | ||||
security concerns related to their use in this specification.</t> | security concerns related to their use in this specification.</t> | |||
</section> | </section> | |||
<section anchor="sec-contributors" title="Contributors"> | ||||
<t>Morgan Lindqvist and Fredrik Jansson, both from Ericsson, have | ||||
contributed with important material to the first versions of this | ||||
document. Robert Hansen and Cullen Jennings, from Cisco, Peter Thatcher, | ||||
from Google, and Adam Roach, from Mozilla, contributed significantly to | ||||
subsequent versions.</t> | ||||
</section> | ||||
<section anchor="sec-ack" title="Acknowledgements"> | ||||
<t>The authors would like to thank Bernard Aboba, Thomas Belling, Roni | ||||
Even, Adam Roach, Inaki Baz Castillo, Paul Kyzivat, and Arun Arunachalam | ||||
for the feedback they provided during the development of this | ||||
document.</t> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | <references pn="section-11"> | |||
<?rfc include="reference.RFC.2119"?> | <name slugifiedName="name-references">References</name> | |||
<references pn="section-11.1"> | ||||
<?rfc include='reference.RFC.3550'?> | <name slugifiedName="name-normative-references">Normative References</na | |||
me> | ||||
<?rfc include='reference.RFC.4566'?> | <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | |||
119" quoteTitle="true" derivedAnchor="RFC2119"> | ||||
<?rfc include='reference.RFC.5234'?> | <front> | |||
<title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
<?rfc include='reference.RFC.7405'?> | le> | |||
<author initials="S." surname="Bradner" fullname="S. Bradner"> | ||||
<?rfc include='reference.RFC.7728'?> | <organization showOnFrontPage="true"/> | |||
</author> | ||||
<?rfc include='reference.RFC.8174'?> | <date year="1997" month="March"/> | |||
<abstract> | ||||
<?rfc include='reference.I-D.ietf-mmusic-rid'?> | <t indent="0">In many standards track documents several words are | |||
used to signify the requirements in the specification. These words are often ca | ||||
<?rfc include='reference.I-D.ietf-avtext-rid'?> | pitalized. This document defines these words as they should be interpreted in IE | |||
TF documents. This document specifies an Internet Best Current Practices for th | ||||
<?rfc include='reference.I-D.ietf-mmusic-sdp-mux-attributes'?> | e Internet Community, and requests discussion and suggestions for improvements.< | |||
/t> | ||||
<?rfc include='reference.I-D.ietf-mmusic-sdp-bundle-negotiation'?> | </abstract> | |||
</references> | </front> | |||
<seriesInfo name="BCP" value="14"/> | ||||
<references title="Informative References"> | <seriesInfo name="RFC" value="2119"/> | |||
<?rfc include='reference.RFC.2198'?> | <seriesInfo name="DOI" value="10.17487/RFC2119"/> | |||
</reference> | ||||
<?rfc include='reference.RFC.3264'?> | <reference anchor="RFC3264" target="https://www.rfc-editor.org/info/rfc3 | |||
264" quoteTitle="true" derivedAnchor="RFC3264"> | ||||
<?rfc include='reference.RFC.3389'?> | <front> | |||
<title>An Offer/Answer Model with Session Description Protocol (SDP) | ||||
<?rfc include='reference.RFC.4588'?> | </title> | |||
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg"> | ||||
<?rfc include='reference.RFC.4733'?> | <organization showOnFrontPage="true"/> | |||
</author> | ||||
<?rfc include='reference.RFC.5104'?> | <author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne | |||
"> | ||||
<?rfc include='reference.RFC.5109'?> | <organization showOnFrontPage="true"/> | |||
</author> | ||||
<?rfc include='reference.RFC.5583'?> | <date year="2002" month="June"/> | |||
<abstract> | ||||
<?rfc include='reference.RFC.6184'?> | <t indent="0">This document defines a mechanism by which two entit | |||
ies can make use of the Session Description Protocol (SDP) to arrive at a common | ||||
<?rfc include='reference.RFC.6190'?> | view of a multimedia session between them. In the model, one participant offer | |||
s the other a description of the desired session from their perspective, and the | ||||
<?rfc include='reference.RFC.6236'?> | other participant answers with the desired session from their perspective. Thi | |||
s offer/answer model is most useful in unicast sessions where information from b | ||||
<?rfc include='reference.RFC.6464'?> | oth participants is needed for the complete view of the session. The offer/answ | |||
er model is used by protocols like the Session Initiation Protocol (SIP). [STAN | ||||
<?rfc include='reference.RFC.7104'?> | DARDS-TRACK]</t> | |||
</abstract> | ||||
<?rfc include='reference.RFC.7656'?> | </front> | |||
<seriesInfo name="RFC" value="3264"/> | ||||
<?rfc include='reference.RFC.7667'?> | <seriesInfo name="DOI" value="10.17487/RFC3264"/> | |||
</reference> | ||||
<?rfc include='reference.RFC.7741'?> | <reference anchor="RFC3550" target="https://www.rfc-editor.org/info/rfc3 | |||
550" quoteTitle="true" derivedAnchor="RFC3550"> | ||||
<?rfc include='reference.RFC.8108'?> | <front> | |||
<title>RTP: A Transport Protocol for Real-Time Applications</title> | ||||
<?rfc include='reference.RFC.8285'?> | <author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne | |||
"> | ||||
<?rfc include='reference.I-D.ietf-avtcore-multiplex-guidelines'?> | <organization showOnFrontPage="true"/> | |||
</author> | ||||
<?rfc include='reference.I-D.ietf-payload-flexible-fec-scheme'?> | <author initials="S." surname="Casner" fullname="S. Casner"> | |||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Frederick" fullname="R. Frederick"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="V." surname="Jacobson" fullname="V. Jacobson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2003" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This memorandum describes RTP, the real-time transpo | ||||
rt protocol. RTP provides end-to-end network transport functions suitable for a | ||||
pplications transmitting real-time data, such as audio, video or simulation data | ||||
, over multicast or unicast network services. RTP does not address resource res | ||||
ervation and does not guarantee quality-of- service for real-time services. The | ||||
data transport is augmented by a control protocol (RTCP) to allow monitoring of | ||||
the data delivery in a manner scalable to large multicast networks, and to prov | ||||
ide minimal control and identification functionality. RTP and RTCP are designed | ||||
to be independent of the underlying transport and network layers. The protocol | ||||
supports the use of RTP-level translators and mixers. Most of the text in this | ||||
memorandum is identical to RFC 1889 which it obsoletes. There are no changes in | ||||
the packet formats on the wire, only changes to the rules and algorithms govern | ||||
ing how the protocol is used. The biggest change is an enhancement to the scalab | ||||
le timer algorithm for calculating when to send RTCP packets in order to minimiz | ||||
e transmission in excess of the intended rate when many participants join a sess | ||||
ion simultaneously. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="64"/> | ||||
<seriesInfo name="RFC" value="3550"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3550"/> | ||||
</reference> | ||||
<reference anchor="RFC4566" target="https://www.rfc-editor.org/info/rfc4 | ||||
566" quoteTitle="true" derivedAnchor="RFC4566"> | ||||
<front> | ||||
<title>SDP: Session Description Protocol</title> | ||||
<author initials="M." surname="Handley" fullname="M. Handley"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="V." surname="Jacobson" fullname="V. Jacobson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This memo defines the Session Description Protocol ( | ||||
SDP). SDP is intended for describing multimedia sessions for the purposes of se | ||||
ssion announcement, session invitation, and other forms of multimedia session in | ||||
itiation. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4566"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4566"/> | ||||
</reference> | ||||
<reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5 | ||||
234" quoteTitle="true" derivedAnchor="RFC5234"> | ||||
<front> | ||||
<title>Augmented BNF for Syntax Specifications: ABNF</title> | ||||
<author initials="D." surname="Crocker" fullname="D. Crocker" role=" | ||||
editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P." surname="Overell" fullname="P. Overell"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2008" month="January"/> | ||||
<abstract> | ||||
<t indent="0">Internet technical specifications often need to defi | ||||
ne a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF | ||||
), called Augmented BNF (ABNF), has been popular among many Internet specificati | ||||
ons. The current specification documents ABNF. It balances compactness and simp | ||||
licity with reasonable representational power. The differences between standard | ||||
BNF and ABNF involve naming rules, repetition, alternatives, order-independence | ||||
, and value ranges. This specification also supplies additional rule definition | ||||
s and encoding for a core lexical analyzer of the type common to several Interne | ||||
t specifications. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="68"/> | ||||
<seriesInfo name="RFC" value="5234"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5234"/> | ||||
</reference> | ||||
<reference anchor="RFC7405" target="https://www.rfc-editor.org/info/rfc7 | ||||
405" quoteTitle="true" derivedAnchor="RFC7405"> | ||||
<front> | ||||
<title>Case-Sensitive String Support in ABNF</title> | ||||
<author initials="P." surname="Kyzivat" fullname="P. Kyzivat"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2014" month="December"/> | ||||
<abstract> | ||||
<t indent="0">This document extends the base definition of ABNF (A | ||||
ugmented Backus-Naur Form) to include a way to specify US-ASCII string literals | ||||
that are matched in a case-sensitive manner.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7405"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7405"/> | ||||
</reference> | ||||
<reference anchor="RFC7728" target="https://www.rfc-editor.org/info/rfc7 | ||||
728" quoteTitle="true" derivedAnchor="RFC7728"> | ||||
<front> | ||||
<title>RTP Stream Pause and Resume</title> | ||||
<author initials="B." surname="Burman" fullname="B. Burman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Akram" fullname="A. Akram"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Even" fullname="R. Even"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Westerlund" fullname="M. Westerlund"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2016" month="February"/> | ||||
<abstract> | ||||
<t indent="0">With the increased popularity of real-time multimedi | ||||
a applications, it is desirable to provide good control of resource usage, and u | ||||
sers also demand more control over communication sessions. This document descri | ||||
bes how a receiver in a multimedia conversation can pause and resume incoming da | ||||
ta from a sender by sending real-time feedback messages when using the Real-time | ||||
Transport Protocol (RTP) for real- time data transport. This document extends | ||||
the Codec Control Message (CCM) RTP Control Protocol (RTCP) feedback package by | ||||
explicitly allowing and describing specific use of existing CCMs and adding a gr | ||||
oup of new real-time feedback messages used to pause and resume RTP data streams | ||||
. This document updates RFC 5104.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7728"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7728"/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
174" quoteTitle="true" derivedAnchor="RFC8174"> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
tle> | ||||
<author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="May"/> | ||||
<abstract> | ||||
<t indent="0">RFC 2119 specifies common key words that may be used | ||||
in protocol specifications. This document aims to reduce the ambiguity by cla | ||||
rifying that only UPPERCASE usage of the key words have the defined special mea | ||||
nings.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
<reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8 | ||||
843" quoteTitle="true" derivedAnchor="RFC8843"> | ||||
<front> | ||||
<title>Negotiating Media Multiplexing Using the Session Description | ||||
Protocol (SDP)</title> | ||||
<author initials="C" surname="Holmberg" fullname="Christer Holmberg" | ||||
> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H" surname="Alvestrand" fullname="Harald Alvestran | ||||
d"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C" surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8843"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8843"/> | ||||
</reference> | ||||
<reference anchor="RFC8851" target="https://www.rfc-editor.org/info/rfc8 | ||||
851" quoteTitle="true" derivedAnchor="RFC8851"> | ||||
<front> | ||||
<title>RTP Payload Format Restrictions</title> | ||||
<author initials="A.B." surname="Roach" fullname="Adam Roach" role=" | ||||
editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8851"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8851"/> | ||||
</reference> | ||||
<reference anchor="RFC8852" target="https://www.rfc-editor.org/info/rfc8 | ||||
852" quoteTitle="true" derivedAnchor="RFC8852"> | ||||
<front> | ||||
<title>RTP Stream Identifier Source Description (SDES)</title> | ||||
<author initials="A.B." surname="Roach" fullname="Adam Roach"/> | ||||
<author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar | ||||
"/> | ||||
<author initials="P" surname="Thatcher" fullname="Peter Thatcher"/> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8852"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8852"/> | ||||
</reference> | ||||
<reference anchor="RFC8859" target="https://www.rfc-editor.org/info/rfc8 | ||||
859" quoteTitle="true" derivedAnchor="RFC8859"> | ||||
<front> | ||||
<title>A Framework for Session Description Protocol (SDP) Attributes | ||||
When Multiplexing</title> | ||||
<author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8859"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8859"/> | ||||
</reference> | ||||
</references> | ||||
<references pn="section-11.2"> | ||||
<name slugifiedName="name-informative-references">Informative References | ||||
</name> | ||||
<reference anchor="RFC2198" target="https://www.rfc-editor.org/info/rfc2 | ||||
198" quoteTitle="true" derivedAnchor="RFC2198"> | ||||
<front> | ||||
<title>RTP Payload for Redundant Audio Data</title> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="I." surname="Kouvelas" fullname="I. Kouvelas"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="O." surname="Hodson" fullname="O. Hodson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="V." surname="Hardman" fullname="V. Hardman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Handley" fullname="M. Handley"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J.C." surname="Bolot" fullname="J.C. Bolot"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Vega-Garcia" fullname="A. Vega-Garcia | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Fosse-Parisis" fullname="S. Fosse-Par | ||||
isis"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="1997" month="September"/> | ||||
<abstract> | ||||
<t indent="0">This document describes a payload format for use wit | ||||
h the real-time transport protocol (RTP), version 2, for encoding redundant audi | ||||
o data. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="2198"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2198"/> | ||||
</reference> | ||||
<reference anchor="RFC3389" target="https://www.rfc-editor.org/info/rfc3 | ||||
389" quoteTitle="true" derivedAnchor="RFC3389"> | ||||
<front> | ||||
<title>Real-time Transport Protocol (RTP) Payload for Comfort Noise | ||||
(CN)</title> | ||||
<author initials="R." surname="Zopf" fullname="R. Zopf"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2002" month="September"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3389"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3389"/> | ||||
</reference> | ||||
<reference anchor="RFC4588" target="https://www.rfc-editor.org/info/rfc4 | ||||
588" quoteTitle="true" derivedAnchor="RFC4588"> | ||||
<front> | ||||
<title>RTP Retransmission Payload Format</title> | ||||
<author initials="J." surname="Rey" fullname="J. Rey"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Leon" fullname="D. Leon"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Miyazaki" fullname="A. Miyazaki"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="V." surname="Varsa" fullname="V. Varsa"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Hakenberg" fullname="R. Hakenberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="July"/> | ||||
<abstract> | ||||
<t indent="0">RTP retransmission is an effective packet loss recov | ||||
ery technique for real-time applications with relaxed delay bounds. This docume | ||||
nt describes an RTP payload format for performing retransmissions. Retransmitted | ||||
RTP packets are sent in a separate stream from the original RTP stream. It is | ||||
assumed that feedback from receivers to senders is available. In particular, it | ||||
is assumed that Real-time Transport Control Protocol (RTCP) feedback as defined | ||||
in the extended RTP profile for RTCP-based feedback (denoted RTP/AVPF) is avail | ||||
able in this memo. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4588"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4588"/> | ||||
</reference> | ||||
<reference anchor="RFC4733" target="https://www.rfc-editor.org/info/rfc4 | ||||
733" quoteTitle="true" derivedAnchor="RFC4733"> | ||||
<front> | ||||
<title>RTP Payload for DTMF Digits, Telephony Tones, and Telephony S | ||||
ignals</title> | ||||
<author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T." surname="Taylor" fullname="T. Taylor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="December"/> | ||||
<abstract> | ||||
<t indent="0">This memo describes how to carry dual-tone multifreq | ||||
uency (DTMF) signalling, other tone signals, and telephony events in RTP packets | ||||
. It obsoletes RFC 2833.</t> | ||||
<t indent="0">This memo captures and expands upon the basic framew | ||||
ork defined in RFC 2833, but retains only the most basic event codes. It sets u | ||||
p an IANA registry to which other event code assignments may be added. Companion | ||||
documents add event codes to this registry relating to modem, fax, text telepho | ||||
ny, and channel-associated signalling events. The remainder of the event codes d | ||||
efined in RFC 2833 are conditionally reserved in case other documents revive the | ||||
ir use.</t> | ||||
<t indent="0">This document provides a number of clarifications to | ||||
the original document. However, it specifically differs from RFC 2833 by remov | ||||
ing the requirement that all compliant implementations support the DTMF events. | ||||
Instead, compliant implementations taking part in out-of-band negotiations of m | ||||
edia stream content indicate what events they support. This memo adds three new | ||||
procedures to the RFC 2833 framework: subdivision of long events into segments, | ||||
reporting of multiple events in a single packet, and the concept and reporting | ||||
of state events. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4733"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4733"/> | ||||
</reference> | ||||
<reference anchor="RFC5104" target="https://www.rfc-editor.org/info/rfc5 | ||||
104" quoteTitle="true" derivedAnchor="RFC5104"> | ||||
<front> | ||||
<title>Codec Control Messages in the RTP Audio-Visual Profile with F | ||||
eedback (AVPF)</title> | ||||
<author initials="S." surname="Wenger" fullname="S. Wenger"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="U." surname="Chandra" fullname="U. Chandra"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Westerlund" fullname="M. Westerlund"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Burman" fullname="B. Burman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2008" month="February"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies a few extensions to the mess | ||||
ages defined in the Audio-Visual Profile with Feedback (AVPF). They are helpful | ||||
primarily in conversational multimedia scenarios where centralized multipoint f | ||||
unctionalities are in use. However, some are also usable in smaller multicast e | ||||
nvironments and point-to-point calls.</t> | ||||
<t indent="0">The extensions discussed are messages related to the | ||||
ITU-T Rec. H.271 Video Back Channel, Full Intra Request, Temporary Maximum Medi | ||||
a Stream Bit Rate, and Temporal-Spatial Trade-off. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5104"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5104"/> | ||||
</reference> | ||||
<reference anchor="RFC5109" target="https://www.rfc-editor.org/info/rfc5 | ||||
109" quoteTitle="true" derivedAnchor="RFC5109"> | ||||
<front> | ||||
<title>RTP Payload Format for Generic Forward Error Correction</titl | ||||
e> | ||||
<author initials="A." surname="Li" fullname="A. Li" role="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2007" month="December"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies a payload format for generic | ||||
Forward Error Correction (FEC) for media data encapsulated in RTP. It is based | ||||
on the exclusive-or (parity) operation. The payload format described in this d | ||||
ocument allows end systems to apply protection using various protection lengths | ||||
and levels, in addition to using various protection group sizes to adapt to diff | ||||
erent media and channel characteristics. It enables complete recovery of the pro | ||||
tected packets or partial recovery of the critical parts of the payload dependin | ||||
g on the packet loss situation. This scheme is completely compatible with non-F | ||||
EC-capable hosts, so the receivers in a multicast group that do not implement FE | ||||
C can still work by simply ignoring the protection data. This specification obs | ||||
oletes RFC 2733 and RFC 3009. The FEC specified in this document is not backwar | ||||
d compatible with RFC 2733 and RFC 3009. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5109"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5109"/> | ||||
</reference> | ||||
<reference anchor="RFC5583" target="https://www.rfc-editor.org/info/rfc5 | ||||
583" quoteTitle="true" derivedAnchor="RFC5583"> | ||||
<front> | ||||
<title>Signaling Media Decoding Dependency in the Session Descriptio | ||||
n Protocol (SDP)</title> | ||||
<author initials="T." surname="Schierl" fullname="T. Schierl"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Wenger" fullname="S. Wenger"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2009" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This memo defines semantics that allow for signaling | ||||
the decoding dependency of different media descriptions with the same media typ | ||||
e in the Session Description Protocol (SDP). This is required, for example, if | ||||
media data is separated and transported in different network streams as a result | ||||
of the use of a layered or multiple descriptive media coding process.</t> | ||||
<t indent="0">A new grouping type "DDP" -- decoding dependency -- | ||||
is defined, to be used in conjunction with RFC 3388 entitled "Grouping of Media | ||||
Lines in the Session Description Protocol". In addition, an attribute is specif | ||||
ied describing the relationship of the media streams in a "DDP" group indicated | ||||
by media identification attribute(s) and media format description(s). [STANDARD | ||||
S-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5583"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5583"/> | ||||
</reference> | ||||
<reference anchor="RFC6184" target="https://www.rfc-editor.org/info/rfc6 | ||||
184" quoteTitle="true" derivedAnchor="RFC6184"> | ||||
<front> | ||||
<title>RTP Payload Format for H.264 Video</title> | ||||
<author initials="Y.-K." surname="Wang" fullname="Y.-K. Wang"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Even" fullname="R. Even"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T." surname="Kristensen" fullname="T. Kristensen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Jesup" fullname="R. Jesup"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This memo describes an RTP Payload format for the IT | ||||
U-T Recommendation H.264 video codec and the technically identical ISO/IEC Inter | ||||
national Standard 14496-10 video codec, excluding the Scalable Video Coding (SVC | ||||
) extension and the Multiview Video Coding extension, for which the RTP payload | ||||
formats are defined elsewhere. The RTP payload format allows for packetization o | ||||
f one or more Network Abstraction Layer Units (NALUs), produced by an H.264 vide | ||||
o encoder, in each RTP payload. The payload format has wide applicability, as i | ||||
t supports applications from simple low bitrate conversational usage, to Interne | ||||
t video streaming with interleaved transmission, to high bitrate video-on-demand | ||||
.</t> | ||||
<t indent="0">This memo obsoletes RFC 3984. Changes from RFC 3984 | ||||
are summarized in Section 14. Issues on backward compatibility to RFC 3984 are | ||||
discussed in Section 15. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6184"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6184"/> | ||||
</reference> | ||||
<reference anchor="RFC6190" target="https://www.rfc-editor.org/info/rfc6 | ||||
190" quoteTitle="true" derivedAnchor="RFC6190"> | ||||
<front> | ||||
<title>RTP Payload Format for Scalable Video Coding</title> | ||||
<author initials="S." surname="Wenger" fullname="S. Wenger"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="Y.-K." surname="Wang" fullname="Y.-K. Wang"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T." surname="Schierl" fullname="T. Schierl"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Eleftheriadis" fullname="A. Eleftheri | ||||
adis"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This memo describes an RTP payload format for Scalab | ||||
le Video Coding (SVC) as defined in Annex G of ITU-T Recommendation H.264, which | ||||
is technically identical to Amendment 3 of ISO/IEC International Standard 14496 | ||||
-10. The RTP payload format allows for packetization of one or more Network Abs | ||||
traction Layer (NAL) units in each RTP packet payload, as well as fragmentation | ||||
of a NAL unit in multiple RTP packets. Furthermore, it supports transmission of | ||||
an SVC stream over a single as well as multiple RTP sessions. The payload forma | ||||
t defines a new media subtype name "H264-SVC", but is still backward compatible | ||||
to RFC 6184 since the base layer, when encapsulated in its own RTP stream, must | ||||
use the H.264 media subtype name ("H264") and the packetization method specified | ||||
in RFC 6184. The payload format has wide applicability in videoconferencing, I | ||||
nternet video streaming, and high-bitrate entertainment-quality video, among oth | ||||
ers. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6190"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6190"/> | ||||
</reference> | ||||
<reference anchor="RFC6236" target="https://www.rfc-editor.org/info/rfc6 | ||||
236" quoteTitle="true" derivedAnchor="RFC6236"> | ||||
<front> | ||||
<title>Negotiation of Generic Image Attributes in the Session Descri | ||||
ption Protocol (SDP)</title> | ||||
<author initials="I." surname="Johansson" fullname="I. Johansson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="K." surname="Jung" fullname="K. Jung"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This document proposes a new generic session setup a | ||||
ttribute to make it possible to negotiate different image attributes such as ima | ||||
ge size. A possible use case is to make it possible for a \%low-end \%hand- hel | ||||
d terminal to display video without the need to rescale the image, something tha | ||||
t may consume large amounts of memory and processing power. The document also h | ||||
elps to maintain an optimal bitrate for video as only the image size that is des | ||||
ired by the receiver is transmitted. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6236"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6236"/> | ||||
</reference> | ||||
<reference anchor="RFC6464" target="https://www.rfc-editor.org/info/rfc6 | ||||
464" quoteTitle="true" derivedAnchor="RFC6464"> | ||||
<front> | ||||
<title>A Real-time Transport Protocol (RTP) Header Extension for Cli | ||||
ent-to-Mixer Audio Level Indication</title> | ||||
<author initials="J." surname="Lennox" fullname="J. Lennox" role="ed | ||||
itor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Ivov" fullname="E. Ivov"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Marocco" fullname="E. Marocco"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="December"/> | ||||
<abstract> | ||||
<t indent="0">This document defines a mechanism by which packets o | ||||
f Real-time Transport Protocol (RTP) audio streams can indicate, in an RTP heade | ||||
r extension, the audio level of the audio sample carried in the RTP packet. In | ||||
large conferences, this can reduce the load on an audio mixer or other middlebox | ||||
that wants to forward only a few of the loudest audio streams, without requirin | ||||
g it to decode and measure every stream that is received. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6464"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6464"/> | ||||
</reference> | ||||
<reference anchor="RFC7104" target="https://www.rfc-editor.org/info/rfc7 | ||||
104" quoteTitle="true" derivedAnchor="RFC7104"> | ||||
<front> | ||||
<title>Duplication Grouping Semantics in the Session Description Pro | ||||
tocol</title> | ||||
<author initials="A." surname="Begen" fullname="A. Begen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="Y." surname="Cai" fullname="Y. Cai"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Ou" fullname="H. Ou"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2014" month="January"/> | ||||
<abstract> | ||||
<t indent="0">Packet loss is undesirable for real-time multimedia | ||||
sessions, but it can occur due to congestion or other unplanned network outages. | ||||
This is especially true for IP multicast networks, where packet loss patterns | ||||
can vary greatly between receivers. One technique that can be used to recover f | ||||
rom packet loss without incurring unbounded delay for all the receivers is to du | ||||
plicate the packets and send them in separate redundant streams. This document | ||||
defines the semantics for grouping redundant streams in the Session Description | ||||
Protocol (SDP). The semantics defined in this document are to be used with the S | ||||
DP Grouping Framework. Grouping semantics at the Synchronization Source (SSRC) | ||||
level are also defined in this document for RTP streams using SSRC multiplexing. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7104"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7104"/> | ||||
</reference> | ||||
<reference anchor="RFC7656" target="https://www.rfc-editor.org/info/rfc7 | ||||
656" quoteTitle="true" derivedAnchor="RFC7656"> | ||||
<front> | ||||
<title>A Taxonomy of Semantics and Mechanisms for Real-Time Transpor | ||||
t Protocol (RTP) Sources</title> | ||||
<author initials="J." surname="Lennox" fullname="J. Lennox"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="K." surname="Gross" fullname="K. Gross"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Nandakumar" fullname="S. Nandakumar"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G." surname="Salgueiro" fullname="G. Salgueiro"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Burman" fullname="B. Burman" role="ed | ||||
itor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2015" month="November"/> | ||||
<abstract> | ||||
<t indent="0">The terminology about, and associations among, Real- | ||||
time Transport Protocol (RTP) sources can be complex and somewhat opaque. This | ||||
document describes a number of existing and proposed properties and relationship | ||||
s among RTP sources and defines common terminology for discussing protocol entit | ||||
ies and their relationships.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7656"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7656"/> | ||||
</reference> | ||||
<reference anchor="RFC7667" target="https://www.rfc-editor.org/info/rfc7 | ||||
667" quoteTitle="true" derivedAnchor="RFC7667"> | ||||
<front> | ||||
<title>RTP Topologies</title> | ||||
<author initials="M." surname="Westerlund" fullname="M. Westerlund"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Wenger" fullname="S. Wenger"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2015" month="November"/> | ||||
<abstract> | ||||
<t indent="0">This document discusses point-to-point and multi-end | ||||
point topologies used in environments based on the Real-time Transport Protocol | ||||
(RTP). In particular, centralized topologies commonly employed in the video conf | ||||
erencing industry are mapped to the RTP terminology.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7667"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7667"/> | ||||
</reference> | ||||
<reference anchor="RFC7741" target="https://www.rfc-editor.org/info/rfc7 | ||||
741" quoteTitle="true" derivedAnchor="RFC7741"> | ||||
<front> | ||||
<title>RTP Payload Format for VP8 Video</title> | ||||
<author initials="P." surname="Westin" fullname="P. Westin"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Lundin" fullname="H. Lundin"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Glover" fullname="M. Glover"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Uberti" fullname="J. Uberti"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="F." surname="Galligan" fullname="F. Galligan"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2016" month="March"/> | ||||
<abstract> | ||||
<t indent="0">This memo describes an RTP payload format for the VP | ||||
8 video codec. The payload format has wide applicability, as it supports applica | ||||
tions from low-bitrate peer-to-peer usage to high-bitrate video conferences.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7741"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7741"/> | ||||
</reference> | ||||
<reference anchor="RFC7941" target="https://www.rfc-editor.org/info/rfc7 | ||||
941" quoteTitle="true" derivedAnchor="RFC7941"> | ||||
<front> | ||||
<title>RTP Header Extension for the RTP Control Protocol (RTCP) Sour | ||||
ce Description Items</title> | ||||
<author initials="M." surname="Westerlund" fullname="M. Westerlund"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Burman" fullname="B. Burman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Even" fullname="R. Even"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Zanaty" fullname="M. Zanaty"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2016" month="August"/> | ||||
<abstract> | ||||
<t indent="0">Source Description (SDES) items are normally transpo | ||||
rted in the RTP Control Protocol (RTCP). In some cases, it can be beneficial to | ||||
speed up the delivery of these items. The main case is when a new synchronizat | ||||
ion source (SSRC) joins an RTP session and the receivers need this source's iden | ||||
tity, relation to other sources, or its synchronization context, all of which ma | ||||
y be fully or partially identified using SDES items. To enable this optimizatio | ||||
n, this document specifies a new RTP header extension that can carry SDES items. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7941"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7941"/> | ||||
</reference> | ||||
<reference anchor="RFC8108" target="https://www.rfc-editor.org/info/rfc8 | ||||
108" quoteTitle="true" derivedAnchor="RFC8108"> | ||||
<front> | ||||
<title>Sending Multiple RTP Streams in a Single RTP Session</title> | ||||
<author initials="J." surname="Lennox" fullname="J. Lennox"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Westerlund" fullname="M. Westerlund"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="Q." surname="Wu" fullname="Q. Wu"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="March"/> | ||||
<abstract> | ||||
<t indent="0">This memo expands and clarifies the behavior of Real | ||||
-time Transport Protocol (RTP) endpoints that use multiple synchronization sourc | ||||
es (SSRCs). This occurs, for example, when an endpoint sends multiple RTP strea | ||||
ms in a single RTP session. This memo updates RFC 3550 with regard to handling | ||||
multiple SSRCs per endpoint in RTP sessions, with a particular focus on RTP Cont | ||||
rol Protocol (RTCP) behavior. It also updates RFC 4585 to change and clarify th | ||||
e calculation of the timeout of SSRCs and the inclusion of feedback messages.</t | ||||
> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8108"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8108"/> | ||||
</reference> | ||||
<reference anchor="RFC8627" target="https://www.rfc-editor.org/info/rfc8 | ||||
627" quoteTitle="true" derivedAnchor="RFC8627"> | ||||
<front> | ||||
<title>RTP Payload Format for Flexible Forward Error Correction (FEC | ||||
)</title> | ||||
<author initials="M." surname="Zanaty" fullname="M. Zanaty"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="V." surname="Singh" fullname="V. Singh"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Begen" fullname="A. Begen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G." surname="Mandyam" fullname="G. Mandyam"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2019" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This document defines new RTP payload formats for th | ||||
e Forward Error Correction (FEC) packets that are generated by the non-interleav | ||||
ed and interleaved parity codes from source media encapsulated in RTP. These par | ||||
ity codes are systematic codes (Flexible FEC, or "FLEX F | ||||
EC"), where a number of FEC repair packets are generated from a set of source pa | ||||
ckets from one or more source RTP streams. These FEC repair packets are sent in | ||||
a redundancy RTP stream separate from the source RTP stream(s) that carries the | ||||
source packets. RTP source packets that were lost in transmission can be recon | ||||
structed using the source and repair packets that were received. The non-interl | ||||
eaved and interleaved parity codes that are defined in this specification offer | ||||
a good protection against random and bursty packet losses, respectively, at a co | ||||
st of complexity. The RTP payload formats that are defined in this document add | ||||
ress scalability issues experienced with the earlier specifications and offer se | ||||
veral improvements. Due to these changes, the new payload formats are not backw | ||||
ard compatible with earlier specifications; however, endpoints that do not imple | ||||
ment this specification can still work by simply ignoring the FEC repair packets | ||||
.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8627"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8627"/> | ||||
</reference> | ||||
<reference anchor="RFC8872" target="https://www.rfc-editor.org/info/rfc8 | ||||
872" quoteTitle="true" derivedAnchor="RFC8872"> | ||||
<front> | ||||
<title>Guidelines for Using the Multiplexing Features of RTP to Supp | ||||
ort Multiple Media Streams</title> | ||||
<author initials="M" surname="Westerlund" fullname="Magnus Westerlun | ||||
d"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B" surname="Burman" fullname="Bo Burman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C" surname="Perkins" fullname="Colin Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H" surname="Alvestrand" fullname="Harald Alvestran | ||||
d"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R" surname="Even" fullname="Roni Even"> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8872"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8872"/> | ||||
</reference> | ||||
</references> | ||||
</references> | </references> | |||
<section anchor="sec-requirements" numbered="true" toc="include" removeInRFC | ||||
<section anchor="sec-requirements" title="Requirements"> | ="false" pn="section-appendix.a"> | |||
<t>The following requirements are met by the defined solution to support | <name slugifiedName="name-requirements">Requirements</name> | |||
the <xref target="sec-use-cases">use cases</xref>:<list style="hanging"> | <t indent="0" pn="section-appendix.a-1">The following requirements are met | |||
<t anchor="req-1" hangText="REQ-1:">Identification:<list | by the defined solution to support | |||
style="hanging"> | the <xref target="sec-use-cases" format="default" sectionFormat="of" deriv | |||
<t anchor="req-1.1" hangText="REQ-1.1:">It must be possible to | edContent="Section 3">use cases</xref>:</t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a-2"> | ||||
<dt pn="section-appendix.a-2.1">REQ-1:</dt> | ||||
<dd anchor="req-1" pn="section-appendix.a-2.2"> | ||||
<t indent="0" pn="section-appendix.a-2.2.1">Identification:</t> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a | ||||
-2.2.2"> | ||||
<dt pn="section-appendix.a-2.2.2.1">REQ-1.1:</dt> | ||||
<dd anchor="req-1.1" pn="section-appendix.a-2.2.2.2">It must be poss | ||||
ible to | ||||
identify a set of simulcasted RTP streams as originating from | identify a set of simulcasted RTP streams as originating from | |||
the same media source in SDP signaling.</t> | the same media source in SDP signaling.</dd> | |||
<dt pn="section-appendix.a-2.2.2.3">REQ-1.2:</dt> | ||||
<t anchor="req-1.2" hangText="REQ-1.2:">An RTP endpoint must be | <dd anchor="req-1.2" pn="section-appendix.a-2.2.2.4">An RTP endpoint | |||
capable of identifying the simulcast stream a received RTP | must be | |||
capable of identifying the simulcast stream that a received RTP | ||||
stream is associated with, knowing the content of the SDP | stream is associated with, knowing the content of the SDP | |||
signalling.</t> | signaling.</dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t anchor="req-2" hangText="REQ-2:">Transport usage. The solution | <dt pn="section-appendix.a-2.3">REQ-2:</dt> | |||
must work when using:<list style="hanging"> | <dd anchor="req-2" pn="section-appendix.a-2.4"> | |||
<t anchor="req-2.1" hangText="REQ-2.1:">Legacy SDP with separate | <t indent="0" pn="section-appendix.a-2.4.1">Transport usage. The solut | |||
media transports per SDP media description.</t> | ion | |||
must work when using:</t> | ||||
<t anchor="req-2.2" hangText="REQ-2.2:"><xref | <dl newline="false" spacing="normal" indent="3" pn="section-appendix.a | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">Bundled</xref> | -2.4.2"> | |||
SDP media descriptions.</t> | <dt pn="section-appendix.a-2.4.2.1">REQ-2.1:</dt> | |||
</list></t> | <dd anchor="req-2.1" pn="section-appendix.a-2.4.2.2">Legacy SDP with | |||
separate | ||||
<t anchor="req-3" hangText="REQ-3:">Capability negotiation. It must | media transports per SDP media description.</dd> | |||
be possible that:<list style="hanging"> | <dt pn="section-appendix.a-2.4.2.3">REQ-2.2:</dt> | |||
<t anchor="req-3.1" hangText="REQ-3.1:">Sender can express | <dd anchor="req-2.2" pn="section-appendix.a-2.4.2.4"> | |||
capability of sending simulcast.</t> | <xref target="RFC8843" format="default" sectionFormat="of" derived | |||
Content="RFC8843">Bundled</xref> | ||||
<t anchor="req-3.2" hangText="REQ-3.2:">Receiver can express | SDP media descriptions.</dd> | |||
capability of receiving simulcast.</t> | </dl> | |||
</dd> | ||||
<t anchor="req-3.3" hangText="REQ-3.3:">Sender can express | <dt pn="section-appendix.a-2.5">REQ-3:</dt> | |||
maximum number of simulcast streams that can be provided.</t> | <dd anchor="req-3" pn="section-appendix.a-2.6"> | |||
<t indent="0" pn="section-appendix.a-2.6.1">Capability negotiation. Th | ||||
<t anchor="req-3.4" hangText="REQ-3.4:">Receiver can express | e | |||
maximum number of simulcast streams that can be received.</t> | following must be possible:</t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a | ||||
<t anchor="req-3.5" hangText="REQ-3.5:">Sender can detail the | -2.6.2"> | |||
<dt pn="section-appendix.a-2.6.2.1">REQ-3.1:</dt> | ||||
<dd anchor="req-3.1" pn="section-appendix.a-2.6.2.2">The sender can | ||||
express | ||||
capability of sending simulcast.</dd> | ||||
<dt pn="section-appendix.a-2.6.2.3">REQ-3.2:</dt> | ||||
<dd anchor="req-3.2" pn="section-appendix.a-2.6.2.4">The receiver ca | ||||
n express | ||||
capability of receiving simulcast.</dd> | ||||
<dt pn="section-appendix.a-2.6.2.5">REQ-3.3:</dt> | ||||
<dd anchor="req-3.3" pn="section-appendix.a-2.6.2.6">The sender can | ||||
express | ||||
the maximum number of simulcast streams that can be | ||||
provided.</dd> | ||||
<dt pn="section-appendix.a-2.6.2.7">REQ-3.4:</dt> | ||||
<dd anchor="req-3.4" pn="section-appendix.a-2.6.2.8">The receiver ca | ||||
n express the | ||||
maximum number of simulcast streams that can be received.</dd> | ||||
<dt pn="section-appendix.a-2.6.2.9">REQ-3.5:</dt> | ||||
<dd anchor="req-3.5" pn="section-appendix.a-2.6.2.10">The sender can | ||||
detail the | ||||
characteristics of the simulcast streams that can be | characteristics of the simulcast streams that can be | |||
provided.</t> | provided.</dd> | |||
<dt pn="section-appendix.a-2.6.2.11">REQ-3.6:</dt> | ||||
<t anchor="req-3.6" hangText="REQ-3.6:">Receiver can detail the | <dd anchor="req-3.6" pn="section-appendix.a-2.6.2.12">The receiver c | |||
an detail the | ||||
characteristics of the simulcast streams that it prefers to | characteristics of the simulcast streams that it prefers to | |||
receive.</t> | receive.</dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t anchor="req-4" hangText="REQ-4:">Distinguishing features. It must | <dt pn="section-appendix.a-2.7">REQ-4:</dt> | |||
<dd anchor="req-4" pn="section-appendix.a-2.8">Distinguishing features. | ||||
It must | ||||
be possible to have different simulcast streams use different codec | be possible to have different simulcast streams use different codec | |||
parameters, as can be expressed by SDP format values and RTP payload | parameters, as can be expressed by SDP format values and RTP payload | |||
types.</t> | types.</dd> | |||
<dt pn="section-appendix.a-2.9">REQ-5:</dt> | ||||
<t anchor="req-5" hangText="REQ-5:">Compatibility. It must be | <dd anchor="req-5" pn="section-appendix.a-2.10"> | |||
<t indent="0" pn="section-appendix.a-2.10.1">Compatibility. It must be | ||||
possible to use simulcast in combination with other RTP mechanisms | possible to use simulcast in combination with other RTP mechanisms | |||
that generate additional RTP streams:<list style="hanging"> | that generate additional RTP streams:</t> | |||
<t anchor="req-5.1" hangText="REQ-5.1:"><xref | <dl newline="false" spacing="normal" indent="3" pn="section-appendix.a | |||
target="RFC4588">RTP Retransmission</xref>.</t> | -2.10.2"> | |||
<dt pn="section-appendix.a-2.10.2.1">REQ-5.1:</dt> | ||||
<t anchor="req-5.2" hangText="REQ-5.2:"><xref | <dd anchor="req-5.1" pn="section-appendix.a-2.10.2.2"> | |||
target="RFC5109">RTP Forward Error Correction</xref>.</t> | <xref target="RFC4588" format="default" sectionFormat="of" derived | |||
Content="RFC4588">RTP retransmission</xref>.</dd> | ||||
<t anchor="req-5.3" hangText="REQ-5.3:">Related payload types | <dt pn="section-appendix.a-2.10.2.3">REQ-5.2:</dt> | |||
such as audio Comfort Noise and/or DTMF.</t> | <dd anchor="req-5.2" pn="section-appendix.a-2.10.2.4"> | |||
<xref target="RFC5109" format="default" sectionFormat="of" derived | ||||
<t hangText="REQ-5.4:">A single simulcast stream can consist of | Content="RFC5109">RTP Forward Error Correction</xref>.</dd> | |||
<dt pn="section-appendix.a-2.10.2.5">REQ-5.3:</dt> | ||||
<dd anchor="req-5.3" pn="section-appendix.a-2.10.2.6">Related payloa | ||||
d types | ||||
such as audio Comfort Noise and/or DTMF.</dd> | ||||
<dt pn="section-appendix.a-2.10.2.7">REQ-5.4:</dt> | ||||
<dd pn="section-appendix.a-2.10.2.8">A single simulcast stream can c | ||||
onsist of | ||||
multiple RTP streams, to support codecs where a dependent stream | multiple RTP streams, to support codecs where a dependent stream | |||
is dependent on a set of encoded and dependent streams, each | is dependent on a set of encoded and dependent streams, each | |||
potentially carried in their own RTP stream.</t> | potentially carried in their own RTP stream.</dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t anchor="req-6" hangText="REQ-6:">Interoperability. The solution | <dt pn="section-appendix.a-2.11">REQ-6:</dt> | |||
must be possible to use in:<list style="hanging"> | <dd anchor="req-6" pn="section-appendix.a-2.12"> | |||
<t anchor="req-6.1" hangText="REQ-6.1:">Interworking with | <t indent="0" pn="section-appendix.a-2.12.1">Interoperability. The sol | |||
non-simulcast legacy clients using a single media source per | ution | |||
media type.</t> | must be possible to use in:</t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a | ||||
<t anchor="req-6.2" hangText="REQ-6.2:">WebRTC environment with | -2.12.2"> | |||
a single media source per SDP media description.</t> | <dt pn="section-appendix.a-2.12.2.1">REQ-6.1:</dt> | |||
</list></t> | <dd anchor="req-6.1" pn="section-appendix.a-2.12.2.2">Interworking w | |||
</list></t> | ith | |||
nonsimulcast legacy clients using a single media source per | ||||
media type.</dd> | ||||
<dt pn="section-appendix.a-2.12.2.3">REQ-6.2:</dt> | ||||
<dd anchor="req-6.2" pn="section-appendix.a-2.12.2.4">WebRTC environ | ||||
ment with | ||||
a single media source per SDP media description.</dd> | ||||
</dl> | ||||
</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section anchor="sec-ack" numbered="false" toc="include" removeInRFC="false" | ||||
<section title="Changes From Earlier Versions"> | pn="section-appendix.b"> | |||
<t>NOTE TO RFC EDITOR: Please remove this section prior to | <name slugifiedName="name-acknowledgements">Acknowledgements</name> | |||
publication.</t> | <t indent="0" pn="section-appendix.b-1">The authors would like to thank <c | |||
ontact fullname="Bernard Aboba"/>, <contact fullname="Thomas Belling"/>, <contac | ||||
<section title="Modifications Between WG Version -13 and -14"> | t fullname="Roni Even"/>, <contact fullname="Adam Roach"/>, <contact fullname="I | |||
<t><list style="symbols"> | ñaki Baz Castillo"/>, | |||
<t>c= and t= line order corrected in SDP examples</t> | <contact fullname="Paul Kyzivat"/>, and <contact fullname="Arun Arun | |||
</list></t> | achalam"/> for the feedback they provided during the development of | |||
</section> | this document.</t> | |||
</section> | ||||
<section title="Modifications Between WG Version -12 and -13"> | <section anchor="sec-contributors" numbered="false" toc="include" removeInRF | |||
<t><list style="symbols"> | C="false" pn="section-appendix.c"> | |||
<t>Examples corrected to follow RID ABNF</t> | <name slugifiedName="name-contributors">Contributors</name> | |||
<t indent="0" pn="section-appendix.c-1"><contact fullname="Morgan Lindqvis | ||||
<t>Example <xref target="fig-ms-offer"/> now comments on priority | t"/> and <contact fullname="Fredrik Jansson"/>, both from Ericsson, have c | |||
for second media source.</t> | ontributed with important material | |||
to the first draft versions of this document. <contact fullname="Robert | ||||
<t>Clarified a SHOULD limitation.</t> | Hanton"/> and <contact fullname="Cullen Jennings"/> from Cisco, <contact ful | |||
lname="Peter Thatcher"/> from Google, and <contact fullname="Adam Roach"/> | ||||
<t>Added urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id in | from Mozilla contributed significantly to subsequent | |||
examples with RTX.</t> | versions.</t> | |||
</section> | ||||
<t>ABNF now uses RFC 7405 to indicate case sensitivity</t> | <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | |||
="include" pn="section-appendix.d"> | ||||
<t>Various minor editorials and nits.</t> | <name slugifiedName="name-authors-addresses">Authors' Addresses</name> | |||
</list></t> | <author fullname="Bo Burman" initials="B." surname="Burman"> | |||
</section> | <organization showOnFrontPage="true">Ericsson</organization> | |||
<address> | ||||
<section title="Modifications Between WG Version -11 and -12"> | <postal> | |||
<t><list style="symbols"> | <street>Gronlandsgatan 31</street> | |||
<t>Modified Normative statement regarding RTP stream duplication | <city>SE-164 60 Stockholm</city> | |||
in Section 5.2.</t> | <region/> | |||
<code/> | ||||
<t>Clarified assumption about use of congestion control by | <country>Sweden</country> | |||
applications.</t> | </postal> | |||
<phone/> | ||||
<t>Changed to use RFC 8174 boilerplate instead of RFC 2119.</t> | <email>bo.burman@ericsson.com</email> | |||
<uri/> | ||||
<t>Clarified explanation of syntax for simulcast attribute in | </address> | |||
Section 4.</t> | </author> | |||
<author fullname="Magnus Westerlund" initials="M." surname="Westerlund"> | ||||
<t>Editorial clarification in Section 5.2 and 5.3.2.</t> | <organization showOnFrontPage="true">Ericsson</organization> | |||
<address> | ||||
<t>Various minor editorials and nits.</t> | <postal> | |||
</list></t> | <street>Torshamnsgatan 23</street> | |||
</section> | <city>SE-164 83 Stockholm</city> | |||
<country>Sweden</country> | ||||
<section title="Modifications Between WG Version -10 and -11"> | </postal> | |||
<t><list style="symbols"> | <email>magnus.westerlund@ericsson.com</email> | |||
<t>Added new SDP example section on Simulcast and Redundancy, | </address> | |||
including both RED (RFC2198), RTP RTX (RFC4588), and FEC | </author> | |||
(draft-ietf-payload-flexible-fec-scheme).</t> | <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar"> | |||
<organization showOnFrontPage="true">Cisco</organization> | ||||
<t>Removed restriction that "related" payload formats in an RTP | <address> | |||
stream (such as CN and DTMF) must not have their own rid-id, since | <postal> | |||
there is no reason to forbid this and corresponding clarification | <street>170 West Tasman Drive</street> | |||
is made in draft-ietf-mmusic-rid.</t> | <city>San Jose</city> | |||
<region>CA</region> | ||||
<t>Removed any mention of source-specific signaling and the | <code>95134</code> | |||
reference to RFC5576, since draft-ietf-mmusic-rid is not defined | <country>United States of America</country> | |||
for source-specific signaling.</t> | </postal> | |||
<phone/> | ||||
<t>Changed some SDP examples to use a=rid restrictions instead of | <email>snandaku@cisco.com</email> | |||
a=imageattr.</t> | <uri/> | |||
</address> | ||||
<t>Changed reference from the obsoleted RFC 5285 to RFC 8285.</t> | </author> | |||
</list></t> | <author fullname="Mo Zanaty" initials="M." surname="Zanaty"> | |||
</section> | <organization showOnFrontPage="true">Cisco</organization> | |||
<address> | ||||
<section title="Modifications Between WG Version -09 and -10"> | <postal> | |||
<t><list style="symbols"> | <street>170 West Tasman Drive</street> | |||
<t>Amended overview section with a bit more explanation on the | <city>San Jose</city> | |||
examples, and added an rid-id alternative for one of the | <region>CA</region> | |||
streams.</t> | <code>95134</code> | |||
<country>United States of America</country> | ||||
<t>Removed SCID also from the Terminology section, which was | </postal> | |||
forgotten in -09 when changing SCID to rid-id.</t> | <phone/> | |||
</list></t> | <email>mzanaty@cisco.com</email> | |||
</section> | <uri/> | |||
</address> | ||||
<section title="Modifications Between WG Version -08 and -09"> | </author> | |||
<t><list style="symbols"> | ||||
<t>Changed SCID to rid-id, to align with ietf-draft-mmusic-rid | ||||
naming.</t> | ||||
<t>Changed Overview to be based on examples and shortened it.</t> | ||||
<t>Changed semantics of initially paused rid-id in modified SDP | ||||
offers from requiring it to follow actual RFC 7728 pause state to | ||||
an informational offerer's opinion at the time of offer creation, | ||||
not in any way overriding or amending RFC 7728 signaling.</t> | ||||
<t>Replaced text on ignoring all but the first of multiple | ||||
"a=simulcast" lines in a media description with mandating that at | ||||
most one "a=simulcast" line is included.</t> | ||||
<t>Clarified with a note that, for the case it is clear from the | ||||
SDP that RTP PT uniquely maps to RtpStreamId, an RTP receiver can | ||||
use RTP PT to relate simulcast streams.</t> | ||||
<t>Moved Section 4 Requirements to become Appendix A.</t> | ||||
<t>Editorial corrections and clarifications.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -07 and -08"> | ||||
<t><list style="symbols"> | ||||
<t>Correcting syntax of SDP examples in section 6.6.1, as found by | ||||
Inaki Baz Castillo.</t> | ||||
<t>Changing ABNF to only define the sc-value, not the SDP | ||||
attribute itself, as suggested by Paul Kyzivat.</t> | ||||
<t>Changing I-D reference to newly published RFC 8108.</t> | ||||
<t>Adding list of modifications between -06 and -07.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -06 and -07"> | ||||
<t><list style="symbols"> | ||||
<t>A scope clarification, as result of the discussion with Roni | ||||
Even.</t> | ||||
<t>A reformulation of the identification requirements for | ||||
simulcast stream.</t> | ||||
<t>Correcting the statement related to source specific signalling | ||||
(RFC 5576) to address Roni Even's comment.</t> | ||||
<t>Update of the last paragraph in Section 6.2 regarding simulcast | ||||
stream differences as well as forbidding multiple instances of the | ||||
same SCID within a single a=simulcast line.</t> | ||||
<t>Removal of note in Section 6.4 as result of issue raised by | ||||
Roni Even.</t> | ||||
<t>Use of "m=" has been changed to media description and a few | ||||
other editorial improvements and clarifications.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -05 and -06"> | ||||
<t><list style="symbols"> | ||||
<t>Added section on RTP Aspects</t> | ||||
<t>Added a requirement (5-4) on that capability exchange must be | ||||
capable of handling multi RTP stream cases.</t> | ||||
<t>Added extmap attribute also on first signalling example as it | ||||
is a recommended to use mechanism.</t> | ||||
<t>Clarified the definition of the simulcast attribute and how | ||||
simulcast streams relates to simulcast formats and SCIDs.</t> | ||||
<t>Updated References list and moved around some references | ||||
between informative and normative categories.</t> | ||||
<t>Editorial improvements and corrections.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -04 and -05"> | ||||
<t><list style="symbols"> | ||||
<t>Aligned with recent changes in draft-ietf-mmusic-rid and | ||||
draft-ietf-avtext-rid.</t> | ||||
<t>Modified the SDP offer/answer section to follow the generally | ||||
accepted structure, also adding a brief text on modifying the | ||||
session that is aligned with draft-ietf-mmusic-rid.</t> | ||||
<t>Improved text around simulcast stream identification (as | ||||
opposed to the simulcast stream itself) to consistently use the | ||||
acronym SCID and defined that in the Terminology section.</t> | ||||
<t>Changed references for RTP-level pause/resume and VP8 payload | ||||
format that are now published as RFC.</t> | ||||
<t>Improved IANA registration text.</t> | ||||
<t>Removed unused reference to | ||||
draft-ietf-payload-flexible-fec-scheme.</t> | ||||
<t>Editorial improvements and corrections.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -03 and -04"> | ||||
<t><list style="symbols"> | ||||
<t>Changed to only use RID identification, as was consensus during | ||||
IETF 94.</t> | ||||
<t>ABNF improvements.</t> | ||||
<t>Clarified offer-answer rules for initially paused streams.</t> | ||||
<t>Changed references for RTP topologies and RTP taxonomy | ||||
documents that are now published as RFC.</t> | ||||
<t>Added reference to the new RID draft in AVTEXT.</t> | ||||
<t>Re-structured section 6 to provide an easy reference by the | ||||
updated IANA section.</t> | ||||
<t>Added a sub-section 7.1 with a discussion of bitrate | ||||
adaptation.</t> | ||||
<t>Editorial improvements.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -02 and -03"> | ||||
<t><list style="symbols"> | ||||
<t>Removed text on multicast / broadcast from use cases, since it | ||||
is not supported by the solution.</t> | ||||
<t>Removed explicit references to unified plan draft.</t> | ||||
<t>Added possibility to initiate simulcast streams in paused | ||||
mode.</t> | ||||
<t>Enabled an offerer to offer multiple stream identification (pt | ||||
or rid) methods and have the answerer choose which to use.</t> | ||||
<t>Added a preference indication also in send direction | ||||
offers.</t> | ||||
<t>Added a section on limitations of the current proposal, | ||||
including identification method specific limitations.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -01 and -02"> | ||||
<t><list style="symbols"> | ||||
<t>Relying on the new RID solution for codec constraints and | ||||
configuration identification. This has resulted in changes in | ||||
syntax to identify if pt or RID is used to describe the simulcast | ||||
stream.</t> | ||||
<t>Renamed simulcast version and simulcast version alternative to | ||||
simulcast stream and simulcast format respectively, and improved | ||||
definitions for them.</t> | ||||
<t>Clarification that it is possible to switch between simulcast | ||||
version alternatives, but that only a single one be used at any | ||||
point in time.</t> | ||||
<t>Changed the definition so that ordering of simulcast formats | ||||
for a specific simulcast stream do have a preference order.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -00 and -01"> | ||||
<t><list style="symbols"> | ||||
<t>No changes. Only preventing expiry.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between Individual Version -00 and WG Versio | ||||
n -00"> | ||||
<t><list style="symbols"> | ||||
<t>Added this appendix.</t> | ||||
</list></t> | ||||
</section> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 257 change blocks. | ||||
1238 lines changed or deleted | 2443 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |