rfc8854xml2.original.xml | rfc8854.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | ||||
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" | ||||
number="8854" | ||||
docName="draft-ietf-rtcweb-fec-10" | ||||
submissionType="IETF" | ||||
consensus="true" | ||||
category="std" | ||||
ipr="trust200902" | ||||
obsoletes="" | ||||
updates="" | ||||
sortRefs="true" | ||||
symRefs="true" | ||||
tocInclude="true" | ||||
xml:lang="en" | ||||
version="3"> | ||||
<front> | ||||
<title abbrev="WebRTC FEC">WebRTC Forward Error Correction | ||||
Requirements</title> | ||||
<seriesInfo name="RFC" value="8854"/> | ||||
<author fullname="Justin Uberti" initials="J." surname="Uberti"> | ||||
<organization>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 year="2020" month="May"/> | ||||
<area>RAI</area> | ||||
<keyword>RTP</keyword> | ||||
<keyword>FEC</keyword> | ||||
<abstract> | ||||
<t>This document provides information and requirements for the use of Forw | ||||
ard | ||||
Error Correction (FEC) by WebRTC implementations.</t> | ||||
</abstract> | ||||
</front> | ||||
<middle> | ||||
<section numbered="true" toc="default"> | ||||
<name>Introduction</name> | ||||
<t>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="default"> | ||||
<name>Terminology</name> | ||||
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>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"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here.</t> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Types of FEC</name> | ||||
<t>FEC describes the sending of redundant information 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"/>; this sect | ||||
ion enumerates | ||||
the various mechanisms available and describes their trade-offs.</t> | ||||
<section numbered="true" toc="default"> | ||||
<name>Separate FEC Stream</name> | ||||
<t>This approach, as described in <xref target="RFC5956" sectionFormat=" | ||||
comma" | ||||
section="4.3" format="default"/>, | ||||
sends FEC packets as an independent RTP stream with its own | ||||
synchronization source (SSRC) <xref target="RFC3550" format="default"/> | ||||
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>This approach allows for recovery of entire RTP packets, including | ||||
the full RTP header.</t> | ||||
</section> | ||||
<section anchor="redundant-encoding" numbered="true" toc="default"> | ||||
<name>Redundant Encoding</name> | ||||
<t>This approach, as described in | ||||
<xref target="RFC2198" format="default"/>, 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>Since there is only a single set of packet 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>As described in | ||||
<xref target="RFC2198" sectionFormat="comma" section="4" format="default | ||||
"/>, 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="default"> | ||||
<name>Codec-Specific In-Band FEC</name> | ||||
<t>Some audio codecs, notably Opus | ||||
<xref target="RFC6716" format="default"/> and Adaptive Multi-Rate (AMR) | ||||
<xref target="RFC4867" format="default"/>, 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>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"/>, | ||||
and <xref target="OpusFEC" format="default">this Opus mailing list post< | ||||
/xref> | ||||
for more details.</t> | ||||
<t>For AMR and AMR-Wideband (AMR-WB), packets can contain copies or lowe | ||||
r-quality | ||||
encodings of multiple prior audio frames. See | ||||
<xref target="RFC4867" sectionFormat="comma" section="3.7.1" format="def | ||||
ault"/>, | ||||
for details on this mechanism.</t> | ||||
<t>In-band FEC mechanisms cannot recover any of the RTP header.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="audio-fec" numbered="true" toc="default"> | ||||
<name>FEC for Audio Content</name> | ||||
<t>The following section provides guidance on how to best use FEC for | ||||
transmitting audio data. As indicated in | ||||
<xref target="adaptive-fec" format="default"/> below, FEC should only be a | ||||
ctivated if | ||||
network conditions warrant it, or upon explicit application request.</t> | ||||
<section numbered="true" toc="default"> | ||||
<name>Recommended Mechanism</name> | ||||
<t>When using variable-bitrate codecs without an internal FEC, | ||||
redundant encoding | ||||
(as described in <xref target="redundant-encoding" format="default"/>) | ||||
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>When using the Opus codec, use of the built-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>When using the AMR/AMR-WB codecs, use of 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>When using constant-bitrate codecs, e.g., | ||||
PCMU <xref target="RFC5391" format="default"/>, redundant encoding <bcp1 | ||||
4>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>Because of the lower packet rate of audio 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 | ||||
RECOMMENDED</bcp14>.</t> | ||||
<t>As mentioned above, the recommended mechanisms 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"/> and | ||||
<xref target="RFC6465" format="default"/>. 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 | ||||
"/>, and | ||||
<xref target="RFC6464" sectionFormat="comma" section="5" format="default | ||||
"/>.</t> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Negotiating Support</name> | ||||
<t>Support for redundant encoding of a given RTP stream <bcp14>SHOULD</b | ||||
cp14> be | ||||
indicated by including audio/red | ||||
<xref target="RFC2198" format="default"/> as an additional supported med | ||||
ia type for the | ||||
associated "m=" section in the SDP offer | ||||
<xref target="RFC3264" format="default"/>. 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>Support for codec-specific FEC mechanisms are typically indicated | ||||
via "a=fmtp" parameters.</t> | ||||
<t>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"/>. This parameter is declarative | ||||
and can be | ||||
negotiated separately for either media direction.</t> | ||||
<t>For AMR/AMR-WB, support for redundant encoding, 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"/>. | ||||
Receivers <bcp14>MUST</bcp14> include this | ||||
parameter, and set it to an appropriate value, as specified in | ||||
<xref target="TS.26114" format="default"/>, Table 6.3.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="video-fec" numbered="true" toc="default"> | ||||
<name>FEC for Video Content</name> | ||||
<t>The following section provides guidance on how to best use FEC for | ||||
transmitting video data. As indicated in | ||||
<xref target="adaptive-fec" format="default"/> below, FEC should only be a | ||||
ctivated if | ||||
network conditions warrant it, or upon explicit application request.</t> | ||||
<section numbered="true" toc="default"> | ||||
<name>Recommended Mechanism</name> | ||||
<t>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"/> 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"/>. 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>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="default"> | ||||
<name>Negotiating Support</name> | ||||
<t>Support for an SSRC-multiplexed Flexible FEC stream to protect a give | ||||
n 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"/>) as | ||||
an additional supported media type for the associated "m=" section in th | ||||
e | ||||
SDP offer | ||||
<xref target="RFC3264" format="default"/>. As mentioned above, when BUND | ||||
LE 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>Answerers can reject the use of SSRC-multiplexed FEC by not | ||||
including the video/flexfec media type in the corresponding "m=" section | ||||
in | ||||
the SDP answer.</t> | ||||
<t>Use of FEC-only "m=" lines, and grouping using the SDP group mechanis | ||||
m | ||||
as described in | ||||
<xref target="RFC5956" sectionFormat="comma" section="4.1" format="defau | ||||
lt"/>, is not currently defined for | ||||
WebRTC, and <bcp14>SHOULD NOT</bcp14> be offered.</t> | ||||
<t>Answerers <bcp14>SHOULD</bcp14> reject any FEC-only "m=" lines, unles | ||||
s 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="default"> | ||||
<name>FEC for Application Content</name> | ||||
<t>WebRTC also supports the ability to send generic application data, and | ||||
provides transport-level retransmission mechanisms to support full and | ||||
partial (e.g., timed) reliability. See | ||||
<xref target="RFC8831" format="default"/> for details.</t> | ||||
<t>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>As a result, this document makes no recommendations regarding FEC for | ||||
the underlying data transport.</t> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Implementation Requirements</name> | ||||
<t>To support the functionality recommended above, 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"/>. Use of these formats when sen | ||||
ding, as | ||||
mentioned above, is <bcp14>RECOMMENDED</bcp14>.</t> | ||||
<t>The general FEC mechanism described in | ||||
<xref target="RFC8627" format="default"/> <bcp14>SHOULD</bcp14> also be | ||||
supported, as mentioned in | ||||
<xref target="video-fec" format="default"/>.</t> | ||||
<t>Implementations <bcp14>MAY</bcp14> support additional FEC mechanisms if | ||||
desired, e.g., | ||||
<xref target="RFC5109" format="default"/>.</t> | ||||
</section> | ||||
<section anchor="adaptive-fec" numbered="true" toc="default"> | ||||
<name>Adaptive Use of FEC</name> | ||||
<t>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"/> or Flexible FEC's retransmission | ||||
mode (<xref target="RFC8627" sectionFormat="comma" section="1.1.7" format="defa | ||||
ult"/>), | ||||
which only transmit redundant data when necessary, at the cost of an | ||||
extra round trip and thereby increased media latency.</t> | ||||
<t>Given this, WebRTC implementations <bcp14>SHOULD</bcp14> prefer using R | ||||
TX 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"/>), unless the application indicat | ||||
es it is | ||||
willing to pay a quality penalty to proactively avoid losses.</t> | ||||
<t>Note that when probing bandwidth, i.e., speculatively 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>When using FEC with layered codecs, e.g., | ||||
<xref target="RFC6386" format="default"/>, where only base layer frames ar | ||||
e critical to | ||||
the decoding of future frames, implementations <bcp14>SHOULD</bcp14> only | ||||
apply FEC to | ||||
these base layer frames.</t> | ||||
<t>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="default"> | ||||
<name>Security Considerations</name> | ||||
<t>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"/> | ||||
decryption process. Therefore, as described | ||||
in <xref target="RFC3711" sectionFormat="comma" section="10" format="defau | ||||
lt"/>, 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"/>, which are enumerated in | ||||
<xref target="RFC5764" sectionFormat="comma" section="4.1.2" format="defa | ||||
ult"/>.</t> | ||||
<t>Additional security considerations for each individual FEC mechanism | ||||
are enumerated in their respective documents.</t> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
<t>This document requires no actions from IANA.</t> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<references> | ||||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2 | ||||
119.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2 | ||||
198.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.3 | ||||
264.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4 | ||||
867.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5 | ||||
956.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7 | ||||
587.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8 | ||||
174.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8 | ||||
627.xml"/> | ||||
<reference anchor="TS.26114" target="http://www.3gpp.org/ftp/Specs/html- | ||||
info/26114.htm"> | ||||
<front> | ||||
<title>IP Multimedia Subsystem (IMS); Multimedia telephony; Media | ||||
handling and interaction</title> | ||||
<seriesInfo name="3GPP TS" value="26.114 15.0.0"/> | ||||
<author> | ||||
<organization>3GPP</organization> | ||||
</author> | ||||
<date day="22" month="September" year="2017"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.3 | ||||
550.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.3 | ||||
711.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4 | ||||
588.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5 | ||||
109.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5 | ||||
391.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5 | ||||
763.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5 | ||||
764.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6 | ||||
386.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6 | ||||
464.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6 | ||||
465.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6 | ||||
716.xml"/> | ||||
<reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8843" | ||||
> | ||||
<front> | ||||
<title>Negotiating Media Multiplexing Using the Session Description Prot | ||||
ocol (SDP)</title> | ||||
<author initials="C" surname="Holmberg" fullname="Christer Holmberg"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H" surname="Alvestrand" fullname="Harald Alvestrand"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C" surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization/> | ||||
</author> | ||||
<date month="April" year="2020"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8843"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8843"/> | ||||
</reference> | ||||
<reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8831"> | ||||
<front> | ||||
<title>WebRTC Data Channels</title> | ||||
<author initials="R" surname="Jesup" fullname="Randell Jesup"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S" surname="Loreto" fullname="Salvatore Loreto"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M" surname="Tuexen" fullname="Michael Tuexen"> | ||||
<organization/> | ||||
</author> | ||||
<date month='April' year='2020'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8831"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8831"/> | ||||
</reference> | ||||
<reference anchor="OpusFEC" target="http://lists.xiph.org/pipermail/opus | ||||
/2013-January/001904.html"> | ||||
<front> | ||||
<title>Subject: Opus FEC</title> | ||||
<author fullname="Tim Terriberry" initials="T." surname="Terriberry" | ||||
> | ||||
<organization>Xiph</organization> | ||||
</author> | ||||
<date day="28" month="January" year="2013"/> | ||||
</front> | ||||
<refcontent>message to the opus mailing list</refcontent> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t>Several people provided significant input into this document, | ||||
including <contact fullname="Bernard Aboba"/>, <contact fullname="Jonathan | ||||
Lennox"/>, <contact fullname="Giri Mandyam"/>, <contact fullname="Varun Si | ||||
ngh"/>, | ||||
<contact fullname="Tim | ||||
Terriberry"/>, <contact fullname="Magnus Westerlund"/>, and <contact fulln | ||||
ame="Mo Zanaty"/>.</t> | ||||
</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.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |