draft-ietf-mmusic-sdp-simulcast-08.txt | draft-ietf-mmusic-sdp-simulcast-09.txt | |||
---|---|---|---|---|
Network Working Group B. Burman | Network Working Group B. Burman | |||
Internet-Draft M. Westerlund | Internet-Draft M. Westerlund | |||
Intended status: Standards Track Ericsson | Intended status: Standards Track Ericsson | |||
Expires: September 14, 2017 S. Nandakumar | Expires: January 4, 2018 S. Nandakumar | |||
M. Zanaty | M. Zanaty | |||
Cisco | Cisco | |||
March 13, 2017 | July 3, 2017 | |||
Using Simulcast in SDP and RTP Sessions | Using Simulcast in SDP and RTP Sessions | |||
draft-ietf-mmusic-sdp-simulcast-08 | draft-ietf-mmusic-sdp-simulcast-09 | |||
Abstract | Abstract | |||
In some application scenarios it may be desirable to send multiple | In some application scenarios it may be desirable to send multiple | |||
differently encoded versions of the same media source in different | differently encoded versions of the same media source in different | |||
RTP streams. This is called simulcast. This document describes how | RTP streams. This is called simulcast. This document describes how | |||
to accomplish simulcast in RTP and how to signal it in SDP. The | to accomplish simulcast in RTP and how to signal it in SDP. The | |||
described solution uses an RTP/RTCP identification method to identify | described solution uses an RTP/RTCP identification method to identify | |||
RTP streams belonging to the same media source, and makes an | RTP streams belonging to the same media source, and makes an | |||
extension to SDP to relate those RTP streams as being different | extension to SDP to relate those RTP streams as being different | |||
skipping to change at page 1, line 42 ¶ | skipping to change at page 1, line 42 ¶ | |||
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 September 14, 2017. | This Internet-Draft will expire on January 4, 2018. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2.2. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 2.2. Requirements Language . . . . . . . . . . . . . . . . . . 5 | |||
3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3.1. Reaching a Diverse Set of Receivers . . . . . . . . . . . 6 | 3.1. Reaching a Diverse Set of Receivers . . . . . . . . . . . 6 | |||
3.2. Application Specific Media Source Handling . . . . . . . 7 | 3.2. Application Specific Media Source Handling . . . . . . . 7 | |||
3.3. Receiver Media Source Preferences . . . . . . . . . . . . 7 | 3.3. Receiver Media Source Preferences . . . . . . . . . . . . 7 | |||
4. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
5. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Detailed Description . . . . . . . . . . . . . . . . . . . . 9 | |||
6. Detailed Description . . . . . . . . . . . . . . . . . . . . 10 | 5.1. Simulcast Attribute . . . . . . . . . . . . . . . . . . . 9 | |||
6.1. Simulcast Attribute . . . . . . . . . . . . . . . . . . . 10 | 5.2. Simulcast Capability . . . . . . . . . . . . . . . . . . 10 | |||
6.2. Simulcast Capability . . . . . . . . . . . . . . . . . . 11 | 5.3. Offer/Answer Use . . . . . . . . . . . . . . . . . . . . 12 | |||
6.3. Offer/Answer Use . . . . . . . . . . . . . . . . . . . . 14 | 5.3.1. Generating the Initial SDP Offer . . . . . . . . . . 12 | |||
6.3.1. Generating the Initial SDP Offer . . . . . . . . . . 14 | 5.3.2. Creating the SDP Answer . . . . . . . . . . . . . . . 12 | |||
6.3.2. Creating the SDP Answer . . . . . . . . . . . . . . . 14 | 5.3.3. Offerer Processing the SDP Answer . . . . . . . . . . 13 | |||
6.3.3. Offerer Processing the SDP Answer . . . . . . . . . . 15 | 5.3.4. Modifying the Session . . . . . . . . . . . . . . . . 14 | |||
6.3.4. Modifying the Session . . . . . . . . . . . . . . . . 16 | 5.4. Use with Declarative SDP . . . . . . . . . . . . . . . . 15 | |||
6.4. Use with Declarative SDP . . . . . . . . . . . . . . . . 16 | 5.5. Relating Simulcast Streams . . . . . . . . . . . . . . . 15 | |||
6.5. Relating Simulcast Streams . . . . . . . . . . . . . . . 16 | 5.6. Signaling Examples . . . . . . . . . . . . . . . . . . . 15 | |||
6.6. Signaling Examples . . . . . . . . . . . . . . . . . . . 17 | 5.6.1. Single-Source Client . . . . . . . . . . . . . . . . 16 | |||
6.6.1. Single-Source Client . . . . . . . . . . . . . . . . 17 | 5.6.2. Multi-Source Client . . . . . . . . . . . . . . . . . 17 | |||
6.6.2. Multi-Source Client . . . . . . . . . . . . . . . . . 18 | 6. RTP Aspects . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
7. RTP Aspects . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 6.1. Outgoing from Endpoint with Media Source . . . . . . . . 20 | |||
7.1. Outgoing from Endpoint with Media Source . . . . . . . . 21 | 6.2. RTP Middlebox to Receiver . . . . . . . . . . . . . . . . 20 | |||
7.2. RTP Middlebox to Receiver . . . . . . . . . . . . . . . . 21 | 6.2.1. Media-Switching Mixer . . . . . . . . . . . . . . . . 22 | |||
7.2.1. Media-Switching Mixer . . . . . . . . . . . . . . . . 23 | 6.2.2. Selective Forwarding Middlebox . . . . . . . . . . . 23 | |||
7.2.2. Selective Forwarding Middlebox . . . . . . . . . . . 24 | 6.3. RTP Middlebox to RTP Middlebox . . . . . . . . . . . . . 24 | |||
7.3. RTP Middlebox to RTP Middlebox . . . . . . . . . . . . . 25 | 7. Network Aspects . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
8. Network Aspects . . . . . . . . . . . . . . . . . . . . . . . 26 | 7.1. Bitrate Adaptation . . . . . . . . . . . . . . . . . . . 25 | |||
8.1. Bitrate Adaptation . . . . . . . . . . . . . . . . . . . 26 | 8. Limitation . . . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
9. Limitation . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 27 | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 28 | 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
12. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 28 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 27 | |||
13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 27 | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . 28 | 13.2. Informative References . . . . . . . . . . . . . . . . . 28 | |||
14.2. Informative References . . . . . . . . . . . . . . . . . 29 | Appendix A. Requirements . . . . . . . . . . . . . . . . . . . . 31 | |||
Appendix A. Changes From Earlier Versions . . . . . . . . . . . 32 | Appendix B. Changes From Earlier Versions . . . . . . . . . . . 32 | |||
A.1. Modifications Between WG Version -07 and -08 . . . . . . 32 | B.1. Modifications Between WG Version -08 and -09 . . . . . . 32 | |||
A.2. Modifications Between WG Version -06 and -07 . . . . . . 32 | B.2. Modifications Between WG Version -07 and -08 . . . . . . 33 | |||
A.3. Modifications Between WG Version -05 and -06 . . . . . . 32 | B.3. Modifications Between WG Version -06 and -07 . . . . . . 33 | |||
A.4. Modifications Between WG Version -04 and -05 . . . . . . 33 | B.4. Modifications Between WG Version -05 and -06 . . . . . . 33 | |||
A.5. Modifications Between WG Version -03 and -04 . . . . . . 33 | B.5. Modifications Between WG Version -04 and -05 . . . . . . 34 | |||
A.6. Modifications Between WG Version -02 and -03 . . . . . . 34 | B.6. Modifications Between WG Version -03 and -04 . . . . . . 34 | |||
A.7. Modifications Between WG Version -01 and -02 . . . . . . 34 | B.7. Modifications Between WG Version -02 and -03 . . . . . . 35 | |||
A.8. Modifications Between WG Version -00 and -01 . . . . . . 34 | B.8. Modifications Between WG Version -01 and -02 . . . . . . 35 | |||
A.9. Modifications Between Individual Version -00 and WG | B.9. Modifications Between WG Version -00 and -01 . . . . . . 35 | |||
Version -00 . . . . . . . . . . . . . . . . . . . . . . . 34 | B.10. Modifications Between Individual Version -00 and WG | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | Version -00 . . . . . . . . . . . . . . . . . . . . . . . 35 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
1. Introduction | 1. Introduction | |||
Most of today's multiparty video conference solutions make use of | Most of today's multiparty video conference solutions make use of | |||
centralized servers to reduce the bandwidth and CPU consumption in | centralized servers to reduce the bandwidth and CPU consumption in | |||
the endpoints. Those servers receive RTP streams from each | the endpoints. Those servers receive RTP streams from each | |||
participant and send some suitable set of possibly modified RTP | participant and send some suitable set of possibly modified RTP | |||
streams to the rest of the participants, which usually have | streams to the rest of the participants, which usually have | |||
heterogeneous capabilities (screen size, CPU, bandwidth, codec, etc). | heterogeneous capabilities (screen size, CPU, bandwidth, codec, etc). | |||
One of the biggest issues is how to perform RTP stream adaptation to | One of the biggest issues is how to perform RTP stream adaptation to | |||
skipping to change at page 4, line 23 ¶ | skipping to change at page 4, line 23 ¶ | |||
2.1. Terminology | 2.1. Terminology | |||
This document makes use of the terminology defined in RTP Taxonomy | This document makes use of the terminology defined in RTP Taxonomy | |||
[RFC7656], and RTP Topologies [RFC7667]. The following terms are | [RFC7656], and RTP Topologies [RFC7667]. The following terms are | |||
especially noted or here defined: | especially noted or here defined: | |||
RTP Mixer: An RTP middle node, defined in [RFC7667] (Section 3.6 to | RTP Mixer: An RTP middle node, defined in [RFC7667] (Section 3.6 to | |||
3.9). | 3.9). | |||
RTP Session: An association among a group of participants | ||||
communicating with RTP, as defined in [RFC3550] and amended by | ||||
[RFC7656]. | ||||
RTP Stream: A stream of RTP packets containing media data, as | ||||
defined in [RFC7656]. | ||||
RTP Switch: A common short term for the terms "switching RTP mixer", | RTP Switch: A common short term for the terms "switching RTP mixer", | |||
"source projecting middlebox", and "video switching MCU" as | "source projecting middlebox", and "video switching MCU" as | |||
discussed in [RFC7667]. | discussed in [RFC7667]. | |||
Simulcast Stream: One encoded stream or dependent stream from a set | Simulcast Stream: One encoded stream or dependent stream from a set | |||
of concurrently transmitted encoded streams and optional dependent | of concurrently transmitted encoded streams and optional dependent | |||
streams, all sharing a common media source, as defined in | streams, all sharing a common media source, as defined in | |||
[RFC7656]. For example, HD and thumbnail video simulcast versions | [RFC7656]. For example, HD and thumbnail video simulcast versions | |||
of a single media source sent concurrently as separate RTP | of a single media source sent concurrently as separate RTP | |||
Streams. | Streams. | |||
skipping to change at page 5, line 13 ¶ | skipping to change at page 5, line 16 ¶ | |||
"RtpStreamId" RTCP SDES Item [I-D.ietf-avtext-rid]. | "RtpStreamId" RTCP SDES Item [I-D.ietf-avtext-rid]. | |||
2.2. Requirements Language | 2.2. Requirements Language | |||
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", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
3. Use Cases | 3. Use Cases | |||
Many use cases of simulcast as described in this document relate to a | The use cases of simulcast described in this document relate to a | |||
multi-party communication session where one or more central nodes are | multi-party communication session where one or more central nodes are | |||
used to adapt the view of the communication session towards | used to adapt the view of the communication session towards | |||
individual participants, and facilitate the media transport between | individual participants, and facilitate the media transport between | |||
participants. Thus, these cases target the RTP Mixer type of | participants. Thus, these cases target the RTP Mixer type of | |||
topology. | topology. | |||
There are two principle approaches for an RTP Mixer to provide this | There are two principle approaches for an RTP Mixer to provide this | |||
adapted view of the communication session to each receiving | adapted view of the communication session to each receiving | |||
participant: | participant: | |||
skipping to change at page 6, line 13 ¶ | skipping to change at page 6, line 13 ¶ | |||
impact than to achieve an optimal adaptation of resource usage. | impact than to achieve an optimal adaptation of resource usage. | |||
3.1. Reaching a Diverse Set of Receivers | 3.1. Reaching a Diverse Set of Receivers | |||
The media sources provided by a sending participant potentially need | The media sources provided by a sending participant potentially need | |||
to reach several receiving participants that differ in terms of | to reach several receiving participants that differ in terms of | |||
available resources. The receiver resources that typically differ | available resources. The receiver resources that typically differ | |||
include, but are not limited to: | include, but are not limited to: | |||
Codec: This includes codec type (such as SDP MIME type) and can | Codec: This includes codec type (such as SDP MIME type) and can | |||
include codec configuration options (e.g. SDP fmtp parameters). | include codec configuration. A couple of codec resources that | |||
A couple of codec resources that differ only in codec | differ only in codec configuration will be "different" if they are | |||
configuration will be "different" if they are somehow not | somehow not "compatible", like if they differ in video codec | |||
"compatible", like if they differ in video codec profile, or the | profile, or the transport packetization configuration. | |||
transport packetization configuration. | ||||
Sampling: This relates to how the media source is sampled, in | Sampling: This relates to how the media source is sampled, in | |||
spatial as well as in temporal domain. For video streams, spatial | spatial as well as in temporal domain. For video streams, spatial | |||
sampling affects image resolution and temporal sampling affects | sampling affects image resolution and temporal sampling affects | |||
video frame rate. For audio, spatial sampling relates to the | video frame rate. For audio, spatial sampling relates to the | |||
number of audio channels and temporal sampling affects audio | number of audio channels and temporal sampling affects audio | |||
bandwidth. This may be used to suit different rendering | bandwidth. This may be used to suit different rendering | |||
capabilities or needs at the receiving endpoints, as well as a | capabilities or needs at the receiving endpoints. | |||
method to achieve different transport capabilities, bitrates and | ||||
eventually QoE by controlling the amount of source data. | ||||
Bitrate: This relates to the amount of bits spent per second to | Bitrate: This relates to the amount of bits sent per second to | |||
transmit the media source as an RTP stream, which typically also | transmit the media source as an RTP stream, which typically also | |||
affects the Quality of Experience (QoE) for the receiving user. | affects the Quality of Experience (QoE) for the receiving user. | |||
Letting the sending participant create a simulcast of a few | Letting the sending participant create a simulcast of a few | |||
differently configured RTP streams per media source can be a good | differently configured RTP streams per media source can be a good | |||
tradeoff when using an RTP switch as middlebox, instead of sending a | tradeoff when using an RTP switch as middlebox, instead of sending a | |||
single RTP stream and using an RTP mixer to create individual | single RTP stream and using an RTP mixer to create individual | |||
transcodings to each receiving participant. | transcodings to each receiving participant. | |||
This requires that the receiving participants can be categorized in | This requires that the receiving participants can be categorized in | |||
terms of available resources and that the sending participant can | terms of available resources and that the sending participant can | |||
choose a matching configuration for a single RTP stream per category | choose a matching configuration for a single RTP stream per category | |||
and media source. | and media source. For example, a set of receiving participants | |||
differ only in screen resolution; some are able to display video with | ||||
For example, assume for simplicity a set of receiving participants | at most 360p resolution and some support 720p resolution. A sending | |||
that differ only in that some have support to receive Codec A, and | ||||
the others have support to receive Codec B. Further assume that the | ||||
sending participant can send both Codec A and B. It can then reach | ||||
all receivers by creating two simulcasted RTP streams from each media | ||||
source; one for Codec A and one for Codec B. | ||||
In another simple example, a set of receiving participants differ | ||||
only in screen resolution; some are able to display video with at | ||||
most 360p resolution and some support 720p resolution. A sending | ||||
participant can then reach all receivers with best possible | participant can then reach all receivers with best possible | |||
resolution by creating a simulcast of RTP streams with 360p and 720p | resolution by creating a simulcast of RTP streams with 360p and 720p | |||
resolution for each sent video media source. | resolution for each sent video media source. | |||
In more elaborate cases, the receiving participants differ both in | ||||
available sampling and bitrate, and maybe also codec, and it is up to | ||||
the RTP switch to find a good trade-off in which simulcasted stream | ||||
to choose for each intended receiver. It is also the responsibility | ||||
of the RTP switch to negotiate a good fit of simulcast streams with | ||||
the sending participant. | ||||
The maximum number of simulcasted RTP streams that can be sent is | The maximum number of simulcasted RTP streams that can be sent is | |||
mainly limited by the amount of processing and uplink network | mainly limited by the amount of processing and uplink network | |||
resources available to the sending participant. | resources available to the sending participant. | |||
3.2. Application Specific Media Source Handling | 3.2. Application Specific Media Source Handling | |||
The application logic that controls the communication session may | The application logic that controls the communication session may | |||
include special handling of some media sources. It is, for example, | include special handling of some media sources. It is, for example, | |||
commonly the case that the media from a sending participant is not | commonly the case that the media from a sending participant is not | |||
sent back to itself. | sent back to itself. | |||
skipping to change at page 7, line 47 ¶ | skipping to change at page 7, line 32 ¶ | |||
3.3. Receiver Media Source Preferences | 3.3. Receiver Media Source Preferences | |||
The application logic that controls the communication session may | The application logic that controls the communication session may | |||
allow receiving participants to apply preferences to the | allow receiving participants to apply preferences to the | |||
characteristics of the RTP stream they receive, for example in terms | characteristics of the RTP stream they receive, for example in terms | |||
of the aspects listed in Section 3.1. Sending a simulcast of RTP | of the aspects listed in Section 3.1. Sending a simulcast of RTP | |||
streams is one way of accommodating receivers with conflicting or | streams is one way of accommodating receivers with conflicting or | |||
otherwise incompatible preferences. | otherwise incompatible preferences. | |||
4. Requirements | 4. Overview | |||
The following requirements need to be met to support the use cases in | ||||
previous sections: | ||||
REQ-1: Identification: | ||||
REQ-1.1: It must be possible to identify a set of simulcasted RTP | ||||
streams as originating from the same media source in SDP | ||||
signaling. | ||||
REQ-1.2: An RTP endpoint must be capable of identifying the | ||||
simulcast stream a received RTP stream is associated with, | ||||
knowing the content of the SDP signalling. | ||||
REQ-2: Transport usage. The solution must work when using: | ||||
REQ-2.1: Legacy SDP with separate media transports per SDP media | ||||
description. | ||||
REQ-2.2: Bundled [I-D.ietf-mmusic-sdp-bundle-negotiation] SDP | ||||
media descriptions. | ||||
REQ-3: Capability negotiation. It must be possible that: | ||||
REQ-3.1: Sender can express capability of sending simulcast. | ||||
REQ-3.2: Receiver can express capability of receiving simulcast. | ||||
REQ-3.3: Sender can express maximum number of simulcast streams | ||||
that can be provided. | ||||
REQ-3.4: Receiver can express maximum number of simulcast streams | ||||
that can be received. | ||||
REQ-3.5: Sender can detail the characteristics of the simulcast | ||||
streams that can be provided. | ||||
REQ-3.6: Receiver can detail the characteristics of the simulcast | ||||
streams that it prefers to receive. | ||||
REQ-4: Distinguishing features. It must be possible to have | ||||
different simulcast streams use different codec parameters, as can | ||||
be expressed by SDP format values and RTP payload types. | ||||
REQ-5: Compatibility. It must be possible to use simulcast in | ||||
combination with other RTP mechanisms that generate additional RTP | ||||
streams: | ||||
REQ-5.1: RTP Retransmission [RFC4588]. | ||||
REQ-5.2: RTP Forward Error Correction [RFC5109]. | ||||
REQ-5.3: Related payload types such as audio Comfort Noise and/or | ||||
DTMF. | ||||
REQ-5.4: A single simulcast stream can consist of multiple RTP | ||||
streams, to support codecs where a dependent stream is | ||||
dependent on a set of encoded and dependent streams, each | ||||
potentially carried in their own RTP stream. | ||||
REQ-6: Interoperability. The solution must be possible to use in: | ||||
REQ-6.1: Interworking with non-simulcast legacy clients using a | This memo defines SDP [RFC4566] signaling that covers the above | |||
single media source per media type. | described simulcast use cases and functionalities. A number of | |||
requirements for such signaling are elaborated in Appendix A. | ||||
REQ-6.2: WebRTC environment with a single media source per SDP | A new SDP media level attribute "a=simulcast" is defined: | |||
media description. | ||||
5. Overview | m=video 49300 RTP/AVP 97 98 | |||
a=rtpmap:97 H264/90000 | ||||
a=rtpmap:98 H264/90000 | ||||
a=fmtp:97 profile-level-id=42c01f; max-fs=3600; max-mbps=108000 | ||||
a=fmtp:98 profile-level-id=42c00b; max-fs=240; max-mbps=3600 | ||||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | ||||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | ||||
a=rid:1 send pt=97 | ||||
a=rid:2 send pt=98 | ||||
a=rid:3 recv pt=97 | ||||
a=simulcast:send 1;2 recv 3 | ||||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | ||||
As an overview, the above requirements are met by signaling simulcast | Figure 1: Example Simulcast Media Description in Offer | |||
capability and configurations in SDP [RFC4566]: | ||||
o An offer or answer can contain a number of simulcast streams, | The corresponding SDP answer media description example extract could | |||
separate for send and receive directions. | look like: | |||
o An offer or answer can contain multiple, alternative simulcast | m=video 49674 RTP/AVP 97 98 | |||
stream formats in the same fashion as multiple, alternative | a=rtpmap:97 H264/90000 | |||
formats can be offered in a media description. | a=rtpmap:98 H264/90000 | |||
a=fmtp:97 profile-level-id=42c01f; max-fs=3600; max-mbps=108000 | ||||
a=fmtp:98 profile-level-id=42c00b; max-fs=240; max-mbps=3600 | ||||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | ||||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | ||||
a=rid:1 recv pt=97 | ||||
a=rid:2 recv pt=98 | ||||
a=rid:3 send pt=97 | ||||
a=simulcast:recv 1;2 send 3 | ||||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | ||||
o A single media source per SDP media description is assumed, which | Figure 2: Example Simulcast Media Description in Answer | |||
is aligned with the concepts defined in [RFC7656] and will | ||||
specifically work in a WebRTC context, both with and without | ||||
BUNDLE [I-D.ietf-mmusic-sdp-bundle-negotiation] grouping. | ||||
o The codec configuration for a simulcast stream is expressed | The above are only SDP media description extracts, not a complete | |||
through use of separately specified RTP payload format | SDP. The only difference to non-simulcast SDP media descriptions is | |||
restrictions [I-D.ietf-mmusic-rid] with an associated RTP-level | the added "a=simulcast" line. It is assumed that a single SDP media | |||
identification mechanism [I-D.ietf-avtext-rid] to identify which | description is used to describe a single media source. This is | |||
RTP payload format restrictions an RTP stream adheres to. This | aligned with the concepts defined in [RFC7656] and will work in a | |||
complements and effectively extends simulcast stream | WebRTC context, both with and without BUNDLE | |||
identification and configuration possibilities that could be | [I-D.ietf-mmusic-sdp-bundle-negotiation] grouping of media | |||
provided by using only SDP formats as identifier. Use of multiple | descriptions. | |||
RTP streams with the same (non-redundancy) media type in the | ||||
context of a single media source, where those RTP streams are | ||||
using different RtpStreamId, is a strong but not totally | ||||
unambiguous indication of those RTP streams being part of a | ||||
simulcast. | ||||
o It is possible to use source-specific signaling [RFC5576] with the | The "a=simulcast" line describes send and receive direction simulcast | |||
proposed solution, but it is only in certain cases possible to | streams separately. Each direction can in turn describe one or more | |||
learn from that signaling which SSRC will belong to a particular | simulcast streams, separated by semicolon. The identifiers | |||
simulcast stream. | describing simulcast streams on the "a=simulcast" line are rid-id, as | |||
defined by "a=rid" lines in [I-D.ietf-mmusic-rid]. Each simulcast | ||||
stream can be offered as a list of alternative rid-id, with each | ||||
alternative separated by comma (not in the examples above). A | ||||
detailed specification can be found in Section 5 and more detailed | ||||
examples are outlined in Section 5.6. | ||||
6. Detailed Description | 5. Detailed Description | |||
This section further details the overview above (Section 5). First, | This section further details the overview above (Section 4). First, | |||
formal syntax is provided (Section 6.1), followed by the rest of the | formal syntax is provided (Section 5.1), followed by the rest of the | |||
SDP attribute definition in Section 6.2. Relating Simulcast Streams | SDP attribute definition in Section 5.2. Relating Simulcast Streams | |||
(Section 6.5) provides the definition of the RTP/RTCP mechanisms | (Section 5.5) provides the definition of the RTP/RTCP mechanisms | |||
used. The section is concluded with a number of examples. | used. The section is concluded with a number of examples. | |||
6.1. Simulcast Attribute | 5.1. Simulcast Attribute | |||
This document defines a new SDP media-level "a=simulcast" attribute, | This document defines a new SDP media-level "a=simulcast" attribute, | |||
with value according to the following ABNF [RFC5234] syntax: | with value according to the following ABNF [RFC5234] syntax: | |||
sc-value = ( sc-send [SP sc-recv] ) / ( sc-recv [SP sc-send] ) | sc-value = ( sc-send [SP sc-recv] ) / ( sc-recv [SP sc-send] ) | |||
sc-send = "send" SP sc-str-list | sc-send = "send" SP sc-str-list | |||
sc-recv = "recv" SP sc-str-list | sc-recv = "recv" SP sc-str-list | |||
sc-str-list = sc-alt-list *( ";" sc-alt-list ) | sc-str-list = sc-alt-list *( ";" sc-alt-list ) | |||
sc-alt-list = sc-id *( "," sc-id ) | sc-alt-list = sc-id *( "," sc-id ) | |||
sc-id-paused = "~" | sc-id-paused = "~" | |||
sc-id = [sc-id-paused] rid-id | sc-id = [sc-id-paused] rid-id | |||
; SP defined in [RFC5234] | ; SP defined in [RFC5234] | |||
; rid-id defined in [I-D.ietf-mmusic-rid] | ; rid-id defined in [I-D.ietf-mmusic-rid] | |||
Figure 1: ABNF for Simulcast Value | Figure 3: ABNF for Simulcast Value | |||
The "a=simulcast" attribute has a parameter in the form of one or two | The "a=simulcast" attribute has a parameter in the form of one or two | |||
simulcast stream descriptions, each consisting of a direction ("send" | simulcast stream descriptions, each consisting of a direction ("send" | |||
or "recv"), followed by a list of one or more simulcast streams. | or "recv"), followed by a list of one or more simulcast streams. | |||
Each simulcast stream consists of one or more alternative simulcast | Each simulcast stream consists of one or more alternative simulcast | |||
formats. Each simulcast format is identified by a simulcast stream | formats. Each simulcast format is identified by a simulcast stream | |||
identifier (SCID). The SCID MUST have the form of an RTP stream | identifier (rid-id). The rid-id MUST have the form of an RTP stream | |||
identifier, as described by RTP Payload Format Restrictions | identifier, as described by RTP Payload Format Restrictions | |||
[I-D.ietf-mmusic-rid]. | [I-D.ietf-mmusic-rid]. | |||
In the list of simulcast streams, each simulcast stream is separated | In the list of simulcast streams, each simulcast stream is separated | |||
by a semicolon (";"). Each simulcast stream can in turn be offered | by a semicolon (";"). Each simulcast stream can in turn be offered | |||
in one or more alternative formats, represented by SCIDs, separated | in one or more alternative formats, represented by rid-ids, separated | |||
by a comma (","). Each SCID can also be specified as initially | by a comma (","). Each rid-id can also be specified as initially | |||
paused [RFC7728], indicated by prepending a "~" to the SCID. The | paused [RFC7728], indicated by prepending a "~" to the rid-id. The | |||
reason to allow separate initial pause states for each SCID is that | reason to allow separate initial pause states for each rid-id is that | |||
pause capability can be specified individually for each RTP payload | pause capability can be specified individually for each RTP payload | |||
type referenced by an SCID. Since pause capability specified via the | type referenced by an rid-id. Since pause capability specified via | |||
"a=rtcp-fb" attribute and SCID specified by "a=rid" can refer to | the "a=rtcp-fb" attribute and rid-id specified by "a=rid" can refer | |||
common payload types, it is unfeasible to pause streams with SCID | to common payload types, it is unfeasible to pause streams with rid- | |||
where any of the related RTP payload type(s) do not have pause | id where any of the related RTP payload type(s) do not have pause | |||
capability. | capability. | |||
Examples: | It is possible to use source-specific signaling [RFC5576] with | |||
"a=simulcast", but it is only in certain cases possible to learn from | ||||
a=simulcast:send 1,2,3;~4,~5 recv 6;~7,~8 | that signaling which SSRC will belong to a particular simulcast | |||
a=simulcast:recv 1;4,5 send 6;7 | stream. | |||
Figure 2: Simulcast Examples | ||||
Above are two examples of different "a=simulcast" lines. | ||||
The first line is an example offer to send two simulcast streams and | ||||
to receive two simulcast streams. The first simulcast stream in send | ||||
direction can be sent in three different alternative formats (SCID 1, | ||||
2, 3), and the second simulcast stream in send direction can be sent | ||||
in two different alternative formats (SCID 4, 5). Both of the second | ||||
simulcast stream alternative formats in send direction are offered as | ||||
initially paused. The first simulcast stream in receive direction | ||||
has no alternative formats (SCID 6). The second simulcast stream in | ||||
receive direction has two alternative formats (SCID 7, 8) that are | ||||
both offered as initially paused. | ||||
The second line is an example answer to the first line, accepting to | ||||
send and receive the two offered simulcast streams, however send and | ||||
receive directions are specified in opposite order compared to the | ||||
first line, which lets the answer keep the same order of simulcast | ||||
streams in the SDP as in the offer, for convenience, even though | ||||
directionality is reversed. This example answer has removed all | ||||
offered alternative formats for the first simulcast stream (keeping | ||||
only SCID 1), but kept alternative formats for the second simulcast | ||||
stream in receive direction (4, 5). The answer thus accepts to send | ||||
two simulcast streams, without alternatives. The answer does not | ||||
accept initial pause of any simulcast streams, in either direction. | ||||
More examples can be found in Section 6.6. | ||||
6.2. Simulcast Capability | 5.2. Simulcast Capability | |||
Simulcast capability is expressed through a new media level SDP | Simulcast capability is expressed through a new media level SDP | |||
attribute, "a=simulcast" (Section 6.1). The meaning of the attribute | attribute, "a=simulcast" (Section 5.1). The meaning of the attribute | |||
on SDP session level is undefined, MUST NOT be used by | on SDP session level is undefined, MUST NOT be used by | |||
implementations of this specification and MUST be ignored if received | implementations of this specification and MUST be ignored if received | |||
on session level. Extensions to this specification MAY define such | on session level. Extensions to this specification MAY define such | |||
session level usage. The meaning of including multiple "a=simulcast" | session level usage. Each SDP media description MUST contain at most | |||
lines in a single SDP media description is undefined, MUST NOT be | one "a=simulcast" line. | |||
used by implementations of this specification, and any additional | ||||
"a=simulcast" lines beyond the first in a media description MUST be | ||||
ignored if received. | ||||
There are separate and independent sets of simulcast streams in send | There are separate and independent sets of simulcast streams in send | |||
and receive directions. When listing multiple directions, each | and receive directions. When listing multiple directions, each | |||
direction MUST NOT occur more than once on the same line. | direction MUST NOT occur more than once on the same line. | |||
Simulcast streams using undefined SCID MUST NOT be used as valid | Simulcast streams using undefined rid-id MUST NOT be used as valid | |||
simulcast streams by an RTP stream receiver. The direction for an | simulcast streams by an RTP stream receiver. The direction for an | |||
SCID MUST be aligned with the direction specified for the | rid-id MUST be aligned with the direction specified for the | |||
corresponding RTP stream identifier on the "a=rid" line. | corresponding RTP stream identifier on the "a=rid" line. | |||
The listed number of simulcast streams for a direction sets a limit | The listed number of simulcast streams for a direction sets a limit | |||
to the number of supported simulcast streams in that direction. The | to the number of supported simulcast streams in that direction. The | |||
order of the listed simulcast streams in the "send" direction | order of the listed simulcast streams in the "send" direction | |||
suggests a proposed order of preference, in decreasing order: the | suggests a proposed order of preference, in decreasing order: the | |||
SCID listed first is the most preferred and subsequent streams have | rid-id listed first is the most preferred and subsequent streams have | |||
progressively lower preference. The order of the listed SCID in the | progressively lower preference. The order of the listed rid-id in | |||
"recv" direction expresses which simulcast streams that are | the "recv" direction expresses which simulcast streams that are | |||
preferred, with the leftmost being most preferred. This can be of | preferred, with the leftmost being most preferred. This can be of | |||
importance if the number of actually sent simulcast streams have to | importance if the number of actually sent simulcast streams have to | |||
be reduced for some reason. | be reduced for some reason. | |||
SCID that have explicit dependencies [RFC5583] [I-D.ietf-mmusic-rid] | rid-id that have explicit dependencies [RFC5583] | |||
to other SCID (even in the same media description) MAY be used. | [I-D.ietf-mmusic-rid] to other rid-id (even in the same media | |||
description) MAY be used. | ||||
Use of more than a single, alternative simulcast format for a | Use of more than a single, alternative simulcast format for a | |||
simulcast stream MAY be specified as part of the attribute parameters | simulcast stream MAY be specified as part of the attribute parameters | |||
by expressing the simulcast stream as a comma-separated list of | by expressing the simulcast stream as a comma-separated list of | |||
alternative SCID. In this case, it is not possible to align what | alternative rid-id. In this case, it is not possible to align what | |||
alternative SCID that are used across different simulcast streams, | alternative rid-id that are used across different simulcast streams, | |||
like requiring all simulcast streams to use SCID alternatives | like requiring all simulcast streams to use rid-id alternatives | |||
referring to the same codec format. The order of the SCID | referring to the same codec format. The order of the rid-id | |||
alternatives within a simulcast stream is significant; the SCID | alternatives within a simulcast stream is significant; the rid-id | |||
alternatives are listed from (left) most preferred to (right) least | alternatives are listed from (left) most preferred to (right) least | |||
preferred. For the use of simulcast, this overrides the normal codec | preferred. For the use of simulcast, this overrides the normal codec | |||
preference as expressed by format type ordering on the "m=" line, | preference as expressed by format type ordering on the "m=" line, | |||
using regular SDP rules. This is to enable a separation of general | using regular SDP rules. This is to enable a separation of general | |||
codec preferences and simulcast stream configuration preferences. | codec preferences and simulcast stream configuration preferences. | |||
A simulcast stream can use a codec defined such that the same RTP | A simulcast stream can use a codec defined such that the same RTP | |||
SSRC can change RTP payload type multiple times during a session, | SSRC can change RTP payload type multiple times during a session, | |||
possibly even on a per-packet basis. A typical example can be a | possibly even on a per-packet basis. A typical example can be a | |||
speech codec that makes use of Comfort Noise [RFC3389] and/or DTMF | speech codec that makes use of Comfort Noise [RFC3389] and/or DTMF | |||
[RFC4733] formats. In those cases, such "related" formats MUST NOT | [RFC4733] formats. In those cases, such "related" formats MUST NOT | |||
be defined as having their own SCID listed explicitly in the | be defined as having their own rid-id listed explicitly in the | |||
attribute parameters, since they are not strictly simulcast streams | attribute parameters, since they are not strictly simulcast streams | |||
of the media source, but rather a specific way of generating the RTP | of the media source, but rather a specific way of generating the RTP | |||
stream of a single simulcast stream with varying RTP payload type. | stream of a single simulcast stream with varying RTP payload type. | |||
If RTP stream pause/resume [RFC7728] is supported, any SCID MAY be | If RTP stream pause/resume [RFC7728] is supported, any rid-id MAY be | |||
prefixed by a "~" character to indicate that the corresponding | prefixed by a "~" character to indicate that the corresponding | |||
simulcast stream is initially paused already from start of the RTP | simulcast stream is initially paused already from start of the RTP | |||
session. In this case, support for RTP stream pause/resume MUST also | session. In this case, support for RTP stream pause/resume MUST also | |||
be included under the same "m=" line where "a=simulcast" is included. | be included under the same "m=" line where "a=simulcast" is included. | |||
All RTP payload types related to such initially paused simulcast | All RTP payload types related to such initially paused simulcast | |||
stream MUST be listed in the SDP as pause/resume capable as specified | stream MUST be listed in the SDP as pause/resume capable as specified | |||
by [RFC7728], e.g. by using the "*" wildcard format for "a=rtcp-fb". | by [RFC7728], e.g. by using the "*" wildcard format for "a=rtcp-fb". | |||
An initially paused simulcast stream in "send" direction MUST be | An initially paused simulcast stream in "send" direction for the part | |||
considered equivalent to an unsolicited locally paused stream, and be | sending the SDP MUST be considered equivalent to an unsolicited | |||
handled accordingly. Initially paused simulcast streams are resumed | locally paused stream, and be handled accordingly. Initially paused | |||
as described by the RTP pause/resume specification. An RTP stream | simulcast streams are resumed as described by the RTP pause/resume | |||
receiver that wishes to resume an unsolicited locally paused stream | specification. An RTP stream receiver that wishes to resume an | |||
needs to know the SSRC of that stream. The SSRC of an initially | unsolicited locally paused stream needs to know the SSRC of that | |||
paused simulcast stream can be obtained from an RTP stream sender | stream. The SSRC of an initially paused simulcast stream can be | |||
RTCP Sender Report (SR) including both the desired SSRC as "SSRC of | obtained from an RTP stream sender RTCP Sender Report (SR) including | |||
sender", and the SCID value in an RtpStreamId RTCP SDES item | both the desired SSRC as "SSRC of sender", and the rid-id value in an | |||
[I-D.ietf-avtext-rid]. | RtpStreamId RTCP SDES item [I-D.ietf-avtext-rid]. | |||
Including an initially paused simulcast stream in "recv" direction in | Including an initially paused simulcast stream in "recv" direction | |||
an SDP towards an RTP sender, SHOULD cause the remote RTP sender to | for the part sending the SDP, sent towards an RTP sender, SHOULD | |||
put the stream as unsolicited locally paused, unless there are other | cause the remote RTP sender to put the stream as unsolicited locally | |||
RTP stream receivers that do not mark the simulcast stream as | paused, unless there are other RTP stream receivers that do not mark | |||
initially paused. The reason to require an initially paused "recv" | the simulcast stream as initially paused. The reason to require an | |||
stream to be considered locally paused by the remote RTP sender, | initially paused "recv" stream to be considered locally paused by the | |||
instead of making it equivalent to implicitly sending a pause | remote RTP sender, instead of making it equivalent to implicitly | |||
request, is because the pausing RTP sender cannot know which | sending a pause request, is because the pausing RTP sender cannot | |||
receiving SSRC owns the restriction when TMMBR/TMMBN are used for | know which receiving SSRC owns the restriction when TMMBR/TMMBN are | |||
pause/resume signaling since the RTP receiver's SSRC in send | used for pause/resume signaling (Section 5.6 of [RFC7728]) since the | |||
direction is sometimes not yet known. | RTP receiver's SSRC in send direction is sometimes not yet known. | |||
Use of the redundant audio data [RFC2198] format could be seen as a | Use of the redundant audio data [RFC2198] format could be seen as a | |||
form of simulcast for loss protection purposes, but is not considered | form of simulcast for loss protection purposes, but is not considered | |||
conflicting with the mechanisms described in this memo and MAY | conflicting with the mechanisms described in this memo and MAY | |||
therefore be used as any other format. In this case the "red" | therefore be used as any other format. In this case the "red" | |||
format, rather than the carried formats, SHOULD be the one to list as | format, rather than the carried formats, SHOULD be the one to list as | |||
a simulcast stream on the "a=simulcast" line. | a simulcast stream on the "a=simulcast" line. | |||
The media formats and corresponding characteristics of simulcast | The media formats and corresponding characteristics of simulcast | |||
streams SHOULD be chosen such that they are different, e.g. as | streams SHOULD be chosen such that they are different, e.g. as | |||
different SDP formats with differing "a=rtpmap" and/or "a=fmtp" | different SDP formats with differing "a=rtpmap" and/or "a=fmtp" | |||
lines, or as differently defined RTP payload format restrictions. If | lines, or as differently defined RTP payload format restrictions. If | |||
this difference is not required, RTP duplication [RFC7104] procedures | this difference is not required, RTP duplication [RFC7104] procedures | |||
SHOULD be considered instead of simulcast. To avoid complications in | SHOULD be considered instead of simulcast. To avoid complications in | |||
implementations, a single SCID MUST NOT occur more than once per | implementations, a single rid-id MUST NOT occur more than once per | |||
"a=simulcast" line. Note that this does not eliminate use of | "a=simulcast" line. Note that this does not eliminate use of | |||
simulcast as an RTP duplication mechanism, since it is possible to | simulcast as an RTP duplication mechanism, since it is possible to | |||
define multiple different SCID that are effectively equivalent. | define multiple different rid-id that are effectively equivalent. | |||
6.3. Offer/Answer Use | 5.3. Offer/Answer Use | |||
Note: The inclusion of "a=simulcast" or the use of simulcast does | Note: The inclusion of "a=simulcast" or the use of simulcast does | |||
not change any of the interpretation or Offer/Answer procedures | not change any of the interpretation or Offer/Answer procedures | |||
for other SDP attributes, like "a=fmtp" or "a=rid". | for other SDP attributes, like "a=fmtp" or "a=rid". | |||
6.3.1. Generating the Initial SDP Offer | 5.3.1. Generating the Initial SDP Offer | |||
An offerer wanting to use simulcast SHALL include the "a=simulcast" | An offerer wanting to use simulcast for a media description SHALL | |||
attribute in the offer. An offerer listing a set of receive | include one "a=simulcast" attribute in that media description in the | |||
simulcast streams and/or alternative formats as SCID in the offer | offer. An offerer listing a set of receive simulcast streams and/or | |||
MUST be prepared to receive RTP streams for any of those simulcast | alternative formats as rid-id in the offer MUST be prepared to | |||
streams and/or alternative formats from the answerer. | receive RTP streams for any of those simulcast streams and/or | |||
alternative formats from the answerer. | ||||
6.3.2. Creating the SDP Answer | 5.3.2. Creating the SDP Answer | |||
An answerer that does not understand the concept of simulcast will | An answerer that does not understand the concept of simulcast will | |||
also not know the attribute and will remove it in the SDP answer, as | also not know the attribute and will remove it in the SDP answer, as | |||
defined in existing SDP Offer/Answer [RFC3264] procedures. | defined in existing SDP Offer/Answer [RFC3264] procedures. Since SDP | |||
Similarly, an answerer that receives an offer with the "a=simulcast" | session level simulcast is undefined in this memo, an answerer that | |||
attribute on session level SHALL remove it in the answer. An | receives an offer with the "a=simulcast" attribute on SDP session | |||
answerer that understands the attribute but receives multiple | level SHALL remove it in the answer. An answerer that understands | |||
"a=simulcast" attributes in the same media description and that | the attribute but receives multiple "a=simulcast" attributes in the | |||
desires to use simulcast SHALL ignore and remove all but the first in | same media description SHALL disable use of simulcast by removing all | |||
the answer. | "a=simulcast" lines for that media description in the answer. | |||
An answerer that does understand the attribute and that wants to | An answerer that does understand the attribute and that wants to | |||
support simulcast in an indicated direction SHALL reverse | support simulcast in an indicated direction SHALL reverse | |||
directionality of the unidirectional direction parameters; "send" | directionality of the unidirectional direction parameters; "send" | |||
becomes "recv" and vice versa, and include it in the answer. | becomes "recv" and vice versa, and include it in the answer. | |||
An answerer that receives an offer with simulcast containing an | An answerer that receives an offer with simulcast containing an | |||
"a=simulcast" attribute listing alternative SCID MAY keep all the | "a=simulcast" attribute listing alternative rid-id MAY keep all the | |||
alternative SCID in the answer, but it MAY also choose to remove any | alternative rid-id in the answer, but it MAY also choose to remove | |||
non-desirable alternative SCID in the answer. The answerer MUST NOT | any non-desirable alternative rid-id in the answer. The answerer | |||
add any alternative SCID in send direction in the answer that were | MUST NOT add any alternative rid-id in send direction in the answer | |||
not present in the offer receive direction. The answerer MUST be | that were not present in the offer receive direction. The answerer | |||
prepared to receive any of the receive direction SCID alternatives, | MUST be prepared to receive any of the receive direction rid-id | |||
and MAY send any of the send direction alternatives that are kept in | alternatives, and MAY send any of the send direction alternatives | |||
the answer. | that are kept in the answer. | |||
An answerer that receives an offer with simulcast that lists a number | An answerer that receives an offer with simulcast that lists a number | |||
of simulcast streams, MAY reduce the number of simulcast streams in | of simulcast streams, MAY reduce the number of simulcast streams in | |||
the answer, but MUST NOT add simulcast streams. | the answer, but MUST NOT add simulcast streams. | |||
An answerer that receives an offer without RTP stream pause/resume | An answerer that receives an offer without RTP stream pause/resume | |||
capability MUST NOT mark any simulcast streams as initially paused in | capability MUST NOT mark any simulcast streams as initially paused in | |||
the answer. | the answer. | |||
An RTP stream pause/resume capable answerer that receives an offer | An RTP stream pause/resume capable answerer that receives an offer | |||
with RTP stream pause/resume capability MAY mark any SCID that refer | with RTP stream pause/resume capability MAY mark any rid-id that | |||
to pause/resume capable formats as initially paused in the answer. | refer to pause/resume capable formats as initially paused in the | |||
answer. | ||||
An answerer that receives indication in an offer of an SCID being | An answerer that receives indication in an offer of an rid-id being | |||
initially paused SHOULD mark that SCID as initially paused also in | initially paused SHOULD mark that rid-id as initially paused also in | |||
the answer, regardless of direction, unless it has good reason for | the answer, regardless of direction, unless it has good reason for | |||
the SCID not being initially paused. One such reason could, for | the rid-id not being initially paused. One reason to remove an | |||
example, be that the answerer would otherwise initially not receive | initial pause in the answer compared to the offer could, for example, | |||
any media of that type at all. | be that all receive direction simulcast streams for a media source | |||
the answerer accepts in the answer would otherwise be paused. | ||||
6.3.3. Offerer Processing the SDP Answer | 5.3.3. Offerer Processing the SDP Answer | |||
An offerer that receives an answer without "a=simulcast" MUST NOT use | An offerer that receives an answer without "a=simulcast" MUST NOT use | |||
simulcast towards the answerer. An offerer that receives an answer | simulcast towards the answerer. An offerer that receives an answer | |||
with "a=simulcast" without any SCID in a specified direction MUST NOT | with "a=simulcast" without any rid-id in a specified direction MUST | |||
use simulcast in that direction. | NOT use simulcast in that direction. | |||
An offerer that receives an answer where some SCID alternatives are | An offerer that receives an answer where some rid-id alternatives are | |||
kept MUST be prepared to receive any of the kept send direction SCID | kept MUST be prepared to receive any of the kept send direction rid- | |||
alternatives, and MAY send any of the kept receive direction SCID | id alternatives, and MAY send any of the kept receive direction rid- | |||
alternatives. | id alternatives. | |||
An offerer that receives an answer where some of the SCID are removed | An offerer that receives an answer where some of the rid-id are | |||
compared to the offer MAY release the corresponding resources (codec, | removed compared to the offer MAY release the corresponding resources | |||
transport, etc) in its receive direction and MUST NOT send any RTP | (codec, transport, etc) in its receive direction and MUST NOT send | |||
packets corresponding to the removed SCID. | any RTP packets corresponding to the removed rid-id. | |||
An offerer that offered some of its SCID as initially paused and that | An offerer that offered some of its rid-id as initially paused and | |||
receives an answer that does not indicate RTP stream pause/resume | that receives an answer that does not indicate RTP stream pause/ | |||
capability, MUST NOT initially pause any simulcast streams. | resume capability, MUST NOT initially pause any simulcast streams. | |||
An offerer with RTP stream pause/resume capability that receives an | An offerer with RTP stream pause/resume capability that receives an | |||
answer where some SCID are marked as initially paused, SHOULD | answer where some rid-id are marked as initially paused, SHOULD | |||
initially pause those RTP streams regardless if they were marked as | initially pause those RTP streams regardless if they were marked as | |||
initially paused also in the offer, unless it has good reason for | initially paused also in the offer, unless it has good reason for | |||
those RTP streams not being initially paused. One such reason could, | those RTP streams not being initially paused. One such reason could, | |||
for example, be that the answerer would otherwise initially not | for example, be that the answerer would otherwise initially not | |||
receive any media of that type at all. | receive any media of that type at all. | |||
6.3.4. Modifying the Session | 5.3.4. Modifying the Session | |||
Offers and answers inside an existing session follow the rules for | Offers inside an existing session follow the same rules as for | |||
initial session negotiation, with the additional restriction that any | initial SDP offer, with these additions: | |||
SCID marked as initially paused in such offer or answer MUST already | ||||
be paused, thus a new offer/answer MUST NOT replace use of RTP stream | ||||
pause/resume [RFC7728] in the session. Session modification | ||||
restrictions in section 6.5 of RTP payload format restrictions | ||||
[I-D.ietf-mmusic-rid] also apply. | ||||
6.4. Use with Declarative SDP | 1. rid-id marked as initially paused in the offerer's send direction | |||
SHALL reflect the offerer's opinion of the current pause state at | ||||
the time of creating the offer. This is purely informational, | ||||
and RTP stream pause/resume [RFC7728] signaling in the ongoing | ||||
session SHALL take precedence in case of any conflict or | ||||
ambiguity. | ||||
2. rid-id marked as initally paused in the offerer's receive | ||||
direction SHALL (as in an initial offer) reflect the offerer's | ||||
desired rid-id pause state. Except for the case where the | ||||
offerer already paused the corresponding RTP stream through RTP | ||||
stream pause/resume [RFC7728] signaling , this is identical to | ||||
the conditions at an initial offer. | ||||
Creation of SDP answers and processing of SDP answers inside an | ||||
existing session follow the same rules as described above for initial | ||||
SDP offer/answer. | ||||
Session modification restrictions in section 6.5 of RTP payload | ||||
format restrictions [I-D.ietf-mmusic-rid] also apply. | ||||
5.4. Use with Declarative SDP | ||||
This document does not define the use of "a=simulcast" in declarative | This document does not define the use of "a=simulcast" in declarative | |||
SDP, partly motivated by use of the simulcast format identification | SDP, partly motivated by use of the simulcast format identification | |||
[I-D.ietf-mmusic-rid] not being defined for use in declarative SDP. | [I-D.ietf-mmusic-rid] not being defined for use in declarative SDP. | |||
If concrete use cases for simulcast in declarative SDP are identified | If concrete use cases for simulcast in declarative SDP are identified | |||
in the future, we expect that additional specifications will address | in the future, the authors of this memo expect that additional | |||
such use. | specifications will address such use. | |||
6.5. Relating Simulcast Streams | 5.5. Relating Simulcast Streams | |||
Simulcast RTP streams MUST be related on RTP level through | Simulcast RTP streams MUST be related on RTP level through | |||
RtpStreamId [I-D.ietf-avtext-rid], as specified in the SDP | RtpStreamId [I-D.ietf-avtext-rid], as specified in the SDP | |||
"a=simulcast" attribute (Section 6.2) parameters. This is sufficient | "a=simulcast" attribute (Section 5.2) parameters. This is sufficient | |||
as long as there is only a single media source per SDP media | as long as there is only a single media source per SDP media | |||
description. When using BUNDLE | description. When using BUNDLE | |||
[I-D.ietf-mmusic-sdp-bundle-negotiation], where multiple SDP media | [I-D.ietf-mmusic-sdp-bundle-negotiation], where multiple SDP media | |||
descriptions jointly specify a single RTP session, the SDES MID | descriptions jointly specify a single RTP session, the SDES MID | |||
identification mechanism in BUNDLE allows relating RTP streams back | identification mechanism in BUNDLE allows relating RTP streams back | |||
to individual media descriptions, after which the above described | to individual media descriptions, after which the above described | |||
RtpStreamId relations can be used. Use of the RTP header extension | RtpStreamId relations can be used. Use of the RTP header extension | |||
[RFC5285] for both MID and RtpStreamId identifications can be | [RFC5285] for both MID and RtpStreamId identifications can be | |||
important to ensure rapid initial reception, required to correctly | important to ensure rapid initial reception, required to correctly | |||
interpret and process the RTP streams. Implementers of this | interpret and process the RTP streams. Implementers of this | |||
specification MUST support the RTCP source description (SDES) item | specification MUST support the RTCP source description (SDES) item | |||
method and SHOULD support RTP header extension method to signal | method and SHOULD support RTP header extension method to signal | |||
RtpStreamId on RTP level. | RtpStreamId on RTP level. | |||
RTP streams MUST only use a single alternative SCID at a time (based | NOTE: For the case where it is clear from SDP that RTP PT uniquely | |||
on RTP timestamps), but MAY change format (and SCID) on a per-RTP | maps to corresponding RtpStreamId, an RTP receiver can use RTP PT | |||
packet basis. This corresponds to the existing (non-simulcast) SDP | to relate simulcast streams. This can sometimes enable decoding | |||
offer/answer case when multiple formats are included on the "m=" line | even in advance to receiving RtpStreamId information in RTCP SDES | |||
in the SDP answer, enabling per-RTP packet change of RTP payload | and/or RTP header extensions. | |||
type. | ||||
6.6. Signaling Examples | RTP streams MUST only use a single alternative rid-id at a time | |||
(based on RTP timestamps), but MAY change format (and rid-id) on a | ||||
per-RTP packet basis. This corresponds to the existing (non- | ||||
simulcast) SDP offer/answer case when multiple formats are included | ||||
on the "m=" line in the SDP answer, enabling per-RTP packet change of | ||||
RTP payload type. | ||||
5.6. Signaling Examples | ||||
These examples describe a client to video conference service, using a | These examples describe a client to video conference service, using a | |||
centralized media topology with an RTP mixer. | centralized media topology with an RTP mixer. | |||
+---+ +-----------+ +---+ | +---+ +-----------+ +---+ | |||
| A |<---->| |<---->| B | | | A |<---->| |<---->| B | | |||
+---+ | | +---+ | +---+ | | +---+ | |||
| Mixer | | | Mixer | | |||
+---+ | | +---+ | +---+ | | +---+ | |||
| F |<---->| |<---->| J | | | F |<---->| |<---->| J | | |||
+---+ +-----------+ +---+ | +---+ +-----------+ +---+ | |||
Figure 3: Four-party Mixer-based Conference | Figure 4: Four-party Mixer-based Conference | |||
6.6.1. Single-Source Client | 5.6.1. Single-Source Client | |||
Alice is calling in to the mixer with a simulcast-enabled client | Alice is calling in to the mixer with a simulcast-enabled client | |||
capable of a single media source per media type. The client can send | capable of a single media source per media type. The client can send | |||
a simulcast of 2 video resolutions and frame rates: HD 1280x720p | a simulcast of 2 video resolutions and frame rates: HD 1280x720p | |||
30fps and thumbnail 320x180p 15fps. This is defined below using the | 30fps and thumbnail 320x180p 15fps. This is defined below using the | |||
"imageattr" [RFC6236]. In this example, only the "pt" "a=rid" | "imageattr" [RFC6236]. In this example, only the "pt" "a=rid" | |||
parameter is used, effectively achieving a 1:1 mapping between | parameter is used, effectively achieving a 1:1 mapping between | |||
RtpStreamId and media formats (RTP payload types), to describe | RtpStreamId and media formats (RTP payload types), to describe | |||
simulcast stream formats. Alice's Offer: | simulcast stream formats. Alice's Offer: | |||
skipping to change at page 17, line 51 ¶ | skipping to change at page 16, line 46 ¶ | |||
a=fmtp:97 profile-level-id=42c01f; max-fs=3600; max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f; max-fs=3600; max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b; max-fs=240; max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b; max-fs=240; max-mbps=3600 | |||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | |||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | |||
a=rid:1 send pt=97 | a=rid:1 send pt=97 | |||
a=rid:2 send pt=98 | a=rid:2 send pt=98 | |||
a=rid:3 recv pt=97 | a=rid:3 recv pt=97 | |||
a=simulcast:send 1;2 recv 3 | a=simulcast:send 1;2 recv 3 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | |||
Figure 4: Single-Source Simulcast Offer | Figure 5: Single-Source Simulcast Offer | |||
The only thing in the SDP that indicates simulcast capability is the | The only thing in the SDP that indicates simulcast capability is the | |||
line in the video media description containing the "simulcast" | line in the video media description containing the "simulcast" | |||
attribute. The included "a=fmtp" and "a=imageattr" parameters | attribute. The included "a=fmtp" and "a=imageattr" parameters | |||
indicates that sent simulcast streams can differ in video resolution. | indicates that sent simulcast streams can differ in video resolution. | |||
The RTP header extension for RtpStreamId is offered to avoid issues | The RTP header extension for RtpStreamId is offered to avoid issues | |||
with the initial binding between RTP streams (SSRCs) and the | with the initial binding between RTP streams (SSRCs) and the | |||
RtpStreamId identifying the simulcast stream and its format. | RtpStreamId identifying the simulcast stream and its format. | |||
The Answer from the server indicates that it too is simulcast | The Answer from the server indicates that it too is simulcast | |||
capable. Should it not have been simulcast capable, the | capable. Should it not have been simulcast capable, the | |||
"a=simulcast" line would not have been present and communication | "a=simulcast" line would not have been present and communication | |||
would have started with the media negotiated in the SDP. Also the | would have started with the media negotiated in the SDP. Also the | |||
usage of the RtpStreamId RTP header extension is accepted. | usage of the RtpStreamId RTP header extension is accepted. | |||
skipping to change at page 18, line 39 ¶ | skipping to change at page 17, line 35 ¶ | |||
a=fmtp:97 profile-level-id=42c01f; max-fs=3600; max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f; max-fs=3600; max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b; max-fs=240; max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b; max-fs=240; max-mbps=3600 | |||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | |||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | |||
a=rid:1 recv pt=97 | a=rid:1 recv pt=97 | |||
a=rid:2 recv pt=98 | a=rid:2 recv pt=98 | |||
a=rid:3 send pt=97 | a=rid:3 send pt=97 | |||
a=simulcast:recv 1;2 send 3 | a=simulcast:recv 1;2 send 3 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | |||
Figure 5: Single-Source Simulcast Answer | Figure 6: Single-Source Simulcast Answer | |||
Since the server is the simulcast media receiver, it reverses the | Since the server is the simulcast media receiver, it reverses the | |||
direction of the "simulcast" and "rid" attribute parameters. | direction of the "simulcast" and "rid" attribute parameters. | |||
6.6.2. Multi-Source Client | 5.6.2. Multi-Source Client | |||
Fred is calling in to the same conference as in the example above | Fred is calling in to the same conference as in the example above | |||
with a two-camera, two-display system, thus capable of handling two | with a two-camera, two-display system, thus capable of handling two | |||
separate media sources in each direction, where each media source is | separate media sources in each direction, where each media source is | |||
simulcast-enabled in the send direction. Fred's client is restricted | simulcast-enabled in the send direction. Fred's client is restricted | |||
to a single media source per media description. | to a single media source per media description. | |||
The first two simulcast streams for the first media source use | The first two simulcast streams for the first media source use | |||
different codecs, H264-SVC [RFC6190] and H264 [RFC6184]. These two | different codecs, H264-SVC [RFC6190] and H264 [RFC6184]. These two | |||
simulcast streams also have a temporal dependency. Two different | simulcast streams also have a temporal dependency. Two different | |||
skipping to change at page 20, line 49 ¶ | skipping to change at page 19, line 49 ¶ | |||
a=rtpmap:104 rtx/90000 | a=rtpmap:104 rtx/90000 | |||
a=fmtp:104 apt=96;rtx-time=200 | a=fmtp:104 apt=96;rtx-time=200 | |||
a=rid:1 send pt=96;max-fs=921600;max-fps=30 | a=rid:1 send pt=96;max-fs=921600;max-fps=30 | |||
a=rid:2 send pt=96;max-fs=614400;max-fps=15 | a=rid:2 send pt=96;max-fs=614400;max-fps=15 | |||
a=rid:3 send pt=96;max-fs=230400;max-fps=30 | a=rid:3 send pt=96;max-fs=230400;max-fps=30 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:RtpStreamId | |||
a=rtcp-fb:* ccm pause nowait | a=rtcp-fb:* ccm pause nowait | |||
a=simulcast:send 1;~2;~3 | a=simulcast:send 1;~2;~3 | |||
Figure 6: Fred's Multi-Source Simulcast Offer | Figure 7: Fred's Multi-Source Simulcast Offer | |||
Note: Empty lines in the SDP above are added only for readability | Note: Empty lines in the SDP above are added only for readability | |||
and would not be present in an actual SDP. | and would not be present in an actual SDP. | |||
7. RTP Aspects | 6. RTP Aspects | |||
This section discusses what the different entities in a simulcast | This section discusses what the different entities in a simulcast | |||
media path can expect to happen on RTP level. This is explored from | media path can expect to happen on RTP level. This is explored from | |||
source to sink by starting in an endpoint with a media source that is | source to sink by starting in an endpoint with a media source that is | |||
simulcasted to an RTP middlebox. That RTP middlebox sends media | simulcasted to an RTP middlebox. That RTP middlebox sends media | |||
sources both to other RTP middleboxes (cascaded middleboxes), as well | sources both to other RTP middleboxes (cascaded middleboxes), as well | |||
as selecting some simulcast format of the media source and sending it | as selecting some simulcast format of the media source and sending it | |||
to receiving endpoints. Different types of RTP middleboxes and their | to receiving endpoints. Different types of RTP middleboxes and their | |||
usage of the different simulcast formats results in several different | usage of the different simulcast formats results in several different | |||
behaviors. | behaviors. | |||
7.1. Outgoing from Endpoint with Media Source | 6.1. Outgoing from Endpoint with Media Source | |||
The most straightforward simulcast case is the RTP streams being | The most straightforward simulcast case is the RTP streams being | |||
emitted from the endpoint that originates a media source. When | emitted from the endpoint that originates a media source. When | |||
simulcast has been negotiated in the sending direction, the endpoint | simulcast has been negotiated in the sending direction, the endpoint | |||
can transmit up to the number of RTP streams needed for the | can transmit up to the number of RTP streams needed for the | |||
negotiated simulcast streams for that media source. Each RTP stream | negotiated simulcast streams for that media source. Each RTP stream | |||
(SSRC) is identified by associating (Section 6.5) it with an | (SSRC) is identified by associating (Section 5.5) it with an | |||
RtpStreamId SDES item, transmitted in RTCP and possibly also as an | RtpStreamId SDES item, transmitted in RTCP and possibly also as an | |||
RTP header extension. In cases where multiple media sources have | RTP header extension. In cases where multiple media sources have | |||
been negotiated for the same RTP session and thus BUNDLE | been negotiated for the same RTP session and thus BUNDLE | |||
[I-D.ietf-mmusic-sdp-bundle-negotiation] is used, also the MID SDES | [I-D.ietf-mmusic-sdp-bundle-negotiation] is used, also the MID SDES | |||
item will be sent similarly to the RtpStreamId. | item will be sent similarly to the RtpStreamId. | |||
Each RTP stream may not be continuously transmitted due to any of the | Each RTP stream may not be continuously transmitted due to any of the | |||
following reasons; temporarily paused using Pause/Resume [RFC7728], | following reasons; temporarily paused using Pause/Resume [RFC7728], | |||
sender side application logic temporarily pausing it, or lack of | sender side application logic temporarily pausing it, or lack of | |||
network resources to transmit this simulcast stream. However, all | network resources to transmit this simulcast stream. However, all | |||
simulcast streams that have been negotiated have active and | simulcast streams that have been negotiated have active and | |||
maintained SSRC (at least in regular RTCP reports), even if no RTP | maintained SSRC (at least in regular RTCP reports), even if no RTP | |||
packets are currently transmitted. The relation between an RTP | packets are currently transmitted. The relation between an RTP | |||
Stream (SSRC) and a particular simulcast stream is not expected to | Stream (SSRC) and a particular simulcast stream is not expected to | |||
change, except in exceptional situations such as SSRC collisions. At | change, except in exceptional situations such as SSRC collisions. At | |||
SSRC changes, the usage of MID and RtpStreamId should enable the | SSRC changes, the usage of MID and RtpStreamId should enable the | |||
receiver to correctly identify the RTP streams even after an SSRC | receiver to correctly identify the RTP streams even after an SSRC | |||
change. | change. | |||
7.2. RTP Middlebox to Receiver | 6.2. RTP Middlebox to Receiver | |||
RTP streams in a multi-party RTP session can be used in multiple | RTP streams in a multi-party RTP session can be used in multiple | |||
different ways, when the session utilizes simulcast at least on the | different ways, when the session utilizes simulcast at least on the | |||
media source to middlebox legs. This is to a large degree due to the | media source to middlebox legs. This is to a large degree due to the | |||
different RTP middlebox behaviors, but also the needs of the | different RTP middlebox behaviors, but also the needs of the | |||
application. This text assumes that the RTP middlebox will select a | application. This text assumes that the RTP middlebox will select a | |||
media source and choose which simulcast stream for that media source | media source and choose which simulcast stream for that media source | |||
to deliver to a specific receiver. In many cases, at most one | to deliver to a specific receiver. In many cases, at most one | |||
simulcast stream per media source will be forwarded to a particular | simulcast stream per media source will be forwarded to a particular | |||
receiver at any instant in time, even if the selected simulcast | receiver at any instant in time, even if the selected simulcast | |||
stream may vary. For cases where this does not hold due to | stream may vary. For cases where this does not hold due to | |||
application needs, then the RTP stream aspects will fall under the | application needs, then the RTP stream aspects will fall under the | |||
middlebox to middlebox case Section 7.3. | middlebox to middlebox case Section 6.3. | |||
The selection of which simulcast streams to forward towards the | The selection of which simulcast streams to forward towards the | |||
receiver, is application specific. However, in conferencing | receiver, is application specific. However, in conferencing | |||
applications, active speaker selection is common. In case the number | applications, active speaker selection is common. In case the number | |||
of media sources possible to forward, N, is less than the total | of media sources possible to forward, N, is less than the total | |||
amount of media sources available in an multi-media session, the | amount of media sources available in an multi-media session, the | |||
current and previous speakers (up to N in total) are often the ones | current and previous speakers (up to N in total) are often the ones | |||
forwarded. To avoid the need for media specific processing to | forwarded. To avoid the need for media specific processing to | |||
determine the current speaker(s) in the RTP middlebox, the endpoint | determine the current speaker(s) in the RTP middlebox, the endpoint | |||
providing a media source may include meta data, such as the RTP | providing a media source may include meta data, such as the RTP | |||
skipping to change at page 23, line 5 ¶ | skipping to change at page 22, line 5 ¶ | |||
for including the RtpStreamId in the middlebox to receiver direction | for including the RtpStreamId in the middlebox to receiver direction | |||
for an RTP stream is to let the receiver know which restrictions | for an RTP stream is to let the receiver know which restrictions | |||
apply to the currently delivered RTP stream. In case the RtpStreamId | apply to the currently delivered RTP stream. In case the RtpStreamId | |||
is negotiated to be used, it is important to remember that the used | is negotiated to be used, it is important to remember that the used | |||
identifiers will be specific to each signalling session. Even if the | identifiers will be specific to each signalling session. Even if the | |||
central entity can attempt to coordinate, it is likely that the | central entity can attempt to coordinate, it is likely that the | |||
RtpStreamIds need to be translated to the leg specific values. The | RtpStreamIds need to be translated to the leg specific values. The | |||
below cases will have as base line that RtpStreamId is not used in | below cases will have as base line that RtpStreamId is not used in | |||
the mixer to receiver direction. | the mixer to receiver direction. | |||
7.2.1. Media-Switching Mixer | 6.2.1. Media-Switching Mixer | |||
This section discusses the behavior in cases where the RTP middlebox | This section discusses the behavior in cases where the RTP middlebox | |||
behaves like the Media-Switching Mixer (Section 3.6.2) in RTP | behaves like the Media-Switching Mixer (Section 3.6.2) in RTP | |||
Topologies [RFC7667]. The fundamental aspect here is that the media | Topologies [RFC7667]. The fundamental aspect here is that the media | |||
sources delivered from the middlebox will be the mixer's conceptual | sources delivered from the middlebox will be the mixer's conceptual | |||
or functional ones. For example, one media source may be the main | or functional ones. For example, one media source may be the main | |||
speaker in high resolution video, while a number of other media | speaker in high resolution video, while a number of other media | |||
sources are thumbnails of each participant. | sources are thumbnails of each participant. | |||
The above results in that the RTP stream produced by the mixer is one | The above results in that the RTP stream produced by the mixer is one | |||
that switches between a number of received incoming RTP streams for | that switches between a number of received incoming RTP streams for | |||
different media sources and in different simulcast versions. The | different media sources and in different simulcast versions. The | |||
mixer selects the media source to be sent as one of the RTP streams, | mixer selects the media source to be sent as one of the RTP streams, | |||
and then selects among the available simulcast streams for the most | and then selects among the available simulcast streams for the most | |||
appropriate one. The selection criteria include available bandwidth | appropriate one. The selection criteria include available bandwidth | |||
on the mixer to receiver path and restrictions based on the | on the mixer to receiver path and restrictions based on the | |||
functional usage of the RTP stream delivered to the receiver. An | functional usage of the RTP stream delivered to the receiver. As an | |||
example of the latter, is that it is unnecessary to forward a full HD | example of the latter, it is unnecessary to forward a full HD video | |||
video to a receiver if the display area is just a thumbnail. Thus, | to a receiver if the display area is just a thumbnail. Thus, | |||
restrictions may exist to not allow some simulcast streams to be | restrictions may exist to not allow some simulcast streams to be | |||
forwarded for some of the mixer's media sources. | forwarded for some of the mixer's media sources. | |||
This will result in a single RTP stream being used for a particular | This will result in a single RTP stream being used for each of the | |||
of the RTP mixer's media sources. This RTP stream is at any point in | RTP mixer's media sources. This RTP stream is at any point in time a | |||
time a selection of one particular RTP stream arriving to the mixer, | selection of one particular RTP stream arriving to the mixer, where | |||
where the RTP header field values are rewritten to provide a | the RTP header field values are rewritten to provide a consistent, | |||
consistent, single RTP stream. If the RTP mixer doesn't receive any | single RTP stream. If the RTP mixer doesn't receive any incoming | |||
incoming stream matched to this media source, the SSRC will not | stream matched to this media source, the SSRC will not transmit, but | |||
transmit, but be kept alive using RTCP. The SSRC and thus RTP stream | be kept alive using RTCP. The SSRC and thus RTP stream for the | |||
for the mixer's media source is expected to be long term stable. It | mixer's media source is expected to be long term stable. It will | |||
will only be changed by signalling or other disruptive events. Note | only be changed by signalling or other disruptive events. Note that | |||
that although the above talks about a single RTP stream, there can in | although the above talks about a single RTP stream, there can in some | |||
some cases be multiple RTP streams carrying the selected simulcast | cases be multiple RTP streams carrying the selected simulcast stream | |||
stream for the originating media source, including repair or other | for the originating media source, including redundancy or other | |||
auxiliary RTP streams. | auxiliary RTP streams. | |||
The mixer may communicate the identity of the originating media | The mixer may communicate the identity of the originating media | |||
source to the receiver by including the CSRC field with the | source to the receiver by including the CSRC field with the | |||
originating media source's SSRC value. Note that due to the | originating media source's SSRC value. Note that due to the | |||
possibility that the RTP mixer switches between simulcast versions of | possibility that the RTP mixer switches between simulcast versions of | |||
the media source, the CSRC value may change, even if the media source | the media source, the CSRC value may change, even if the media source | |||
is kept the same. | is kept the same. | |||
It is important to note that any MID SDES item from the originating | It is important to note that any MID SDES item from the originating | |||
media source needs to be removed and not be associated with the RTP | media source needs to be removed and not be associated with the RTP | |||
stream's SSRC. This as there is nothing in the signalling between | stream's SSRC. That is, there is nothing in the signalling between | |||
the mixer and the receiver that is structured around the originating | the mixer and the receiver that is structured around the originating | |||
media sources, only the mixer's media sources. If they would be | media sources, only the mixer's media sources. If they would be | |||
associated with the SSRC, the receiver would likely believe that | associated with the SSRC, the receiver would likely believe that | |||
there has been an SSRC collision, and that the RTP stream is spurious | there has been an SSRC collision, and that the RTP stream is spurious | |||
as it doesn't carry the identifiers used to relate it to the correct | as it doesn't carry the identifiers used to relate it to the correct | |||
context. However, this is not true for CSRC values, as long as they | context. However, this is not true for CSRC values, as long as they | |||
are never used as SSRC. In these cases one could provide CNAME and | are never used as SSRC. In these cases one could provide CNAME and | |||
MID as SDES items. A receiver could use this to determine which CSRC | MID as SDES items. A receiver could use this to determine which CSRC | |||
values that are associated with the same originating media source. | values that are associated with the same originating media source. | |||
If RtpStreamIds are used in this scenario, it should be noted that | If RtpStreamIds are used in the scenario described by this section, | |||
the RtpStreamId on a particular SSRC will change based on the actual | it should be noted that the RtpStreamId on a particular SSRC will | |||
simulcast stream selected for switching. These RtpStreamId | change based on the actual simulcast stream selected for switching. | |||
identifiers will be local to this leg's signalling context. In | These RtpStreamId identifiers will be local to this leg's signalling | |||
addition, the defined RtpStreamIds and their parameters need to cover | context. In addition, the defined RtpStreamIds and their parameters | |||
all the media sources and simulcast streams that can be switched into | need to cover all the media sources and simulcast streams received by | |||
this media source. | the RTP mixer that can be switched into this media source, sent by | |||
the RTP mixer. | ||||
7.2.2. Selective Forwarding Middlebox | 6.2.2. Selective Forwarding Middlebox | |||
This section discusses the behavior in cases where the RTP middlebox | This section discusses the behavior in cases where the RTP middlebox | |||
behaves like the Selective Forwarding Middlebox (Section 3.7) in RTP | behaves like the Selective Forwarding Middlebox (Section 3.7) in RTP | |||
Topologies [RFC7667]. Applications for this type of RTP middlebox | Topologies [RFC7667]. Applications for this type of RTP middlebox | |||
results in that each originating media source will have a | results in that each originating media source will have a | |||
corresponding media source on the leg between the middlebox and the | corresponding media source on the leg between the middlebox and the | |||
receiver. A SFM could go as far as exposing all the simulcast | receiver. A Selective Forwarding Middlebox (SFM) could go as far as | |||
streams for an media source, however this section will focus on | exposing all the simulcast streams for an media source, however this | |||
having a single simulcast stream that can contain any of the | section will focus on having a single simulcast stream that can | |||
simulcast formats. This section will assume that the SFM projection | contain any of the simulcast formats. This section will assume that | |||
mechanism works on media source level, and maps one of the media | the SFM projection mechanism works on media source level, and maps | |||
source's simulcast streams onto one RTP stream from the SFM to the | one of the media source's simulcast streams onto one RTP stream from | |||
receiver. | the SFM to the receiver. | |||
This usage will result in that the individual RTP stream(s) for one | This usage will result in that the individual RTP stream(s) for one | |||
media source can switch between being active to paused, based on the | media source can switch between being active to paused, based on the | |||
subset of media sources the SFM wants to provide the receiver for the | subset of media sources the SFM wants to provide the receiver for the | |||
moment. With SFMs there exist no reasons to use CSRC to indicate the | moment. With SFMs there exist no reasons to use CSRC to indicate the | |||
originating stream, as there is a one to one media source mapping. | originating stream, as there is a one to one media source mapping. | |||
If the application requires knowing the simulcast version received to | If the application requires knowing the simulcast version received to | |||
function well, then RtpStreamId should be negotiated on the SFM to | function well, then RtpStreamId should be negotiated on the SFM to | |||
receiver leg. Which simulcast stream that is being forwarded is not | receiver leg. Which simulcast stream that is being forwarded is not | |||
made explicit unless RtpStreamId is used on the leg. | made explicit unless RtpStreamId is used on the leg. | |||
skipping to change at page 25, line 29 ¶ | skipping to change at page 24, line 32 ¶ | |||
that provides the last RTP sequence number transmitted prior to the | that provides the last RTP sequence number transmitted prior to the | |||
pause. Due to usage, the timeliness of this solution depends on when | pause. Due to usage, the timeliness of this solution depends on when | |||
delivery using RTCP can occur in relation to the transmission of the | delivery using RTCP can occur in relation to the transmission of the | |||
last RTP packet. If no explicit information is provided at all, then | last RTP packet. If no explicit information is provided at all, then | |||
detection based on non increasing RTCP SR field values and timers | detection based on non increasing RTCP SR field values and timers | |||
need to be used to determine pause in RTP packet delivery. This | need to be used to determine pause in RTP packet delivery. This | |||
results in that one can usually not determine when the last RTP | results in that one can usually not determine when the last RTP | |||
packet arrives (if it arrives) that this will be the last. That it | packet arrives (if it arrives) that this will be the last. That it | |||
was the last is something that one learns later. | was the last is something that one learns later. | |||
7.3. RTP Middlebox to RTP Middlebox | 6.3. RTP Middlebox to RTP Middlebox | |||
This relates to the transmission of simulcast streams between RTP | This relates to the transmission of simulcast streams between RTP | |||
middleboxes or other usages where one wants to enable the delivery of | middleboxes or other usages where one wants to enable the delivery of | |||
multiple simultaneous simulcast streams per media source, but the | multiple simultaneous simulcast streams per media source, but the | |||
transmitting entity is not the originating endpoint. For a | transmitting entity is not the originating endpoint. For a | |||
particular direction between middlebox A and B, this looks very | particular direction between middlebox A and B, this looks very | |||
similar to the originating to middlebox case on a media source basis. | similar to the originating to middlebox case on a media source basis. | |||
However, in this case there is usually multiple media sources, | However, in this case there is usually multiple media sources, | |||
originating from multiple endpoints. This can create situations | originating from multiple endpoints. This can create situations | |||
where limitations in the number of simultaneously received media | where limitations in the number of simultaneously received media | |||
skipping to change at page 26, line 5 ¶ | skipping to change at page 25, line 7 ¶ | |||
but also media sources can be selected. This results in that | but also media sources can be selected. This results in that | |||
individual RTP streams can be become paused at any point and later | individual RTP streams can be become paused at any point and later | |||
being resumed based on various criteria. | being resumed based on various criteria. | |||
The MIDs used between A and B are the ones agreed between these two | The MIDs used between A and B are the ones agreed between these two | |||
identities in signalling. The RtpStreamId values will also be | identities in signalling. The RtpStreamId values will also be | |||
provided to ensure explicit information about which simulcast stream | provided to ensure explicit information about which simulcast stream | |||
they are. The RTP stream to MID and RtpStreamId associations should | they are. The RTP stream to MID and RtpStreamId associations should | |||
here be long term stable. | here be long term stable. | |||
8. Network Aspects | 7. Network Aspects | |||
Simulcast is in this memo defined as the act of sending multiple | Simulcast is in this memo defined as the act of sending multiple | |||
alternative encoded streams of the same underlying media source. | alternative encoded streams of the same underlying media source. | |||
When transmitting multiple independent streams that originate from | When transmitting multiple independent streams that originate from | |||
the same source, it could potentially be done in several different | the same source, it could potentially be done in several different | |||
ways using RTP. A general discussion on considerations for use of | ways using RTP. A general discussion on considerations for use of | |||
the different RTP multiplexing alternatives can be found in | the different RTP multiplexing alternatives can be found in | |||
Guidelines for Multiplexing in RTP | Guidelines for Multiplexing in RTP | |||
[I-D.ietf-avtcore-multiplex-guidelines]. Discussion and | [I-D.ietf-avtcore-multiplex-guidelines]. Discussion and | |||
clarification on how to handle multiple streams in an RTP session can | clarification on how to handle multiple streams in an RTP session can | |||
skipping to change at page 26, line 33 ¶ | skipping to change at page 25, line 35 ¶ | |||
streams may be prioritized over higher bit-rate streams to | streams may be prioritized over higher bit-rate streams to | |||
minimize congestion or packet losses in the low bit-rate streams. | minimize congestion or packet losses in the low bit-rate streams. | |||
Thus, there is a benefit to use a simulcast solution with good QoS | Thus, there is a benefit to use a simulcast solution with good QoS | |||
support. | support. | |||
NAT/FW Traversal: Using multiple RTP sessions incurs more cost for | NAT/FW Traversal: Using multiple RTP sessions incurs more cost for | |||
NAT/FW traversal unless they can re-use the same transport flow, | NAT/FW traversal unless they can re-use the same transport flow, | |||
which can be achieved by Multiplexing Negotiation Using SDP Port | which can be achieved by Multiplexing Negotiation Using SDP Port | |||
Numbers [I-D.ietf-mmusic-sdp-bundle-negotiation]. | Numbers [I-D.ietf-mmusic-sdp-bundle-negotiation]. | |||
8.1. Bitrate Adaptation | 7.1. Bitrate Adaptation | |||
Use of multiple simulcast streams can require a significant amount of | Use of multiple simulcast streams can require a significant amount of | |||
network resources. If the amount of available network resources | network resources. If the amount of available network resources | |||
varies during an RTP session such that it does not match what is | varies during an RTP session such that it does not match what is | |||
negotiated in SDP, the bitrate used by the different simulcast | negotiated in SDP, the bitrate used by the different simulcast | |||
streams may have to be reduced dynamically. What simulcast streams | streams may have to be reduced dynamically. What simulcast streams | |||
to prioritize when allocating available bitrate among the simulcast | to prioritize when allocating available bitrate among the simulcast | |||
streams in such adaptation SHOULD be taken from the simulcast stream | streams in such adaptation SHOULD be taken from the simulcast stream | |||
order on the "a=simulcast" line and ordering of alternative simulcast | order on the "a=simulcast" line and ordering of alternative simulcast | |||
formats Section 6.2. Simulcast streams that have pause/resume | formats Section 5.2. Simulcast streams that have pause/resume | |||
capability and that would be given such low bitrate by the adaptation | capability and that would be given such low bitrate by the adaptation | |||
process that they are considered not really useful can be temporarily | process that they are considered not really useful can be temporarily | |||
paused until the limiting condition clears. | paused until the limiting condition clears. | |||
9. Limitation | 8. Limitation | |||
The chosen approach has a limitation that relates to the use of a | The chosen approach has a limitation that relates to the use of a | |||
single RTP session for all simulcast formats of a media source, which | single RTP session for all simulcast formats of a media source, which | |||
comes from sending all simulcast streams related to a media source | comes from sending all simulcast streams related to a media source | |||
under the same SDP media description. | under the same SDP media description. | |||
It is not possible to use different simulcast streams on different | It is not possible to use different simulcast streams on different | |||
media transports, limiting the possibilities to apply different QoS | media transports, limiting the possibilities to apply different QoS | |||
to different simulcast streams. When using unicast, QoS mechanisms | to different simulcast streams. When using unicast, QoS mechanisms | |||
based on individual packet marking are feasible, since they do not | based on individual packet marking are feasible, since they do not | |||
skipping to change at page 27, line 23 ¶ | skipping to change at page 26, line 28 ¶ | |||
It is also not possible to separate different simulcast streams into | It is also not possible to separate different simulcast streams into | |||
different multicast groups to allow a multicast receiver to pick the | different multicast groups to allow a multicast receiver to pick the | |||
stream it wants, rather than receive all of them. In this case, the | stream it wants, rather than receive all of them. In this case, the | |||
only reasonable implementation is to use different RTP sessions for | only reasonable implementation is to use different RTP sessions for | |||
each multicast group so that reporting and other RTCP functions | each multicast group so that reporting and other RTCP functions | |||
operate as intended. Such simulcast usage in multicast context is | operate as intended. Such simulcast usage in multicast context is | |||
out of scope for the current document and would require additional | out of scope for the current document and would require additional | |||
specification. | specification. | |||
10. IANA Considerations | 9. IANA Considerations | |||
This document requests to register a new media-level SDP attribute, | This document requests to register a new media-level SDP attribute, | |||
"simulcast", in the "att-field (media level only)" registry within | "simulcast", in the "att-field (media level only)" registry within | |||
the SDP parameters registry, according to the procedures of [RFC4566] | the SDP parameters registry, according to the procedures of [RFC4566] | |||
and [I-D.ietf-mmusic-sdp-mux-attributes]. | and [I-D.ietf-mmusic-sdp-mux-attributes]. | |||
Contact name, email: IETF, contacted via mmusic@ietf.org, or a | Contact name, email: IETF, contacted via mmusic@ietf.org, or a | |||
successor address designated by IESG | successor address designated by IESG | |||
Attribute name: simulcast | Attribute name: simulcast | |||
Long-form attribute name: Simulcast stream description | Long-form attribute name: Simulcast stream description | |||
Charset dependent: No | Charset dependent: No | |||
Attribute value: sc-value; see Section 6.1 of RFC XXXX. | Attribute value: sc-value; see Section 5.1 of RFC XXXX. | |||
Purpose: Signals simulcast capability for a set of RTP streams | Purpose: Signals simulcast capability for a set of RTP streams | |||
MUX category: NORMAL | MUX category: NORMAL | |||
Note to RFC Editor: Please replace "RFC XXXX" with the assigned | Note to RFC Editor: Please replace "RFC XXXX" with the assigned | |||
number of this RFC. | number of this RFC. | |||
11. Security Considerations | 10. Security Considerations | |||
The simulcast capability, configuration attributes, and parameters | The simulcast capability, configuration attributes, and parameters | |||
are vulnerable to attacks in signaling. | are vulnerable to attacks in signaling. | |||
A false inclusion of the "a=simulcast" attribute may result in | A false inclusion of the "a=simulcast" attribute may result in | |||
simultaneous transmission of multiple RTP streams that would | simultaneous transmission of multiple RTP streams that would | |||
otherwise not be generated. The impact is limited by the media | otherwise not be generated. The impact is limited by the media | |||
description joint bandwidth, shared by all simulcast streams | description joint bandwidth, shared by all simulcast streams | |||
irrespective of their number. There may however be a large number of | irrespective of their number. There may however be a large number of | |||
unwanted RTP streams that will impact the share of bandwidth | unwanted RTP streams that will impact the share of bandwidth | |||
skipping to change at page 28, line 30 ¶ | skipping to change at page 27, line 30 ¶ | |||
Neither of the above will likely have any major consequences and can | Neither of the above will likely have any major consequences and can | |||
be mitigated by signaling that is at least integrity and source | be mitigated by signaling that is at least integrity and source | |||
authenticated to prevent an attacker to change it. | authenticated to prevent an attacker to change it. | |||
Security considerations related to the use of "a=rid" and the | Security considerations related to the use of "a=rid" and the | |||
RtpStreamId SDES item is covered in [I-D.ietf-mmusic-rid] and | RtpStreamId SDES item is covered in [I-D.ietf-mmusic-rid] and | |||
[I-D.ietf-avtext-rid]. There are no additional security concerns | [I-D.ietf-avtext-rid]. There are no additional security concerns | |||
related to their use in this specification. | related to their use in this specification. | |||
12. Contributors | 11. Contributors | |||
Morgan Lindqvist and Fredrik Jansson, both from Ericsson, have | Morgan Lindqvist and Fredrik Jansson, both from Ericsson, have | |||
contributed with important material to the first versions of this | contributed with important material to the first versions of this | |||
document. Robert Hansen and Cullen Jennings, from Cisco, Peter | document. Robert Hansen and Cullen Jennings, from Cisco, Peter | |||
Thatcher, from Google, and Adam Roach, from Mozilla, contributed | Thatcher, from Google, and Adam Roach, from Mozilla, contributed | |||
significantly to subsequent versions. | significantly to subsequent versions. | |||
13. Acknowledgements | 12. Acknowledgements | |||
The authors would like to thank Bernard Aboba, Thomas Belling, Roni | The authors would like to thank Bernard Aboba, Thomas Belling, Roni | |||
Even, Adam Roach, Inaki Baz Castillo, and Paul Kyzivat for the | Even, Adam Roach, Inaki Baz Castillo, Paul Kyzivat, and Arun | |||
feedback they provided during the development of this document. | Arunachalam for the feedback they provided during the development of | |||
this document. | ||||
14. References | 13. References | |||
14.1. Normative References | 13.1. Normative 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. | |||
[I-D.ietf-mmusic-rid] | [I-D.ietf-mmusic-rid] | |||
Thatcher, P., Zanaty, M., Nandakumar, S., Burman, B., | Thatcher, P., Zanaty, M., Nandakumar, S., Burman, B., | |||
Roach, A., and B. Campen, "RTP Payload Format | Roach, A., and B. Campen, "RTP Payload Format | |||
Restrictions", draft-ietf-mmusic-rid-09 (work in | Restrictions", draft-ietf-mmusic-rid-10 (work in | |||
progress), February 2017. | progress), March 2017. | |||
[I-D.ietf-mmusic-sdp-bundle-negotiation] | [I-D.ietf-mmusic-sdp-bundle-negotiation] | |||
Holmberg, C., Alvestrand, H., and C. Jennings, | Holmberg, C., Alvestrand, H., and C. Jennings, | |||
"Negotiating Media Multiplexing Using the Session | "Negotiating Media Multiplexing Using the Session | |||
Description Protocol (SDP)", draft-ietf-mmusic-sdp-bundle- | Description Protocol (SDP)", draft-ietf-mmusic-sdp-bundle- | |||
negotiation-36 (work in progress), October 2016. | negotiation-38 (work in progress), April 2017. | |||
[I-D.ietf-mmusic-sdp-mux-attributes] | [I-D.ietf-mmusic-sdp-mux-attributes] | |||
Nandakumar, S., "A Framework for SDP Attributes when | Nandakumar, S., "A Framework for SDP Attributes when | |||
Multiplexing", draft-ietf-mmusic-sdp-mux-attributes-16 | Multiplexing", draft-ietf-mmusic-sdp-mux-attributes-16 | |||
(work in progress), December 2016. | (work in progress), December 2016. | |||
[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, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
skipping to change at page 29, line 45 ¶ | skipping to change at page 28, line 45 ¶ | |||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
<http://www.rfc-editor.org/info/rfc5234>. | <http://www.rfc-editor.org/info/rfc5234>. | |||
[RFC7728] Burman, B., Akram, A., Even, R., and M. Westerlund, "RTP | [RFC7728] Burman, B., Akram, A., Even, R., and M. Westerlund, "RTP | |||
Stream Pause and Resume", RFC 7728, DOI 10.17487/RFC7728, | Stream Pause and Resume", RFC 7728, DOI 10.17487/RFC7728, | |||
February 2016, <http://www.rfc-editor.org/info/rfc7728>. | February 2016, <http://www.rfc-editor.org/info/rfc7728>. | |||
14.2. Informative References | 13.2. Informative References | |||
[I-D.ietf-avtcore-multiplex-guidelines] | [I-D.ietf-avtcore-multiplex-guidelines] | |||
Westerlund, M., Perkins, C., and H. Alvestrand, | Westerlund, M., Perkins, C., and H. Alvestrand, | |||
"Guidelines for using the Multiplexing Features of RTP to | "Guidelines for using the Multiplexing Features of RTP to | |||
Support Multiple Media Streams", draft-ietf-avtcore- | Support Multiple Media Streams", draft-ietf-avtcore- | |||
multiplex-guidelines-03 (work in progress), October 2014. | multiplex-guidelines-03 (work in progress), October 2014. | |||
[RFC2198] Perkins, C., Kouvelas, I., Hodson, O., Hardman, V., | [RFC2198] Perkins, C., Kouvelas, I., Hodson, O., Hardman, V., | |||
Handley, M., Bolot, J., Vega-Garcia, A., and S. Fosse- | Handley, M., Bolot, J., Vega-Garcia, A., and S. Fosse- | |||
Parisis, "RTP Payload for Redundant Audio Data", RFC 2198, | Parisis, "RTP Payload for Redundant Audio Data", RFC 2198, | |||
skipping to change at page 32, line 5 ¶ | skipping to change at page 31, line 5 ¶ | |||
[RFC7741] Westin, P., Lundin, H., Glover, M., Uberti, J., and F. | [RFC7741] Westin, P., Lundin, H., Glover, M., Uberti, J., and F. | |||
Galligan, "RTP Payload Format for VP8 Video", RFC 7741, | Galligan, "RTP Payload Format for VP8 Video", RFC 7741, | |||
DOI 10.17487/RFC7741, March 2016, | DOI 10.17487/RFC7741, March 2016, | |||
<http://www.rfc-editor.org/info/rfc7741>. | <http://www.rfc-editor.org/info/rfc7741>. | |||
[RFC8108] Lennox, J., Westerlund, M., Wu, Q., and C. Perkins, | [RFC8108] Lennox, J., Westerlund, M., Wu, Q., and C. Perkins, | |||
"Sending Multiple RTP Streams in a Single RTP Session", | "Sending Multiple RTP Streams in a Single RTP Session", | |||
RFC 8108, DOI 10.17487/RFC8108, March 2017, | RFC 8108, DOI 10.17487/RFC8108, March 2017, | |||
<http://www.rfc-editor.org/info/rfc8108>. | <http://www.rfc-editor.org/info/rfc8108>. | |||
Appendix A. Changes From Earlier Versions | Appendix A. Requirements | |||
The following requirements have to be met to support the use cases | ||||
(Section 3): | ||||
REQ-1: Identification: | ||||
REQ-1.1: It must be possible to identify a set of simulcasted RTP | ||||
streams as originating from the same media source in SDP | ||||
signaling. | ||||
REQ-1.2: An RTP endpoint must be capable of identifying the | ||||
simulcast stream a received RTP stream is associated with, | ||||
knowing the content of the SDP signalling. | ||||
REQ-2: Transport usage. The solution must work when using: | ||||
REQ-2.1: Legacy SDP with separate media transports per SDP media | ||||
description. | ||||
REQ-2.2: Bundled [I-D.ietf-mmusic-sdp-bundle-negotiation] SDP | ||||
media descriptions. | ||||
REQ-3: Capability negotiation. It must be possible that: | ||||
REQ-3.1: Sender can express capability of sending simulcast. | ||||
REQ-3.2: Receiver can express capability of receiving simulcast. | ||||
REQ-3.3: Sender can express maximum number of simulcast streams | ||||
that can be provided. | ||||
REQ-3.4: Receiver can express maximum number of simulcast streams | ||||
that can be received. | ||||
REQ-3.5: Sender can detail the characteristics of the simulcast | ||||
streams that can be provided. | ||||
REQ-3.6: Receiver can detail the characteristics of the simulcast | ||||
streams that it prefers to receive. | ||||
REQ-4: Distinguishing features. It must be possible to have | ||||
different simulcast streams use different codec parameters, as can | ||||
be expressed by SDP format values and RTP payload types. | ||||
REQ-5: Compatibility. It must be possible to use simulcast in | ||||
combination with other RTP mechanisms that generate additional RTP | ||||
streams: | ||||
REQ-5.1: RTP Retransmission [RFC4588]. | ||||
REQ-5.2: RTP Forward Error Correction [RFC5109]. | ||||
REQ-5.3: Related payload types such as audio Comfort Noise and/or | ||||
DTMF. | ||||
REQ-5.4: A single simulcast stream can consist of multiple RTP | ||||
streams, to support codecs where a dependent stream is | ||||
dependent on a set of encoded and dependent streams, each | ||||
potentially carried in their own RTP stream. | ||||
REQ-6: Interoperability. The solution must be possible to use in: | ||||
REQ-6.1: Interworking with non-simulcast legacy clients using a | ||||
single media source per media type. | ||||
REQ-6.2: WebRTC environment with a single media source per SDP | ||||
media description. | ||||
Appendix B. Changes From Earlier Versions | ||||
NOTE TO RFC EDITOR: Please remove this section prior to publication. | NOTE TO RFC EDITOR: Please remove this section prior to publication. | |||
A.1. Modifications Between WG Version -07 and -08 | B.1. Modifications Between WG Version -08 and -09 | |||
o Changed SCID to rid-id, to align with ietf-draft-mmusic-rid | ||||
naming. | ||||
o Changed Overview to be based on examples and shortened it. | ||||
o Changed semantics of initially paused rid-id in modified SDP | ||||
offers from requiring it to follow actual RFC 7728 pause state to | ||||
an informational offerer's opinion at the time of offer creation, | ||||
not in any way overriding or amending RFC 7728 signaling. | ||||
o Replaced text on ignoring all but the first of multiple | ||||
"a=simulcast" lines in a media description with mandating that at | ||||
most one "a=simulcast" line is included. | ||||
o Clarified with a note that, for the case it is clear from the SDP | ||||
that RTP PT uniquely maps to RtpStreamId, an RTP receiver can use | ||||
RTP PT to relate simulcast streams. | ||||
o Moved Section 4 Requirements to become Appendix A. | ||||
o Editorial corrections and clarifications. | ||||
B.2. Modifications Between WG Version -07 and -08 | ||||
o Correcting syntax of SDP examples in section 6.6.1, as found by | o Correcting syntax of SDP examples in section 6.6.1, as found by | |||
Inaki Baz Castillo. | Inaki Baz Castillo. | |||
o Changing ABNF to only define the sc-value, not the SDP attribute | o Changing ABNF to only define the sc-value, not the SDP attribute | |||
itself, as suggested by Paul Kyzivat. | itself, as suggested by Paul Kyzivat. | |||
o Changing I-D reference to newly published RFC 8108. | o Changing I-D reference to newly published RFC 8108. | |||
o Adding list of modifications between -06 and -07. | o Adding list of modifications between -06 and -07. | |||
A.2. Modifications Between WG Version -06 and -07 | B.3. Modifications Between WG Version -06 and -07 | |||
o A scope clarification, as result of the discussion with Roni Even. | o A scope clarification, as result of the discussion with Roni Even. | |||
o A reformulation of the identification requirements for simulcast | o A reformulation of the identification requirements for simulcast | |||
stream. | stream. | |||
o Correcting the statement related to source specific signalling | o Correcting the statement related to source specific signalling | |||
(RFC 5576) to address Roni Even's comment. | (RFC 5576) to address Roni Even's comment. | |||
o Update of the last paragraph in Section 6.2 regarding simulcast | o Update of the last paragraph in Section 6.2 regarding simulcast | |||
stream differences as well as forbidding multiple instances of the | stream differences as well as forbidding multiple instances of the | |||
same SCID within a single a=simulcast line. | same SCID within a single a=simulcast line. | |||
o Removal of note in Section 6.4 as result of issue raised by Roni | o Removal of note in Section 6.4 as result of issue raised by Roni | |||
Even. | Even. | |||
o Use of "m=" has been changed to media description and a few other | o Use of "m=" has been changed to media description and a few other | |||
editorial improvements and clarifications. | editorial improvements and clarifications. | |||
A.3. Modifications Between WG Version -05 and -06 | B.4. Modifications Between WG Version -05 and -06 | |||
o Added section on RTP Aspects | o Added section on RTP Aspects | |||
o Added a requirement (5-4) on that capability exchange must be | o Added a requirement (5-4) on that capability exchange must be | |||
capable of handling multi RTP stream cases. | capable of handling multi RTP stream cases. | |||
o Added extmap attribute also on first signalling example as it is a | o Added extmap attribute also on first signalling example as it is a | |||
recommended to use mechanism. | recommended to use mechanism. | |||
o Clarified the definition of the simulcast attribute and how | o Clarified the definition of the simulcast attribute and how | |||
simulcast streams relates to simulcast formats and SCIDs. | simulcast streams relates to simulcast formats and SCIDs. | |||
o Updated References list and moved around some references between | o Updated References list and moved around some references between | |||
informative and normative categories. | informative and normative categories. | |||
o Editorial improvements and corrections. | o Editorial improvements and corrections. | |||
A.4. Modifications Between WG Version -04 and -05 | B.5. Modifications Between WG Version -04 and -05 | |||
o Aligned with recent changes in draft-ietf-mmusic-rid and draft- | o Aligned with recent changes in draft-ietf-mmusic-rid and draft- | |||
ietf-avtext-rid. | ietf-avtext-rid. | |||
o Modified the SDP offer/answer section to follow the generally | o Modified the SDP offer/answer section to follow the generally | |||
accepted structure, also adding a brief text on modifying the | accepted structure, also adding a brief text on modifying the | |||
session that is aligned with draft-ietf-mmusic-rid. | session that is aligned with draft-ietf-mmusic-rid. | |||
o Improved text around simulcast stream identification (as opposed | o Improved text around simulcast stream identification (as opposed | |||
to the simulcast stream itself) to consistently use the acronym | to the simulcast stream itself) to consistently use the acronym | |||
skipping to change at page 33, line 33 ¶ | skipping to change at page 34, line 30 ¶ | |||
o Changed references for RTP-level pause/resume and VP8 payload | o Changed references for RTP-level pause/resume and VP8 payload | |||
format that are now published as RFC. | format that are now published as RFC. | |||
o Improved IANA registration text. | o Improved IANA registration text. | |||
o Removed unused reference to draft-ietf-payload-flexible-fec- | o Removed unused reference to draft-ietf-payload-flexible-fec- | |||
scheme. | scheme. | |||
o Editorial improvements and corrections. | o Editorial improvements and corrections. | |||
A.5. Modifications Between WG Version -03 and -04 | B.6. Modifications Between WG Version -03 and -04 | |||
o Changed to only use RID identification, as was consensus during | o Changed to only use RID identification, as was consensus during | |||
IETF 94. | IETF 94. | |||
o ABNF improvements. | o ABNF improvements. | |||
o Clarified offer-answer rules for initially paused streams. | o Clarified offer-answer rules for initially paused streams. | |||
o Changed references for RTP topologies and RTP taxonomy documents | o Changed references for RTP topologies and RTP taxonomy documents | |||
that are now published as RFC. | that are now published as RFC. | |||
o Added reference to the new RID draft in AVTEXT. | o Added reference to the new RID draft in AVTEXT. | |||
o Re-structured section 6 to provide an easy reference by the | o Re-structured section 6 to provide an easy reference by the | |||
updated IANA section. | updated IANA section. | |||
o Added a sub-section 7.1 with a discussion of bitrate adaptation. | o Added a sub-section 7.1 with a discussion of bitrate adaptation. | |||
o Editorial improvements. | o Editorial improvements. | |||
A.6. Modifications Between WG Version -02 and -03 | B.7. Modifications Between WG Version -02 and -03 | |||
o Removed text on multicast / broadcast from use cases, since it is | o Removed text on multicast / broadcast from use cases, since it is | |||
not supported by the solution. | not supported by the solution. | |||
o Removed explicit references to unified plan draft. | o Removed explicit references to unified plan draft. | |||
o Added possibility to initiate simulcast streams in paused mode. | o Added possibility to initiate simulcast streams in paused mode. | |||
o Enabled an offerer to offer multiple stream identification (pt or | o Enabled an offerer to offer multiple stream identification (pt or | |||
rid) methods and have the answerer choose which to use. | rid) methods and have the answerer choose which to use. | |||
o Added a preference indication also in send direction offers. | o Added a preference indication also in send direction offers. | |||
o Added a section on limitations of the current proposal, including | o Added a section on limitations of the current proposal, including | |||
identification method specific limitations. | identification method specific limitations. | |||
A.7. Modifications Between WG Version -01 and -02 | B.8. Modifications Between WG Version -01 and -02 | |||
o Relying on the new RID solution for codec constraints and | o Relying on the new RID solution for codec constraints and | |||
configuration identification. This has resulted in changes in | configuration identification. This has resulted in changes in | |||
syntax to identify if pt or RID is used to describe the simulcast | syntax to identify if pt or RID is used to describe the simulcast | |||
stream. | stream. | |||
o Renamed simulcast version and simulcast version alternative to | o Renamed simulcast version and simulcast version alternative to | |||
simulcast stream and simulcast format respectively, and improved | simulcast stream and simulcast format respectively, and improved | |||
definitions for them. | definitions for them. | |||
o Clarification that it is possible to switch between simulcast | o Clarification that it is possible to switch between simulcast | |||
version alternatives, but that only a single one be used at any | version alternatives, but that only a single one be used at any | |||
point in time. | point in time. | |||
o Changed the definition so that ordering of simulcast formats for a | o Changed the definition so that ordering of simulcast formats for a | |||
specific simulcast stream do have a preference order. | specific simulcast stream do have a preference order. | |||
A.8. Modifications Between WG Version -00 and -01 | B.9. Modifications Between WG Version -00 and -01 | |||
o No changes. Only preventing expiry. | o No changes. Only preventing expiry. | |||
A.9. Modifications Between Individual Version -00 and WG Version -00 | B.10. Modifications Between Individual Version -00 and WG Version -00 | |||
o Added this appendix. | o Added this appendix. | |||
Authors' Addresses | Authors' Addresses | |||
Bo Burman | Bo Burman | |||
Ericsson | Ericsson | |||
Gronlandsgatan 31 | Gronlandsgatan 31 | |||
SE-164 60 Stockholm | SE-164 60 Stockholm | |||
Sweden | Sweden | |||
End of changes. 112 change blocks. | ||||
399 lines changed or deleted | 434 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |