rfc8854xml2.original.xml   rfc8854.xml 
<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse
nsus="true" docName="draft-ietf-rtcweb-fec-10" indexInclude="true" ipr="trust200
902" number="8854" prepTime="2021-01-17T12:21:57" scripts="Common,Latin" sortRef
s="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml
:lang="en">
<link href="https://datatracker.ietf.org/doc/draft-ietf-rtcweb-fec-10" rel="pr
ev"/>
<link href="https://dx.doi.org/10.17487/rfc8854" rel="alternate"/>
<link href="urn:issn:2070-1721" rel="alternate"/>
<front>
<title abbrev="WebRTC FEC">WebRTC Forward Error Correction Requirements</tit
le>
<seriesInfo name="RFC" value="8854" stream="IETF"/>
<author fullname="Justin Uberti" initials="J." surname="Uberti">
<organization showOnFrontPage="true">Google</organization>
<address>
<postal>
<street>747 6th St S</street>
<city>Kirkland</city>
<region>WA</region>
<code>98033</code>
<country>United States of America</country>
</postal>
<email>justin@uberti.name</email>
</address>
</author>
<date month="01" year="2021"/>
<area>RAI</area>
<keyword>RTP</keyword>
<keyword>FEC</keyword>
<abstract pn="section-abstract">
<t indent="0" pn="section-abstract-1">This document provides information a
nd requirements for the use of Forward
Error Correction (FEC) by WebRTC implementations.</t>
</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/rfc8854" 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" keepWithNext="true" pn="section-toc.1-1.2.1"><xref der
ivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref
derivedContent="" format="title" sectionFormat="of" target="name-terminology">T
erminology</xref></t>
</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-types-of-fec">Types of FEC</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" keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><
xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.
1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-se
parate-fec-stream">Separate FEC Stream</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-redundant-encoding">Re
dundant Encoding</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-codec-specific-in-band
-fec">Codec-Specific In-Band FEC</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-fec-for-audio-content">FEC for Aud
io Content</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.4.2">
<li pn="section-toc.1-1.4.2.1">
<t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent=
"4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-recommended-mechanism"
>Recommended Mechanism</xref></t>
</li>
<li pn="section-toc.1-1.4.2.2">
<t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent=
"4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-negotiating-support">N
egotiating Support</xref></t>
</li>
</ul>
</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-fec-for-video-content">FEC for Vid
eo Content</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-recommended-mechanism-
2">Recommended Mechanism</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-negotiating-support-2"
>Negotiating Support</xref></t>
</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-fec-for-application-content">FEC f
or Application Content</xref></t>
</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-implementation-requirements">Imple
mentation Requirements</xref></t>
</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-adaptive-use-of-fec">Adaptive Use
of FEC</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-security-considerations">Security
Considerations</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-iana-considerations">IANA Consid
erations</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="" form
at="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="
" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgeme
nts</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-authors-address">Author's Addre
ss</xref></t>
</li>
</ul>
</section>
</toc>
</front>
<middle>
<section numbered="true" toc="include" removeInRFC="false" pn="section-1">
<name slugifiedName="name-introduction">Introduction</name>
<t indent="0" pn="section-1-1">In situations where packet loss is high, or
perfect media quality is
essential, Forward Error Correction (FEC) can be used to proactively
recover from packet losses. This specification provides guidance on which
FEC mechanisms to use, and how to use them, for WebRTC
implementations.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-2">
<name slugifiedName="name-terminology">Terminology</name>
<t indent="0" pn="section-2-1">The key words "<bcp14>MUST</bcp14>", "<bcp1
4>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>
SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp1
4>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are t
o be interpreted as
described in BCP 14 <xref target="RFC2119" format="default" sectionFormat=
"of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionF
ormat="of" derivedContent="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-3">
<name slugifiedName="name-types-of-fec">Types of FEC</name>
<t indent="0" pn="section-3-1">FEC describes the sending of redundant info
rmation in an outgoing
packet stream so that information can still be recovered even in the event
of packet loss. There are multiple ways this can be accomplished
for RTP media streams <xref target="RFC3550" format="default" sectionForma
t="of" derivedContent="RFC3550"/>; this section enumerates
the various mechanisms available and describes their trade-offs.</t>
<section numbered="true" toc="include" removeInRFC="false" pn="section-3.1
">
<name slugifiedName="name-separate-fec-stream">Separate FEC Stream</name
>
<t indent="0" pn="section-3.1-1">This approach, as described in <xref ta
rget="RFC5956" sectionFormat="comma" section="4.3" format="default" derivedLink=
"https://rfc-editor.org/rfc/rfc5956#section-4.3" derivedContent="RFC5956"/>,
sends FEC packets as an independent RTP stream with its own
synchronization source (SSRC) <xref target="RFC3550" format="default" se
ctionFormat="of" derivedContent="RFC3550"/> and payload
type, multiplexed with the primary encoding. While this approach can
protect multiple packets of the
primary encoding with a single FEC packet, each FEC packet will have its
own IP/UDP/RTP/FEC header, and this overhead can be excessive in some
cases, e.g., when protecting each primary packet with a FEC packet.</t>
<t indent="0" pn="section-3.1-2">This approach allows for recovery of en
tire RTP packets, including
the full RTP header.</t>
</section>
<section anchor="redundant-encoding" numbered="true" toc="include" removeI
nRFC="false" pn="section-3.2">
<name slugifiedName="name-redundant-encoding">Redundant Encoding</name>
<t indent="0" pn="section-3.2-1">This approach, as described in
<xref target="RFC2198" format="default" sectionFormat="of" derivedConten
t="RFC2198"/>, allows for redundant data to be piggybacked
on an existing primary encoding, all in a single packet. This redundant
data may be an exact copy of a previous payload, or for codecs that
support variable-bitrate encodings, the redundant data may possibly be a
smaller, lower-quality
representation. In certain cases, the redundant data could include
encodings of multiple prior audio frames.</t>
<t indent="0" pn="section-3.2-2">Since there is only a single set of pac
ket headers, this approach
allows for a very efficient representation of primary and redundant data
.
However, this savings is only realized when the data all fits into a
single packet (i.e. the size is less than a MTU). As a result, this
approach is generally not useful for video content.</t>
<t indent="0" pn="section-3.2-3">As described in
<xref target="RFC2198" sectionFormat="comma" section="4" format="default
" derivedLink="https://rfc-editor.org/rfc/rfc2198#section-4" derivedContent="RFC
2198"/>, this approach cannot recover
certain parts of the RTP header, including the marker bit, contributing
source (CSRC)
information, and header extensions.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-3.3
">
<name slugifiedName="name-codec-specific-in-band-fec">Codec-Specific In-
Band FEC</name>
<t indent="0" pn="section-3.3-1">Some audio codecs, notably Opus
<xref target="RFC6716" format="default" sectionFormat="of" derivedConten
t="RFC6716"/> and Adaptive Multi-Rate (AMR)
<xref target="RFC4867" format="default" sectionFormat="of" derivedConten
t="RFC4867"/>, support their own in-band FEC mechanism,
where redundant data is included in the codec payload. This is similar
to the redundant encoding mechanism described above, but as it adds no
additional framing, it can be slightly more efficient.</t>
<t indent="0" pn="section-3.3-2">For Opus, audio frames deemed important
are re-encoded at a lower
bitrate and appended to the next payload, allowing partial recovery
of a lost packet. This scheme is fairly efficient; experiments
performed indicate that when Opus FEC is used, the overhead imposed is
only about 20-30%, depending on the amount of protection needed. Note
that this mechanism can only carry redundancy information for the
immediately preceding audio frame; thus the decoder cannot fully recover
multiple consecutive lost packets, which can be a problem on wireless
networks. See
<xref target="RFC6716" sectionFormat="comma" section="2.1.7" format="def
ault" derivedLink="https://rfc-editor.org/rfc/rfc6716#section-2.1.7" derivedCont
ent="RFC6716"/>,
and <xref target="OpusFEC" format="default" sectionFormat="of" derivedCo
ntent="OpusFEC">this Opus mailing list post</xref>
for more details.</t>
<t indent="0" pn="section-3.3-3">For AMR and AMR-Wideband (AMR-WB), pack
ets can contain copies or lower-quality
encodings of multiple prior audio frames. See
<xref target="RFC4867" sectionFormat="comma" section="3.7.1" format="def
ault" derivedLink="https://rfc-editor.org/rfc/rfc4867#section-3.7.1" derivedCont
ent="RFC4867"/>,
for details on this mechanism.</t>
<t indent="0" pn="section-3.3-4">In-band FEC mechanisms cannot recover a
ny of the RTP header.</t>
</section>
</section>
<section anchor="audio-fec" numbered="true" toc="include" removeInRFC="false
" pn="section-4">
<name slugifiedName="name-fec-for-audio-content">FEC for Audio Content</na
me>
<t indent="0" pn="section-4-1">The following section provides guidance on
how to best use FEC for
transmitting audio data. As indicated in
<xref target="adaptive-fec" format="default" sectionFormat="of" derivedCon
tent="Section 8"/> below, FEC should only be activated if
network conditions warrant it, or upon explicit application request.</t>
<section numbered="true" toc="include" removeInRFC="false" pn="section-4.1
">
<name slugifiedName="name-recommended-mechanism">Recommended Mechanism</
name>
<t indent="0" pn="section-4.1-1">When using variable-bitrate codecs with
out an internal FEC,
redundant encoding
(as described in <xref target="redundant-encoding" format="default" sect
ionFormat="of" derivedContent="Section 3.2"/>)
with lower-fidelity
version(s) of the previous packet(s) is <bcp14>RECOMMENDED</bcp14>. This
provides
reasonable protection of the payload with only moderate bitrate
increase, as the redundant encodings can be significantly smaller than
the primary encoding.</t>
<t indent="0" pn="section-4.1-2">When using the Opus codec, use of the b
uilt-in Opus FEC mechanism is
<bcp14>RECOMMENDED</bcp14>. This provides reasonable protection of the a
udio stream
against individual losses, with minimal overhead. Note that, as
indicated above, the built-in Opus FEC only provides single-frame
redundancy; if multi-packet protection is needed, the aforementioned
redundant encoding with reduced-bitrate Opus encodings
<bcp14>SHOULD</bcp14> be used instead.</t>
<t indent="0" pn="section-4.1-3">When using the AMR/AMR-WB codecs, use o
f their built-in FEC
mechanism is <bcp14>RECOMMENDED</bcp14>. This provides slightly more eff
icient
protection of the audio stream than redundant encoding does.</t>
<t indent="0" pn="section-4.1-4">When using constant-bitrate codecs, e.g
.,
PCMU <xref target="RFC5391" format="default" sectionFormat="of" derivedC
ontent="RFC5391"/>, redundant encoding <bcp14>MAY</bcp14> be used, but
this will result in a potentially significant bitrate increase, and
suddenly increasing bitrate to deal with losses from congestion
may actually make things worse.</t>
<t indent="0" pn="section-4.1-5">Because of the lower packet rate of aud
io encodings, usually a
single packet per frame, use of a separate FEC stream comes with a
higher overhead than other mechanisms, and therefore is <bcp14>NOT RECOM
MENDED</bcp14>.</t>
<t indent="0" pn="section-4.1-6">As mentioned above, the recommended mec
hanisms do not allow recovery
of parts of the RTP header that may be important in certain audio
applications, e.g., CSRCs and RTP header extensions like those
specified in
<xref target="RFC6464" format="default" sectionFormat="of" derivedConten
t="RFC6464"/> and
<xref target="RFC6465" format="default" sectionFormat="of" derivedConten
t="RFC6465"/>. Implementations <bcp14>SHOULD</bcp14> account for this and
attempt to approximate this information, using an approach similar to
those described in
<xref target="RFC2198" sectionFormat="comma" section="4" format="default
" derivedLink="https://rfc-editor.org/rfc/rfc2198#section-4" derivedContent="RFC
2198"/>, and
<xref target="RFC6464" sectionFormat="comma" section="5" format="default
" derivedLink="https://rfc-editor.org/rfc/rfc6464#section-5" derivedContent="RFC
6464"/>.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-4.2
">
<name slugifiedName="name-negotiating-support">Negotiating Support</name
>
<t indent="0" pn="section-4.2-1">Support for redundant encoding of a giv
en RTP stream <bcp14>SHOULD</bcp14> be
indicated by including audio/red
<xref target="RFC2198" format="default" sectionFormat="of" derivedConten
t="RFC2198"/> as an additional supported media type for the
associated "m=" section in the SDP offer
<xref target="RFC3264" format="default" sectionFormat="of" derivedConten
t="RFC3264"/>. Answerers can reject the use of redundant
encoding by not including the audio/red media type in the corresponding
"m=" section in the SDP answer.</t>
<t indent="0" pn="section-4.2-2">Support for codec-specific FEC mechanis
ms are typically indicated
via "a=fmtp" parameters.</t>
<t indent="0" pn="section-4.2-3">For Opus, a receiver <bcp14>MUST</bcp14
> indicate that it is prepared to use
incoming FEC data with the "useinbandfec=1" parameter, as specified in
<xref target="RFC7587" format="default" sectionFormat="of" derivedConten
t="RFC7587"/>. This parameter is declarative and can be
negotiated separately for either media direction.</t>
<t indent="0" pn="section-4.2-4">For AMR/AMR-WB, support for redundant e
ncoding, and the maximum
supported depth, are controlled by the "max-red" parameter, as
specified in
<xref target="RFC4867" sectionFormat="comma" section="8.1" format="defau
lt" derivedLink="https://rfc-editor.org/rfc/rfc4867#section-8.1" derivedContent=
"RFC4867"/>.
Receivers <bcp14>MUST</bcp14> include this
parameter, and set it to an appropriate value, as specified in
<xref target="TS.26114" format="default" sectionFormat="of" derivedConte
nt="TS.26114"/>, Table 6.3.</t>
</section>
</section>
<section anchor="video-fec" numbered="true" toc="include" removeInRFC="false
" pn="section-5">
<name slugifiedName="name-fec-for-video-content">FEC for Video Content</na
me>
<t indent="0" pn="section-5-1">The following section provides guidance on
how to best use FEC for
transmitting video data. As indicated in
<xref target="adaptive-fec" format="default" sectionFormat="of" derivedCon
tent="Section 8"/> below, FEC should only be activated if
network conditions warrant it, or upon explicit application request.</t>
<section numbered="true" toc="include" removeInRFC="false" pn="section-5.1
">
<name slugifiedName="name-recommended-mechanism-2">Recommended Mechanism
</name>
<t indent="0" pn="section-5.1-1">Video frames, due to their size, often
require multiple RTP packets.
As discussed above, a separate FEC stream can protect multiple packets
with a single FEC packet. In addition, the Flexible FEC mechanism
described in
<xref target="RFC8627" format="default" sectionFormat="of" derivedConten
t="RFC8627"/> is also capable
of protecting multiple RTP streams via a single FEC stream, including
all the streams that are part of a BUNDLE group
<xref target="RFC8843" format="default" sectionFormat="of" derivedConten
t="RFC8843"/>. As a
result, for video content, use of a separate FEC stream with the
Flexible FEC RTP payload format is <bcp14>RECOMMENDED</bcp14>.</t>
<t indent="0" pn="section-5.1-2">To process the incoming FEC stream, the
receiver can demultiplex it
by SSRC, and then correlate it with the appropriate primary stream(s)
via the CSRC(s) present in the RTP header of Flexible FEC repair packets
, or
the SSRC field present in the FEC header of Flexible FEC retransmission
packets.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-5.2
">
<name slugifiedName="name-negotiating-support-2">Negotiating Support</na
me>
<t indent="0" pn="section-5.2-1">Support for an SSRC-multiplexed Flexibl
e FEC stream to protect a given RTP
stream <bcp14>SHOULD</bcp14> be indicated by including video/flexfec (de
scribed in
<xref target="RFC8627" sectionFormat="comma" section="5.1.2" format="def
ault" derivedLink="https://rfc-editor.org/rfc/rfc8627#section-5.1.2" derivedCont
ent="RFC8627"/>) as
an additional supported media type for the associated "m=" section in th
e
SDP offer
<xref target="RFC3264" format="default" sectionFormat="of" derivedConten
t="RFC3264"/>. As mentioned above, when BUNDLE is used,
only a single Flexible FEC repair stream will be created for each BUNDLE
group, even if Flexible FEC is negotiated for each primary stream.</t>
<t indent="0" pn="section-5.2-2">Answerers can reject the use of SSRC-mu
ltiplexed FEC by not
including the video/flexfec media type in the corresponding "m=" section
in
the SDP answer.</t>
<t indent="0" pn="section-5.2-3">Use of FEC-only "m=" lines, and groupin
g using the SDP group mechanism
as described in
<xref target="RFC5956" sectionFormat="comma" section="4.1" format="defau
lt" derivedLink="https://rfc-editor.org/rfc/rfc5956#section-4.1" derivedContent=
"RFC5956"/>, is not currently defined for
WebRTC, and <bcp14>SHOULD NOT</bcp14> be offered.</t>
<t indent="0" pn="section-5.2-4">Answerers <bcp14>SHOULD</bcp14> reject
any FEC-only "m=" lines, unless they
specifically know how to handle such a thing in a WebRTC context
(perhaps defined by a future version of the WebRTC specifications).</t>
</section>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-6">
<name slugifiedName="name-fec-for-application-content">FEC for Application
Content</name>
<t indent="0" pn="section-6-1">WebRTC also supports the ability to send ge
neric application data, and
provides transport-level retransmission mechanisms to support full and
partial (e.g., timed) reliability. See
<xref target="RFC8831" format="default" sectionFormat="of" derivedContent=
"RFC8831"/> for details.</t>
<t indent="0" pn="section-6-2">Because the application can control exactly
what data to send, it has
the ability to monitor packet statistics and perform its own
application-level FEC if necessary.</t>
<t indent="0" pn="section-6-3">As a result, this document makes no recomme
ndations regarding FEC for
the underlying data transport.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-7">
<name slugifiedName="name-implementation-requirements">Implementation Requ
irements</name>
<t indent="0" pn="section-7-1">To support the functionality recommended ab
ove, implementations <bcp14>MUST</bcp14>
be able to receive and make use of the relevant FEC formats for their
supported audio codecs, and <bcp14>MUST</bcp14> indicate this support, as
described in
<xref target="audio-fec" format="default" sectionFormat="of" derivedConten
t="Section 4"/>. Use of these formats when sending, as
mentioned above, is <bcp14>RECOMMENDED</bcp14>.</t>
<t indent="0" pn="section-7-2">The general FEC mechanism described in
<xref target="RFC8627" format="default" sectionFormat="of" derivedContent=
"RFC8627"/> <bcp14>SHOULD</bcp14> also be
supported, as mentioned in
<xref target="video-fec" format="default" sectionFormat="of" derivedConten
t="Section 5"/>.</t>
<t indent="0" pn="section-7-3">Implementations <bcp14>MAY</bcp14> support
additional FEC mechanisms if desired, e.g.,
<xref target="RFC5109" format="default" sectionFormat="of" derivedContent=
"RFC5109"/>.</t>
</section>
<section anchor="adaptive-fec" numbered="true" toc="include" removeInRFC="fa
lse" pn="section-8">
<name slugifiedName="name-adaptive-use-of-fec">Adaptive Use of FEC</name>
<t indent="0" pn="section-8-1">Because use of FEC always causes redundant
data to be transmitted, and
the total amount of data must remain within any bandwidth limits indicated
by congestion control and the receiver, this will lead to less bandwidth
available for the primary encoding, even when the redundant data is not
being used. This is in contrast to methods like RTX
<xref target="RFC4588" format="default" sectionFormat="of" derivedContent=
"RFC4588"/> or Flexible FEC's retransmission mode (<xref target="RFC8627" sectio
nFormat="comma" section="1.1.7" format="default" derivedLink="https://rfc-editor
.org/rfc/rfc8627#section-1.1.7" derivedContent="RFC8627"/>),
which only transmit redundant data when necessary, at the cost of an
extra round trip and thereby increased media latency.</t>
<t indent="0" pn="section-8-2">Given this, WebRTC implementations <bcp14>S
HOULD</bcp14> prefer using RTX or
Flexible FEC retransmissions instead of FEC when the connection RTT is wit
hin
the application's latency budget, and otherwise <bcp14>SHOULD</bcp14> only
transmit the amount of FEC needed to protect against the observed packet
loss (which can be determined, e.g., by monitoring transmit packet loss
data from RTP Control Protocol (RTCP) receiver reports
<xref target="RFC3550" format="default" sectionFormat="of" derivedContent=
"RFC3550"/>), unless the application indicates it is
willing to pay a quality penalty to proactively avoid losses.</t>
<t indent="0" pn="section-8-3">Note that when probing bandwidth, i.e., spe
culatively sending extra
data to determine if additional link capacity exists, FEC data <bcp14>SHOU
LD</bcp14> be
used as the additional data. Given that extra data is going to be sent
regardless, it makes sense to have that data protect the primary payload;
in addition, FEC can typically be applied in a way that increases
bandwidth only modestly, which is necessary when probing.</t>
<t indent="0" pn="section-8-4">When using FEC with layered codecs, e.g.,
<xref target="RFC6386" format="default" sectionFormat="of" derivedContent=
"RFC6386"/>, where only base layer frames are critical to
the decoding of future frames, implementations <bcp14>SHOULD</bcp14> only
apply FEC to
these base layer frames.</t>
<t indent="0" pn="section-8-5">Finally, it should be noted that, although
applying redundancy is often
useful in protecting a stream against packet loss, if the loss is caused
by network congestion, the additional bandwidth used by the redundant
data may actually make the situation worse and can lead to significant
degradation of the network.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-9">
<name slugifiedName="name-security-considerations">Security Considerations
</name>
<t indent="0" pn="section-9-1">In the WebRTC context, FEC is specifically
concerned with recovering
data from lost packets; any corrupted packets will be discarded by the
Secure Real-Time Transport Protocol (SRTP) <xref target="RFC3711" format="
default" sectionFormat="of" derivedContent="RFC3711"/>
decryption process. Therefore, as described
in <xref target="RFC3711" sectionFormat="comma" section="10" format="defau
lt" derivedLink="https://rfc-editor.org/rfc/rfc3711#section-10" derivedContent="
RFC3711"/>, the default processing when
using FEC with SRTP is to perform FEC followed by SRTP at the sender, and
SRTP followed by FEC at the receiver. This ordering is used for all the
SRTP protection profiles used in DTLS-SRTP
<xref target="RFC5763" format="default" sectionFormat="of" derivedContent=
"RFC5763"/>, which are enumerated in
<xref target="RFC5764" sectionFormat="comma" section="4.1.2" format="defau
lt" derivedLink="https://rfc-editor.org/rfc/rfc5764#section-4.1.2" derivedConten
t="RFC5764"/>.</t>
<t indent="0" pn="section-9-2">Additional security considerations for each
individual FEC mechanism
are enumerated in their respective documents.</t>
</section>
<section numbered="true" toc="include" removeInRFC="false" pn="section-10">
<name slugifiedName="name-iana-considerations">IANA Considerations</name>
<t indent="0" pn="section-10-1">This document requires no actions from IAN
A.</t>
</section>
</middle>
<back>
<references pn="section-11">
<name slugifiedName="name-references">References</name>
<references pn="section-11.1">
<name slugifiedName="name-normative-references">Normative References</na
me>
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2
119" quoteTitle="true" derivedAnchor="RFC2119">
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</tit
le>
<author initials="S." surname="Bradner" fullname="S. Bradner">
<organization showOnFrontPage="true"/>
</author>
<date year="1997" month="March"/>
<abstract>
<t indent="0">In many standards track documents several words are
used to signify the requirements in the specification. These words are often ca
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
e Internet Community, and requests discussion and suggestions for improvements.<
/t>
</abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="2119"/>
<seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<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="RFC3264" target="https://www.rfc-editor.org/info/rfc3
264" quoteTitle="true" derivedAnchor="RFC3264">
<front>
<title>An Offer/Answer Model with Session Description Protocol (SDP)
</title>
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg">
<organization showOnFrontPage="true"/>
</author>
<author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne
">
<organization showOnFrontPage="true"/>
</author>
<date year="2002" month="June"/>
<abstract>
<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
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
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
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
DARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="3264"/>
<seriesInfo name="DOI" value="10.17487/RFC3264"/>
</reference>
<reference anchor="RFC4867" target="https://www.rfc-editor.org/info/rfc4
867" quoteTitle="true" derivedAnchor="RFC4867">
<front>
<title>RTP Payload Format and File Storage Format for the Adaptive M
ulti-Rate (AMR) and Adaptive Multi-Rate Wideband (AMR-WB) Audio Codecs</title>
<author initials="J." surname="Sjoberg" fullname="J. Sjoberg">
<organization showOnFrontPage="true"/>
</author>
<author initials="M." surname="Westerlund" fullname="M. Westerlund">
<organization showOnFrontPage="true"/>
</author>
<author initials="A." surname="Lakaniemi" fullname="A. Lakaniemi">
<organization showOnFrontPage="true"/>
</author>
<author initials="Q." surname="Xie" fullname="Q. Xie">
<organization showOnFrontPage="true"/>
</author>
<date year="2007" month="April"/>
<abstract>
<t indent="0">This document specifies a Real-time Transport Protoc
ol (RTP) payload format to be used for Adaptive Multi-Rate (AMR) and Adaptive Mu
lti-Rate Wideband (AMR-WB) encoded speech signals. The payload format is design
ed to be able to interoperate with existing AMR and AMR-WB transport formats on
non-IP networks. In addition, a file format is specified for transport of AMR a
nd AMR-WB speech data in storage mode applications such as email. Two separate
media type registrations are included, one for AMR and one for AMR-WB, specifyin
g use of both the RTP payload format and the storage format. This document obso
letes RFC 3267. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="4867"/>
<seriesInfo name="DOI" value="10.17487/RFC4867"/>
</reference>
<reference anchor="RFC5956" target="https://www.rfc-editor.org/info/rfc5
956" quoteTitle="true" derivedAnchor="RFC5956">
<front>
<title>Forward Error Correction Grouping Semantics in the Session De
scription Protocol</title>
<author initials="A." surname="Begen" fullname="A. Begen">
<organization showOnFrontPage="true"/>
</author>
<date year="2010" month="September"/>
<abstract>
<t indent="0">This document defines the semantics for grouping the
associated source and FEC-based (Forward Error Correction) repair flows in the
Session Description Protocol (SDP). The semantics defined in this document are
to be used with the SDP Grouping Framework (RFC 5888). These semantics allow the
description of grouping relationships between the source and repair flows when
one or more source and/or repair flows are associated in the same group, and the
y provide support for additive repair flows. SSRC-level (Synchronization Source
) grouping semantics are also defined in this document for Real-time Transport P
rotocol (RTP) streams using SSRC multiplexing. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5956"/>
<seriesInfo name="DOI" value="10.17487/RFC5956"/>
</reference>
<reference anchor="RFC7587" target="https://www.rfc-editor.org/info/rfc7
587" quoteTitle="true" derivedAnchor="RFC7587">
<front>
<title>RTP Payload Format for the Opus Speech and Audio Codec</title
>
<author initials="J." surname="Spittka" fullname="J. Spittka">
<organization showOnFrontPage="true"/>
</author>
<author initials="K." surname="Vos" fullname="K. Vos">
<organization showOnFrontPage="true"/>
</author>
<author initials="JM." surname="Valin" fullname="JM. Valin">
<organization showOnFrontPage="true"/>
</author>
<date year="2015" month="June"/>
<abstract>
<t indent="0">This document defines the Real-time Transport Protoc
ol (RTP) payload format for packetization of Opus-encoded speech and audio data
necessary to integrate the codec in the most compatible way. It also provides a
n applicability statement for the use of Opus over RTP. Further, it describes me
dia type registrations for the RTP payload format.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7587"/>
<seriesInfo name="DOI" value="10.17487/RFC7587"/>
</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="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="TS.26114" target="http://www.3gpp.org/ftp/Specs/html-
info/26114.htm" quoteTitle="true" derivedAnchor="TS.26114">
<front>
<title>IP Multimedia Subsystem (IMS); Multimedia telephony; Media ha
ndling and interaction</title>
<seriesInfo name="3GPP TS" value="26.114 15.0.0"/>
<author>
<organization showOnFrontPage="true">3GPP</organization>
</author>
<date day="22" month="September" year="2017"/>
</front>
</reference>
</references>
<references pn="section-11.2">
<name slugifiedName="name-informative-references">Informative References
</name>
<reference anchor="OpusFEC" target="http://lists.xiph.org/pipermail/opus
/2013-January/001904.html" quoteTitle="true" derivedAnchor="OpusFEC">
<front>
<title>Subject: Opus FEC</title>
<author fullname="Tim Terriberry" initials="T." surname="Terriberry"
>
<organization showOnFrontPage="true">Xiph</organization>
</author>
<date day="28" month="January" year="2013"/>
</front>
<refcontent>message to the opus mailing list</refcontent>
</reference>
<reference anchor="RFC3550" target="https://www.rfc-editor.org/info/rfc3
550" quoteTitle="true" derivedAnchor="RFC3550">
<front>
<title>RTP: A Transport Protocol for Real-Time Applications</title>
<author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne
">
<organization showOnFrontPage="true"/>
</author>
<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="RFC3711" target="https://www.rfc-editor.org/info/rfc3
711" quoteTitle="true" derivedAnchor="RFC3711">
<front>
<title>The Secure Real-time Transport Protocol (SRTP)</title>
<author initials="M." surname="Baugher" fullname="M. Baugher">
<organization showOnFrontPage="true"/>
</author>
<author initials="D." surname="McGrew" fullname="D. McGrew">
<organization showOnFrontPage="true"/>
</author>
<author initials="M." surname="Naslund" fullname="M. Naslund">
<organization showOnFrontPage="true"/>
</author>
<author initials="E." surname="Carrara" fullname="E. Carrara">
<organization showOnFrontPage="true"/>
</author>
<author initials="K." surname="Norrman" fullname="K. Norrman">
<organization showOnFrontPage="true"/>
</author>
<date year="2004" month="March"/>
<abstract>
<t indent="0">This document describes the Secure Real-time Transpo
rt Protocol (SRTP), a profile of the Real-time Transport Protocol (RTP), which c
an provide confidentiality, message authentication, and replay protection to the
RTP traffic and to the control traffic for RTP, the Real-time Transport Control
Protocol (RTCP). [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="3711"/>
<seriesInfo name="DOI" value="10.17487/RFC3711"/>
</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="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="RFC5391" target="https://www.rfc-editor.org/info/rfc5
391" quoteTitle="true" derivedAnchor="RFC5391">
<front>
<title>RTP Payload Format for ITU-T Recommendation G.711.1</title>
<author initials="A." surname="Sollaud" fullname="A. Sollaud">
<organization showOnFrontPage="true"/>
</author>
<date year="2008" month="November"/>
<abstract>
<t indent="0">This document specifies a Real-time Transport Protoc
ol (RTP) payload format to be used for the ITU Telecommunication Standardization
Sector (ITU-T) G.711.1 audio codec. Two media type registrations are also incl
uded. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5391"/>
<seriesInfo name="DOI" value="10.17487/RFC5391"/>
</reference>
<reference anchor="RFC5763" target="https://www.rfc-editor.org/info/rfc5
763" quoteTitle="true" derivedAnchor="RFC5763">
<front>
<title>Framework for Establishing a Secure Real-time Transport Proto
col (SRTP) Security Context Using Datagram Transport Layer Security (DTLS)</titl
e>
<author initials="J." surname="Fischl" fullname="J. Fischl">
<organization showOnFrontPage="true"/>
</author>
<author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
<organization showOnFrontPage="true"/>
</author>
<author initials="E." surname="Rescorla" fullname="E. Rescorla">
<organization showOnFrontPage="true"/>
</author>
<date year="2010" month="May"/>
<abstract>
<t indent="0">This document specifies how to use the Session Initi
ation Protocol (SIP) to establish a Secure Real-time Transport Protocol (SRTP) s
ecurity context using the Datagram Transport Layer Security (DTLS) protocol. It
describes a mechanism of transporting a fingerprint attribute in the Session De
scription Protocol (SDP) that identifies the key that will be presented during t
he DTLS handshake. The key exchange travels along the media path as opposed to
the signaling path. The SIP Identity mechanism can be used to protect the integ
rity of the fingerprint attribute from modification by intermediate proxies. [S
TANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5763"/>
<seriesInfo name="DOI" value="10.17487/RFC5763"/>
</reference>
<reference anchor="RFC5764" target="https://www.rfc-editor.org/info/rfc5
764" quoteTitle="true" derivedAnchor="RFC5764">
<front>
<title>Datagram Transport Layer Security (DTLS) Extension to Establi
sh Keys for the Secure Real-time Transport Protocol (SRTP)</title>
<author initials="D." surname="McGrew" fullname="D. McGrew">
<organization showOnFrontPage="true"/>
</author>
<author initials="E." surname="Rescorla" fullname="E. Rescorla">
<organization showOnFrontPage="true"/>
</author>
<date year="2010" month="May"/>
<abstract>
<t indent="0">This document describes a Datagram Transport Layer S
ecurity (DTLS) extension to establish keys for Secure RTP (SRTP) and Secure RTP
Control Protocol (SRTCP) flows. DTLS keying happens on the media path, independ
ent of any out-of-band signalling channel present. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5764"/>
<seriesInfo name="DOI" value="10.17487/RFC5764"/>
</reference>
<reference anchor="RFC6386" target="https://www.rfc-editor.org/info/rfc6
386" quoteTitle="true" derivedAnchor="RFC6386">
<front>
<title>VP8 Data Format and Decoding Guide</title>
<author initials="J." surname="Bankoski" fullname="J. Bankoski">
<organization showOnFrontPage="true"/>
</author>
<author initials="J." surname="Koleszar" fullname="J. Koleszar">
<organization showOnFrontPage="true"/>
</author>
<author initials="L." surname="Quillio" fullname="L. Quillio">
<organization showOnFrontPage="true"/>
</author>
<author initials="J." surname="Salonen" fullname="J. Salonen">
<organization showOnFrontPage="true"/>
</author>
<author initials="P." surname="Wilkins" fullname="P. Wilkins">
<organization showOnFrontPage="true"/>
</author>
<author initials="Y." surname="Xu" fullname="Y. Xu">
<organization showOnFrontPage="true"/>
</author>
<date year="2011" month="November"/>
<abstract>
<t indent="0">This document describes the VP8 compressed video dat
a format, together with a discussion of the decoding procedure for the format.
This document is not an Internet Standards Track specification; it is published
for informational purposes.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6386"/>
<seriesInfo name="DOI" value="10.17487/RFC6386"/>
</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="RFC6465" target="https://www.rfc-editor.org/info/rfc6
465" quoteTitle="true" derivedAnchor="RFC6465">
<front>
<title>A Real-time Transport Protocol (RTP) Header Extension for Mix
er-to-Client Audio Level Indication</title>
<author initials="E." surname="Ivov" fullname="E. Ivov" role="editor
">
<organization showOnFrontPage="true"/>
</author>
<author initials="E." surname="Marocco" fullname="E. Marocco" role="
editor">
<organization showOnFrontPage="true"/>
</author>
<author initials="J." surname="Lennox" fullname="J. Lennox">
<organization showOnFrontPage="true"/>
</author>
<date year="2011" month="December"/>
<abstract>
<t indent="0">This document describes a mechanism for RTP-level mi
xers in audio conferences to deliver information about the audio level of indivi
dual participants. Such audio level indicators are transported in the same RTP
packets as the audio data they pertain to. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6465"/>
<seriesInfo name="DOI" value="10.17487/RFC6465"/>
</reference>
<reference anchor="RFC6716" target="https://www.rfc-editor.org/info/rfc6
716" quoteTitle="true" derivedAnchor="RFC6716">
<front>
<title>Definition of the Opus Audio Codec</title>
<author initials="JM." surname="Valin" fullname="JM. Valin">
<organization showOnFrontPage="true"/>
</author>
<author initials="K." surname="Vos" fullname="K. Vos">
<organization showOnFrontPage="true"/>
</author>
<author initials="T." surname="Terriberry" fullname="T. Terriberry">
<organization showOnFrontPage="true"/>
</author>
<date year="2012" month="September"/>
<abstract>
<t indent="0">This document defines the Opus interactive speech an
d audio codec. Opus is designed to handle a wide range of interactive audio appl
ications, including Voice over IP, videoconferencing, in-game chat, and even liv
e, distributed music performances. It scales from low bitrate narrowband speech
at 6 kbit/s to very high quality stereo music at 510 kbit/s. Opus uses both Li
near Prediction (LP) and the Modified Discrete Cosine Transform (MDCT) to achiev
e good compression of both speech and music. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6716"/>
<seriesInfo name="DOI" value="10.17487/RFC6716"/>
</reference>
<reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8
831" quoteTitle="true" derivedAnchor="RFC8831">
<front>
<title>WebRTC Data Channels</title>
<author initials="R" surname="Jesup" fullname="Randell Jesup">
<organization showOnFrontPage="true"/>
</author>
<author initials="S" surname="Loreto" fullname="Salvatore Loreto">
<organization showOnFrontPage="true"/>
</author>
<author initials="M" surname="Tüxen" fullname="Michael Tüxen">
<organization showOnFrontPage="true"/>
</author>
<date month="January" year="2021"/>
</front>
<seriesInfo name="RFC" value="8831"/>
<seriesInfo name="DOI" value="10.17487/RFC8831"/>
</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>
</references>
</references>
<section numbered="false" toc="include" removeInRFC="false" pn="section-appe
ndix.a">
<name slugifiedName="name-acknowledgements">Acknowledgements</name>
<t indent="0" pn="section-appendix.a-1">Several people provided significan
t input into this document,
including <contact fullname="Bernard Aboba"/>, <contact fullname="Jonathan
Lennox"/>, <contact fullname="Giri Mandyam"/>, <contact fullname="Varun S
ingh"/>,
<contact fullname="Tim Terriberry"/>, <contact fullname="Magnus West
erlund"/>, and <contact fullname="Mo Zanaty"/>.</t>
</section>
<section anchor="authors-addresses" numbered="false" removeInRFC="false" toc
="include" pn="section-appendix.b">
<name slugifiedName="name-authors-address">Author's Address</name>
<author fullname="Justin Uberti" initials="J." surname="Uberti">
<organization showOnFrontPage="true">Google</organization>
<address>
<postal>
<street>747 6th St S</street>
<city>Kirkland</city>
<region>WA</region>
<code>98033</code>
<country>United States of America</country>
</postal>
<email>justin@uberti.name</email>
</address>
</author>
</section>
</back>
</rfc>
 End of changes. 1 change blocks. 
lines changed or deleted 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/