| < draft-ietf-payload-flexible-fec-scheme-13.txt | draft-ietf-payload-flexible-fec-scheme-14.txt > | |||
|---|---|---|---|---|
| PAYLOAD M. Zanaty | PAYLOAD M. Zanaty | |||
| Internet-Draft Cisco | Internet-Draft Cisco | |||
| Intended status: Standards Track V. Singh | Intended status: Standards Track V. Singh | |||
| Expires: June 14, 2019 callstats.io | Expires: July 7, 2019 callstats.io | |||
| A. Begen | A. Begen | |||
| Networked Media | Networked Media | |||
| G. Mandyam | G. Mandyam | |||
| Qualcomm Inc. | Qualcomm Inc. | |||
| December 11, 2018 | January 3, 2019 | |||
| RTP Payload Format for Flexible Forward Error Correction (FEC) | RTP Payload Format for Flexible Forward Error Correction (FEC) | |||
| draft-ietf-payload-flexible-fec-scheme-13 | draft-ietf-payload-flexible-fec-scheme-14 | |||
| Abstract | Abstract | |||
| This document defines new RTP payload formats for the Forward Error | This document defines new RTP payload formats for the Forward Error | |||
| Correction (FEC) packets that are generated by the non-interleaved | Correction (FEC) packets that are generated by the non-interleaved | |||
| and interleaved parity codes from source media encapsulated in RTP. | and interleaved parity codes from source media encapsulated in RTP. | |||
| These parity codes are systematic codes, where a number of FEC repair | These parity codes are systematic codes, where a number of FEC repair | |||
| packets are generated from a set of source packets from one or more | packets are generated from a set of source packets from one or more | |||
| source RTP streams. These FEC repair packets are sent in a | source RTP streams. These FEC repair packets are sent in a | |||
| redundancy RTP stream separate from the source RTP stream(s) that | redundancy RTP stream separate from the source RTP stream(s) that | |||
| carries the source packets. RTP source packets that were lost in | carries the source packets. RTP source packets that were lost in | |||
| transmission can be reconstructed using the source and repair packets | transmission can be reconstructed using the source and repair packets | |||
| that were received. The non-interleaved and interleaved parity codes | that were received. The non-interleaved and interleaved parity codes | |||
| which are defined in this specification offer a good protection | which are defined in this specification offer a good protection | |||
| against random and bursty packet losses, respectively, at a cost of | against random and bursty packet losses, respectively, at a cost of | |||
| decent complexity. The RTP payload formats that are defined in this | complexity. The RTP payload formats that are defined in this | |||
| document address scalability issues experienced with the earlier | document address scalability issues experienced with the earlier | |||
| specifications, and offer several improvements. Due to these | specifications, and offer several improvements. Due to these | |||
| changes, the new payload formats are not backward compatible with | changes, the new payload formats are not backward compatible with | |||
| earlier specifications, but endpoints that do not implement this | earlier specifications, but endpoints that do not implement this | |||
| specification can still work by simply ignoring the FEC repair | specification can still work by simply ignoring the FEC repair | |||
| packets. | packets. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| skipping to change at page 2, line 7 ¶ | skipping to change at page 2, line 7 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on June 14, 2019. | This Internet-Draft will expire on July 7, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Parity Codes . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Parity Codes . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.1.1. 1-D Non-interleaved (Row) FEC Protection . . . . . . 5 | 1.1.1. One-Dimensionsal (1-D) Non-interleaved (Row) FEC | |||
| 1.1.2. 1-D Interleaved (Column) FEC Protection . . . . . . . 5 | Protection . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.1.3. Use Cases for 1-D FEC Protection . . . . . . . . . . 6 | 1.1.2. 1-D Interleaved (Column) FEC Protection . . . . . . . 7 | |||
| 1.1.4. 2-D (Row and Column) FEC Protection . . . . . . . . . 8 | 1.1.3. Use Cases for 1-D FEC Protection . . . . . . . . . . 8 | |||
| 1.1.5. FEC Overhead Considerations . . . . . . . . . . . . . 9 | 1.1.4. Two-Dimensional (2-D) (Row and Column) FEC Protection 10 | |||
| 2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 9 | 1.1.5. FEC Overhead Considerations . . . . . . . . . . . . . 12 | |||
| 3. Definitions and Notations . . . . . . . . . . . . . . . . . . 10 | 2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 10 | 3. Definitions and Notations . . . . . . . . . . . . . . . . . . 13 | |||
| 3.2. Notations . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4. Packet Formats . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.2. Notations . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4.1. Source Packets . . . . . . . . . . . . . . . . . . . . . 11 | 4. Packet Formats . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4.2. FEC Repair Packets . . . . . . . . . . . . . . . . . . . 11 | 4.1. Source Packets . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4.2.1. RTP Header of FEC Repair Packets . . . . . . . . . . 12 | 4.2. FEC Repair Packets . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.2.2. FEC Header of FEC Repair Packets . . . . . . . . . . 14 | 4.2.1. RTP Header of FEC Repair Packets . . . . . . . . . . 16 | |||
| 5. Payload Format Parameters . . . . . . . . . . . . . . . . . . 18 | 4.2.2. FEC Header of FEC Repair Packets . . . . . . . . . . 17 | |||
| 5.1. Media Type Registration - Parity Codes . . . . . . . . . 19 | 5. Payload Format Parameters . . . . . . . . . . . . . . . . . . 25 | |||
| 5.1.1. Registration of audio/flexfec . . . . . . . . . . . . 19 | 5.1. Media Type Registration - Parity Codes . . . . . . . . . 25 | |||
| 5.1.2. Registration of video/flexfec . . . . . . . . . . . . 20 | 5.1.1. Registration of audio/flexfec . . . . . . . . . . . . 25 | |||
| 5.1.3. Registration of text/flexfec . . . . . . . . . . . . 22 | 5.1.2. Registration of video/flexfec . . . . . . . . . . . . 26 | |||
| 5.1.4. Registration of application/flexfec . . . . . . . . . 23 | 5.1.3. Registration of text/flexfec . . . . . . . . . . . . 28 | |||
| 5.2. Mapping to SDP Parameters . . . . . . . . . . . . . . . . 25 | 5.1.4. Registration of application/flexfec . . . . . . . . . 29 | |||
| 5.2.1. Offer-Answer Model Considerations . . . . . . . . . . 25 | 5.2. Mapping to SDP Parameters . . . . . . . . . . . . . . . . 31 | |||
| 5.2.2. Declarative Considerations . . . . . . . . . . . . . 26 | 5.2.1. Offer-Answer Model Considerations . . . . . . . . . . 31 | |||
| 6. Protection and Recovery Procedures - Parity Codes . . . . . . 26 | 5.2.2. Declarative Considerations . . . . . . . . . . . . . 32 | |||
| 6.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
| 6.2. Repair Packet Construction . . . . . . . . . . . . . . . 26 | 6. Protection and Recovery Procedures - Parity Codes . . . . . . 32 | |||
| 6.3. Source Packet Reconstruction . . . . . . . . . . . . . . 28 | 6.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.3.1. Associating the Source and Repair Packets . . . . . . 29 | 6.2. Repair Packet Construction . . . . . . . . . . . . . . . 33 | |||
| 6.3.2. Recovering the RTP Header . . . . . . . . . . . . . . 30 | 6.3. Source Packet Reconstruction . . . . . . . . . . . . . . 34 | |||
| 6.3.3. Recovering the RTP Payload . . . . . . . . . . . . . 31 | 6.3.1. Associating the Source and Repair Packets . . . . . . 35 | |||
| 6.3.2. Recovering the RTP Header . . . . . . . . . . . . . . 37 | ||||
| 6.3.3. Recovering the RTP Payload . . . . . . . . . . . . . 38 | ||||
| 6.3.4. Iterative Decoding Algorithm for the 2-D Parity FEC | 6.3.4. Iterative Decoding Algorithm for the 2-D Parity FEC | |||
| Protection . . . . . . . . . . . . . . . . . . . . . 32 | Protection . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 7. Signaling Requirements . . . . . . . . . . . . . . . . . . . 34 | 7. Signaling Requirements . . . . . . . . . . . . . . . . . . . 42 | |||
| 7.1. SDP Examples . . . . . . . . . . . . . . . . . . . . . . 35 | 7.1. SDP Examples . . . . . . . . . . . . . . . . . . . . . . 43 | |||
| 7.1.1. Example SDP for Flexible FEC Protection with in-band | 7.1.1. Example SDP for Flexible FEC Protection with in-band | |||
| SSRC mapping . . . . . . . . . . . . . . . . . . . . 35 | SSRC mapping . . . . . . . . . . . . . . . . . . . . 43 | |||
| 7.1.2. Example SDP for Flexible FEC Protection with explicit | 7.1.2. Example SDP for Flexible FEC Protection with explicit | |||
| signalling in the SDP . . . . . . . . . . . . . . . . 36 | signalling in the SDP . . . . . . . . . . . . . . . . 44 | |||
| 7.2. On the Use of the RTP Stream Identifier Source | 7.2. On the Use of the RTP Stream Identifier Source | |||
| Description . . . . . . . . . . . . . . . . . . . . . . . 36 | Description . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 8. Congestion Control Considerations . . . . . . . . . . . . . . 36 | 8. Congestion Control Considerations . . . . . . . . . . . . . . 45 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 37 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 45 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 38 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 38 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 38 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 46 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 39 | 12.2. Informative References . . . . . . . . . . . . . . . . . 47 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 40 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 1. Introduction | 1. Introduction | |||
| This document defines new RTP payload formats for the Forward Error | This document defines new RTP payload formats for the Forward Error | |||
| Correction (FEC) that is generated by the non-interleaved and | Correction (FEC) that is generated by the non-interleaved and | |||
| interleaved parity codes from a source media encapsulated in RTP | interleaved parity codes from a source media encapsulated in RTP | |||
| [RFC3550]. The type of the source media protected by these parity | [RFC3550]. The type of the source media protected by these parity | |||
| codes can be audio, video, text or application. The FEC data are | codes can be audio, video, text or application. The FEC data are | |||
| generated according to the media type parameters, which are | generated according to the media type parameters, which are | |||
| communicated out-of-band (e.g., in SDP). Furthermore, the | communicated out-of-band (e.g., in SDP). Furthermore, the | |||
| associations or relationships between the source and repair RTP | associations or relationships between the source and repair RTP | |||
| streams may be communicated in-band or out-of-band. The in-band | streams may be communicated in-band or out-of-band. The in-band | |||
| mechanism is advantageous when the endpoint is adapting the FEC | mechanism is advantageous when the endpoint is adapting the FEC | |||
| parameters. The out-of-band mechanism may be preferable when the FEC | parameters. The out-of-band mechanism may be preferable when the FEC | |||
| parameters are fixed. | parameters are fixed. While this document fully defines the use of | |||
| FEC to protect RTP streams, it also leverages several definitions | ||||
| along with the basic source/repair header description from [RFC6363] | ||||
| in their application to the parity codes defined here. | ||||
| The Redunadncy RTP Stream [RFC7656] repair packets proposed in this | The Redundancy RTP Stream [RFC7656] repair packets proposed in this | |||
| document protect the Source RTP Stream packets that belong to the | document protect the Source RTP Stream packets that belong to the | |||
| same RTP session. | same RTP session. | |||
| The RTP payload formats that are defined in this document address the | The RTP payload formats that are defined in this document address the | |||
| scalability issues experienced with the formats defined in earlier | scalability issues experienced with the formats defined in earlier | |||
| specifications including [RFC2733], [RFC5109] and [SMPTE2022-1]. | specifications including [RFC2733], [RFC5109] and [SMPTE2022-1]. | |||
| 1.1. Parity Codes | 1.1. Parity Codes | |||
| Both the non-interleaved and interleaved parity codes use the | Both the non-interleaved and interleaved parity codes use the | |||
| skipping to change at page 4, line 29 ¶ | skipping to change at page 5, line 5 ¶ | |||
| repair packets may be sent proactively or on-demand based on RTCP | repair packets may be sent proactively or on-demand based on RTCP | |||
| feedback messages such as NACK [RFC4585]. | feedback messages such as NACK [RFC4585]. | |||
| At the receiver side, if all of the source packets are successfully | At the receiver side, if all of the source packets are successfully | |||
| received, there is no need for FEC recovery and the repair packets | received, there is no need for FEC recovery and the repair packets | |||
| are discarded. However, if there are missing source packets, the | are discarded. However, if there are missing source packets, the | |||
| repair packets can be used to recover the missing information. | repair packets can be used to recover the missing information. | |||
| Figure 1 and Figure 2 describe example block diagrams for the | Figure 1 and Figure 2 describe example block diagrams for the | |||
| systematic parity FEC encoder and decoder, respectively. | systematic parity FEC encoder and decoder, respectively. | |||
| +------------+ | +------------+ | |||
| +--+ +--+ +--+ +--+ --> | Systematic | --> +--+ +--+ +--+ +--+ | +--+ +--+ +--+ +--+ --> | Systematic | --> +--+ +--+ +--+ +--+ | |||
| +--+ +--+ +--+ +--+ | Parity FEC | +--+ +--+ +--+ +--+ | +--+ +--+ +--+ +--+ | Parity FEC | +--+ +--+ +--+ +--+ | |||
| | Encoder | | | Encoder | | |||
| | (Sender) | --> +==+ +==+ | | (Sender) | --> +==+ +==+ | |||
| +------------+ +==+ +==+ | +------------+ +==+ +==+ | |||
| Source Packet: +--+ Repair Packet: +==+ | Source Packet: +--+ Repair Packet: +==+ | |||
| +--+ +==+ | +--+ +==+ | |||
| Figure 1: Block diagram for systematic parity FEC encoder | Figure 1: Block diagram for systematic parity FEC encoder | |||
| +------------+ | +------------+ | |||
| +--+ X X +--+ --> | Systematic | --> +--+ +--+ +--+ +--+ | +--+ X X +--+ --> | Systematic | --> +--+ +--+ +--+ +--+ | |||
| +--+ +--+ | Parity FEC | +--+ +--+ +--+ +--+ | +--+ +--+ | Parity FEC | +--+ +--+ +--+ +--+ | |||
| | Decoder | | | Decoder | | |||
| +==+ +==+ --> | (Receiver) | | +==+ +==+ --> | (Receiver) | | |||
| +==+ +==+ +------------+ | +==+ +==+ +------------+ | |||
| Source Packet: +--+ Repair Packet: +==+ Lost Packet: X | Source Packet: +--+ Repair Packet: +==+ Lost Packet: X | |||
| +--+ +==+ | +--+ +==+ | |||
| Figure 2: Block diagram for systematic parity FEC decoder | Figure 2: Block diagram for systematic parity FEC decoder | |||
| In Figure 2, it is clear that the FEC repair packets have to be | In Figure 2, it is clear that the FEC repair packets have to be | |||
| received by the endpoint within a certain amount of time for the FEC | received by the endpoint within a certain amount of time for the FEC | |||
| recovery process to be useful. The repair window is defined as the | recovery process to be useful. The repair window is defined as the | |||
| time that spans a FEC block, which consists of the source packets and | time that spans a FEC block, which consists of the source packets and | |||
| the corresponding repair packets. At the receiver side, the FEC | the corresponding repair packets. At the receiver side, the FEC | |||
| decoder SHOULD buffer source and repair packets at least for the | decoder SHOULD buffer source and repair packets at least for the | |||
| duration of the repair window, to allow all the repair packets to | duration of the repair window, to allow all the repair packets to | |||
| arrive. The FEC decoder can start decoding the already received | arrive. The FEC decoder can start decoding the already received | |||
| packets sooner; however, it should not register a FEC decoding | packets sooner; however, it should not register a FEC decoding | |||
| failure until it waits at least for the duration of the repair | failure until it waits at least for the duration of the repair | |||
| window. | window. | |||
| 1.1.1. 1-D Non-interleaved (Row) FEC Protection | 1.1.1. One-Dimensionsal (1-D) Non-interleaved (Row) FEC Protection | |||
| Consider a group of D x L source packets that have sequence numbers | Consider a group of D x L source packets that have sequence numbers | |||
| starting from 1 running to D x L, and a repair packet is generated by | starting from 1 running to D x L, and a repair packet is generated by | |||
| applying the XOR operation to every L consecutive packets as sketched | applying the XOR operation to every L consecutive packets as sketched | |||
| in Figure 3. This process is referred to as 1-D non-interleaved FEC | in Figure 3. This process is referred to as 1-D non-interleaved FEC | |||
| protection. As a result of this process, D repair packets are | protection. As a result of this process, D repair packets are | |||
| generated, which are referred to as non-interleaved (or row) FEC | generated, which are referred to as non-interleaved (or row) FEC | |||
| repair packets. | repair packets. In general D and L represent values that describe | |||
| how packets are grouped together from a depth and length perspective | ||||
| (respectively) when interleaving all D x L source packets. | ||||
| +--------------------------------------------------+ --- +===+ | +--------------------------------------------------+ --- +===+ | |||
| | S_1 S_2 S3 ... S_L | + |XOR| = |R_1| | | S_1 S_2 S3 ... S_L | + |XOR| = |R_1| | |||
| +--------------------------------------------------+ --- +===+ | +--------------------------------------------------+ --- +===+ | |||
| +--------------------------------------------------+ --- +===+ | +--------------------------------------------------+ --- +===+ | |||
| | S_L+1 S_L+2 S_L+3 ... S_2xL | + |XOR| = |R_2| | | S_L+1 S_L+2 S_L+3 ... S_2xL | + |XOR| = |R_2| | |||
| +--------------------------------------------------+ --- +===+ | +--------------------------------------------------+ --- +===+ | |||
| . . . . . . | . . . . . . | |||
| . . . . . . | . . . . . . | |||
| . . . . . . | . . . . . . | |||
| +--------------------------------------------------+ --- +===+ | +--------------------------------------------------+ --- +===+ | |||
| | S_(D-1)xL+1 S_(D-1)xL+2 S_(D-1)xL+3 ... S_DxL | + |XOR| = |R_D| | | S_(D-1)xL+1 S_(D-1)xL+2 S_(D-1)xL+3 ... S_DxL | + |XOR| = |R_D| | |||
| +--------------------------------------------------+ --- +===+ | +--------------------------------------------------+ --- +===+ | |||
| Figure 3: Generating non-interleaved (row) FEC repair packets | Figure 3: Generating non-interleaved (row) FEC repair packets | |||
| 1.1.2. 1-D Interleaved (Column) FEC Protection | 1.1.2. 1-D Interleaved (Column) FEC Protection | |||
| If the XOR operation is applied to the group of the source packets | If the XOR operation is applied to the group of the source packets | |||
| whose sequence numbers are L apart from each other, as sketched in | whose sequence numbers are L apart from each other, as sketched in | |||
| Figure 4. In this case the endpoint generates L repair packets. | Figure 4. In this case the endpoint generates L repair packets. | |||
| This process is referred to as 1-D interleaved FEC protection, and | This process is referred to as 1-D interleaved FEC protection, and | |||
| skipping to change at page 7, line 29 ¶ | skipping to change at page 10, line 6 ¶ | |||
| The sender may generate interleaved FEC repair packets to combat with | The sender may generate interleaved FEC repair packets to combat with | |||
| the bursty packet losses. However, two or more random packet losses | the bursty packet losses. However, two or more random packet losses | |||
| may hit the source and repair packets in the same column. In that | may hit the source and repair packets in the same column. In that | |||
| case, the repair operation fails as well. This is illustrated in | case, the repair operation fails as well. This is illustrated in | |||
| Figure 6. Note that it is possible that two burst losses may occur | Figure 6. Note that it is possible that two burst losses may occur | |||
| back-to-back, in which case interleaved FEC repair packets may still | back-to-back, in which case interleaved FEC repair packets may still | |||
| fail to recover the lost data. | fail to recover the lost data. | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| | 1 | X | 3 | | 4 | | | 1 | X | 3 | | 4 | | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| | 5 | X | 7 | | 8 | | | 5 | X | 7 | | 8 | | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| +---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ | |||
| | 9 | | 10| | 11| | 12| | | 9 | | 10| | 11| | 12| | |||
| +---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ | |||
| +===+ +===+ +===+ +===+ | +===+ +===+ +===+ +===+ | |||
| |C_1| |C_2| |C_3| |C_4| | |C_1| |C_2| |C_3| |C_4| | |||
| +===+ +===+ +===+ +===+ | +===+ +===+ +===+ +===+ | |||
| Figure 6: Example scenario where 1-D interleaved FEC protection fails | Figure 6: Example scenario where 1-D interleaved FEC protection fails | |||
| error recovery (Periodic Loss) | error recovery (Periodic Loss) | |||
| 1.1.4. 2-D (Row and Column) FEC Protection | 1.1.4. Two-Dimensional (2-D) (Row and Column) FEC Protection | |||
| In networks where the source packets are lost both randomly and in | In networks where the source packets are lost both randomly and in | |||
| bursts, the sender ought to generate both non-interleaved and | bursts, the sender ought to generate both non-interleaved and | |||
| interleaved FEC repair packets. This type of FEC protection is known | interleaved FEC repair packets. This type of FEC protection is known | |||
| as 2-D parity FEC protection. At the expense of generating more FEC | as 2-D parity FEC protection. At the expense of generating more FEC | |||
| repair packets, thus increasing the FEC overhead, 2-D FEC provides | repair packets, thus increasing the FEC overhead, 2-D FEC provides | |||
| superior protection against mixed loss patterns. However, it is | superior protection against mixed loss patterns. However, it is | |||
| still possible for 2-D parity FEC protection to fail to recover all | still possible for 2-D parity FEC protection to fail to recover all | |||
| of the lost source packets if a particular loss pattern occurs. An | of the lost source packets if a particular loss pattern occurs. An | |||
| example scenario is illustrated in Figure 7. | example scenario is illustrated in Figure 7. | |||
| skipping to change at page 9, line 6 ¶ | skipping to change at page 12, line 6 ¶ | |||
| 2-D parity FEC protection also fails when at least two rows are | 2-D parity FEC protection also fails when at least two rows are | |||
| missing a source and the FEC packet and the missing source packets | missing a source and the FEC packet and the missing source packets | |||
| (in at least two rows) are aligned in the same column. An example | (in at least two rows) are aligned in the same column. An example | |||
| loss pattern is sketched in Figure 8. Similarly, 2-D parity FEC | loss pattern is sketched in Figure 8. Similarly, 2-D parity FEC | |||
| protection cannot repair all missing source packets when at least two | protection cannot repair all missing source packets when at least two | |||
| columns are missing a source and the FEC packet and the missing | columns are missing a source and the FEC packet and the missing | |||
| source packets (in at least two columns) are aligned in the same row. | source packets (in at least two columns) are aligned in the same row. | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| | 1 | | 2 | X | 4 | X | | 1 | | 2 | X | 4 | X | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| +---+ +---+ +---+ +---+ +===+ | +---+ +---+ +---+ +---+ +===+ | |||
| | 5 | | 6 | | 7 | | 8 | |R_2| | | 5 | | 6 | | 7 | | 8 | |R_2| | |||
| +---+ +---+ +---+ +---+ +===+ | +---+ +---+ +---+ +---+ +===+ | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| | 9 | | 10| X | 12| X | | 9 | | 10| X | 12| X | |||
| +---+ +---+ +---+ | +---+ +---+ +---+ | |||
| +===+ +===+ +===+ +===+ | +===+ +===+ +===+ +===+ | |||
| |C_1| |C_2| |C_3| |C_4| | |C_1| |C_2| |C_3| |C_4| | |||
| +===+ +===+ +===+ +===+ | +===+ +===+ +===+ +===+ | |||
| Figure 8: Example scenario #2 where 2-D parity FEC protection fails | Figure 8: Example scenario #2 where 2-D parity FEC protection fails | |||
| error recovery | error recovery | |||
| 1.1.5. FEC Overhead Considerations | 1.1.5. FEC Overhead Considerations | |||
| The overhead is defined as the ratio of the number of bytes belonging | The overhead is defined as the ratio of the number of bytes belonging | |||
| to the repair packets to the number of bytes belonging to the | to the repair packets to the number of bytes belonging to the | |||
| protected source packets. | protected source packets. | |||
| Generally, repair packets are larger in size compared to the source | Generally, repair packets are larger in size compared to the source | |||
| packets. Also, not all the source packets are necessarily equal in | packets. Also, not all the source packets are necessarily equal in | |||
| size. However, assuming that each repair packet carries an equal | size. However, assuming that each repair packet carries an equal | |||
| number of bytes carried by a source packet, the overhead for | number of bytes as carried by a source packet, the overhead for | |||
| different FEC protection methods can be computed as follows: | different FEC protection methods can be computed as follows: | |||
| o 1-D Non-interleaved FEC Protection: Overhead = 1/L | o 1-D Non-interleaved FEC Protection: Overhead = 1/L | |||
| o 1-D Interleaved FEC Protection: Overhead = 1/D | o 1-D Interleaved FEC Protection: Overhead = 1/D | |||
| o 2-D Parity FEC Protection: Overhead = 1/L + 1/D | o 2-D Parity FEC Protection: Overhead = 1/L + 1/D | |||
| where L and D are the number of columns and rows in the source block, | where L and D are the number of columns and rows in the source block, | |||
| respectively. | respectively. | |||
| 2. Requirements Notation | 2. Requirements Notation | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| document are to be interpreted as described in [RFC2119]. | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| 3. Definitions and Notations | 3. Definitions and Notations | |||
| 3.1. Definitions | 3.1. Definitions | |||
| This document uses a number of definitions from [RFC6363]. | This document uses a number of definitions from [RFC6363]. | |||
| 1-D Non-interleaved Row FEC: A protection scheme that operates on | 1-D Non-interleaved Row FEC: A protection scheme that operates on | |||
| consecutive source packets in the source block, able to recover a | consecutive source packets in the source block, able to recover a | |||
| single lost source packet per row of the source block. | single lost source packet per row of the source block. | |||
| skipping to change at page 11, line 37 ¶ | skipping to change at page 15, line 7 ¶ | |||
| missing source packets, making this scheme a systematic code. | missing source packets, making this scheme a systematic code. | |||
| The source packets are full RTP packets with optional CSRC list, RTP | The source packets are full RTP packets with optional CSRC list, RTP | |||
| header extension, and padding. If any of these optional elements are | header extension, and padding. If any of these optional elements are | |||
| present in the source RTP packet, and that source packet is lost, | present in the source RTP packet, and that source packet is lost, | |||
| they are recovered by the FEC repair operation, which recovers the | they are recovered by the FEC repair operation, which recovers the | |||
| full source RTP packet including these optional elements. | full source RTP packet including these optional elements. | |||
| 4.2. FEC Repair Packets | 4.2. FEC Repair Packets | |||
| The FEC repair packets MUST contain information that identifies the | The FEC repair packets will contain information that identifies the | |||
| source block they pertain to and the relationship between the | source block they pertain to and the relationship between the | |||
| contained repair packets and the original source block. For this | contained repair packets and the original source block. For this | |||
| purpose, the RTP header of the repair packets is used, as well as | purpose, the RTP header of the repair packets is used, as well as | |||
| another header within the RTP payload, called the FEC header, as | another header within the RTP payload, called the FEC header, as | |||
| shown in Figure 9. | shown in Figure 9. | |||
| Note that all the source stream packets that are protected by a | Note that all the source stream packets that are protected by a | |||
| particular FEC packet need to be in the same RTP session. | particular FEC packet need to be in the same RTP session. | |||
| +------------------------------+ | +------------------------------+ | |||
| skipping to change at page 12, line 6 ¶ | skipping to change at page 15, line 18 ¶ | |||
| source block they pertain to and the relationship between the | source block they pertain to and the relationship between the | |||
| contained repair packets and the original source block. For this | contained repair packets and the original source block. For this | |||
| purpose, the RTP header of the repair packets is used, as well as | purpose, the RTP header of the repair packets is used, as well as | |||
| another header within the RTP payload, called the FEC header, as | another header within the RTP payload, called the FEC header, as | |||
| shown in Figure 9. | shown in Figure 9. | |||
| Note that all the source stream packets that are protected by a | Note that all the source stream packets that are protected by a | |||
| particular FEC packet need to be in the same RTP session. | particular FEC packet need to be in the same RTP session. | |||
| +------------------------------+ | +------------------------------+ | |||
| | IP Header | | | IP Header | | |||
| +------------------------------+ | +------------------------------+ | |||
| | Transport Header | | | Transport Header | | |||
| +------------------------------+ | +------------------------------+ | |||
| | RTP Header | | | RTP Header | | |||
| +------------------------------+ ---+ | +------------------------------+ ---+ | |||
| | FEC Header | | | | FEC Header | | | |||
| +------------------------------+ | RTP Payload | +------------------------------+ | RTP Payload | |||
| | Repair "Payload" | | | | Repair "Payload" | | | |||
| +------------------------------+ ---+ | +------------------------------+ ---+ | |||
| Figure 9: Format of FEC repair packets | Figure 9: Format of FEC repair packets | |||
| Repair "Payload", which follows the FEC Header, includes repair of | The Repair "Payload", which follows the FEC Header, includes repair | |||
| everything following the fixed 12-byte RTP header of the source | of everything following the fixed 12-byte RTP header of each source | |||
| packet, including any CSRC list and header extensions if present. | packet, including any CSRC identifier list and header extensions if | |||
| present. | ||||
| 4.2.1. RTP Header of FEC Repair Packets | 4.2.1. RTP Header of FEC Repair Packets | |||
| The RTP header is formatted according to [RFC3550] with some further | The RTP header is formatted according to [RFC3550] with some further | |||
| clarifications listed below: | clarifications listed below: | |||
| Version (V) 2 bits: This MUST be set to 2 (binary 10), as this | Version (V) 2 bits: This MUST be set to 2 (binary 10), as this | |||
| specification requires all source RTP packets and all FEC repair | specification requires all source RTP packets and all FEC repair | |||
| packets to use RTP version 2. The reason for this restriction is | packets to use RTP version 2. The reason for this restriction is | |||
| the first 2 bits of the FEC header contain other information (R | the first 2 bits of the FEC header contain other information (R | |||
| and F bits) rather than recovering the RTP version field. | and F bits) rather than recovering the RTP version field. | |||
| Padding (P) bit: Source packets can have optional RTP padding, | Padding (P) bit: Source packets can have optional RTP padding, | |||
| which can be recovered. FEC repaire packets can have optional RTP | which can be recovered. FEC repair packets can have optional RTP | |||
| padding, which is independent of the RTP padding of the source | padding, which is independent of the RTP padding of the source | |||
| pakcets. | pakcets. | |||
| Extension (X) bit: Source packets can have optional RTP header | Extension (X) bit: Source packets can have optional RTP header | |||
| extensions, which can be recovered. FEC repair packets can have | extensions, which can be recovered. FEC repair packets can have | |||
| optional RTP header extensions, which are independent of the RTP | optional RTP header extensions, which are independent of the RTP | |||
| header extensions of the source packets. | header extensions of the source packets. | |||
| CSRC Count (CC) 4 bits, and CSRC List (CSRC_i) 32 bits each: | CSRC Count (CC) 4 bits, and CSRC List (CSRC_i) 32 bits each: | |||
| Source packets can have an optional CSRC list and count, which can | Source packets can have an optional CSRC list and count, which can | |||
| skipping to change at page 13, line 14 ¶ | skipping to change at page 16, line 44 ¶ | |||
| Payload Type: The (dynamic) payload type for the FEC repair | Payload Type: The (dynamic) payload type for the FEC repair | |||
| packets is determined through out-of-band means. Note that this | packets is determined through out-of-band means. Note that this | |||
| document registers new payload formats for the repair packets | document registers new payload formats for the repair packets | |||
| (Refer to Section 5 for details). According to [RFC3550], an RTP | (Refer to Section 5 for details). According to [RFC3550], an RTP | |||
| receiver that cannot recognize a payload type must discard it. | receiver that cannot recognize a payload type must discard it. | |||
| This provides backward compatibility. If a non-FEC-capable | This provides backward compatibility. If a non-FEC-capable | |||
| receiver receives a repair packet, it will not recognize the | receiver receives a repair packet, it will not recognize the | |||
| payload type, and hence, will discard the repair packet. | payload type, and hence, will discard the repair packet. | |||
| Sequence Number (SN): The sequence number has the standard | Sequence Number (SN): The sequence number follows the standard | |||
| definition. It MUST be one higher than the sequence number in the | definition provided in [RFC3550]. definition. Therefore it must | |||
| previously transmitted repair packet. The initial value of the | be one higher than the sequence number in the previously | |||
| sequence number SHOULD be random (unpredictable, based on | transmitted repair packet, and the initial value of the sequence | |||
| [RFC3550]). | number should be random (i.e. unpredictable). | |||
| Timestamp (TS): The timestamp SHALL be set to a time corresponding | Timestamp (TS): The timestamp SHALL be set to a time corresponding | |||
| to the repair packet's transmission time. Note that the timestamp | to the repair packet's transmission time. Note that the timestamp | |||
| value has no use in the actual FEC protection process and is | value has no use in the actual FEC protection process and is | |||
| usually useful for jitter calculations. | usually useful for jitter calculations. | |||
| Synchronization Source (SSRC): The SSRC value for each repair | Synchronization Source (SSRC): The SSRC value for each repair | |||
| stream SHALL be randomly assigned as suggested by [RFC3550]. This | stream SHALL be randomly assigned as per the guidelines provided | |||
| allows the sender to multiplex the source and repair RTP streams | in Section 8 of [RFC3550]. This allows the sender to multiplex | |||
| in the same RTP session, or multiplex multiple repair streams in | the source and repair RTP streams in the same RTP session, or | |||
| an RTP session. The repair streams' SSRC's CNAME SHOULD be | multiplex multiple repair streams in an RTP session. The repair | |||
| identical to the CNAME of the source RTP stream(s) that this | streams' SSRC's CNAME MUST be identical to the CNAME of the source | |||
| repair stream protects. In cases when the repair stream covers | RTP stream(s) that this repair stream protects. In cases when the | |||
| packets from multiple source RTP streams with different CNAME | repair stream covers packets from multiple source RTP streams with | |||
| values, any of these CNAME values MAY be used. | different CNAME values, any of these CNAME values MAY be used. | |||
| In some networks, the RTP Source, which produces the source | In some networks, the RTP Source, which produces the source | |||
| packets and the FEC Source, which generates the repair packets | packets and the FEC Source, which generates the repair packets | |||
| from the source packets may not be the same host. In such | from the source packets may not be the same host. In such | |||
| scenarios, using the same CNAME for the source and repair RTP | scenarios, using the same CNAME for the source and repair RTP | |||
| streams means that the RTP Source and the FEC Source MUST share | streams means that the RTP Source and the FEC Source will share | |||
| the same CNAME (for this specific source-repair stream | the same CNAME (for this specific source-repair stream | |||
| association). A common CNAME may be produced based on an | association). A common CNAME may be produced based on an | |||
| algorithm that is known both to the RTP and FEC Source [RFC7022]. | algorithm that is known both to the RTP and FEC Source [RFC7022]. | |||
| This usage is compliant with [RFC3550]. | This usage is compliant with [RFC3550]. | |||
| Note that due to the randomness of the SSRC assignments, there is | Note that due to the randomness of the SSRC assignments, there is | |||
| a possibility of SSRC collision. In such cases, the collisions | a possibility of SSRC collision. In such cases, the collisions | |||
| MUST be resolved as described in [RFC3550]. | must be resolved as described in [RFC3550]. | |||
| 4.2.2. FEC Header of FEC Repair Packets | 4.2.2. FEC Header of FEC Repair Packets | |||
| The format of the FEC header has 3 variants, depending on the values | The format of the FEC header has 3 variants, depending on the values | |||
| in the first 2 bits (R and F bits) as shown in Figure 10. | in the first 2 bits (R and F bits) as shown in Figure 10. Two of | |||
| these variants are meant to describe different methods for deriving | ||||
| the source data from a source packet for a repair packet. This | ||||
| allows for customizing the FEC method to allow for robustness against | ||||
| different levels of burst errors and random packet losses. The third | ||||
| variant is for a straight retransmission of the source packet. | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |R|F|P|X| CC |M| PT recovery | ...varies depending on R/F... | | |R|F|P|X| CC |M| PT recovery | ...varies depending on R/F... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | ...varies depending on R/F... | | | ...varies depending on R/F... | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| : Repair "Payload" follows FEC Header : | : Repair "Payload" follows FEC Header : | |||
| : : | : : | |||
| Figure 10: FEC Header | Figure 10: FEC Header | |||
| Repair "Payload", which follows the FEC Header, includes repair of | The Repair "Payload", which follows the FEC Header, includes repair | |||
| everything following the fixed 12-byte RTP header of the source | of everything following the fixed 12-byte RTP header of each source | |||
| packet, including any CSRC list and header extensions if present. | packet, including any CSRC identifier list and header extensions if | |||
| present. | ||||
| +---+---+----------------------------------------------------------+ | +---+---+----------------------------------------------------------+ | |||
| | R | F | FEC Header variant | | | R | F | FEC Header variant | | |||
| +---+---+----------------------------------------------------------+ | +---+---+----------------------------------------------------------+ | |||
| | 0 | 0 | Flexible FEC Mask fields indicate source packets | | | 0 | 0 | Flexible FEC Mask fields indicate source packets | | |||
| | 0 | 1 | Fixed FEC L/D (cols/rows) fields indicate source packets | | | 0 | 1 | Fixed FEC L/D (cols/rows) fields indicate source packets | | |||
| | 1 | 0 | Retransmission of a single source packet | | | 1 | 0 | Retransmission of a single source packet | | |||
| | 1 | 1 | Invalid, MUST NOT send, MUST ignore if received | | | 1 | 1 | Invalid, MUST NOT send, MUST ignore if received | | |||
| +---+---+----------------------------------------------------------+ | +---+---+----------------------------------------------------------+ | |||
| Figure 11: R and F bit values for FEC Header variants | Figure 11: R and F bit values for FEC Header variants | |||
| The first variant, when R=0 and F=0, has a mask to signal protected | The first variant, when R=0 and F=0, has a mask to signal protected | |||
| source packets, as shown in Figure 12. | source packets, as shown in Figure 12. | |||
| The second variant, when R=0 and F=1, has a number of columns (L) and | The second variant, when R=0 and F=1, has a number of columns (L) and | |||
| rows (D) to signal protected source packets, as shown in Figure 13. | rows (D) to signal protected source packets, as shown in Figure 13. | |||
| skipping to change at page 16, line 29 ¶ | skipping to change at page 21, line 35 ¶ | |||
| o The Mask fields indicate a bitmask of which source packets are | o The Mask fields indicate a bitmask of which source packets are | |||
| protected by this FEC repair packet, where bit j of the mask set | protected by this FEC repair packet, where bit j of the mask set | |||
| to 1 indicates that the source packet with sequence number (SN | to 1 indicates that the source packet with sequence number (SN | |||
| base_i + j) is protected by this FEC repair packet, where j=0 is | base_i + j) is protected by this FEC repair packet, where j=0 is | |||
| the most significant bit in the mask. | the most significant bit in the mask. | |||
| o The k-bit in the bitmasks indicates if the mask is 15, 46, or 110 | o The k-bit in the bitmasks indicates if the mask is 15, 46, or 110 | |||
| bits. k=1 denotes that another mask follows, and k=0 denotes that | bits. k=1 denotes that another mask follows, and k=0 denotes that | |||
| it is the last block of mask. | it is the last block of mask. | |||
| o Repair "Payload", which follows the FEC Header, includes repair of | o The Repair "Payload", which follows the FEC Header, includes | |||
| everything following the fixed 12-byte RTP header of the source | repair of everything following the fixed 12-byte RTP header of | |||
| packet, including any CSRC list and header extensions if present. | each source packet, including any CSRC identifier list and header | |||
| extensions if present. | ||||
| 4.2.2.2. FEC Header with Fixed L Columns and D Rows | 4.2.2.2. FEC Header with Fixed L Columns and D Rows | |||
| When R=0 and F=1, the FEC Header includes L and D fields for fixed | When R=0 and F=1, the FEC Header includes L and D fields for fixed | |||
| columns and rows. The other fields are the same as the prior | columns and rows. The other fields are the same as the prior | |||
| section. As in the previous section, the CSRC_i (32 bits) field in | section. As in the previous section, the CSRC_i (32 bits) field in | |||
| the RTP Header (not FEC Header) describes the SSRC of the source | the RTP Header (not FEC Header) describes the SSRC of the source | |||
| packets protected by this particular FEC packet. If there are | packets protected by this particular FEC packet. If there are | |||
| multiple SSRC's protected by the FEC packet, then there will be | multiple SSRC's protected by the FEC packet, then there will be | |||
| multiple blocks of data containing an SN base along with L and D | multiple blocks of data containing an SN base along with L and D | |||
| skipping to change at page 20, line 19 ¶ | skipping to change at page 26, line 28 ¶ | |||
| Published specification: [RFCXXXX]. | Published specification: [RFCXXXX]. | |||
| Applications that use this media type: Multimedia applications that | Applications that use this media type: Multimedia applications that | |||
| want to improve resiliency against packet loss by sending redundant | want to improve resiliency against packet loss by sending redundant | |||
| data in addition to the source media. | data in addition to the source media. | |||
| Fragment identifier considerations: None. | Fragment identifier considerations: None. | |||
| Additional information: None. | Additional information: None. | |||
| Person & email address to contact for further information: Varun | Person & email address to contact for further information: IESG | |||
| Singh <varun@callstats.io> and IETF Audio/Video Transport Payloads | <varun@callstats.io> and IETF Audio/Video Transport Payloads Working | |||
| Working Group. | Group (or it's successor as delegated by the IESG). | |||
| Intended usage: COMMON. | Intended usage: COMMON. | |||
| Restriction on usage: This media type depends on RTP framing, and | Restriction on usage: This media type depends on RTP framing, and | |||
| hence, is only defined for transport via RTP [RFC3550]. | hence, is only defined for transport via RTP [RFC3550]. | |||
| Author: Varun Singh <varun@callstats.io>. | Author: IESG <iesg@ietf.org>. | |||
| Change controller: IETF Audio/Video Transport Working Group delegated | ||||
| from the IESG. | ||||
| Provisional registration? (standards tree only): Yes. | Change controller: IETF Audio/Video Transport Payloads Working Group | |||
| delegated from the IESG (or it's successor as delegated by the IESG). | ||||
| 5.1.2. Registration of video/flexfec | 5.1.2. Registration of video/flexfec | |||
| Type name: video | Type name: video | |||
| Subtype name: flexfec | Subtype name: flexfec | |||
| Required parameters: | Required parameters: | |||
| o rate: The RTP timestamp (clock) rate. The rate SHALL be larger | o rate: The RTP timestamp (clock) rate. The rate SHALL be larger | |||
| skipping to change at page 21, line 40 ¶ | skipping to change at page 27, line 49 ¶ | |||
| Published specification: [RFCXXXX]. | Published specification: [RFCXXXX]. | |||
| Applications that use this media type: Multimedia applications that | Applications that use this media type: Multimedia applications that | |||
| want to improve resiliency against packet loss by sending redundant | want to improve resiliency against packet loss by sending redundant | |||
| data in addition to the source media. | data in addition to the source media. | |||
| Fragment identifier considerations: None. | Fragment identifier considerations: None. | |||
| Additional information: None. | Additional information: None. | |||
| Person & email address to contact for further information: Varun | Person & email address to contact for further information: IESG | |||
| Singh <varun@callstats.io> and IETF Audio/Video Transport Payloads | <iesg@ietf.org> and IETF Audio/Video Transport Payloads Working Group | |||
| Working Group. | (or it's successor as delegated by the IESG). | |||
| Intended usage: COMMON. | Intended usage: COMMON. | |||
| Restriction on usage: This media type depends on RTP framing, and | Restriction on usage: This media type depends on RTP framing, and | |||
| hence, is only defined for transport via RTP [RFC3550]. | hence, is only defined for transport via RTP [RFC3550]. | |||
| Author: Varun Singh <varun@callstats.io>. | Author: IESG <iesg@ietf.org>. | |||
| Change controller: IETF Audio/Video Transport Working Group delegated | ||||
| from the IESG. | ||||
| Provisional registration? (standards tree only): Yes. | Change controller: IETF Audio/Video Transport Payloads Working Group | |||
| delegated from the IESG (or it's successor as delegated by the IESG). | ||||
| 5.1.3. Registration of text/flexfec | 5.1.3. Registration of text/flexfec | |||
| Type name: text | Type name: text | |||
| Subtype name: flexfec | Subtype name: flexfec | |||
| Required parameters: | Required parameters: | |||
| o rate: The RTP timestamp (clock) rate. The rate SHALL be larger | o rate: The RTP timestamp (clock) rate. The rate SHALL be larger | |||
| skipping to change at page 23, line 13 ¶ | skipping to change at page 29, line 22 ¶ | |||
| Published specification: [RFCXXXX]. | Published specification: [RFCXXXX]. | |||
| Applications that use this media type: Multimedia applications that | Applications that use this media type: Multimedia applications that | |||
| want to improve resiliency against packet loss by sending redundant | want to improve resiliency against packet loss by sending redundant | |||
| data in addition to the source media. | data in addition to the source media. | |||
| Fragment identifier considerations: None. | Fragment identifier considerations: None. | |||
| Additional information: None. | Additional information: None. | |||
| Person & email address to contact for further information: Varun | Person & email address to contact for further information: IESG | |||
| Singh <vvarun@callstats.io> and IETF Audio/Video Transport Payloads | <viesg@ietf.org> and IETF Audio/Video Transport Payloads Working | |||
| Working Group. | Group (or it's successor as delegated by the IESG). | |||
| Intended usage: COMMON. | Intended usage: COMMON. | |||
| Restriction on usage: This media type depends on RTP framing, and | Restriction on usage: This media type depends on RTP framing, and | |||
| hence, is only defined for transport via RTP [RFC3550]. | hence, is only defined for transport via RTP [RFC3550]. | |||
| Author: Varun Singh <varun@callstats.io>. | Author: IESG <iesg@ietf.org>. | |||
| Change controller: IETF Audio/Video Transport Working Group delegated | ||||
| from the IESG. | ||||
| Provisional registration? (standards tree only): Yes. | Change controller: IETF Audio/Video Transport Payloads Working Group | |||
| delegated from the IESG (or it's successor as delegated by the IESG). | ||||
| 5.1.4. Registration of application/flexfec | 5.1.4. Registration of application/flexfec | |||
| Type name: application | Type name: application | |||
| Subtype name: flexfec | Subtype name: flexfec | |||
| Required parameters: | Required parameters: | |||
| o rate: The RTP timestamp (clock) rate. The rate SHALL be larger | o rate: The RTP timestamp (clock) rate. The rate SHALL be larger | |||
| skipping to change at page 24, line 36 ¶ | skipping to change at page 30, line 42 ¶ | |||
| Published specification: [RFCXXXX]. | Published specification: [RFCXXXX]. | |||
| Applications that use this media type: Multimedia applications that | Applications that use this media type: Multimedia applications that | |||
| want to improve resiliency against packet loss by sending redundant | want to improve resiliency against packet loss by sending redundant | |||
| data in addition to the source media. | data in addition to the source media. | |||
| Fragment identifier considerations: None. | Fragment identifier considerations: None. | |||
| Additional information: None. | Additional information: None. | |||
| Person & email address to contact for further information: Varun | Person & email address to contact for further information: IESG | |||
| Singh <varun@callstats.io> and IETF Audio/Video Transport Payloads | <iesg@ietf.org> and IETF Audio/Video Transport Payloads Working Group | |||
| Working Group. | (or it's successor as delegated by the IESG). | |||
| Intended usage: COMMON. | Intended usage: COMMON. | |||
| Restriction on usage: This media type depends on RTP framing, and | Restriction on usage: This media type depends on RTP framing, and | |||
| hence, is only defined for transport via RTP [RFC3550]. | hence, is only defined for transport via RTP [RFC3550]. | |||
| Author: Varun Singh <varun@callstats.io>. | Author: IESG <iesg@ietf.org>. | |||
| Change controller: IETF Audio/Video Transport Working Group delegated | ||||
| from the IESG. | ||||
| Provisional registration? (standards tree only): Yes. | Change controller: IETF Audio/Video Transport Payloads Working Group | |||
| delegated from the IESG (or it's successor as delegated by the IESG). | ||||
| 5.2. Mapping to SDP Parameters | 5.2. Mapping to SDP Parameters | |||
| Applications that are using RTP transport commonly use Session | Applications that use the RTP transport commonly use Session | |||
| Description Protocol (SDP) [RFC4566] to describe their RTP sessions. | Description Protocol (SDP) [RFC4566] to describe their RTP sessions. | |||
| The information that is used to specify the media types in an RTP | The information that is used to specify the media types in an RTP | |||
| session has specific mappings to the fields in an SDP description. | session has specific mappings to the fields in an SDP description. | |||
| This section provides these mappings for the media subtypes | This section provides these mappings for the media subtypes | |||
| registered by this document. Note that if an application does not | registered by this document. Note that if an application does not | |||
| use SDP to describe the RTP sessions, an appropriate mapping must be | use SDP to describe the RTP sessions, an appropriate mapping must be | |||
| defined and used to specify the media types and their parameters for | defined and used to specify the media types and their parameters for | |||
| the control/description protocol employed by the application. | the control/description protocol employed by the application. | |||
| The mapping of the media type specification for "non-interleaved- | The mapping of the media type specification for "non-interleaved- | |||
| skipping to change at page 25, line 43 ¶ | skipping to change at page 31, line 46 ¶ | |||
| 5.2.1. Offer-Answer Model Considerations | 5.2.1. Offer-Answer Model Considerations | |||
| When offering 1-D interleaved parity FEC over RTP using SDP in an | When offering 1-D interleaved parity FEC over RTP using SDP in an | |||
| Offer/Answer model [RFC3264], the following considerations apply: | Offer/Answer model [RFC3264], the following considerations apply: | |||
| o Each combination of the L and D parameters produces a different | o Each combination of the L and D parameters produces a different | |||
| FEC data and is not compatible with any other combination. A | FEC data and is not compatible with any other combination. A | |||
| sender application may desire to offer multiple offers with | sender application may desire to offer multiple offers with | |||
| different sets of L and D values as long as the parameter values | different sets of L and D values as long as the parameter values | |||
| are valid. The receiver SHOULD normally choose the offer that has | are valid. The receiver SHOULD choose the offer that has a | |||
| a sufficient amount of interleaving. If multiple such offers | sufficient amount of interleaving. If multiple such offers exist, | |||
| exist, the receiver may choose the offer that has the lowest | the receiver may choose the offer that has the lowest overhead or | |||
| overhead or the one that requires the smallest amount of | the one that requires the smallest amount of buffering. The | |||
| buffering. The selection depends on the application requirements. | selection depends on the application requirements. | |||
| o The value for the repair-window parameter depends on the L and D | o The value for the repair-window parameter depends on the L and D | |||
| values and cannot be chosen arbitrarily. More specifically, L and | values and cannot be chosen arbitrarily. More specifically, L and | |||
| D values determine the lower limit for the repair-window size. | D values determine the lower limit for the repair-window size. | |||
| The upper limit of the repair-window size does not depend on the L | The upper limit of the repair-window size does not depend on the L | |||
| and D values. | and D values. | |||
| o Although combinations with the same L and D values but with | o Although combinations with the same L and D values but with | |||
| different repair-window sizes produce the same FEC data, such | different repair-window sizes produce the same FEC data, such | |||
| combinations are still considered different offers. The size of | combinations are still considered different offers. The size of | |||
| the repair-window is related to the maximum delay between the | the repair-window is related to the maximum delay between the | |||
| transmission of a source packet and the associated repair packet. | transmission of a source packet and the associated repair packet. | |||
| This directly impacts the buffering requirement on the receiver | This directly impacts the buffering requirement on the receiver | |||
| side and the receiver must consider this when choosing an offer. | side and the receiver must consider this when choosing an offer. | |||
| o Any unknown option in the offer MUST be ignored and deleted from | o Any unknown option in the offer MUST be ignored and deleted from | |||
| the answer. If FEC is not desired by the receiver, it can be | the answer. If FEC is not desired by the receiver, it can be | |||
| deleted from the answer. | deleted from the answer. | |||
| 5.2.2. Declarative Considerations | 5.2.2. Declarative Considerations | |||
| In declarative usage, like SDP in the Real-time Streaming Protocol | In declarative usage, like SDP in the Real-time Streaming Protocol | |||
| (RTSP, see [RFC2326] and [RFC7826]) or the Session Announcement | (RTSP, for RTSP 1.0 see [RFC2326] and for RTSP 2.0 see [RFC7826]) or | |||
| Protocol (SAP) [RFC2974], the following considerations apply: | the Session Announcement Protocol (SAP) [RFC2974], the following | |||
| considerations apply: | ||||
| o The payload format configuration parameters are all declarative | o The payload format configuration parameters are all declarative | |||
| and a participant MUST use the configuration that is provided for | and a participant MUST use the configuration that is provided for | |||
| the session. | the session. | |||
| o More than one configuration may be provided (if desired) by | o More than one configuration may be provided (if desired) by | |||
| declaring multiple RTP payload types. In that case, the receivers | declaring multiple RTP payload types. In that case, the receivers | |||
| should choose the repair stream that is best for them. | should choose the repair stream that is best for them. | |||
| 6. Protection and Recovery Procedures - Parity Codes | 6. Protection and Recovery Procedures - Parity Codes | |||
| skipping to change at page 29, line 27 ¶ | skipping to change at page 35, line 33 ¶ | |||
| To use flexible bitmasks, the first two FEC header bits MUST have R=0 | To use flexible bitmasks, the first two FEC header bits MUST have R=0 | |||
| and F=0. A 15-bit, 46-bit, or 110-bit mask indicates which source | and F=0. A 15-bit, 46-bit, or 110-bit mask indicates which source | |||
| packets are protected by a FEC repair packet. If the bit i in the | packets are protected by a FEC repair packet. If the bit i in the | |||
| mask is set to 1, the source packet number N + i is protected by this | mask is set to 1, the source packet number N + i is protected by this | |||
| FEC repair packet, where N is the sequence number base indicated in | FEC repair packet, where N is the sequence number base indicated in | |||
| the FEC header. The most significant bit of the mask corresponds to | the FEC header. The most significant bit of the mask corresponds to | |||
| i=0. The least signficant bit of the mask corresponds to i=14 in the | i=0. The least signficant bit of the mask corresponds to i=14 in the | |||
| 15-bit mask, i=45 in the 46-bit mask, or i=109 in the 110-bit mask. | 15-bit mask, i=45 in the 46-bit mask, or i=109 in the 110-bit mask. | |||
| The bitmasks are able to represent arbitrary protection patterns, for | The bitmasks are able to represent arbitrary protection patterns, for | |||
| example, 1-D interleaved, 1-D non-interleaved, 2-D, staircase. | example, 1-D interleaved, 1-D non-interleaved, 2-D. | |||
| 6.3.1.2. Using L and D Offsets | 6.3.1.2. Using L and D Offsets | |||
| Denote the set of the source packets associated with repair packet p* | Denote the set of the source packets associated with repair packet p* | |||
| by set T(p*). Note that in a source block whose size is L columns by | by set T(p*). Note that in a source block whose size is L columns by | |||
| D rows, set T includes D source packets plus one repair packet for | D rows, set T includes D source packets plus one repair packet for | |||
| the FEC protection applied over a column, and L source packets plus | the FEC protection applied over a column, and L source packets plus | |||
| one repair packet for the FEC protection applied over a row. Recall | one repair packet for the FEC protection applied over a row. Recall | |||
| that 1-D interleaved and non-interleaved FEC protection can fully | that 1-D interleaved and non-interleaved FEC protection can fully | |||
| recover the missing information if there is only one source packet | recover the missing information if there is only one source packet | |||
| skipping to change at page 32, line 9 ¶ | skipping to change at page 38, line 32 ¶ | |||
| recovery of the RTP "payload" is as follows, where "payload" refers | recovery of the RTP "payload" is as follows, where "payload" refers | |||
| to everything following the fixed 12-byte RTP header, including | to everything following the fixed 12-byte RTP header, including | |||
| extensions, CSRC list, true payload and padding. | extensions, CSRC list, true payload and padding. | |||
| 1. Append Y bytes to the new packet. | 1. Append Y bytes to the new packet. | |||
| 2. For each of the source packets that are successfully received in | 2. For each of the source packets that are successfully received in | |||
| T, compute the bit string from the Y octets of data starting with | T, compute the bit string from the Y octets of data starting with | |||
| the 13th octet of the packet. If any of the bit strings | the 13th octet of the packet. If any of the bit strings | |||
| generated from the source packets has a length shorter than Y, | generated from the source packets has a length shorter than Y, | |||
| pad them to that length. The padding of octet 0 MUST be added at | pad them to that length. The zero-padding octets MUST be added | |||
| the end of the bit string. Note that the information of the | at the end of the bit string. Note that the information of the | |||
| first 8 octets are protected by the FEC header. | first 8 octets are protected by the FEC header. | |||
| 3. For the repair packet in T, compute the FEC bit string from the | 3. For the repair packet in T, compute the FEC bit string from the | |||
| repair packet payload, i.e., the Y octets of data following the | repair packet payload, i.e., the Y octets of data following the | |||
| FEC header. Note that the FEC header may be different sizes | FEC header. Note that the FEC header may be different sizes | |||
| depending on the variant and bitmask size. | depending on the variant and bitmask size. | |||
| 4. Calculate the recovered bit string as the XOR of the bit strings | 4. Calculate the recovered bit string as the XOR of the bit strings | |||
| generated from all source packets in T and the FEC bit string | generated from all source packets in T and the FEC bit string | |||
| generated from the repair packet in T. | generated from the repair packet in T. | |||
| skipping to change at page 36, line 15 ¶ | skipping to change at page 44, line 15 ¶ | |||
| 7.1.2. Example SDP for Flexible FEC Protection with explicit signalling | 7.1.2. Example SDP for Flexible FEC Protection with explicit signalling | |||
| in the SDP | in the SDP | |||
| This example shows one source video stream (ssrc:1234) and one FEC | This example shows one source video stream (ssrc:1234) and one FEC | |||
| repair streams (ssrc:2345). One FEC group is formed with the | repair streams (ssrc:2345). One FEC group is formed with the | |||
| "a=ssrc-group:FEC-FR 1234 2345" line. The source and repair streams | "a=ssrc-group:FEC-FR 1234 2345" line. The source and repair streams | |||
| are multiplexed on different SSRCs. The repair window is set to 200 | are multiplexed on different SSRCs. The repair window is set to 200 | |||
| ms. | ms. | |||
| v=0 | v=0 | |||
| o=ali 1122334455 1122334466 IN IP4 fec.example.com | o=ali 1122334455 1122334466 IN IP4 fec.example.com | |||
| s=2-D Parity FEC with no in band signalling Example | s=2-D Parity FEC with no in band signalling Example | |||
| t=0 0 | t=0 0 | |||
| m=video 30000 RTP/AVP 100 110 | m=video 30000 RTP/AVP 100 110 | |||
| c=IN IP4 233.252.0.1/127 | ||||
| c=IN IP4 192.0.2.0/24 | ||||
| a=rtpmap:100 MP2T/90000 | a=rtpmap:100 MP2T/90000 | |||
| a=rtpmap:110 flexfec/90000 | a=rtpmap:110 flexfec/90000 | |||
| a=fmtp:110 L:5; D:10; ToP:2; repair-window:200000 | a=fmtp:110 L:5; D:10; ToP:2; repair-window:200000 | |||
| a=ssrc:1234 | a=ssrc:1234 | |||
| a=ssrc:2345 | a=ssrc:2345 | |||
| a=ssrc-group:FEC-FR 1234 2345 | a=ssrc-group:FEC-FR 1234 2345 | |||
| 7.2. On the Use of the RTP Stream Identifier Source Description | 7.2. On the Use of the RTP Stream Identifier Source Description | |||
| The RTP Stream Identifier Source Description [I-D.ietf-avtext-rid] is | The RTP Stream Identifier Source Description [I-D.ietf-avtext-rid] is | |||
| a format that can be used to identify a single RTP source stream | a format that can be used to identify a single RTP source stream | |||
| along with an associated repair stream. However, this specification | along with an associated repair stream. However, this specification | |||
| already defines a method of source and repair stream identification | already defines a method of source and repair stream identification | |||
| that can enable protection of multiple source streams with a single | that can enable protection of multiple source streams with a single | |||
| repair stream. Therefore the RTP Stream Idenfifer Source Description | repair stream. Therefore the RTP Stream Idenfifer Source Description | |||
| SHOULD NOT be used for the Flexible FEC payload format | SHOULD NOT be used for the Flexible FEC payload format | |||
| 8. Congestion Control Considerations | 8. Congestion Control Considerations | |||
| FEC is an effective approach to provide applications resiliency | FEC is an effective approach to provide applications resiliency | |||
| against packet losses. However, in networks where the congestion is | against packet losses. However, in networks where the congestion is | |||
| a major contributor to the packet loss, the potential impacts of | a major contributor to the packet loss, the potential impacts of | |||
| using FEC MUST be considered carefully before injecting the repair | using FEC should be considered carefully before injecting the repair | |||
| streams into the network. In particular, in bandwidth-limited | streams into the network. In particular, in bandwidth-limited | |||
| networks, FEC repair streams may consume a significant part of the | networks, FEC repair streams may consume a significant part of the | |||
| available bandwidth and consequently may congest the network. In | available bandwidth and consequently may congest the network. In | |||
| such cases, the applications MUST NOT arbitrarily increase the amount | such cases, the applications MUST NOT arbitrarily increase the amount | |||
| of FEC protection since doing so may lead to a congestion collapse. | of FEC protection since doing so may lead to a congestion collapse. | |||
| If desired, stronger FEC protection MAY be applied only after the | If desired, stronger FEC protection MAY be applied only after the | |||
| source rate has been reduced. | source rate has been reduced. | |||
| In a network-friendly implementation, an application SHOULD NOT send/ | In a network-friendly implementation, an application should avoid | |||
| receive FEC repair streams if it knows that sending/receiving those | sending/receiving FEC repair streams if it knows that sending/ | |||
| FEC repair streams would not help at all in recovering the missing | receiving those FEC repair streams would not help at all in | |||
| packets. It is RECOMMENDED that the amount and type (row, column, or | recovering the missing packets. It is RECOMMENDED that the amount | |||
| both) of FEC protection is adjusted dynamically based on the packet | and type (row, column, or both) of FEC protection is adjusted | |||
| loss rate and burst loss length observed by the applications. | dynamically based on the packet loss rate and burst loss length | |||
| observed by the applications. | ||||
| In multicast scenarios, it may be difficult to optimize the FEC | In multicast scenarios, it may be difficult to optimize the FEC | |||
| protection per receiver. If there is a large variation among the | protection per receiver. If there is a large variation among the | |||
| levels of FEC protection needed by different receivers, it is | levels of FEC protection needed by different receivers, it is | |||
| RECOMMENDED that the sender offers multiple repair streams with | RECOMMENDED that the sender offers multiple repair streams with | |||
| different levels of FEC protection and the receivers join the | different levels of FEC protection and the receivers join the | |||
| corresponding multicast sessions to receive the repair stream(s) that | corresponding multicast sessions to receive the repair stream(s) that | |||
| is best for them. | is best for them. | |||
| 9. Security Considerations | 9. Security Considerations | |||
| skipping to change at page 37, line 47 ¶ | skipping to change at page 46, line 13 ¶ | |||
| payloads following this memo may vary. It is dependent on the | payloads following this memo may vary. It is dependent on the | |||
| application, transport and signaling protocol employed. Therefore, a | application, transport and signaling protocol employed. Therefore, a | |||
| single mechanism is not sufficient, although if suitable, using the | single mechanism is not sufficient, although if suitable, using the | |||
| Secure Real-time Transport Protocol (SRTP) [RFC3711] is recommended. | Secure Real-time Transport Protocol (SRTP) [RFC3711] is recommended. | |||
| Other mechanisms that may be used are IPsec [RFC4301] and Transport | Other mechanisms that may be used are IPsec [RFC4301] and Transport | |||
| Layer Security (TLS, see [RFC8446]) (RTP over TCP); other | Layer Security (TLS, see [RFC8446]) (RTP over TCP); other | |||
| alternatives may exist. | alternatives may exist. | |||
| Given that FLEX FEC enables the protection of multiple source | Given that FLEX FEC enables the protection of multiple source | |||
| streams, there exists the possibility that multiple source buffers | streams, there exists the possibility that multiple source buffers | |||
| may be created that may not be used. In addition, the interaction | may be created that may not be used. An attacker could leverage | |||
| between a FLEX FEC implementation and higher-layer applications may | unused source buffers to as a means of occupying memory in a FLEX FEC | |||
| be affected by non-uniform processing requirements of the FEC scheme. | endpoint. Moreover the application source data may not be perfectly | |||
| matched with FLEX FEC source partitioning. If this is the case, | ||||
| there is a possibility for unprotected source data if, for instance, | ||||
| the FLEX FEC implementation discards data that does not fit perfectly | ||||
| into its source processing requirements. | ||||
| 10. IANA Considerations | 10. IANA Considerations | |||
| New media subtypes are subject to IANA registration. For the | New media subtypes are subject to IANA registration. For the | |||
| registration of the payload formats and their parameters introduced | registration of the payload formats and their parameters introduced | |||
| in this document, refer to Section 5. | in this document, refer to Section 5. | |||
| 11. Acknowledgments | 11. Acknowledgments | |||
| Some parts of this document are borrowed from [RFC5109]. Thus, the | Some parts of this document are borrowed from [RFC5109]. Thus, the | |||
| skipping to change at page 39, line 25 ¶ | skipping to change at page 47, line 43 ¶ | |||
| [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type | [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type | |||
| Specifications and Registration Procedures", BCP 13, | Specifications and Registration Procedures", BCP 13, | |||
| RFC 6838, DOI 10.17487/RFC6838, January 2013, | RFC 6838, DOI 10.17487/RFC6838, January 2013, | |||
| <https://www.rfc-editor.org/info/rfc6838>. | <https://www.rfc-editor.org/info/rfc6838>. | |||
| [RFC7022] Begen, A., Perkins, C., Wing, D., and E. Rescorla, | [RFC7022] Begen, A., Perkins, C., Wing, D., and E. Rescorla, | |||
| "Guidelines for Choosing RTP Control Protocol (RTCP) | "Guidelines for Choosing RTP Control Protocol (RTCP) | |||
| Canonical Names (CNAMEs)", RFC 7022, DOI 10.17487/RFC7022, | Canonical Names (CNAMEs)", RFC 7022, DOI 10.17487/RFC7022, | |||
| September 2013, <https://www.rfc-editor.org/info/rfc7022>. | September 2013, <https://www.rfc-editor.org/info/rfc7022>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| 12.2. Informative References | 12.2. Informative References | |||
| [I-D.ietf-avtext-rid] | [I-D.ietf-avtext-rid] | |||
| Roach, A., Nandakumar, S., and P. Thatcher, "RTP Stream | Roach, A., Nandakumar, S., and P. Thatcher, "RTP Stream | |||
| Identifier Source Description (SDES)", draft-ietf-avtext- | Identifier Source Description (SDES)", draft-ietf-avtext- | |||
| rid-09 (work in progress), October 2016. | rid-09 (work in progress), October 2016. | |||
| [RFC2326] Schulzrinne, H., Rao, A., and R. Lanphier, "Real Time | [RFC2326] Schulzrinne, H., Rao, A., and R. Lanphier, "Real Time | |||
| Streaming Protocol (RTSP)", RFC 2326, | Streaming Protocol (RTSP)", RFC 2326, | |||
| DOI 10.17487/RFC2326, April 1998, | DOI 10.17487/RFC2326, April 1998, | |||
| End of changes. 127 change blocks. | ||||
| 143 lines changed or deleted | 237 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/ | ||||