draft-ietf-mmusic-rfc4756bis-08.txt | draft-ietf-mmusic-rfc4756bis-09.txt | |||
---|---|---|---|---|
MMUSIC A. Begen | MMUSIC A. Begen | |||
Internet-Draft Cisco | Internet-Draft Cisco | |||
Obsoletes: 4756 April 28, 2010 | Obsoletes: 4756 May 10, 2010 | |||
(if approved) | (if approved) | |||
Intended status: Standards Track | Intended status: Standards Track | |||
Expires: October 30, 2010 | Expires: November 11, 2010 | |||
Forward Error Correction Grouping Semantics in Session Description | Forward Error Correction Grouping Semantics in Session Description | |||
Protocol | Protocol | |||
draft-ietf-mmusic-rfc4756bis-08 | draft-ietf-mmusic-rfc4756bis-09 | |||
Abstract | Abstract | |||
The Session Description Protocol (SDP) supports grouping media lines. | This document defines the semantics for grouping the associated | |||
SDP also has semantics defined for grouping the associated source and | source and Forward Error Correction (FEC)-based repair flows in the | |||
Forward Error Correction (FEC)-based repair flows. However, the | Session Description Protocol (SDP). The semantics defined in this | |||
semantics that were defined in RFC 4756 generally fail to provide the | document are to be used with the SDP Grouping Framework (RFC | |||
specific grouping relationships between the source and repair flows | 3388bis). These semantics allow the description of grouping | |||
when there is more than one source and/or repair flow in the same | relationships between the source and repair flows when one or more | |||
group. Furthermore, the existing semantics do not support describing | source and/or repair flow are associated in the same group, and they | |||
additive repair flows. This document addresses these issues by | provide support for additive repair flows. Synchronization Source | |||
introducing new FEC grouping semantics. Synchronization Source | (SSRC)-level grouping semantics are also defined in this document for | |||
(SSRC)-level grouping semantics are also introduced in this document | Real-time Transport Protocol (RTP) streams using SSRC multiplexing. | |||
for Real-time Transport Protocol (RTP) streams using SSRC | ||||
multiplexing. | ||||
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 | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
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 http://datatracker.ietf.org/drafts/current/. | Drafts is at http://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 October 30, 2010. | This Internet-Draft will expire on November 11, 2010. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 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 | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://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 | |||
skipping to change at page 2, line 20 | skipping to change at page 2, line 18 | |||
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 | |||
2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 5 | 2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 5 | |||
3. Requirements and Changes from RFC 4756 . . . . . . . . . . . . 5 | 3. Requirements and Changes from RFC 4756 . . . . . . . . . . . . 5 | |||
3.1. Source and Repair Flow Associations . . . . . . . . . . . 5 | 3.1. FEC Grouping Requirements . . . . . . . . . . . . . . . . 5 | |||
3.2. Support for Additivity . . . . . . . . . . . . . . . . . . 6 | 3.2. Source and Repair Flow Associations . . . . . . . . . . . 6 | |||
4. FEC Grouping . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.3. Support for Additivity . . . . . . . . . . . . . . . . . . 6 | |||
4.1. Old "FEC" Grouping Semantics . . . . . . . . . . . . . . . 6 | 4. FEC Grouping . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.2. New "FEC-FR" Grouping Semantics . . . . . . . . . . . . . 7 | 4.1. "FEC-FR" Grouping Semantics . . . . . . . . . . . . . . . 7 | |||
4.3. SDP Example . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. SDP Example . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.4. Grouping for SSRC-Multiplexed RTP Streams . . . . . . . . 8 | 4.3. FEC Grouping for SSRC-Multiplexed RTP Streams . . . . . . 9 | |||
4.5. SDP Offer/Answer Model and Backward-Compatibility | 4.4. "FEC" Grouping Semantics . . . . . . . . . . . . . . . . . 10 | |||
Considerations . . . . . . . . . . . . . . . . . . . . . . 10 | 4.5. SDP Offer/Answer Model and RFC 4756 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | Backward-Compatibility Considerations . . . . . . . . . . 11 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | |||
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 12 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 12 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 13 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 13 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 14 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
1. Introduction | 1. Introduction | |||
Any application that needs a reliable transmission over an unreliable | Any application that needs a reliable transmission over an unreliable | |||
packet network has to cope with packet losses. Forward Error | packet network has to cope with packet losses. Forward Error | |||
Correction (FEC) is an effective approach that improves the | Correction (FEC) is an effective approach that improves the | |||
reliabilty of the transmission particularly in multicast and | reliability of the transmission particularly in multicast and | |||
broadcast applications where the feedback from the receiver(s) is | broadcast applications where the feedback from the receiver(s) is | |||
potentially limited. | potentially limited. | |||
In a nutshell, FEC groups source packets into blocks and applies | In a nutshell, FEC groups source packets into blocks and applies | |||
protection to generate a desired number of repair packets. These | protection to generate a desired number of repair packets. These | |||
repair packets may be sent on demand or independently of any receiver | repair packets may be sent on demand or independently of any receiver | |||
feedback. The choice depends on the FEC scheme, the packet loss | feedback. The choice depends on the FEC scheme, the packet loss | |||
characteristics of the underlying network, the transport scheme | characteristics of the underlying network, the transport scheme | |||
(e.g., unicast, multicast and broadcast) and the application. At the | (e.g., unicast, multicast and broadcast) and the application. At the | |||
receiver side, lost packets can be recovered by erasure decoding | receiver side, lost packets can be recovered by erasure decoding | |||
skipping to change at page 3, line 38 | skipping to change at page 3, line 38 | |||
packet is lost within the source block and the repair packet is | packet is lost within the source block and the repair packet is | |||
received. There are various other ways of generating repair packets, | received. There are various other ways of generating repair packets, | |||
possibly with different loss-recovery capabilities. | possibly with different loss-recovery capabilities. | |||
The FEC Framework [I-D.ietf-fecframe-framework] outlines a general | The FEC Framework [I-D.ietf-fecframe-framework] outlines a general | |||
framework for using FEC codes in multimedia applications that stream | framework for using FEC codes in multimedia applications that stream | |||
audio, video or other types of multimedia content. The FEC Framework | audio, video or other types of multimedia content. The FEC Framework | |||
specification states that source and repair packets must be carried | specification states that source and repair packets must be carried | |||
in different streams, which are referred to as the source and repair | in different streams, which are referred to as the source and repair | |||
flows, respectively. At the receiver side, the receivers should know | flows, respectively. At the receiver side, the receivers should know | |||
which flows are the source flows and which flows are the repair | which flows are the source flows and which ones are the repair flows. | |||
flows. The receivers should also know the exact association of the | The receivers should also know the exact association of the source | |||
source and repair flows so that they can use the correct data to | and repair flows so that they can use the correct data to repair the | |||
repair the original content in case there is a packet loss. | original content in case there is a packet loss. SDP [RFC4566] uses | |||
Currently, SDP [RFC4566] uses [RFC3388] and [RFC4756] for this | [I-D.ietf-mmusic-rfc3388bis] and this RFC for this purpose. | |||
purpose. | ||||
In order to provide applications more flexibility, the FEC Framework | In order to provide applications more flexibility, the FEC Framework | |||
[I-D.ietf-fecframe-framework] allows a source flow to be protected by | [I-D.ietf-fecframe-framework] allows a source flow to be protected by | |||
multiple FEC schemes, each of which requires an instance of the FEC | multiple FEC schemes, each of which requires an instance of the FEC | |||
Framework. Thus, multiple instances of the FEC Framework may exist | Framework. Thus, multiple instances of the FEC Framework may exist | |||
at the sender and the receiver(s). Furthermore, within a single FEC | at the sender and the receiver(s). Furthermore, within a single FEC | |||
Framework instance, multiple source flows may be grouped and | Framework instance, multiple source flows may be grouped and | |||
protected by one or more repair flows. | protected by one or more repair flows. | |||
The FEC Framework requires the source and repair packets to be | The FEC Framework requires the source and repair packets to be | |||
carried in different streams. When Real-time Transport Protocol | carried in different streams. When Real-time Transport Protocol | |||
(RTP) [RFC3550] is used to carry the source and repair streams, the | (RTP) [RFC3550] is used to carry the source and repair streams, the | |||
FEC Framework recommends that each stream is carried in its own RTP | FEC Framework recommends that each stream is carried in its own RTP | |||
session. This provides flexibility in using FEC in a backward- | session. This provides flexibility in using FEC in a backward- | |||
compatible manner. However, in some scenarios, a single RTP session | compatible manner. However, in some scenarios, a single RTP session | |||
may be desired to carry multiple RTP streams via Synchronization | may be desired to carry multiple RTP streams via Synchronization | |||
Source (SSRC) multiplexing in order to reduce the port usage. For | Source (SSRC) multiplexing in order to reduce the port usage. For | |||
such scenarios, appropriate grouping semantics are also required. | such scenarios, appropriate grouping semantics are also required. | |||
A basic example scenario is shown in Figure 1. Here, source flow S1 | A basic example scenario is shown in Figure 1. Here, the source flow | |||
is protected by repair flow R1. Also, source flows S1 and S2 are | S1 is protected by the repair flow R1. Also, the source flows S1 and | |||
grouped and protected together by repair flow R2. | S2 are grouped and protected together by the repair flow R2. | |||
SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | |||
| S1: Source Flow |--------| R1: Repair Flow | | S1: Source Flow |--------| R1: Repair Flow | |||
+---| | +---| | |||
| | S2: Source Flow | | | S2: Source Flow | |||
| | | | |||
+______________________________| FEC FRAMEWORK INSTANCE #2 | +______________________________| FEC FRAMEWORK INSTANCE #2 | |||
| R2: Repair Flow | | R2: Repair Flow | |||
Figure 1: Example scenario with two FEC Framework instances where R1 | Figure 1: Example scenario with two FEC Framework instances where R1 | |||
protects S1, and R2 protects the group of S1 and S2 | protects S1, and R2 protects the group of S1 and S2 | |||
Grouping source flows before applying FEC protection may allow us to | Grouping source flows before applying FEC protection may allow us to | |||
achieve a better coding performance. As a typical scenario, suppose | achieve a better coding performance. As a typical scenario, suppose | |||
that source flows S1 and S2 in Figure 1 correspond to the base and | that source flows S1 and S2 in Figure 1 correspond to the base and | |||
enhancement layers in a layered video content, respectively. Repair | enhancement layers in a layered video content, respectively. The | |||
flow R2 protects the combination of the base and enhancement layers | repair flow R2 protects the combination of the base and enhancement | |||
for the receivers who receive both layers, and repair flow R1 | layers for the receivers that receive both layers, whereas the repair | |||
protects the base layer only, for the receivers who want the base | flow R1 protects the base layer only, for the receivers that want the | |||
layer only, or who receive both layers but prefer FEC protection for | base layer only, or receive both layers but prefer FEC protection for | |||
the base layer only due to a bandwidth and/or any other limitation. | the base layer only due to a bandwidth or any other limitation. | |||
The grouping semantics defined in this document offer the flexibility | The grouping semantics defined in this document offer the flexibility | |||
to determine how source streams are grouped together prior to | to determine how source streams are grouped together prior to | |||
applying FEC protection. However, not all FEC schemes may support | applying FEC protection. However, not all FEC schemes may support | |||
the full range of the possible scenarios (e.g., when the source | the full range of the possible scenarios (e.g., when the source | |||
streams carry different top-level media types such as audio and | streams carry different top-level media types such as audio and | |||
video). | video). | |||
Using multiple FEC Framework instances for a single source flow | Using multiple FEC Framework instances for a single source flow | |||
provides flexibility to the receivers. An example scenario is | provides flexibility to the receivers. An example scenario is | |||
skipping to change at page 5, line 21 | skipping to change at page 5, line 21 | |||
SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | |||
S3: Source Flow |---------| R3: Repair Flow | S3: Source Flow |---------| R3: Repair Flow | |||
| | | | |||
|---------| FEC FRAMEWORK INSTANCE #2 | |---------| FEC FRAMEWORK INSTANCE #2 | |||
| R4: Repair Flow | | R4: Repair Flow | |||
Figure 2: Example scenario with two FEC Framework instances, each | Figure 2: Example scenario with two FEC Framework instances, each | |||
with a single repair flow protecting the same source flow S3 | with a single repair flow protecting the same source flow S3 | |||
In summary, based on the FEC Framework [I-D.ietf-fecframe-framework], | 2. Requirements Notation | |||
the SDP grouping semantics for FEC must support the ability to | ||||
indicate that: | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
document are to be interpreted as described in [RFC2119]. | ||||
3. Requirements and Changes from RFC 4756 | ||||
3.1. FEC Grouping Requirements | ||||
As illustrated in the introduction and based on the FEC Framework | ||||
[I-D.ietf-fecframe-framework], the SDP grouping semantics for FEC | ||||
must support the ability to indicate that: | ||||
1. A given source flow is protected by multiple different FEC | 1. A given source flow is protected by multiple different FEC | |||
schemes. | schemes. | |||
2. Multiple repair flows are associated with a given FEC scheme. | 2. Multiple repair flows are associated with a given FEC scheme. | |||
3. Multiple source flows are grouped prior to applying FEC | 3. Multiple source flows are grouped prior to applying FEC | |||
protection. | protection. | |||
4. One or more repair flows protect a group of source flows. | 4. One or more repair flow(s) protect a group of source flows. | |||
2. Requirements Notation | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
document are to be interpreted as described in [RFC2119]. | ||||
3. Requirements and Changes from RFC 4756 | ||||
3.1. Source and Repair Flow Associations | 3.2. Source and Repair Flow Associations | |||
The FEC grouping semantics and 'group' attribute defined in this | The FEC grouping semantics defined in this document and the SDP | |||
document and [I-D.ietf-mmusic-rfc3388bis], respectively, are used to | 'group' attribute defined in [I-D.ietf-mmusic-rfc3388bis] are used to | |||
associate source and repair flows. This document also specifies how | associate source and repair flows. This document also specifies how | |||
the 'group' attribute [I-D.ietf-mmusic-rfc3388bis] in SDP is used to | the 'group' attribute is used to group multiple repair flows with one | |||
group multiple repair flows with one or more source flows. | or more source flows. | |||
[I-D.ietf-mmusic-rfc3388bis] obsoletes [RFC3388] to allow an "m" line | Note that [I-D.ietf-mmusic-rfc3388bis] obsoleted [RFC3388] to allow | |||
identified by its 'mid' attribute to appear in more than one | an "m" line identified by its 'mid' attribute to appear in more than | |||
"a=group" line using the same semantics. With this change and other | one "a=group" line using the same semantics. With this change and | |||
required changes in the grouping semantics for FEC, a sender is | the definitions contained in this document the FEC grouping | |||
allowed to indicate the specific associations between the source and | semantics, a sender can indicate the specific associations between | |||
repair flows, and a receiver can determine which repair flow(s) | the source and repair flows, and a receiver can determine which | |||
protect which source flow(s). | repair flow(s) protect which source flow(s). | |||
This document introduces the changes required in the FEC grouping | This document defines the FEC grouping semantics and obsoletes | |||
semantics and obsoletes [RFC4756]. New implementations SHOULD use | [RFC4756]. Implementations compliant with this document MUST use the | |||
the new semantics introduced in Section 4.2 and Section 4.4 of this | semantics introduced in Section 4.1 and Section 4.3. In addition to | |||
document whenever possible, but they may need to use the obsoleted | complying with the requirements defined in Section 4.1 and | |||
semantics given in Section 4.1 when backward compatibility is | Section 4.3, implementations are RECOMMENDED to support the "FEC" | |||
desired, as described in Section 4.5. | semantics specified in Section 4.4 for backward compatibility reasons | |||
in scenarios described in Section 4.5. | ||||
3.2. Support for Additivity | 3.3. Support for Additivity | |||
The FEC Framework also supports additive repair flows. Additivity | The FEC Framework [I-D.ietf-fecframe-framework] describes support for | |||
among the repair flows means that multiple repair flows may be | additive repair flows. Additivity among the repair flows means that | |||
decoded jointly to improve the recovery chances of the missing | multiple repair flows may be decoded jointly to improve the recovery | |||
packets in a single or the same set of source flows. Additive repair | chances of the missing packets in a single or the same set of source | |||
flows can be generated by the same FEC scheme or different FEC | flows. Additive repair flows can be generated by the same FEC scheme | |||
schemes. | or different FEC schemes. | |||
For example, in Figure 3, repair flows R5 and R6 may be additive | For example, in Figure 3, the repair flows R5 and R6 may be additive | |||
within the FEC Framework instance #1. Alternatively, all three | within the FEC Framework instance #1. Alternatively, all three | |||
repair flows R5, R6 and R7 could be additive, too. | repair flows R5, R6 and R7 could be additive, too. | |||
SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | |||
S4: Source Flow |---------| R5: Repair Flow | S4: Source Flow |---------| R5: Repair Flow | |||
| | R6: Repair Flow | | | R6: Repair Flow | |||
| | | | |||
|---------| FEC FRAMEWORK INSTANCE #2 | |---------| FEC FRAMEWORK INSTANCE #2 | |||
| R7: Repair Flow | | R7: Repair Flow | |||
Figure 3: Example scenario with two FEC Framework instances, where | Figure 3: Example scenario with two FEC Framework instances, where | |||
two repair flows in the first instance and a single repair flow in | two repair flows in the first instance and a single repair flow in | |||
the second instance protect the same source flow S4 | the second instance protect the same source flow S4 | |||
4. FEC Grouping | This document defines the mechanisms to support additive repair flows | |||
that were not included in [RFC4756]. | ||||
4.1. Old "FEC" Grouping Semantics | ||||
The old "FEC" grouping semantics had been introduced in [RFC4756], | ||||
and were based on [RFC3388]. The "FEC" semantics used the "a=group" | ||||
line to form an FEC Group to indicate the association relationship | ||||
between the source and repair flows. | ||||
In the "FEC" semantics, a source or repair flow could only appear in | ||||
a single "a=group:FEC" line. Thus, all the source and repair flows | ||||
that are somehow related to each other have to be listed in the same | ||||
"a=group:FEC" line. For example, for the scenario sketched in | ||||
Figure 1, we must write "a=group:FEC S1 S2 R1 R2" regardless of which | ||||
repair flows protect which particular source flows. Similarly, for | ||||
the scenario sketched in Figure 3, we must write "a=group:FEC S4 R5 | ||||
R6 R7" regardless of which repair flows are additive. | ||||
In certain simple scenarios such as where there is one source flow or | 4. FEC Grouping | |||
one repair flow, these limitations will not be a concern. In | ||||
scenarios where using the "FEC" grouping semantics will provide an | ||||
exact association among the source and repair flows and will not | ||||
create any ambiguity, the "FEC" semantics can be safely used when | ||||
backward compatibility is essential. | ||||
4.2. New "FEC-FR" Grouping Semantics | 4.1. "FEC-FR" Grouping Semantics | |||
Each "a=group" line is used to indicate an association relationship | Each "a=group" line is used to indicate an association relationship | |||
between the source and repair flows. The flows included in one | between the source and repair flows. The flows included in one | |||
"a=group" line are called an FEC Group. If there is more than one | "a=group" line are called an FEC Group. If there is more than one | |||
repair flow included in an FEC group, they MUST be considered to be | repair flow included in an FEC group, they MUST be considered to be | |||
additive. Repair flows that are not additive MUST be indicated in | additive. Repair flows that are not additive MUST be indicated in | |||
separate FEC groups. However, if two (or more) repair flows are | separate FEC groups. However, if two (or more) repair flows are | |||
additive in an FEC group, it does not necessarily mean that these | additive in an FEC group, it does not necessarily mean that these | |||
repair flows will also be additive in any other FEC group. | repair flows will also be additive in any other FEC group. | |||
Generally, in order to express multiple relations between the source | Generally, in order to express multiple relations between the source | |||
and repair flows, each source and repair flow MAY appear in more than | and repair flows, each source and repair flow MAY appear in more than | |||
one FEC group. | one FEC group. | |||
By extending [I-D.ietf-mmusic-rfc3388bis] we define "FEC-FR" as the | Using the framework in [I-D.ietf-mmusic-rfc3388bis], this document | |||
new grouping semantics that can support the features of the FEC | defines "FEC-FR" as the grouping semantics to indicate support for | |||
Framework. | the FEC Framework features. | |||
The "a=group:FEC-FR" semantics MUST always be used to associate the | The "a=group:FEC-FR" semantics MUST be used to associate the source | |||
source and repair flows except when the source and repair flows are | and repair flows except when the source and repair flows are | |||
specified in the same media description, i.e., in the same "m" line. | specified in the same media description, i.e., in the same "m" line | |||
Note that additivity is not necessarily a transitive relationship. | (See Section 4.3). Note that additivity is not necessarily a | |||
Thus, each set of additive repair flows MUST be stated explicitly. | transitive relationship. Thus, each set of additive repair flows | |||
MUST be stated explicitly in SDP as illustrated in the example below. | ||||
4.3. SDP Example | 4.2. SDP Example | |||
For the scenario sketched in Figure 1, we need to write the following | For the scenario sketched in Figure 1, we need to write the following | |||
SDP: | SDP: | |||
v=0 | v=0 | |||
o=ali 1122334455 1122334466 IN IP4 fec.example.com | o=ali 1122334455 1122334466 IN IP4 fec.example.com | |||
s=New FEC Grouping Semantics | s=FEC Grouping Semantics | |||
t=0 0 | t=0 0 | |||
a=group:FEC-FR S1 R1 | a=group:FEC-FR S1 R1 | |||
a=group:FEC-FR S1 S2 R2 | a=group:FEC-FR S1 S2 R2 | |||
m=video 30000 RTP/AVP 100 | m=video 30000 RTP/AVP 100 | |||
c=IN IP4 233.252.0.1/127 | c=IN IP4 233.252.0.1/127 | |||
a=rtpmap:100 MP2T/90000 | a=rtpmap:100 MP2T/90000 | |||
a=mid:S1 | a=mid:S1 | |||
m=video 30000 RTP/AVP 101 | m=video 30000 RTP/AVP 101 | |||
c=IN IP4 233.252.0.2/127 | c=IN IP4 233.252.0.2/127 | |||
a=rtpmap:101 MP2T/90000 | a=rtpmap:101 MP2T/90000 | |||
skipping to change at page 8, line 34 | skipping to change at page 8, line 34 | |||
m=application 30000 RTP/AVP 111 | m=application 30000 RTP/AVP 111 | |||
c=IN IP4 233.252.0.4/127 | c=IN IP4 233.252.0.4/127 | |||
a=rtpmap:111 1d-interleaved-parityfec/90000 | a=rtpmap:111 1d-interleaved-parityfec/90000 | |||
a=fmtp:111 L=10; D=10; repair-window=400000 | a=fmtp:111 L=10; D=10; repair-window=400000 | |||
a=mid:R2 | a=mid:R2 | |||
In this example, the source and repair flows are carried in their own | In this example, the source and repair flows are carried in their own | |||
RTP sessions and the grouping is achieved through the "a=group: | RTP sessions and the grouping is achieved through the "a=group: | |||
FEC-FR" lines. | FEC-FR" lines. | |||
For the additivity issues, let us consider the scenario sketched in | For the additivity example, let us consider the scenario sketched in | |||
Figure 3. Suppose that repair flows R5 and R6 are additive but | Figure 3. Suppose that repair flows R5 and R6 are additive but | |||
repair flow R7 is not additive with any of the other repair flows. | repair flow R7 is not additive with any of the other repair flows. | |||
In this case, we must write | In this case, we must write | |||
a=group:FEC-FR S4 R5 R6 | a=group:FEC-FR S4 R5 R6 | |||
a=group:FEC-FR S4 R7 | a=group:FEC-FR S4 R7 | |||
If none of the repair flows is additive, we must write | If none of the repair flows is additive, we must write | |||
a=group:FEC-FR S4 R5 | a=group:FEC-FR S4 R5 | |||
a=group:FEC-FR S4 R6 | a=group:FEC-FR S4 R6 | |||
a=group:FEC-FR S4 R7 | a=group:FEC-FR S4 R7 | |||
4.4. Grouping for SSRC-Multiplexed RTP Streams | 4.3. FEC Grouping for SSRC-Multiplexed RTP Streams | |||
[RFC5576] defines a grouping attribute, called 'ssrc-group', for the | [RFC5576] defines an SDP media-level attribute, called 'ssrc-group', | |||
RTP streams that are SSRC multiplexed and carried in the same RTP | for grouping the RTP streams that are SSRC multiplexed and carried in | |||
session. The grouping is based on the Synchronization Source (SSRC) | the same RTP session. The grouping is based on the Synchronization | |||
identifiers. Since SSRC-multiplexed RTP streams are defined in the | Source (SSRC) identifiers. Since SSRC-multiplexed RTP streams are | |||
same "m" line, the 'group' attribute cannot be used. | defined in the same "m" line, the 'group' attribute cannot be used. | |||
This document extends [RFC5576] in two ways. First, we define how | This section specifies how FEC is applied to source and repair flows | |||
FEC is applied to source and repair flows for SSRC-multiplexed | for SSRC-multiplexed streams using the 'ssrc-group' attribute | |||
streams using the 'ssrc-group' attribute. We then specify how the | [RFC5576]. Thi section also specifies how the additivity of the | |||
additivity of the repair flows is expressed for the SSRC-multiplexed | repair flows is expressed for the SSRC-multiplexed streams. | |||
streams. | ||||
Per [RFC3550], the SSRC identifiers for the RTP streams that are | The semantics of "FEC-FR" for the 'ssrc-group' attribute are the same | |||
carried in the same RTP session MUST be unique. However, the SSRC | as the one defined for the 'group' attribute except that the SSRC | |||
identifiers are used to designate the FEC grouping associations: | ||||
a=ssrc-group:FEC-FR *(SP ssrc-id) [RFC5576]. | ||||
The SSRC identifiers for the RTP streams that are carried in the same | ||||
RTP session MUST be unique per [RFC3550]. However, the SSRC | ||||
identifiers are not guaranteed to be unique among different RTP | identifiers are not guaranteed to be unique among different RTP | |||
sessions. Thus, the 'ssrc-group' attribute MUST only be used at the | sessions. Thus, the 'ssrc-group' attribute MUST only be used at the | |||
media level [RFC5576]. The semantics of "FEC-FR" for the 'ssrc- | media level [RFC5576]. | |||
group' attribute are exactly the same as the one defined for the | ||||
'group' attribute. | ||||
Let us consider the following scenario where there are two source | Let us consider the following scenario where there are two source | |||
flows (e.g., one video and one audio) and a single repair flow that | flows (e.g., one video and one audio) and a single repair flow that | |||
protects only one of the source flows (e.g., video). Suppose that | protects only one of the source flows (e.g., video). Suppose that | |||
all these flows are separate RTP streams that are SSRC multiplexed in | all these flows are separate RTP streams that are SSRC multiplexed in | |||
the same RTP session. | the same RTP session. | |||
SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | SOURCE FLOWS | FEC FRAMEWORK INSTANCE #1 | |||
S5: Source Flow |--------| R8: Repair Flow | S5: Source Flow |--------| R8: Repair Flow | |||
S6: Source Flow | S6: Source Flow | |||
Figure 4: Example scenario with one FEC Framework instance, where a | Figure 4: Example scenario with one FEC Framework instance, where a | |||
single repair flow protects only one of the source flows | single repair flow protects only one of the source flows | |||
The following SDP describes the scenario sketched in Figure 4. | The following SDP describes the scenario sketched in Figure 4. | |||
v=0 | v=0 | |||
o=ali 1122334455 1122334466 IN IP4 fec.example.com | o=ali 1122334455 1122334466 IN IP4 fec.example.com | |||
s=New FEC Grouping Semantics for SSRC Multiplexing | s=FEC Grouping Semantics for SSRC Multiplexing | |||
t=0 0 | t=0 0 | |||
m=video 30000 RTP/AVP 100 101 110 | m=video 30000 RTP/AVP 100 101 110 | |||
c=IN IP4 233.252.0.1/127 | c=IN IP4 233.252.0.1/127 | |||
a=rtpmap:100 JPEG/90000 | a=rtpmap:100 JPEG/90000 | |||
a=rtpmap:101 L16/32000/2 | a=rtpmap:101 L16/32000/2 | |||
a=rtpmap:110 1d-interleaved-parityfec/90000 | a=rtpmap:110 1d-interleaved-parityfec/90000 | |||
a=fmtp:110 L=5; D=10; repair-window=200000 | a=fmtp:110 L=5; D=10; repair-window=200000 | |||
a=ssrc:1000 cname:fec@example.com | a=ssrc:1000 cname:fec@example.com | |||
a=ssrc:1010 cname:fec@example.com | a=ssrc:1010 cname:fec@example.com | |||
a=ssrc:2110 cname:fec@example.com | a=ssrc:2110 cname:fec@example.com | |||
a=ssrc-group:FEC-FR 1000 2110 | a=ssrc-group:FEC-FR 1000 2110 | |||
a=mid:Group1 | a=mid:Group1 | |||
Note that in actual use, SSRC values, which are random 32-bit | Note that in actual use, SSRC values, which are random 32-bit | |||
numbers, may be much larger than the ones shown in this example. | numbers, may be much larger than the ones shown in this example. | |||
Also note that before receiving an RTP packet for each stream, the | Also note that before receiving an RTP packet for each stream, the | |||
receiver cannot know which SSRC identifier is associated with which | receiver cannot know which SSRC identifier is associated with which | |||
payload type. | payload type. | |||
The additivity of the repair flows is handled in the same way as | The additivity of the repair flows is handled in the same way as | |||
described in Section 4.3. In other words, the repair flows that are | described in Section 4.2. In other words, the repair flows that are | |||
included in an "a=ssrc-group" line MUST be additive. Repair flows | included in an "a=ssrc-group" line MUST be additive. Repair flows | |||
that are not additive MUST be indicated in separate "a=ssrc-group" | that are not additive MUST be indicated in separate "a=ssrc-group" | |||
lines. | lines. | |||
4.5. SDP Offer/Answer Model and Backward-Compatibility Considerations | 4.4. "FEC" Grouping Semantics | |||
This document deprecates the usage of the "FEC" semantics: "FEC-FR" | ||||
must be used instead. However, it is RECOMMENDED to implement the | ||||
"FEC" semantics as defined in this section for backward compatibility | ||||
reasons. | ||||
The "FEC" grouping semantics had been originally introduced in | ||||
[RFC4756]. The "FEC" semantics used the "a=group" line from | ||||
[RFC3388] to form an FEC Group to indicate the association | ||||
relationship between the source and repair flows. | ||||
In the "FEC" semantics, a source or repair flow can only appear in a | ||||
single "a=group:FEC" line. Thus, all the source and repair flows | ||||
that are somehow related to each other have to be listed in the same | ||||
"a=group:FEC" line. For example, for the scenario sketched in | ||||
Figure 1, we have to write "a=group:FEC S1 S2 R1 R2" regardless of | ||||
which repair flows protect which particular source flows. Similarly, | ||||
for the scenario sketched in Figure 3, we have to write "a=group:FEC | ||||
S4 R5 R6 R7" regardless of which repair flows are additive. However, | ||||
the interpretation of these lines would be ambiguous. | ||||
In certain simple scenarios such as where there is one source flow | ||||
and one repair flow, these limitations may not be a concern. In | ||||
Offer/Answer model scenarios, when the "FEC-FR" semantics are not | ||||
understood by the answerer, the "FEC" semantics may be offered | ||||
provided that the "FEC" semantics provide an exact association among | ||||
the source and repair flows and do not create any ambiguity. See | ||||
Section 4.5 for details. | ||||
4.5. SDP Offer/Answer Model and RFC 4756 Backward-Compatibility | ||||
Considerations | ||||
When offering FEC grouping using SDP in an Offer/Answer model | When offering FEC grouping using SDP in an Offer/Answer model | |||
[RFC3264], the following considerations apply. | [RFC3264], the following considerations apply. | |||
A node that is receiving an offer from a sender may or may not | A node that is receiving an offer from a sender may or may not | |||
understand line grouping. It is also possible that the node | understand line grouping. It is also possible that the node | |||
understands line grouping but it does not understand the "FEC-FR" | understands line grouping but it does not understand the "FEC-FR" | |||
semantics. From the viewpoint of the sender of the offer, these | semantics. From the viewpoint of the sender of the offer, these | |||
cases are indistinguishable. | cases are indistinguishable. | |||
Implementations are RECOMMENDED to support the "FEC" semantics | ||||
specified in Section 4.4 for backward compatibility reasons. If the | ||||
sender of the offer supports the "FEC" semantics, it SHOULD fall back | ||||
to using the "FEC" semantics when the "FEC-FR" semantics are not | ||||
understood by the node. | ||||
When a node is offered a session with the "FEC-FR" grouping semantics | When a node is offered a session with the "FEC-FR" grouping semantics | |||
but it does not support line grouping or the FEC grouping semantics, | but it does not support line grouping or the FEC grouping semantics, | |||
the node responds to the offer either: | the node responds to the offer either: | |||
o With an answer that ignores the grouping attribute. | o With an answer that ignores the grouping attribute. | |||
In this case, the original sender of the offer MUST first check | In this case, if the original sender of the offer supports the | |||
whether using the "FEC" grouping semantics from Section 4.1 will | "FEC" semantics described in Section 4.4, it MUST first check | |||
create any ambiguity or not, while keeping its limitations in | whether using the "FEC" semantics will create any ambiguity or | |||
mind. If using the "FEC" semantics rather than the "FEC-FR" | not, while keeping its limitations in mind. If using the "FEC" | |||
semantics still provides an exact association among the source and | semantics rather than the "FEC-FR" semantics still provides an | |||
repair flows, the sender of the offer MUST send a new offer using | exact association among the source and repair flows, the sender | |||
the "FEC" semantics. However, if an exact association cannot be | SHOULD send a new offer using the "FEC" semantics. However, if an | |||
described, the sender MUST send a new offer without FEC. | exact association cannot be described or the sender does not | |||
support the "FEC" semantics, it MUST send a new offer without FEC. | ||||
o With a refusal to the request (e.g., 488 Not Acceptable Here or | o With a refusal to the request (e.g., 488 Not Acceptable Here or | |||
606 Not Acceptable in SIP). | 606 Not Acceptable in SIP). | |||
In this case, if the sender of the offer still wishes to establish | In this case, if the sender of the offer still wishes to establish | |||
the session, it MUST first check whether using the "FEC" grouping | the session and supports the "FEC" semantics, it MUST first check | |||
semantics from Section 4.1 will create any ambiguity or not, while | whether using the "FEC" grouping semantics from Section 4.4 will | |||
keeping its limitations in mind. If using the "FEC" semantics | create any ambiguity or not, while keeping its limitations in | |||
rather than the "FEC-FR" semantics still provides an exact | mind. If using the "FEC" semantics rather than the "FEC-FR" | |||
association among the source and repair flows, the sender of the | semantics still provides an exact association among the source and | |||
offer SHOULD send a new offer using the "FEC" semantics. However, | repair flows, the sender SHOULD send a new offer using the "FEC" | |||
if an exact association cannot be described, the sender SHOULD | semantics. However, if an exact association cannot be described | |||
send a new offer without FEC. | or the sender does not support the "FEC" semantics, it SHOULD send | |||
a new offer without FEC. | ||||
This behaviour is as specified in [I-D.ietf-mmusic-rfc3388bis]. Note | This behavior is as specified in [I-D.ietf-mmusic-rfc3388bis]. Note | |||
that in both cases described above, when the sender of the offer | that in both cases described above, when the sender of the offer | |||
sends a new offer with the "FEC" semantics, and the node understands | sends a new offer with the "FEC" semantics, and the node understands | |||
it, the session will be established and the rules pertaining to the | it, the session will be established and the rules pertaining to the | |||
"FEC" semantics will apply. | "FEC" semantics will apply. | |||
If the node does not understand the "FEC" semantics, it responds to | If the node does not understand the "FEC" semantics, it responds to | |||
the offer, as specified in [I-D.ietf-mmusic-rfc3388bis], either (1) | the offer, as specified in [I-D.ietf-mmusic-rfc3388bis], either (1) | |||
with an answer that ignores the grouping attribute, or (2) with a | with an answer that ignores the grouping attribute, or (2) with a | |||
refusal to the request. In the first case, the sender MUST send a | refusal to the request. In the first case, the sender must send a | |||
new offer without FEC. In the second case, if the sender of the | new offer without FEC. In the second case, if the sender still | |||
offer still wishes to establish the session, it SHOULD retry the | wishes to establish the session, it should retry the request with an | |||
request with an offer without FEC. | offer without FEC. | |||
5. Security Considerations | 5. Security Considerations | |||
There is a weak threat for the receiver that the FEC grouping can be | There is a weak threat for the receiver that the FEC grouping can be | |||
modified to indicate FEC relationships that do not exist. Such | modified to indicate FEC relationships that do not exist. Such | |||
attacks may result in failure of FEC to protect, and/or mishandle | attacks may result in failure of FEC to protect, and/or mishandle | |||
other media payload streams. The receiver SHOULD do an integrity | other media payload streams. The receiver SHOULD do an integrity | |||
check on SDP and follow the security considerations of SDP [RFC4566] | check on SDP and follow the security considerations of SDP [RFC4566] | |||
to only trust SDP from trusted sources. | to only trust SDP from trusted sources. | |||
6. IANA Considerations | 6. IANA Considerations | |||
This document registers the following semantics with IANA in | This document registers the following semantics with IANA in | |||
Semantics for the 'group' SDP Attribute under SDP Parameters: | Semantics for the 'group' SDP Attribute under SDP Parameters: | |||
Note to the RFC Editor: In the following, please replace "XXXX" with | Note to the RFC Editor: In the following registrations, please | |||
the number of this document prior to publication as an RFC. | replace "XXXX" with the number of this document prior to publication | |||
as an RFC. | ||||
Semantics Token Reference | Note to IANA: Please note the change in the reference for the "FEC" | |||
--------------------------- ------ --------- | semantics. | |||
Forward Error Correction FR FEC-FR [RFCXXXX] | ||||
Semantics Token Reference | ||||
--------------------------- ------ --------- | ||||
Forward Error Correction (Deprecated) FEC [RFCXXXX] | ||||
Forward Error Correction FR FEC-FR [RFCXXXX] | ||||
This document also registers the following semantics with IANA in | This document also registers the following semantics with IANA in | |||
Semantics for the 'ssrc-group' SDP Attribute under SDP Parameters: | Semantics for the 'ssrc-group' SDP Attribute under SDP Parameters: | |||
Semantics Token Reference | Semantics Token Reference | |||
--------------------------- ------ --------- | --------------------------- ------ --------- | |||
Forward Error Correction FR FEC-FR [RFCXXXX] | Forward Error Correction FR FEC-FR [RFCXXXX] | |||
7. Acknowledgments | 7. Acknowledgments | |||
Some parts of this document are based on [RFC4756]. Thus, the author | Some parts of this document are based on [RFC4756]. Thus, the author | |||
would like to thank those who contributed to [RFC4756]. Also, thanks | would like to thank those who contributed to [RFC4756]. Also, thanks | |||
to Jonathan Lennox who has contributed to Section 4.4. | to Jonathan Lennox who has contributed to Section 4.3 and Jean- | |||
Francois Mule who has reviewed this document in great detail and | ||||
suggested text edits. | ||||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session | [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session | |||
Description Protocol", RFC 4566, July 2006. | Description Protocol", RFC 4566, July 2006. | |||
skipping to change at page 13, line 24 | skipping to change at page 14, line 24 | |||
Schulzrinne, "Grouping of Media Lines in the Session | Schulzrinne, "Grouping of Media Lines in the Session | |||
Description Protocol (SDP)", RFC 3388, December 2002. | Description Protocol (SDP)", RFC 3388, December 2002. | |||
[RFC4756] Li, A., "Forward Error Correction Grouping Semantics in | [RFC4756] Li, A., "Forward Error Correction Grouping Semantics in | |||
Session Description Protocol", RFC 4756, November 2006. | Session Description Protocol", RFC 4756, November 2006. | |||
Author's Address | Author's Address | |||
Ali Begen | Ali Begen | |||
Cisco | Cisco | |||
170 West Tasman Drive | 181 Bay Street | |||
San Jose, CA 95134 | Toronto, ON M5J 2T3 | |||
USA | CANADA | |||
Email: abegen@cisco.com | Email: abegen@cisco.com | |||
End of changes. 45 change blocks. | ||||
170 lines changed or deleted | 200 lines changed or added | |||
This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |