draft-ietf-rtcweb-rtp-usage-24.txt | draft-ietf-rtcweb-rtp-usage-25.txt | |||
---|---|---|---|---|
RTCWEB Working Group C. Perkins | RTCWEB Working Group C. Perkins | |||
Internet-Draft University of Glasgow | Internet-Draft University of Glasgow | |||
Intended status: Standards Track M. Westerlund | Intended status: Standards Track M. Westerlund | |||
Expires: November 30, 2015 Ericsson | Expires: December 14, 2015 Ericsson | |||
J. Ott | J. Ott | |||
Aalto University | Aalto University | |||
May 29, 2015 | June 12, 2015 | |||
Web Real-Time Communication (WebRTC): Media Transport and Use of RTP | Web Real-Time Communication (WebRTC): Media Transport and Use of RTP | |||
draft-ietf-rtcweb-rtp-usage-24 | draft-ietf-rtcweb-rtp-usage-25 | |||
Abstract | Abstract | |||
The Web Real-Time Communication (WebRTC) framework provides support | The Web Real-Time Communication (WebRTC) framework provides support | |||
for direct interactive rich communication using audio, video, text, | for direct interactive rich communication using audio, video, text, | |||
collaboration, games, etc. between two peers' web-browsers. This | collaboration, games, etc. between two peers' web-browsers. This | |||
memo describes the media transport aspects of the WebRTC framework. | memo describes the media transport aspects of the WebRTC framework. | |||
It specifies how the Real-time Transport Protocol (RTP) is used in | It specifies how the Real-time Transport Protocol (RTP) is used in | |||
the WebRTC context, and gives requirements for which RTP features, | the WebRTC context, and gives requirements for which RTP features, | |||
profiles, and extensions need to be supported. | profiles, and extensions need to be supported. | |||
skipping to change at page 1, line 39 | skipping to change at page 1, line 39 | |||
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 November 30, 2015. | This Internet-Draft will expire on December 14, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 19 | skipping to change at page 2, line 19 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Rationale . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Rationale . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
4. WebRTC Use of RTP: Core Protocols . . . . . . . . . . . . . . 5 | 4. WebRTC Use of RTP: Core Protocols . . . . . . . . . . . . . . 5 | |||
4.1. RTP and RTCP . . . . . . . . . . . . . . . . . . . . . . 5 | 4.1. RTP and RTCP . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4.2. Choice of the RTP Profile . . . . . . . . . . . . . . . . 7 | 4.2. Choice of the RTP Profile . . . . . . . . . . . . . . . . 7 | |||
4.3. Choice of RTP Payload Formats . . . . . . . . . . . . . . 8 | 4.3. Choice of RTP Payload Formats . . . . . . . . . . . . . . 8 | |||
4.4. Use of RTP Sessions . . . . . . . . . . . . . . . . . . . 9 | 4.4. Use of RTP Sessions . . . . . . . . . . . . . . . . . . . 10 | |||
4.5. RTP and RTCP Multiplexing . . . . . . . . . . . . . . . . 10 | 4.5. RTP and RTCP Multiplexing . . . . . . . . . . . . . . . . 10 | |||
4.6. Reduced Size RTCP . . . . . . . . . . . . . . . . . . . . 11 | 4.6. Reduced Size RTCP . . . . . . . . . . . . . . . . . . . . 11 | |||
4.7. Symmetric RTP/RTCP . . . . . . . . . . . . . . . . . . . 11 | 4.7. Symmetric RTP/RTCP . . . . . . . . . . . . . . . . . . . 11 | |||
4.8. Choice of RTP Synchronisation Source (SSRC) . . . . . . . 11 | 4.8. Choice of RTP Synchronisation Source (SSRC) . . . . . . . 12 | |||
4.9. Generation of the RTCP Canonical Name (CNAME) . . . . . . 12 | 4.9. Generation of the RTCP Canonical Name (CNAME) . . . . . . 12 | |||
4.10. Handling of Leap Seconds . . . . . . . . . . . . . . . . 13 | 4.10. Handling of Leap Seconds . . . . . . . . . . . . . . . . 13 | |||
5. WebRTC Use of RTP: Extensions . . . . . . . . . . . . . . . . 13 | 5. WebRTC Use of RTP: Extensions . . . . . . . . . . . . . . . . 13 | |||
5.1. Conferencing Extensions and Topologies . . . . . . . . . 13 | 5.1. Conferencing Extensions and Topologies . . . . . . . . . 14 | |||
5.1.1. Full Intra Request (FIR) . . . . . . . . . . . . . . 15 | 5.1.1. Full Intra Request (FIR) . . . . . . . . . . . . . . 15 | |||
5.1.2. Picture Loss Indication (PLI) . . . . . . . . . . . . 15 | 5.1.2. Picture Loss Indication (PLI) . . . . . . . . . . . . 15 | |||
5.1.3. Slice Loss Indication (SLI) . . . . . . . . . . . . . 15 | 5.1.3. Slice Loss Indication (SLI) . . . . . . . . . . . . . 16 | |||
5.1.4. Reference Picture Selection Indication (RPSI) . . . . 16 | 5.1.4. Reference Picture Selection Indication (RPSI) . . . . 16 | |||
5.1.5. Temporal-Spatial Trade-off Request (TSTR) . . . . . . 16 | 5.1.5. Temporal-Spatial Trade-off Request (TSTR) . . . . . . 16 | |||
5.1.6. Temporary Maximum Media Stream Bit Rate Request | 5.1.6. Temporary Maximum Media Stream Bit Rate Request | |||
(TMMBR) . . . . . . . . . . . . . . . . . . . . . . . 16 | (TMMBR) . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
5.2. Header Extensions . . . . . . . . . . . . . . . . . . . . 16 | 5.2. Header Extensions . . . . . . . . . . . . . . . . . . . . 17 | |||
5.2.1. Rapid Synchronisation . . . . . . . . . . . . . . . . 17 | 5.2.1. Rapid Synchronisation . . . . . . . . . . . . . . . . 17 | |||
5.2.2. Client-to-Mixer Audio Level . . . . . . . . . . . . . 17 | 5.2.2. Client-to-Mixer Audio Level . . . . . . . . . . . . . 17 | |||
5.2.3. Mixer-to-Client Audio Level . . . . . . . . . . . . . 18 | 5.2.3. Mixer-to-Client Audio Level . . . . . . . . . . . . . 18 | |||
5.2.4. Media Stream Identification . . . . . . . . . . . . . 18 | 5.2.4. Media Stream Identification . . . . . . . . . . . . . 18 | |||
5.2.5. Coordination of Video Orientation . . . . . . . . . . 18 | 5.2.5. Coordination of Video Orientation . . . . . . . . . . 18 | |||
6. WebRTC Use of RTP: Improving Transport Robustness . . . . . . 18 | 6. WebRTC Use of RTP: Improving Transport Robustness . . . . . . 19 | |||
6.1. Negative Acknowledgements and RTP Retransmission . . . . 19 | 6.1. Negative Acknowledgements and RTP Retransmission . . . . 19 | |||
6.2. Forward Error Correction (FEC) . . . . . . . . . . . . . 20 | 6.2. Forward Error Correction (FEC) . . . . . . . . . . . . . 20 | |||
7. WebRTC Use of RTP: Rate Control and Media Adaptation . . . . 20 | 7. WebRTC Use of RTP: Rate Control and Media Adaptation . . . . 20 | |||
7.1. Boundary Conditions and Circuit Breakers . . . . . . . . 21 | 7.1. Boundary Conditions and Circuit Breakers . . . . . . . . 21 | |||
7.2. Congestion Control Interoperability and Legacy Systems . 21 | 7.2. Congestion Control Interoperability and Legacy Systems . 22 | |||
8. WebRTC Use of RTP: Performance Monitoring . . . . . . . . . . 22 | 8. WebRTC Use of RTP: Performance Monitoring . . . . . . . . . . 22 | |||
9. WebRTC Use of RTP: Future Extensions . . . . . . . . . . . . 22 | 9. WebRTC Use of RTP: Future Extensions . . . . . . . . . . . . 23 | |||
10. Signalling Considerations . . . . . . . . . . . . . . . . . . 23 | 10. Signalling Considerations . . . . . . . . . . . . . . . . . . 23 | |||
11. WebRTC API Considerations . . . . . . . . . . . . . . . . . . 24 | 11. WebRTC API Considerations . . . . . . . . . . . . . . . . . . 25 | |||
12. RTP Implementation Considerations . . . . . . . . . . . . . . 27 | 12. RTP Implementation Considerations . . . . . . . . . . . . . . 27 | |||
12.1. Configuration and Use of RTP Sessions . . . . . . . . . 27 | 12.1. Configuration and Use of RTP Sessions . . . . . . . . . 27 | |||
12.1.1. Use of Multiple Media Sources Within an RTP Session 27 | 12.1.1. Use of Multiple Media Sources Within an RTP Session 27 | |||
12.1.2. Use of Multiple RTP Sessions . . . . . . . . . . . . 28 | 12.1.2. Use of Multiple RTP Sessions . . . . . . . . . . . . 28 | |||
12.1.3. Differentiated Treatment of RTP Packet Streams . . . 33 | 12.1.3. Differentiated Treatment of RTP Packet Streams . . . 33 | |||
12.2. Media Source, RTP Packet Streams, and Participant | 12.2. Media Source, RTP Packet Streams, and Participant | |||
Identification . . . . . . . . . . . . . . . . . . . . . 35 | Identification . . . . . . . . . . . . . . . . . . . . . 35 | |||
12.2.1. Media Source Identification . . . . . . . . . . . . 35 | 12.2.1. Media Source Identification . . . . . . . . . . . . 35 | |||
12.2.2. SSRC Collision Detection . . . . . . . . . . . . . . 36 | 12.2.2. SSRC Collision Detection . . . . . . . . . . . . . . 36 | |||
12.2.3. Media Synchronisation Context . . . . . . . . . . . 37 | 12.2.3. Media Synchronisation Context . . . . . . . . . . . 37 | |||
13. Security Considerations . . . . . . . . . . . . . . . . . . . 37 | 13. Security Considerations . . . . . . . . . . . . . . . . . . . 37 | |||
14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 | 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 | |||
15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 39 | 15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 39 | |||
16. References . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
16.1. Normative References . . . . . . . . . . . . . . . . . . 39 | 16.1. Normative References . . . . . . . . . . . . . . . . . . 39 | |||
16.2. Informative References . . . . . . . . . . . . . . . . . 42 | 16.2. Informative References . . . . . . . . . . . . . . . . . 43 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 44 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
1. Introduction | 1. Introduction | |||
The Real-time Transport Protocol (RTP) [RFC3550] provides a framework | The Real-time Transport Protocol (RTP) [RFC3550] provides a framework | |||
for delivery of audio and video teleconferencing data and other real- | for delivery of audio and video teleconferencing data and other real- | |||
time media applications. Previous work has defined the RTP protocol, | time media applications. Previous work has defined the RTP protocol, | |||
along with numerous profiles, payload formats, and other extensions. | along with numerous profiles, payload formats, and other extensions. | |||
When combined with appropriate signalling, these form the basis for | When combined with appropriate signalling, these form the basis for | |||
many teleconferencing systems. | many teleconferencing systems. | |||
skipping to change at page 4, line 22 | skipping to change at page 4, line 22 | |||
The RTP framework comprises the RTP data transfer protocol, the RTP | The RTP framework comprises the RTP data transfer protocol, the RTP | |||
control protocol, and numerous RTP payload formats, profiles, and | control protocol, and numerous RTP payload formats, profiles, and | |||
extensions. This range of add-ons has allowed RTP to meet various | extensions. This range of add-ons has allowed RTP to meet various | |||
needs that were not envisaged by the original protocol designers, and | needs that were not envisaged by the original protocol designers, and | |||
to support many new media encodings, but raises the question of what | to support many new media encodings, but raises the question of what | |||
extensions are to be supported by new implementations. The | extensions are to be supported by new implementations. The | |||
development of the WebRTC framework provides an opportunity to review | development of the WebRTC framework provides an opportunity to review | |||
the available RTP features and extensions, and to define a common | the available RTP features and extensions, and to define a common | |||
baseline RTP feature set for all WebRTC Endpoints. This builds on | baseline RTP feature set for all WebRTC Endpoints. This builds on | |||
the past 20 years development of RTP to mandate the use of extensions | the past 20 years of RTP development to mandate the use of extensions | |||
that have shown widespread utility, while still remaining compatible | that have shown widespread utility, while still remaining compatible | |||
with the wide installed base of RTP implementations where possible. | with the wide installed base of RTP implementations where possible. | |||
RTP and RTCP extensions that are not discussed in this document can | RTP and RTCP extensions that are not discussed in this document can | |||
be implemented by WebRTC Endpoints if they are beneficial for new use | be implemented by WebRTC Endpoints if they are beneficial for new use | |||
cases. However, they are not necessary to address the WebRTC use | cases. However, they are not necessary to address the WebRTC use | |||
cases and requirements identified in [RFC7478]. | cases and requirements identified in [RFC7478]. | |||
While the baseline set of RTP features and extensions defined in this | While the baseline set of RTP features and extensions defined in this | |||
memo is targeted at the requirements of the WebRTC framework, it is | memo is targeted at the requirements of the WebRTC framework, it is | |||
skipping to change at page 4, line 51 | skipping to change at page 5, line 6 | |||
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 [RFC2119]. The RFC | document are to be interpreted as described in [RFC2119]. The RFC | |||
2119 interpretation of these key words applies only when written in | 2119 interpretation of these key words applies only when written in | |||
ALL CAPS. Lower- or mixed-case uses of these key words are not to be | ALL CAPS. Lower- or mixed-case uses of these key words are not to be | |||
interpreted as carrying special significance in this memo. | interpreted as carrying special significance in this memo. | |||
We define the following additional terms: | We define the following additional terms: | |||
WebRTC MediaStream: The MediaStream concept defined by the W3C in | WebRTC MediaStream: The MediaStream concept defined by the W3C in | |||
the WebRTC API [W3C.WD-mediacapture-streams-20130903]. | the WebRTC API [W3C.WD-mediacapture-streams-20130903]. A | |||
MediaStream consists of zero or more MediaStreamTracks. | ||||
MediaStreamTrack: Part of the MediaStream concept defined by the W3C | ||||
in the WebRTC API [W3C.WD-mediacapture-streams-20130903]. A | ||||
MediaStreamTrack is an individual stream of media from any type of | ||||
media source like a microphone or a camera, but also conceptual | ||||
sources, like a audio mix or a video composition, are possible. | ||||
Transport-layer Flow: A uni-directional flow of transport packets | Transport-layer Flow: A uni-directional flow of transport packets | |||
that are identified by having a particular 5-tuple of source IP | that are identified by having a particular 5-tuple of source IP | |||
address, source port, destination IP address, destination port, | address, source port, destination IP address, destination port, | |||
and transport protocol used. | and transport protocol used. | |||
Bi-directional Transport-layer Flow: A bi-directional transport- | Bi-directional Transport-layer Flow: A bi-directional transport- | |||
layer flow is a transport-layer flow that is symmetric. That is, | layer flow is a transport-layer flow that is symmetric. That is, | |||
the transport-layer flow in the reverse direction has a 5-tuple | the transport-layer flow in the reverse direction has a 5-tuple | |||
where the source and destination address and ports are swapped | where the source and destination address and ports are swapped | |||
compared to the forward path transport-layer flow, and the | compared to the forward path transport-layer flow, and the | |||
transport protocol is the same. | transport protocol is the same. | |||
This document uses the terminology from | This document uses the terminology from | |||
[I-D.ietf-avtext-rtp-grouping-taxonomy] and | [I-D.ietf-avtext-rtp-grouping-taxonomy] and | |||
[I-D.ietf-rtcweb-overview]. Other terms are used according to their | [I-D.ietf-rtcweb-overview]. Other terms are used according to their | |||
definitions from the RTP Specification [RFC3550]. Especially note | definitions from the RTP Specification [RFC3550]. Especially note | |||
the following frequently used terms: RTP Packet Stream, RTP Session, | the following frequently used terms: RTP Packet Stream, RTP Session, | |||
and End-point. | and Endpoint. | |||
4. WebRTC Use of RTP: Core Protocols | 4. WebRTC Use of RTP: Core Protocols | |||
The following sections describe the core features of RTP and RTCP | The following sections describe the core features of RTP and RTCP | |||
that need to be implemented, along with the mandated RTP profiles. | that need to be implemented, along with the mandated RTP profiles. | |||
Also described are the core extensions providing essential features | Also described are the core extensions providing essential features | |||
that all WebRTC Endpoints need to implement to function effectively | that all WebRTC Endpoints need to implement to function effectively | |||
on today's networks. | on today's networks. | |||
4.1. RTP and RTCP | 4.1. RTP and RTCP | |||
skipping to change at page 5, line 45 | skipping to change at page 6, line 6 | |||
implemented as the media transport protocol for WebRTC. RTP itself | implemented as the media transport protocol for WebRTC. RTP itself | |||
comprises two parts: the RTP data transfer protocol, and the RTP | comprises two parts: the RTP data transfer protocol, and the RTP | |||
control protocol (RTCP). RTCP is a fundamental and integral part of | control protocol (RTCP). RTCP is a fundamental and integral part of | |||
RTP, and MUST be implemented and used in all WebRTC Endpoints. | RTP, and MUST be implemented and used in all WebRTC Endpoints. | |||
The following RTP and RTCP features are sometimes omitted in limited | The following RTP and RTCP features are sometimes omitted in limited | |||
functionality implementations of RTP, but are REQUIRED in all WebRTC | functionality implementations of RTP, but are REQUIRED in all WebRTC | |||
Endpoints: | Endpoints: | |||
o Support for use of multiple simultaneous SSRC values in a single | o Support for use of multiple simultaneous SSRC values in a single | |||
RTP session, including support for RTP end-points that send many | RTP session, including support for RTP endpoints that send many | |||
SSRC values simultaneously, following [RFC3550] and | SSRC values simultaneously, following [RFC3550] and | |||
[I-D.ietf-avtcore-rtp-multi-stream]. The RTCP optimisations for | [I-D.ietf-avtcore-rtp-multi-stream]. The RTCP optimisations for | |||
multi-SSRC sessions defined in | multi-SSRC sessions defined in | |||
[I-D.ietf-avtcore-rtp-multi-stream-optimisation] MAY be supported; | [I-D.ietf-avtcore-rtp-multi-stream-optimisation] MAY be supported; | |||
if supported the usage MUST be signalled. | if supported the usage MUST be signalled. | |||
o Random choice of SSRC on joining a session; collision detection | o Random choice of SSRC on joining a session; collision detection | |||
and resolution for SSRC values (see also Section 4.8). | and resolution for SSRC values (see also Section 4.8). | |||
o Support for reception of RTP data packets containing CSRC lists, | o Support for reception of RTP data packets containing CSRC lists, | |||
skipping to change at page 6, line 24 | skipping to change at page 6, line 32 | |||
extensions. | extensions. | |||
o Support for multiple synchronisation contexts. Participants that | o Support for multiple synchronisation contexts. Participants that | |||
send multiple simultaneous RTP packet streams SHOULD do so as part | send multiple simultaneous RTP packet streams SHOULD do so as part | |||
of a single synchronisation context, using a single RTCP CNAME for | of a single synchronisation context, using a single RTCP CNAME for | |||
all streams and allowing receivers to play the streams out in a | all streams and allowing receivers to play the streams out in a | |||
synchronised manner. For compatibility with potential future | synchronised manner. For compatibility with potential future | |||
versions of this specification, or for interoperability with non- | versions of this specification, or for interoperability with non- | |||
WebRTC devices through a gateway, receivers MUST support multiple | WebRTC devices through a gateway, receivers MUST support multiple | |||
synchronisation contexts, indicated by the use of multiple RTCP | synchronisation contexts, indicated by the use of multiple RTCP | |||
CNAMEs in an RTP session. This specification requires the usage | CNAMEs in an RTP session. This specification mandates the usage | |||
of a single CNAME when sending RTP Packet Streams in some | of a single CNAME when sending RTP Packet Streams in some | |||
circumstances, see Section 4.9. | circumstances, see Section 4.9. | |||
o Support for sending and receiving RTCP SR, RR, SDES, and BYE | o Support for sending and receiving RTCP SR, RR, SDES, and BYE | |||
packet types, with OPTIONAL support for other RTCP packet types | packet types. Note that support for other RTCP packet types is | |||
unless mandated by other parts of this specification. Note that | OPTIONAL, unless mandated by other parts of this specification. | |||
additional RTCP Packet types are used by the RTP/SAVPF Profile | Note that additional RTCP Packet types are used by the RTP/SAVPF | |||
(Section 4.2) and the other RTCP extensions (Section 5). WebRTC | Profile (Section 4.2) and the other RTCP extensions (Section 5). | |||
endpoints that implement the SDP bundle negotiation extension will | WebRTC endpoints that implement the SDP bundle negotiation | |||
use the SDP grouping framework 'mid' attribute to identify media | extension will use the SDP grouping framework 'mid' attribute to | |||
streams. Such endpoints MUST implement the RTCP SDES MID item | identify media streams. Such endpoints MUST implement the RTCP | |||
described in [I-D.ietf-mmusic-sdp-bundle-negotiation]. | SDES MID item described in | |||
[I-D.ietf-mmusic-sdp-bundle-negotiation]. | ||||
o Support for multiple end-points in a single RTP session, and for | o Support for multiple endpoints in a single RTP session, and for | |||
scaling the RTCP transmission interval according to the number of | scaling the RTCP transmission interval according to the number of | |||
participants in the session; support for randomised RTCP | participants in the session; support for randomised RTCP | |||
transmission intervals to avoid synchronisation of RTCP reports; | transmission intervals to avoid synchronisation of RTCP reports; | |||
support for RTCP timer reconsideration (Section 6.3.6 of | support for RTCP timer reconsideration (Section 6.3.6 of | |||
[RFC3550]) and reverse reconsideration (Section 6.3.4 of | [RFC3550]) and reverse reconsideration (Section 6.3.4 of | |||
[RFC3550]). | [RFC3550]). | |||
o Support for configuring the RTCP bandwidth as a fraction of the | o Support for configuring the RTCP bandwidth as a fraction of the | |||
media bandwidth, and for configuring the fraction of the RTCP | media bandwidth, and for configuring the fraction of the RTCP | |||
bandwidth allocated to senders, e.g., using the SDP "b=" line | bandwidth allocated to senders, e.g., using the SDP "b=" line | |||
[RFC4566][RFC3556]. | [RFC4566][RFC3556]. | |||
o Support for the reduced minimum RTCP reporting interval described | o Support for the reduced minimum RTCP reporting interval described | |||
in Section 6.2 of [RFC3550]. When using the reduced minimum RTCP | in Section 6.2 of [RFC3550]. When using the reduced minimum RTCP | |||
skipping to change at page 7, line 20 | skipping to change at page 7, line 31 | |||
o Support for discontinuous transmission. RTP allows endpoints to | o Support for discontinuous transmission. RTP allows endpoints to | |||
pause and resume transmission at any time. When resuming, the RTP | pause and resume transmission at any time. When resuming, the RTP | |||
sequence number will increase by one, as usual, while the increase | sequence number will increase by one, as usual, while the increase | |||
in the RTP timestamp value will depend on the duration of the | in the RTP timestamp value will depend on the duration of the | |||
pause. Discontinuous transmission is most commonly used with some | pause. Discontinuous transmission is most commonly used with some | |||
audio payload formats, but is not audio specific, and can be used | audio payload formats, but is not audio specific, and can be used | |||
with any RTP payload format. | with any RTP payload format. | |||
o Ignore unknown RTCP packet types and RTP header extensions. This | o Ignore unknown RTCP packet types and RTP header extensions. This | |||
to ensure robust handling of future extensions, middlebox | is to ensure robust handling of future extensions, middlebox | |||
behaviours, etc., that can result in not signalled RTCP packet | behaviours, etc., that can result in not signalled RTCP packet | |||
types or RTP header extensions being received. If a compound RTCP | types or RTP header extensions being received. If a compound RTCP | |||
packet is received that contains a mixture of known and unknown | packet is received that contains a mixture of known and unknown | |||
RTCP packet types, the known packets types need to be processed as | RTCP packet types, the known packets types need to be processed as | |||
usual, with only the unknown packet types being discarded. | usual, with only the unknown packet types being discarded. | |||
It is known that a significant number of legacy RTP implementations, | It is known that a significant number of legacy RTP implementations, | |||
especially those targeted at VoIP-only systems, do not support all of | especially those targeted at VoIP-only systems, do not support all of | |||
the above features, and in some cases do not support RTCP at all. | the above features, and in some cases do not support RTCP at all. | |||
Implementers are advised to consider the requirements for graceful | Implementers are advised to consider the requirements for graceful | |||
skipping to change at page 7, line 50 | skipping to change at page 8, line 12 | |||
extended by [RFC7007], MUST be implemented. The RTP/SAVPF profile is | extended by [RFC7007], MUST be implemented. The RTP/SAVPF profile is | |||
the combination of basic RTP/AVP profile [RFC3551], the RTP profile | the combination of basic RTP/AVP profile [RFC3551], the RTP profile | |||
for RTCP-based feedback (RTP/AVPF) [RFC4585], and the secure RTP | for RTCP-based feedback (RTP/AVPF) [RFC4585], and the secure RTP | |||
profile (RTP/SAVP) [RFC3711]. | profile (RTP/SAVP) [RFC3711]. | |||
The RTCP-based feedback extensions [RFC4585] are needed for the | The RTCP-based feedback extensions [RFC4585] are needed for the | |||
improved RTCP timer model. This allows more flexible transmission of | improved RTCP timer model. This allows more flexible transmission of | |||
RTCP packets in response to events, rather than strictly according to | RTCP packets in response to events, rather than strictly according to | |||
bandwidth, and is vital for being able to report congestion signals | bandwidth, and is vital for being able to report congestion signals | |||
as well as media events. These extensions also allow saving RTCP | as well as media events. These extensions also allow saving RTCP | |||
bandwidth, and an end-point will commonly only use the full RTCP | bandwidth, and an endpoint will commonly only use the full RTCP | |||
bandwidth allocation if there are many events that require feedback. | bandwidth allocation if there are many events that require feedback. | |||
The timer rules are also needed to make use of the RTP conferencing | The timer rules are also needed to make use of the RTP conferencing | |||
extensions discussed in Section 5.1. | extensions discussed in Section 5.1. | |||
Note: The enhanced RTCP timer model defined in the RTP/AVPF | Note: The enhanced RTCP timer model defined in the RTP/AVPF | |||
profile is backwards compatible with legacy systems that implement | profile is backwards compatible with legacy systems that implement | |||
only the RTP/AVP or RTP/SAVP profile, given some constraints on | only the RTP/AVP or RTP/SAVP profile, given some constraints on | |||
parameter configuration such as the RTCP bandwidth value and "trr- | parameter configuration such as the RTCP bandwidth value and "trr- | |||
int" (the most important factor for interworking with RTP/(S)AVP | int" (the most important factor for interworking with RTP/(S)AVP | |||
end-points via a gateway is to set the trr-int parameter to a | endpoints via a gateway is to set the trr-int parameter to a value | |||
value representing 4 seconds, see Section 6.1 in | representing 4 seconds, see Section 6.1 in | |||
[I-D.ietf-avtcore-rtp-multi-stream]). | [I-D.ietf-avtcore-rtp-multi-stream]). | |||
The secure RTP (SRTP) profile extensions [RFC3711] are needed to | The secure RTP (SRTP) profile extensions [RFC3711] are needed to | |||
provide media encryption, integrity protection, replay protection and | provide media encryption, integrity protection, replay protection and | |||
a limited form of source authentication. WebRTC Endpoints MUST NOT | a limited form of source authentication. WebRTC Endpoints MUST NOT | |||
send packets using the basic RTP/AVP profile or the RTP/AVPF profile; | send packets using the basic RTP/AVP profile or the RTP/AVPF profile; | |||
they MUST employ the full RTP/SAVPF profile to protect all RTP and | they MUST employ the full RTP/SAVPF profile to protect all RTP and | |||
RTCP packets that are generated (i.e., implementations MUST use SRTP | RTCP packets that are generated (i.e., implementations MUST use SRTP | |||
and SRTCP). The RTP/SAVPF profile MUST be configured using the | and SRTCP). The RTP/SAVPF profile MUST be configured using the | |||
cipher suites, DTLS-SRTP protection profiles, keying mechanisms, and | cipher suites, DTLS-SRTP protection profiles, keying mechanisms, and | |||
skipping to change at page 8, line 45 | skipping to change at page 9, line 7 | |||
WebRTC Endpoints cannot assume that the other participants in an RTP | WebRTC Endpoints cannot assume that the other participants in an RTP | |||
session understand any RTP payload format, no matter how common. The | session understand any RTP payload format, no matter how common. The | |||
mapping between RTP payload type numbers and specific configurations | mapping between RTP payload type numbers and specific configurations | |||
of particular RTP payload formats MUST be agreed before those payload | of particular RTP payload formats MUST be agreed before those payload | |||
types/formats can be used. In an SDP context, this can be done using | types/formats can be used. In an SDP context, this can be done using | |||
the "a=rtpmap:" and "a=fmtp:" attributes associated with an "m=" | the "a=rtpmap:" and "a=fmtp:" attributes associated with an "m=" | |||
line, along with any other SDP attributes needed to configure the RTP | line, along with any other SDP attributes needed to configure the RTP | |||
payload format. | payload format. | |||
End-points can signal support for multiple RTP payload formats, or | Endpoints can signal support for multiple RTP payload formats, or | |||
multiple configurations of a single RTP payload format, as long as | multiple configurations of a single RTP payload format, as long as | |||
each unique RTP payload format configuration uses a different RTP | each unique RTP payload format configuration uses a different RTP | |||
payload type number. As outlined in Section 4.8, the RTP payload | payload type number. As outlined in Section 4.8, the RTP payload | |||
type number is sometimes used to associate an RTP packet stream with | type number is sometimes used to associate an RTP packet stream with | |||
a signalling context. This association is possible provided unique | a signalling context. This association is possible provided unique | |||
RTP payload type numbers are used in each context. For example, an | RTP payload type numbers are used in each context. For example, an | |||
RTP packet stream can be associated with an SDP "m=" line by | RTP packet stream can be associated with an SDP "m=" line by | |||
comparing the RTP payload type numbers used by the RTP packet stream | comparing the RTP payload type numbers used by the RTP packet stream | |||
with payload types signalled in the "a=rtpmap:" lines in the media | with payload types signalled in the "a=rtpmap:" lines in the media | |||
sections of the SDP. This leads to the following considerations: | sections of the SDP. This leads to the following considerations: | |||
skipping to change at page 9, line 27 | skipping to change at page 9, line 38 | |||
packet streams with a signalling context, then the same RTP | packet streams with a signalling context, then the same RTP | |||
payload type number can be used to indicate the exact same RTP | payload type number can be used to indicate the exact same RTP | |||
payload format configuration in multiple contexts. | payload format configuration in multiple contexts. | |||
A single RTP payload type number MUST NOT be assigned to different | A single RTP payload type number MUST NOT be assigned to different | |||
RTP payload formats, or different configurations of the same RTP | RTP payload formats, or different configurations of the same RTP | |||
payload format, within a single RTP session (note that the "m=" lines | payload format, within a single RTP session (note that the "m=" lines | |||
in an SDP bundle group [I-D.ietf-mmusic-sdp-bundle-negotiation] form | in an SDP bundle group [I-D.ietf-mmusic-sdp-bundle-negotiation] form | |||
a single RTP session). | a single RTP session). | |||
An end-point that has signalled support for multiple RTP payload | An endpoint that has signalled support for multiple RTP payload | |||
formats MUST be able to accept data in any of those payload formats | formats MUST be able to accept data in any of those payload formats | |||
at any time, unless it has previously signalled limitations on its | at any time, unless it has previously signalled limitations on its | |||
decoding capability. This requirement is constrained if several | decoding capability. This requirement is constrained if several | |||
types of media (e.g., audio and video) are sent in the same RTP | types of media (e.g., audio and video) are sent in the same RTP | |||
session. In such a case, a source (SSRC) is restricted to switching | session. In such a case, a source (SSRC) is restricted to switching | |||
only between the RTP payload formats signalled for the type of media | only between the RTP payload formats signalled for the type of media | |||
that is being sent by that source; see Section 4.4. To support rapid | that is being sent by that source; see Section 4.4. To support rapid | |||
rate adaptation by changing codec, RTP does not require advance | rate adaptation by changing codec, RTP does not require advance | |||
signalling for changes between RTP payload formats used by a single | signalling for changes between RTP payload formats used by a single | |||
SSRC that were signalled during session set-up. | SSRC that were signalled during session set-up. | |||
skipping to change at page 9, line 49 | skipping to change at page 10, line 12 | |||
If performing changes between two RTP payload types that use | If performing changes between two RTP payload types that use | |||
different RTP clock rates, an RTP sender MUST follow the | different RTP clock rates, an RTP sender MUST follow the | |||
recommendations in Section 4.1 of [RFC7160]. RTP receivers MUST | recommendations in Section 4.1 of [RFC7160]. RTP receivers MUST | |||
follow the recommendations in Section 4.3 of [RFC7160] in order to | follow the recommendations in Section 4.3 of [RFC7160] in order to | |||
support sources that switch between clock rates in an RTP session | support sources that switch between clock rates in an RTP session | |||
(these recommendations for receivers are backwards compatible with | (these recommendations for receivers are backwards compatible with | |||
the case where senders use only a single clock rate). | the case where senders use only a single clock rate). | |||
4.4. Use of RTP Sessions | 4.4. Use of RTP Sessions | |||
An association amongst a set of end-points communicating using RTP is | An association amongst a set of endpoints communicating using RTP is | |||
known as an RTP session [RFC3550]. An end-point can be involved in | known as an RTP session [RFC3550]. An endpoint can be involved in | |||
several RTP sessions at the same time. In a multimedia session, each | several RTP sessions at the same time. In a multimedia session, each | |||
type of media has typically been carried in a separate RTP session | type of media has typically been carried in a separate RTP session | |||
(e.g., using one RTP session for the audio, and a separate RTP | (e.g., using one RTP session for the audio, and a separate RTP | |||
session using a different transport-layer flow for the video). | session using a different transport-layer flow for the video). | |||
WebRTC Endpoints are REQUIRED to implement support for multimedia | WebRTC Endpoints are REQUIRED to implement support for multimedia | |||
sessions in this way, separating each RTP session using different | sessions in this way, separating each RTP session using different | |||
transport-layer flows for compatibility with legacy systems (this is | transport-layer flows for compatibility with legacy systems (this is | |||
sometimes called session multiplexing). | sometimes called session multiplexing). | |||
In modern day networks, however, with the widespread use of network | In modern day networks, however, with the widespread use of network | |||
skipping to change at page 11, line 27 | skipping to change at page 11, line 37 | |||
To avoid this problem, [RFC5506] specifies how to reduce the mean | To avoid this problem, [RFC5506] specifies how to reduce the mean | |||
RTCP message size and allow for more frequent feedback. Frequent | RTCP message size and allow for more frequent feedback. Frequent | |||
feedback, in turn, is essential to make real-time applications | feedback, in turn, is essential to make real-time applications | |||
quickly aware of changing network conditions, and to allow them to | quickly aware of changing network conditions, and to allow them to | |||
adapt their transmission and encoding behaviour. Implementations | adapt their transmission and encoding behaviour. Implementations | |||
MUST support sending and receiving non-compound RTCP feedback packets | MUST support sending and receiving non-compound RTCP feedback packets | |||
[RFC5506]. Use of non-compound RTCP packets MUST be negotiated using | [RFC5506]. Use of non-compound RTCP packets MUST be negotiated using | |||
the signalling channel. If SDP is used for signalling, this | the signalling channel. If SDP is used for signalling, this | |||
negotiation MUST use the attributes defined in [RFC5506]. For | negotiation MUST use the attributes defined in [RFC5506]. For | |||
backwards compatibility, implementations are also REQUIRED to support | backwards compatibility, implementations are also REQUIRED to support | |||
the use of compound RTCP feedback packets if the remote end-point | the use of compound RTCP feedback packets if the remote endpoint does | |||
does not agree to the use of non-compound RTCP in the signalling | not agree to the use of non-compound RTCP in the signalling exchange. | |||
exchange. | ||||
4.7. Symmetric RTP/RTCP | 4.7. Symmetric RTP/RTCP | |||
To ease traversal of NAT and firewall devices, implementations are | To ease traversal of NAT and firewall devices, implementations are | |||
REQUIRED to implement and use Symmetric RTP [RFC4961]. The reason | REQUIRED to implement and use Symmetric RTP [RFC4961]. The reason | |||
for using symmetric RTP is primarily to avoid issues with NATs and | for using symmetric RTP is primarily to avoid issues with NATs and | |||
Firewalls by ensuring that the send and receive RTP packet streams, | Firewalls by ensuring that the send and receive RTP packet streams, | |||
as well as RTCP, are actually bi-directional transport-layer flows. | as well as RTCP, are actually bi-directional transport-layer flows. | |||
This will keep alive the NAT and firewall pinholes, and help indicate | This will keep alive the NAT and firewall pinholes, and help indicate | |||
consent that the receive direction is a transport-layer flow the | consent that the receive direction is a transport-layer flow the | |||
intended recipient actually wants. In addition, it saves resources, | intended recipient actually wants. In addition, it saves resources, | |||
specifically ports at the end-points, but also in the network as NAT | specifically ports at the endpoints, but also in the network as NAT | |||
mappings or firewall state is not unnecessary bloated. The amount of | mappings or firewall state is not unnecessary bloated. The amount of | |||
per flow QoS state kept in the network is also reduced. | per flow QoS state kept in the network is also reduced. | |||
4.8. Choice of RTP Synchronisation Source (SSRC) | 4.8. Choice of RTP Synchronisation Source (SSRC) | |||
Implementations are REQUIRED to support signalled RTP synchronisation | Implementations are REQUIRED to support signalled RTP synchronisation | |||
source (SSRC) identifiers. If SDP is used, this MUST be done using | source (SSRC) identifiers. If SDP is used, this MUST be done using | |||
the "a=ssrc:" SDP attribute defined in Section 4.1 and Section 5 of | the "a=ssrc:" SDP attribute defined in Section 4.1 and Section 5 of | |||
[RFC5576] and the "previous-ssrc" source attribute defined in | [RFC5576] and the "previous-ssrc" source attribute defined in | |||
Section 6.2 of [RFC5576]; other per-SSRC attributes defined in | Section 6.2 of [RFC5576]; other per-SSRC attributes defined in | |||
skipping to change at page 12, line 33 | skipping to change at page 12, line 42 | |||
RTP packet stream are often sufficient to associate that packet | RTP packet stream are often sufficient to associate that packet | |||
stream with a signalling context (e.g., if RTP payload type numbers | stream with a signalling context (e.g., if RTP payload type numbers | |||
are assigned as described in Section 4.3 of this memo, the RTP | are assigned as described in Section 4.3 of this memo, the RTP | |||
payload types used by an RTP packet stream can be compared with | payload types used by an RTP packet stream can be compared with | |||
values in SDP "a=rtpmap:" lines, which are at the media level in SDP, | values in SDP "a=rtpmap:" lines, which are at the media level in SDP, | |||
and so map to an "m=" line). | and so map to an "m=" line). | |||
4.9. Generation of the RTCP Canonical Name (CNAME) | 4.9. Generation of the RTCP Canonical Name (CNAME) | |||
The RTCP Canonical Name (CNAME) provides a persistent transport-level | The RTCP Canonical Name (CNAME) provides a persistent transport-level | |||
identifier for an RTP end-point. While the Synchronisation Source | identifier for an RTP endpoint. While the Synchronisation Source | |||
(SSRC) identifier for an RTP end-point can change if a collision is | (SSRC) identifier for an RTP endpoint can change if a collision is | |||
detected, or when the RTP application is restarted, its RTCP CNAME is | detected, or when the RTP application is restarted, its RTCP CNAME is | |||
meant to stay unchanged for the duration of a RTCPeerConnection | meant to stay unchanged for the duration of a RTCPeerConnection | |||
[W3C.WD-webrtc-20130910], so that RTP end-points can be uniquely | [W3C.WD-webrtc-20130910], so that RTP endpoints can be uniquely | |||
identified and associated with their RTP packet streams within a set | identified and associated with their RTP packet streams within a set | |||
of related RTP sessions. | of related RTP sessions. | |||
Each RTP end-point MUST have at least one RTCP CNAME, and that RTCP | Each RTP endpoint MUST have at least one RTCP CNAME, and that RTCP | |||
CNAME MUST be unique within the RTCPeerConnection. RTCP CNAMEs | CNAME MUST be unique within the RTCPeerConnection. RTCP CNAMEs | |||
identify a particular synchronisation context, i.e., all SSRCs | identify a particular synchronisation context, i.e., all SSRCs | |||
associated with a single RTCP CNAME share a common reference clock. | associated with a single RTCP CNAME share a common reference clock. | |||
If an end-point has SSRCs that are associated with several | If an endpoint has SSRCs that are associated with several | |||
unsynchronised reference clocks, and hence different synchronisation | unsynchronised reference clocks, and hence different synchronisation | |||
contexts, it will need to use multiple RTCP CNAMEs, one for each | contexts, it will need to use multiple RTCP CNAMEs, one for each | |||
synchronisation context. | synchronisation context. | |||
Taking the discussion in Section 11 into account, a WebRTC Endpoint | Taking the discussion in Section 11 into account, a WebRTC Endpoint | |||
MUST NOT use more than one RTCP CNAME in the RTP sessions belonging | MUST NOT use more than one RTCP CNAME in the RTP sessions belonging | |||
to single RTCPeerConnection (that is, an RTCPeerConnection forms a | to single RTCPeerConnection (that is, an RTCPeerConnection forms a | |||
synchronisation context). RTP middleboxes MAY generate RTP packet | synchronisation context). RTP middleboxes MAY generate RTP packet | |||
streams associated with more than one RTCP CNAME, to allow them to | streams associated with more than one RTCP CNAME, to allow them to | |||
avoid having to resynchronize media from multiple different end- | avoid having to resynchronize media from multiple different endpoints | |||
points part of a multi-party RTP session. | part of a multi-party RTP session. | |||
The RTP specification [RFC3550] includes guidelines for choosing a | The RTP specification [RFC3550] includes guidelines for choosing a | |||
unique RTP CNAME, but these are not sufficient in the presence of NAT | unique RTP CNAME, but these are not sufficient in the presence of NAT | |||
devices. In addition, long-term persistent identifiers can be | devices. In addition, long-term persistent identifiers can be | |||
problematic from a privacy viewpoint (Section 13). Accordingly, a | problematic from a privacy viewpoint (Section 13). Accordingly, a | |||
WebRTC Endpoint MUST generate a new, unique, short-term persistent | WebRTC Endpoint MUST generate a new, unique, short-term persistent | |||
RTCP CNAME for each RTCPeerConnection, following [RFC7022], with a | RTCP CNAME for each RTCPeerConnection, following [RFC7022], with a | |||
single exception; if explicitly requested at creation an | single exception; if explicitly requested at creation an | |||
RTCPeerConnection MAY use the same CNAME as as an existing | RTCPeerConnection MAY use the same CNAME as as an existing | |||
RTCPeerConnection within their common same-origin context. | RTCPeerConnection within their common same-origin context. | |||
skipping to change at page 15, line 4 | skipping to change at page 15, line 17 | |||
loop detection and identification of active senders is the | loop detection and identification of active senders is the | |||
responsibility of the WebRTC application; since the clients are | responsibility of the WebRTC application; since the clients are | |||
isolated from each other at the RTP layer, RTP cannot assist with | isolated from each other at the RTP layer, RTP cannot assist with | |||
these functions (see section 3.9 of | these functions (see section 3.9 of | |||
[I-D.ietf-avtcore-rtp-topologies-update]). | [I-D.ietf-avtcore-rtp-topologies-update]). | |||
The RTP extensions described in Section 5.1.1 to Section 5.1.6 are | The RTP extensions described in Section 5.1.1 to Section 5.1.6 are | |||
designed to be used with centralised conferencing, where an RTP | designed to be used with centralised conferencing, where an RTP | |||
middlebox (e.g., a conference bridge) receives a participant's RTP | middlebox (e.g., a conference bridge) receives a participant's RTP | |||
packet streams and distributes them to the other participants. These | packet streams and distributes them to the other participants. These | |||
extensions are not necessary for interoperability; an RTP end-point | extensions are not necessary for interoperability; an RTP endpoint | |||
that does not implement these extensions will work correctly, but | that does not implement these extensions will work correctly, but | |||
might offer poor performance. Support for the listed extensions will | might offer poor performance. Support for the listed extensions will | |||
greatly improve the quality of experience and, to provide a | greatly improve the quality of experience and, to provide a | |||
reasonable baseline quality, some of these extensions are mandatory | reasonable baseline quality, some of these extensions are mandatory | |||
to be supported by WebRTC Endpoints. | to be supported by WebRTC Endpoints. | |||
The RTCP conferencing extensions are defined in Extended RTP Profile | The RTCP conferencing extensions are defined in Extended RTP Profile | |||
for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/ | for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/ | |||
AVPF) [RFC4585] and the memo on Codec Control Messages (CCM) in RTP/ | AVPF) [RFC4585] and the memo on Codec Control Messages (CCM) in RTP/ | |||
AVPF [RFC5104]; they are fully usable by the Secure variant of this | AVPF [RFC5104]; they are fully usable by the Secure variant of this | |||
skipping to change at page 20, line 25 | skipping to change at page 20, line 34 | |||
encoding or FEC will lead to increased play out delay, which needs to | encoding or FEC will lead to increased play out delay, which needs to | |||
be considered when choosing FEC schemes and their parameters. | be considered when choosing FEC schemes and their parameters. | |||
WebRTC endpoints MUST follow the recommendations for FEC use given in | WebRTC endpoints MUST follow the recommendations for FEC use given in | |||
[I-D.ietf-rtcweb-fec]. WebRTC endpoints MAY support other types of | [I-D.ietf-rtcweb-fec]. WebRTC endpoints MAY support other types of | |||
FEC, but these MUST be negotiated before they are used. | FEC, but these MUST be negotiated before they are used. | |||
7. WebRTC Use of RTP: Rate Control and Media Adaptation | 7. WebRTC Use of RTP: Rate Control and Media Adaptation | |||
WebRTC will be used in heterogeneous network environments using a | WebRTC will be used in heterogeneous network environments using a | |||
variety set of link technologies, including both wired and wireless | variety of link technologies, including both wired and wireless | |||
links, to interconnect potentially large groups of users around the | links, to interconnect potentially large groups of users around the | |||
world. As a result, the network paths between users can have widely | world. As a result, the network paths between users can have widely | |||
varying one-way delays, available bit-rates, load levels, and traffic | varying one-way delays, available bit-rates, load levels, and traffic | |||
mixtures. Individual end-points can send one or more RTP packet | mixtures. Individual endpoints can send one or more RTP packet | |||
streams to each participant, and there can be several participants. | streams to each participant, and there can be several participants. | |||
Each of these RTP packet streams can contain different types of | Each of these RTP packet streams can contain different types of | |||
media, and the type of media, bit rate, and number of RTP packet | media, and the type of media, bit rate, and number of RTP packet | |||
streams as well as transport-layer flows can be highly asymmetric. | streams as well as transport-layer flows can be highly asymmetric. | |||
Non-RTP traffic can share the network paths with RTP transport-layer | Non-RTP traffic can share the network paths with RTP transport-layer | |||
flows. Since the network environment is not predictable or stable, | flows. Since the network environment is not predictable or stable, | |||
WebRTC Endpoints MUST ensure that the RTP traffic they generate can | WebRTC Endpoints MUST ensure that the RTP traffic they generate can | |||
adapt to match changes in the available network capacity. | adapt to match changes in the available network capacity. | |||
The quality of experience for users of WebRTC is very dependent on | The quality of experience for users of WebRTC is very dependent on | |||
effective adaptation of the media to the limitations of the network. | effective adaptation of the media to the limitations of the network. | |||
End-points have to be designed so they do not transmit significantly | Endpoints have to be designed so they do not transmit significantly | |||
more data than the network path can support, except for very short | more data than the network path can support, except for very short | |||
time periods, otherwise high levels of network packet loss or delay | time periods, otherwise high levels of network packet loss or delay | |||
spikes will occur, causing media quality degradation. The limiting | spikes will occur, causing media quality degradation. The limiting | |||
factor on the capacity of the network path might be the link | factor on the capacity of the network path might be the link | |||
bandwidth, or it might be competition with other traffic on the link | bandwidth, or it might be competition with other traffic on the link | |||
(this can be non-WebRTC traffic, traffic due to other WebRTC flows, | (this can be non-WebRTC traffic, traffic due to other WebRTC flows, | |||
or even competition with other WebRTC flows in the same session). | or even competition with other WebRTC flows in the same session). | |||
An effective media congestion control algorithm is therefore an | An effective media congestion control algorithm is therefore an | |||
essential part of the WebRTC framework. However, at the time of this | essential part of the WebRTC framework. However, at the time of this | |||
skipping to change at page 21, line 21 | skipping to change at page 21, line 30 | |||
7.1. Boundary Conditions and Circuit Breakers | 7.1. Boundary Conditions and Circuit Breakers | |||
WebRTC Endpoints MUST implement the RTP circuit breaker algorithm | WebRTC Endpoints MUST implement the RTP circuit breaker algorithm | |||
that is described in [I-D.ietf-avtcore-rtp-circuit-breakers]. The | that is described in [I-D.ietf-avtcore-rtp-circuit-breakers]. The | |||
RTP circuit breaker is designed to enable applications to recognise | RTP circuit breaker is designed to enable applications to recognise | |||
and react to situations of extreme network congestion. However, | and react to situations of extreme network congestion. However, | |||
since the RTP circuit breaker might not be triggered until congestion | since the RTP circuit breaker might not be triggered until congestion | |||
becomes extreme, it cannot be considered a substitute for congestion | becomes extreme, it cannot be considered a substitute for congestion | |||
control, and applications MUST also implement congestion control to | control, and applications MUST also implement congestion control to | |||
allow them to adapt to changes in network capacity. Any future RTP | allow them to adapt to changes in network capacity. The congestion | |||
congestion control algorithms are expected to operate within the | control algorithm will have to be proprietary until a standardized | |||
envelope allowed by the circuit breaker. | congestion control algorithm is available. Any future RTP congestion | |||
control algorithms are expected to operate within the envelope | ||||
allowed by the circuit breaker. | ||||
The session establishment signalling will also necessarily establish | The session establishment signalling will also necessarily establish | |||
boundaries to which the media bit-rate will conform. The choice of | boundaries to which the media bit-rate will conform. The choice of | |||
media codecs provides upper- and lower-bounds on the supported bit- | media codecs provides upper- and lower-bounds on the supported bit- | |||
rates that the application can utilise to provide useful quality, and | rates that the application can utilise to provide useful quality, and | |||
the packetisation choices that exist. In addition, the signalling | the packetisation choices that exist. In addition, the signalling | |||
channel can establish maximum media bit-rate boundaries using, for | channel can establish maximum media bit-rate boundaries using, for | |||
example, the SDP "b=AS:" or "b=CT:" lines and the RTP/AVPF Temporary | example, the SDP "b=AS:" or "b=CT:" lines and the RTP/AVPF Temporary | |||
Maximum Media Stream Bit Rate (TMMBR) Requests (see Section 5.1.6 of | Maximum Media Stream Bit Rate (TMMBR) Requests (see Section 5.1.6 of | |||
this memo). Signalled bandwidth limitations, such as SDP "b=AS:" or | this memo). Signalled bandwidth limitations, such as SDP "b=AS:" or | |||
skipping to change at page 21, line 49 | skipping to change at page 22, line 14 | |||
7.2. Congestion Control Interoperability and Legacy Systems | 7.2. Congestion Control Interoperability and Legacy Systems | |||
All endpoints that wish to interwork with WebRTC MUST implement RTCP | All endpoints that wish to interwork with WebRTC MUST implement RTCP | |||
and provide congestion feedback via the defined RTCP reporting | and provide congestion feedback via the defined RTCP reporting | |||
mechanisms. | mechanisms. | |||
When interworking with legacy implementations that support RTCP using | When interworking with legacy implementations that support RTCP using | |||
the RTP/AVP profile [RFC3551], congestion feedback is provided in | the RTP/AVP profile [RFC3551], congestion feedback is provided in | |||
RTCP RR packets every few seconds. Implementations that have to | RTCP RR packets every few seconds. Implementations that have to | |||
interwork with such end-points MUST ensure that they keep within the | interwork with such endpoints MUST ensure that they keep within the | |||
RTP circuit breaker [I-D.ietf-avtcore-rtp-circuit-breakers] | RTP circuit breaker [I-D.ietf-avtcore-rtp-circuit-breakers] | |||
constraints to limit the congestion they can cause. | constraints to limit the congestion they can cause. | |||
If a legacy end-point supports RTP/AVPF, this enables negotiation of | If a legacy endpoint supports RTP/AVPF, this enables negotiation of | |||
important parameters for frequent reporting, such as the "trr-int" | important parameters for frequent reporting, such as the "trr-int" | |||
parameter, and the possibility that the end-point supports some | parameter, and the possibility that the endpoint supports some useful | |||
useful feedback format for congestion control purpose such as TMMBR | feedback format for congestion control purpose such as TMMBR | |||
[RFC5104]. Implementations that have to interwork with such end- | [RFC5104]. Implementations that have to interwork with such | |||
points MUST ensure that they stay within the RTP circuit breaker | endpoints MUST ensure that they stay within the RTP circuit breaker | |||
[I-D.ietf-avtcore-rtp-circuit-breakers] constraints to limit the | [I-D.ietf-avtcore-rtp-circuit-breakers] constraints to limit the | |||
congestion they can cause, but might find that they can achieve | congestion they can cause, but might find that they can achieve | |||
better congestion response depending on the amount of feedback that | better congestion response depending on the amount of feedback that | |||
is available. | is available. | |||
With proprietary congestion control algorithms issues can arise when | With proprietary congestion control algorithms issues can arise when | |||
different algorithms and implementations interact in a communication | different algorithms and implementations interact in a communication | |||
session. If the different implementations have made different | session. If the different implementations have made different | |||
choices in regards to the type of adaptation, for example one sender | choices in regards to the type of adaptation, for example one sender | |||
based, and one receiver based, then one could end up in situation | based, and one receiver based, then one could end up in situation | |||
skipping to change at page 22, line 41 | skipping to change at page 23, line 6 | |||
8. WebRTC Use of RTP: Performance Monitoring | 8. WebRTC Use of RTP: Performance Monitoring | |||
As described in Section 4.1, implementations are REQUIRED to generate | As described in Section 4.1, implementations are REQUIRED to generate | |||
RTCP Sender Report (SR) and Reception Report (RR) packets relating to | RTCP Sender Report (SR) and Reception Report (RR) packets relating to | |||
the RTP packet streams they send and receive. These RTCP reports can | the RTP packet streams they send and receive. These RTCP reports can | |||
be used for performance monitoring purposes, since they include basic | be used for performance monitoring purposes, since they include basic | |||
packet loss and jitter statistics. | packet loss and jitter statistics. | |||
A large number of additional performance metrics are supported by the | A large number of additional performance metrics are supported by the | |||
RTCP Extended Reports (XR) framework [RFC3611][RFC6792]. At the time | RTCP Extended Reports (XR) framework, see [RFC3611][RFC6792]. At the | |||
of this writing, it is not clear what extended metrics are suitable | time of this writing, it is not clear what extended metrics are | |||
for use in WebRTC, so there is no requirement that implementations | suitable for use in WebRTC, so there is no requirement that | |||
generate RTCP XR packets. However, implementations that can use | implementations generate RTCP XR packets. However, implementations | |||
detailed performance monitoring data MAY generate RTCP XR packets as | that can use detailed performance monitoring data MAY generate RTCP | |||
appropriate; the use of such packets SHOULD be signalled in advance. | XR packets as appropriate. The use of RTCP XR packets SHOULD be | |||
signalled; implementations MUST ignore RTCP XR packets that are | ||||
unexpected or not understood. | ||||
9. WebRTC Use of RTP: Future Extensions | 9. WebRTC Use of RTP: Future Extensions | |||
It is possible that the core set of RTP protocols and RTP extensions | It is possible that the core set of RTP protocols and RTP extensions | |||
specified in this memo will prove insufficient for the future needs | specified in this memo will prove insufficient for the future needs | |||
of WebRTC. In this case, future updates to this memo MUST be made | of WebRTC. In this case, future updates to this memo have to be made | |||
following the Guidelines for Writers of RTP Payload Format | following the Guidelines for Writers of RTP Payload Format | |||
Specifications [RFC2736], How to Write an RTP Payload Format | Specifications [RFC2736], How to Write an RTP Payload Format | |||
[I-D.ietf-payload-rtp-howto] and Guidelines for Extending the RTP | [I-D.ietf-payload-rtp-howto] and Guidelines for Extending the RTP | |||
Control Protocol [RFC5968], and SHOULD take into account any future | Control Protocol [RFC5968], and SHOULD take into account any future | |||
guidelines for extending RTP and related protocols that have been | guidelines for extending RTP and related protocols that have been | |||
developed. | developed. | |||
Authors of future extensions are urged to consider the wide range of | Authors of future extensions are urged to consider the wide range of | |||
environments in which RTP is used when recommending extensions, since | environments in which RTP is used when recommending extensions, since | |||
extensions that are applicable in some scenarios can be problematic | extensions that are applicable in some scenarios can be problematic | |||
skipping to change at page 24, line 18 | skipping to change at page 24, line 34 | |||
RTCP packet types, including any necessary parameters, MUST be | RTCP packet types, including any necessary parameters, MUST be | |||
signalled. This signalling is to ensure that a WebRTC Endpoint's | signalled. This signalling is to ensure that a WebRTC Endpoint's | |||
behaviour, especially when sending, of any extensions is | behaviour, especially when sending, of any extensions is | |||
predictable and consistent. For robustness, and for compatibility | predictable and consistent. For robustness, and for compatibility | |||
with non-WebRTC systems that might be connected to a WebRTC | with non-WebRTC systems that might be connected to a WebRTC | |||
session via a gateway, implementations are REQUIRED to ignore | session via a gateway, implementations are REQUIRED to ignore | |||
unknown RTCP packets and RTP header extensions (see also | unknown RTCP packets and RTP header extensions (see also | |||
Section 4.1). | Section 4.1). | |||
RTCP Bandwidth: Support for exchanging RTCP Bandwidth values to the | RTCP Bandwidth: Support for exchanging RTCP Bandwidth values to the | |||
end-points will be necessary. This SHALL be done as described in | endpoints will be necessary. This SHALL be done as described in | |||
"Session Description Protocol (SDP) Bandwidth Modifiers for RTP | "Session Description Protocol (SDP) Bandwidth Modifiers for RTP | |||
Control Protocol (RTCP) Bandwidth" [RFC3556] if using SDP, or | Control Protocol (RTCP) Bandwidth" [RFC3556] if using SDP, or | |||
something semantically equivalent. This also ensures that the | something semantically equivalent. This also ensures that the | |||
end-points have a common view of the RTCP bandwidth. A common | endpoints have a common view of the RTCP bandwidth. A common view | |||
RTCP bandwidth is important as a too different view of the | of the RTCP bandwidth among different endpoints is important, to | |||
bandwidths can lead to failure to interoperate. | prevent differences in RTCP packet timing and timeout intervals | |||
causing interoperability problems. | ||||
These parameters are often expressed in SDP messages conveyed within | These parameters are often expressed in SDP messages conveyed within | |||
an offer/answer exchange. RTP does not depend on SDP or on the | an offer/answer exchange. RTP does not depend on SDP or on the | |||
offer/answer model, but does require all the necessary parameters to | offer/answer model, but does require all the necessary parameters to | |||
be agreed upon, and provided to the RTP implementation. Note that in | be agreed upon, and provided to the RTP implementation. Note that in | |||
WebRTC it will depend on the signalling model and API how these | WebRTC it will depend on the signalling model and API how these | |||
parameters need to be configured but they will be need to either be | parameters need to be configured but they will be need to either be | |||
set in the API or explicitly signalled between the peers. | set in the API or explicitly signalled between the peers. | |||
11. WebRTC API Considerations | 11. WebRTC API Considerations | |||
The WebRTC API [W3C.WD-webrtc-20130910] and the Media Capture and | The WebRTC API [W3C.WD-webrtc-20130910] and the Media Capture and | |||
Streams API [W3C.WD-mediacapture-streams-20130903] defines and uses | Streams API [W3C.WD-mediacapture-streams-20130903] defines and uses | |||
the concept of a MediaStream that consists of zero or more | the concept of a MediaStream that consists of zero or more | |||
MediaStreamTracks. A MediaStreamTrack is an individual stream of | MediaStreamTracks. A MediaStreamTrack is an individual stream of | |||
media from any type of media source like a microphone or a camera, | media from any type of media source like a microphone or a camera, | |||
but also conceptual sources, like a audio mix or a video composition, | but also conceptual sources, like a audio mix or a video composition, | |||
are possible. The MediaStreamTracks within a MediaStream need to be | are possible. The MediaStreamTracks within a MediaStream might need | |||
possible to play out synchronised. | to be synchronized during play back. | |||
A MediaStreamTrack's realisation in RTP in the context of an | A MediaStreamTrack's realisation in RTP in the context of an | |||
RTCPeerConnection consists of a source packet stream identified with | RTCPeerConnection consists of a source packet stream identified with | |||
an SSRC within an RTP session part of the RTCPeerConnection. The | an SSRC within an RTP session part of the RTCPeerConnection. The | |||
MediaStreamTrack can also result in additional packet streams, and | MediaStreamTrack can also result in additional packet streams, and | |||
thus SSRCs, in the same RTP session. These can be dependent packet | thus SSRCs, in the same RTP session. These can be dependent packet | |||
streams from scalable encoding of the source stream associated with | streams from scalable encoding of the source stream associated with | |||
the MediaStreamTrack, if such a media encoder is used. They can also | the MediaStreamTrack, if such a media encoder is used. They can also | |||
be redundancy packet streams, these are created when applying Forward | be redundancy packet streams, these are created when applying Forward | |||
Error Correction (Section 6.2) or RTP retransmission (Section 6.1) to | Error Correction (Section 6.2) or RTP retransmission (Section 6.1) to | |||
skipping to change at page 25, line 28 | skipping to change at page 25, line 47 | |||
choose to use only one encoded stream to create the different RTP | choose to use only one encoded stream to create the different RTP | |||
packet streams. Note that such optimisations would need to take into | packet streams. Note that such optimisations would need to take into | |||
account that the constraints for one of the MediaStreamTracks can at | account that the constraints for one of the MediaStreamTracks can at | |||
any moment change, meaning that the encoding configurations might no | any moment change, meaning that the encoding configurations might no | |||
longer be identical and two different encoder instances would then be | longer be identical and two different encoder instances would then be | |||
needed. | needed. | |||
The same MediaStreamTrack can also be included in multiple | The same MediaStreamTrack can also be included in multiple | |||
MediaStreams, thus multiple sets of MediaStreams can implicitly need | MediaStreams, thus multiple sets of MediaStreams can implicitly need | |||
to use the same synchronisation base. To ensure that this works in | to use the same synchronisation base. To ensure that this works in | |||
all cases, and does not force an end-point to to disrupt the media by | all cases, and does not force an endpoint to disrupt the media by | |||
changing synchronisation base and CNAME during delivery of any | changing synchronisation base and CNAME during delivery of any | |||
ongoing packet streams, all MediaStreamTracks and their associated | ongoing packet streams, all MediaStreamTracks and their associated | |||
SSRCs originating from the same end-point need to be sent using the | SSRCs originating from the same endpoint need to be sent using the | |||
same CNAME within one RTCPeerConnection. This is motivating the | same CNAME within one RTCPeerConnection. This is motivating the use | |||
discussion in Section 4.9 to only use a single CNAME. | of a single CNAME in Section 4.9. | |||
The requirement on using the same CNAME for all SSRCs that | The requirement on using the same CNAME for all SSRCs that | |||
originate from the same end-point, does not require a middlebox | originate from the same endpoint, does not require a middlebox | |||
that forwards traffic from multiple end-points to only use a | that forwards traffic from multiple endpoints to only use a single | |||
single CNAME. | CNAME. | |||
Different CNAMEs normally need to be used for different | Different CNAMEs normally need to be used for different | |||
RTCPeerConnection instances, as specified in Section 4.9. Having two | RTCPeerConnection instances, as specified in Section 4.9. Having two | |||
communication sessions with the same CNAME could enable tracking of a | communication sessions with the same CNAME could enable tracking of a | |||
user or device across different services (see Section 4.4.1 of | user or device across different services (see Section 4.4.1 of | |||
[I-D.ietf-rtcweb-security] for details). A web application can | [I-D.ietf-rtcweb-security] for details). A web application can | |||
request that the CNAMEs used in different RTCPeerConnections (within | request that the CNAMEs used in different RTCPeerConnections (within | |||
a same-orign context) be the same, this allows for synchronization of | a same-orign context) be the same, this allows for synchronization of | |||
the endpoint's RTP packet streams across the different | the endpoint's RTP packet streams across the different | |||
RTCPeerConnections. | RTCPeerConnections. | |||
skipping to change at page 26, line 24 | skipping to change at page 26, line 39 | |||
synchronisation. Thus, the relative relation between the timebase of | synchronisation. Thus, the relative relation between the timebase of | |||
the incoming stream and the system sending out needs to be defined. | the incoming stream and the system sending out needs to be defined. | |||
This relation also needs monitoring for clock drift and likely | This relation also needs monitoring for clock drift and likely | |||
adjustments of the synchronisation. The sending entity is also | adjustments of the synchronisation. The sending entity is also | |||
responsible for congestion control for its sent streams. In cases of | responsible for congestion control for its sent streams. In cases of | |||
packet loss the loss of incoming data also needs to be handled. This | packet loss the loss of incoming data also needs to be handled. This | |||
leads to the observation that the method that is least likely to | leads to the observation that the method that is least likely to | |||
cause issues or interruptions in the outgoing source packet stream is | cause issues or interruptions in the outgoing source packet stream is | |||
a model of full decoding, including repair etc., followed by encoding | a model of full decoding, including repair etc., followed by encoding | |||
of the media again into the outgoing packet stream. Optimisations of | of the media again into the outgoing packet stream. Optimisations of | |||
this method is clearly possible and implementation specific. | this method are clearly possible and implementation specific. | |||
A WebRTC Endpoint MUST support receiving multiple MediaStreamTracks, | A WebRTC Endpoint MUST support receiving multiple MediaStreamTracks, | |||
where each of different MediaStreamTracks (and their sets of | where each of the different MediaStreamTracks (and their sets of | |||
associated packet streams) uses different CNAMEs. However, | associated packet streams) uses different CNAMEs. However, | |||
MediaStreamTracks that are received with different CNAMEs have no | MediaStreamTracks that are received with different CNAMEs have no | |||
defined synchronisation. | defined synchronisation. | |||
Note: The motivation for supporting reception of multiple CNAMEs | Note: The motivation for supporting reception of multiple CNAMEs | |||
is to allow for forward compatibility with any future changes that | is to allow for forward compatibility with any future changes that | |||
enable more efficient stream handling when end-points relay/ | enable more efficient stream handling when endpoints relay/forward | |||
forward streams. It also ensures that end-points can interoperate | streams. It also ensures that endpoints can interoperate with | |||
with certain types of multi-stream middleboxes or end-points that | certain types of multi-stream middleboxes or endpoints that are | |||
are not WebRTC. | not WebRTC. | |||
The binding between the WebRTC MediaStreams, MediaStreamTracks and | Javascript Session Establishment Protocol [I-D.ietf-rtcweb-jsep] | |||
the SSRC is done as specified in "Cross Session Stream Identification | specifies that the binding between the WebRTC MediaStreams, | |||
in the Session Description Protocol" [I-D.ietf-mmusic-msid]. This | MediaStreamTracks and the SSRC is done as specified in "Cross Session | |||
document [I-D.ietf-mmusic-msid] also defines, in section 4.1, how to | Stream Identification in the Session Description Protocol" | |||
map unknown source packet stream SSRCs to MediaStreamTracks and | [I-D.ietf-mmusic-msid]. The MSID document [I-D.ietf-mmusic-msid] | |||
MediaStreams. This later is relevant to handle some cases of legacy | also defines, in section 4.1, how to map unknown source packet stream | |||
interop. Commonly the RTP Payload Type of any incoming packets will | SSRCs to MediaStreamTracks and MediaStreams. This later is relevant | |||
reveal if the packet stream is a source stream or a redundancy or | to handle some cases of legacy interoperability. Commonly the RTP | |||
dependent packet stream. The association to the correct source | Payload Type of any incoming packets will reveal if the packet stream | |||
packet stream depends on the payload format in use for the packet | is a source stream or a redundancy or dependent packet stream. The | |||
stream. | association to the correct source packet stream depends on the | |||
payload format in use for the packet stream. | ||||
Finally this specification puts a requirement on the WebRTC API to | Finally this specification puts a requirement on the WebRTC API to | |||
realize a method for determining the CSRC list (Section 4.1) as well | realize a method for determining the CSRC list (Section 4.1) as well | |||
as the Mixer-to-Client audio levels (Section 5.2.3) (when supported) | as the Mixer-to-Client audio levels (Section 5.2.3) (when supported) | |||
and the basic requirements for this is further discussed in | and the basic requirements for this is further discussed in | |||
Section 12.2.1. | Section 12.2.1. | |||
12. RTP Implementation Considerations | 12. RTP Implementation Considerations | |||
The following discussion provides some guidance on the implementation | The following discussion provides some guidance on the implementation | |||
of the RTP features described in this memo. The focus is on a WebRTC | of the RTP features described in this memo. The focus is on a WebRTC | |||
Endpoint implementation perspective, and while some mention is made | Endpoint implementation perspective, and while some mention is made | |||
of the behaviour of middleboxes, that is not the focus of this memo. | of the behaviour of middleboxes, that is not the focus of this memo. | |||
12.1. Configuration and Use of RTP Sessions | 12.1. Configuration and Use of RTP Sessions | |||
A WebRTC Endpoint will be a simultaneous participant in one or more | A WebRTC Endpoint will be a simultaneous participant in one or more | |||
RTP sessions. Each RTP session can convey multiple media sources, | RTP sessions. Each RTP session can convey multiple media sources, | |||
and can include media data from multiple end-points. In the | and can include media data from multiple endpoints. In the | |||
following, some ways in which WebRTC Endpoints can configure and use | following, some ways in which WebRTC Endpoints can configure and use | |||
RTP sessions is outlined. | RTP sessions are outlined. | |||
12.1.1. Use of Multiple Media Sources Within an RTP Session | 12.1.1. Use of Multiple Media Sources Within an RTP Session | |||
RTP is a group communication protocol, and every RTP session can | RTP is a group communication protocol, and every RTP session can | |||
potentially contain multiple RTP packet streams. There are several | potentially contain multiple RTP packet streams. There are several | |||
reasons why this might be desirable: | reasons why this might be desirable: | |||
Multiple media types: Outside of WebRTC, it is common to use one RTP | Multiple media types: Outside of WebRTC, it is common to use one RTP | |||
session for each type of media sources (e.g., one RTP session for | session for each type of media source (e.g., one RTP session for | |||
audio sources and one for video sources, each sent over different | audio sources and one for video sources, each sent over different | |||
transport layer flows). However, to reduce the number of UDP | transport layer flows). However, to reduce the number of UDP | |||
ports used, the default in WebRTC is to send all types of media in | ports used, the default in WebRTC is to send all types of media in | |||
a single RTP session, as described in Section 4.4, using RTP and | a single RTP session, as described in Section 4.4, using RTP and | |||
RTCP multiplexing (Section 4.5) to further reduce the number of | RTCP multiplexing (Section 4.5) to further reduce the number of | |||
UDP ports needed. This RTP session then uses only one bi- | UDP ports needed. This RTP session then uses only one bi- | |||
directional transport-layer flow, but will contain multiple RTP | directional transport-layer flow, but will contain multiple RTP | |||
packet streams, each containing a different type of media. A | packet streams, each containing a different type of media. A | |||
common example might be an end-point with a camera and microphone | common example might be an endpoint with a camera and microphone | |||
that sends two RTP packet streams, one video and one audio, into a | that sends two RTP packet streams, one video and one audio, into a | |||
single RTP session. | single RTP session. | |||
Multiple Capture Devices: A WebRTC Endpoint might have multiple | Multiple Capture Devices: A WebRTC Endpoint might have multiple | |||
cameras, microphones, or other media capture devices, and so might | cameras, microphones, or other media capture devices, and so might | |||
want to generate several RTP packet streams of the same media | want to generate several RTP packet streams of the same media | |||
type. Alternatively, it might want to send media from a single | type. Alternatively, it might want to send media from a single | |||
capture device in several different formats or quality settings at | capture device in several different formats or quality settings at | |||
once. Both can result in a single end-point sending multiple RTP | once. Both can result in a single endpoint sending multiple RTP | |||
packet streams of the same media type into a single RTP session at | packet streams of the same media type into a single RTP session at | |||
the same time. | the same time. | |||
Associated Repair Data: An end-point might send a RTP packet stream | Associated Repair Data: An endpoint might send a RTP packet stream | |||
that is somehow associated with another stream. For example, it | that is somehow associated with another stream. For example, it | |||
might send an RTP packet stream that contains FEC or | might send an RTP packet stream that contains FEC or | |||
retransmission data relating to another stream. Some RTP payload | retransmission data relating to another stream. Some RTP payload | |||
formats send this sort of associated repair data as part of the | formats send this sort of associated repair data as part of the | |||
source packet stream, while others send it as a separate packet | source packet stream, while others send it as a separate packet | |||
stream. | stream. | |||
Layered or Multiple Description Coding: An end-point can use a | Layered or Multiple Description Coding: An endpoint can use a | |||
layered media codec, for example H.264 SVC, or a multiple | layered media codec, for example H.264 SVC, or a multiple | |||
description codec, that generates multiple RTP packet streams, | description codec, that generates multiple RTP packet streams, | |||
each with a distinct RTP SSRC, within a single RTP session. | each with a distinct RTP SSRC, within a single RTP session. | |||
RTP Mixers, Translators, and Other Middleboxes: An RTP session, in | RTP Mixers, Translators, and Other Middleboxes: An RTP session, in | |||
the WebRTC context, is a point-to-point association between an | the WebRTC context, is a point-to-point association between an | |||
end-point and some other peer device, where those devices share a | endpoint and some other peer device, where those devices share a | |||
common SSRC space. The peer device might be another WebRTC | common SSRC space. The peer device might be another WebRTC | |||
Endpoint, or it might be an RTP mixer, translator, or some other | Endpoint, or it might be an RTP mixer, translator, or some other | |||
form of media processing middlebox. In the latter cases, the | form of media processing middlebox. In the latter cases, the | |||
middlebox might send mixed or relayed RTP streams from several | middlebox might send mixed or relayed RTP streams from several | |||
participants, that the WebRTC Endpoint will need to render. Thus, | participants, that the WebRTC Endpoint will need to render. Thus, | |||
even though a WebRTC Endpoint might only be a member of a single | even though a WebRTC Endpoint might only be a member of a single | |||
RTP session, the peer device might be extending that RTP session | RTP session, the peer device might be extending that RTP session | |||
to incorporate other end-points. WebRTC is a group communication | to incorporate other endpoints. WebRTC is a group communication | |||
environment and end-points need to be capable of receiving, | environment and endpoints need to be capable of receiving, | |||
decoding, and playing out multiple RTP packet streams at once, | decoding, and playing out multiple RTP packet streams at once, | |||
even in a single RTP session. | even in a single RTP session. | |||
12.1.2. Use of Multiple RTP Sessions | 12.1.2. Use of Multiple RTP Sessions | |||
In addition to sending and receiving multiple RTP packet streams | In addition to sending and receiving multiple RTP packet streams | |||
within a single RTP session, a WebRTC Endpoint might participate in | within a single RTP session, a WebRTC Endpoint might participate in | |||
multiple RTP sessions. There are several reasons why a WebRTC | multiple RTP sessions. There are several reasons why a WebRTC | |||
Endpoint might choose to do this: | Endpoint might choose to do this: | |||
skipping to change at page 29, line 9 | skipping to change at page 29, line 25 | |||
To provide enhanced quality of service: Some network-based quality | To provide enhanced quality of service: Some network-based quality | |||
of service mechanisms operate on the granularity of transport | of service mechanisms operate on the granularity of transport | |||
layer flows. If it is desired to use these mechanisms to provide | layer flows. If it is desired to use these mechanisms to provide | |||
differentiated quality of service for some RTP packet streams, | differentiated quality of service for some RTP packet streams, | |||
then those RTP packet streams need to be sent in a separate RTP | then those RTP packet streams need to be sent in a separate RTP | |||
session using a different transport-layer flow, and with | session using a different transport-layer flow, and with | |||
appropriate quality of service marking. This is discussed further | appropriate quality of service marking. This is discussed further | |||
in Section 12.1.3. | in Section 12.1.3. | |||
To separate media with different purposes: An end-point might want | To separate media with different purposes: An endpoint might want to | |||
to send RTP packet streams that have different purposes on | send RTP packet streams that have different purposes on different | |||
different RTP sessions, to make it easy for the peer device to | RTP sessions, to make it easy for the peer device to distinguish | |||
distinguish them. For example, some centralised multiparty | them. For example, some centralised multiparty conferencing | |||
conferencing systems display the active speaker in high | systems display the active speaker in high resolution, but show | |||
resolution, but show low resolution "thumbnails" of other | low resolution "thumbnails" of other participants. Such systems | |||
participants. Such systems might configure the end-points to send | might configure the endpoints to send simulcast high- and low- | |||
simulcast high- and low-resolution versions of their video using | resolution versions of their video using separate RTP sessions, to | |||
separate RTP sessions, to simplify the operation of the RTP | simplify the operation of the RTP middlebox. In the WebRTC | |||
middlebox. In the WebRTC context this is currently possible by | context this is currently possible by establishing multiple WebRTC | |||
establishing multiple WebRTC MediaStreamTracks that have the same | MediaStreamTracks that have the same media source in one (or more) | |||
media source in one (or more) RTCPeerConnection. Each | RTCPeerConnection. Each MediaStreamTrack is then configured to | |||
MediaStreamTrack is then configured to deliver a particular media | deliver a particular media quality and thus media bit-rate, and | |||
quality and thus media bit-rate, and will produce an independently | will produce an independently encoded version with the codec | |||
encoded version with the codec parameters agreed specifically in | parameters agreed specifically in the context of that | |||
the context of that RTCPeerConnection. The RTP middlebox can | RTCPeerConnection. The RTP middlebox can distinguish packets | |||
distinguish packets corresponding to the low- and high-resolution | corresponding to the low- and high-resolution streams by | |||
streams by inspecting their SSRC, RTP payload type, or some other | inspecting their SSRC, RTP payload type, or some other information | |||
information contained in RTP payload, RTP header extension or RTCP | contained in RTP payload, RTP header extension or RTCP packets, | |||
packets, but it can be easier to distinguish the RTP packet | but it can be easier to distinguish the RTP packet streams if they | |||
streams if they arrive on separate RTP sessions on separate | arrive on separate RTP sessions on separate transport-layer flows. | |||
transport-layer flows. | ||||
To directly connect with multiple peers: A multi-party conference | To directly connect with multiple peers: A multi-party conference | |||
does not need to use an RTP middlebox. Rather, a multi-unicast | does not need to use an RTP middlebox. Rather, a multi-unicast | |||
mesh can be created, comprising several distinct RTP sessions, | mesh can be created, comprising several distinct RTP sessions, | |||
with each participant sending RTP traffic over a separate RTP | with each participant sending RTP traffic over a separate RTP | |||
session (that is, using an independent RTCPeerConnection object) | session (that is, using an independent RTCPeerConnection object) | |||
to every other participant, as shown in Figure 1. This topology | to every other participant, as shown in Figure 1. This topology | |||
has the benefit of not requiring an RTP middlebox node that is | has the benefit of not requiring an RTP middlebox node that is | |||
trusted to access and manipulate the media data. The downside is | trusted to access and manipulate the media data. The downside is | |||
that it increases the used bandwidth at each sender by requiring | that it increases the used bandwidth at each sender by requiring | |||
skipping to change at page 30, line 21 | skipping to change at page 30, line 27 | |||
v v | v v | |||
+---+ | +---+ | |||
| C | | | C | | |||
+---+ | +---+ | |||
Figure 1: Multi-unicast using several RTP sessions | Figure 1: Multi-unicast using several RTP sessions | |||
The multi-unicast topology could also be implemented as a single | The multi-unicast topology could also be implemented as a single | |||
RTP session, spanning multiple peer-to-peer transport layer | RTP session, spanning multiple peer-to-peer transport layer | |||
connections, or as several pairwise RTP sessions, one between each | connections, or as several pairwise RTP sessions, one between each | |||
pair of peers. To maintain a coherent mapping between the | pair of peers. To maintain a coherent mapping of the relationship | |||
relation between RTP sessions and RTCPeerConnection objects it is | between RTP sessions and RTCPeerConnection objects it is recommend | |||
recommend that this is implemented as several individual RTP | that this is implemented as several individual RTP sessions. The | |||
sessions. The only downside is that end-point A will not learn of | only downside is that endpoint A will not learn of the quality of | |||
the quality of any transmission happening between B and C, since | any transmission happening between B and C, since it will not see | |||
it will not see RTCP reports for the RTP session between B and C, | RTCP reports for the RTP session between B and C, whereas it would | |||
whereas it would it all three participants were part of a single | if all three participants were part of a single RTP session. | |||
RTP session. Experience with the Mbone tools (experimental RTP- | Experience with the Mbone tools (experimental RTP-based multicast | |||
based multicast conferencing tools from the late 1990s) has showed | conferencing tools from the late 1990s) has showed that RTCP | |||
that RTCP reception quality reports for third parties can be | reception quality reports for third parties can be presented to | |||
presented to users in a way that helps them understand asymmetric | users in a way that helps them understand asymmetric network | |||
network problems, and the approach of using separate RTP sessions | problems, and the approach of using separate RTP sessions prevents | |||
prevents this. However, an advantage of using separate RTP | this. However, an advantage of using separate RTP sessions is | |||
sessions is that it enables using different media bit-rates and | that it enables using different media bit-rates and RTP session | |||
RTP session configurations between the different peers, thus not | configurations between the different peers, thus not forcing B to | |||
forcing B to endure the same quality reductions if there are | endure the same quality reductions if there are limitations in the | |||
limitations in the transport from A to C as C will. It is | transport from A to C as C will. It is believed that these | |||
believed that these advantages outweigh the limitations in | advantages outweigh the limitations in debugging power. | |||
debugging power. | ||||
To indirectly connect with multiple peers: A common scenario in | To indirectly connect with multiple peers: A common scenario in | |||
multi-party conferencing is to create indirect connections to | multi-party conferencing is to create indirect connections to | |||
multiple peers, using an RTP mixer, translator, or some other type | multiple peers, using an RTP mixer, translator, or some other type | |||
of RTP middlebox. Figure 2 outlines a simple topology that might | of RTP middlebox. Figure 2 outlines a simple topology that might | |||
be used in a four-person centralised conference. The middlebox | be used in a four-person centralised conference. The middlebox | |||
acts to optimise the transmission of RTP packet streams from | acts to optimise the transmission of RTP packet streams from | |||
certain perspectives, either by only sending some of the received | certain perspectives, either by only sending some of the received | |||
RTP packet stream to any given receiver, or by providing a | RTP packet stream to any given receiver, or by providing a | |||
combined RTP packet stream out of a set of contributing streams. | combined RTP packet stream out of a set of contributing streams. | |||
skipping to change at page 31, line 19 | skipping to change at page 31, line 23 | |||
| or other | | | or other | | |||
+---+ | middlebox | +---+ | +---+ | middlebox | +---+ | |||
| C |<---->| |<---->| D | | | C |<---->| |<---->| D | | |||
+---+ +-------------+ +---+ | +---+ +-------------+ +---+ | |||
Figure 2: RTP mixer with only unicast paths | Figure 2: RTP mixer with only unicast paths | |||
There are various methods of implementation for the middlebox. If | There are various methods of implementation for the middlebox. If | |||
implemented as a standard RTP mixer or translator, a single RTP | implemented as a standard RTP mixer or translator, a single RTP | |||
session will extend across the middlebox and encompass all the | session will extend across the middlebox and encompass all the | |||
end-points in one multi-party session. Other types of middlebox | endpoints in one multi-party session. Other types of middlebox | |||
might use separate RTP sessions between each end-point and the | might use separate RTP sessions between each endpoint and the | |||
middlebox. A common aspect is that these RTP middleboxes can use | middlebox. A common aspect is that these RTP middleboxes can use | |||
a number of tools to control the media encoding provided by a | a number of tools to control the media encoding provided by a | |||
WebRTC Endpoint. This includes functions like requesting the | WebRTC Endpoint. This includes functions like requesting the | |||
breaking of the encoding chain and have the encoder produce a so | breaking of the encoding chain and have the encoder produce a so | |||
called Intra frame. Another is limiting the bit-rate of a given | called Intra frame. Another is limiting the bit-rate of a given | |||
stream to better suit the mixer view of the multiple down-streams. | stream to better suit the mixer view of the multiple down-streams. | |||
Others are controlling the most suitable frame-rate, picture | Others are controlling the most suitable frame-rate, picture | |||
resolution, the trade-off between frame-rate and spatial quality. | resolution, the trade-off between frame-rate and spatial quality. | |||
The middlebox has the responsibility to correctly perform | The middlebox has the responsibility to correctly perform | |||
congestion control, source identification, manage synchronisation | congestion control, source identification, manage synchronisation | |||
while providing the application with suitable media optimisations. | while providing the application with suitable media optimisations. | |||
The middlebox also has to be a trusted node when it comes to | The middlebox also has to be a trusted node when it comes to | |||
security, since it manipulates either the RTP header or the media | security, since it manipulates either the RTP header or the media | |||
itself (or both) received from one end-point, before sending it on | itself (or both) received from one endpoint, before sending it on | |||
towards the end-point(s), thus they need to be able to decrypt and | towards the endpoint(s), thus they need to be able to decrypt and | |||
then re-encrypt the RTP packet stream before sending it out. | then re-encrypt the RTP packet stream before sending it out. | |||
RTP Mixers can create a situation where an end-point experiences a | RTP Mixers can create a situation where an endpoint experiences a | |||
situation in-between a session with only two end-points and | situation in-between a session with only two endpoints and | |||
multiple RTP sessions. Mixers are expected to not forward RTCP | multiple RTP sessions. Mixers are expected to not forward RTCP | |||
reports regarding RTP packet streams across themselves. This is | reports regarding RTP packet streams across themselves. This is | |||
due to the difference in the RTP packet streams provided to the | due to the difference in the RTP packet streams provided to the | |||
different end-points. The original media source lacks information | different endpoints. The original media source lacks information | |||
about a mixer's manipulations prior to sending it the different | about a mixer's manipulations prior to sending it the different | |||
receivers. This scenario also results in that an end-point's | receivers. This scenario also results in that an endpoint's | |||
feedback or requests goes to the mixer. When the mixer can't act | feedback or requests go to the mixer. When the mixer can't act on | |||
on this by itself, it is forced to go to the original media source | this by itself, it is forced to go to the original media source to | |||
to fulfil the receivers request. This will not necessarily be | fulfil the receivers request. This will not necessarily be | |||
explicitly visible any RTP and RTCP traffic, but the interactions | explicitly visible to any RTP and RTCP traffic, but the | |||
and the time to complete them will indicate such dependencies. | interactions and the time to complete them will indicate such | |||
dependencies. | ||||
Providing source authentication in multi-party scenarios is a | Providing source authentication in multi-party scenarios is a | |||
challenge. In the mixer-based topologies, end-points source | challenge. In the mixer-based topologies, endpoints source | |||
authentication is based on, firstly, verifying that media comes | authentication is based on, firstly, verifying that media comes | |||
from the mixer by cryptographic verification and, secondly, trust | from the mixer by cryptographic verification and, secondly, trust | |||
in the mixer to correctly identify any source towards the end- | in the mixer to correctly identify any source towards the | |||
point. In RTP sessions where multiple end-points are directly | endpoint. In RTP sessions where multiple endpoints are directly | |||
visible to an end-point, all end-points will have knowledge about | visible to an endpoint, all endpoints will have knowledge about | |||
each others' master keys, and can thus inject packets claimed to | each others' master keys, and can thus inject packets claimed to | |||
come from another end-point in the session. Any node performing | come from another endpoint in the session. Any node performing | |||
relay can perform non-cryptographic mitigation by preventing | relay can perform non-cryptographic mitigation by preventing | |||
forwarding of packets that have SSRC fields that came from other | forwarding of packets that have SSRC fields that came from other | |||
end-points before. For cryptographic verification of the source, | endpoints before. For cryptographic verification of the source, | |||
SRTP would require additional security mechanisms, for example | SRTP would require additional security mechanisms, for example | |||
TESLA for SRTP [RFC4383], that are not part of the base WebRTC | TESLA for SRTP [RFC4383], that are not part of the base WebRTC | |||
standards. | standards. | |||
To forward media between multiple peers: It is sometimes desirable | To forward media between multiple peers: It is sometimes desirable | |||
for an end-point that receives an RTP packet stream to be able to | for an endpoint that receives an RTP packet stream to be able to | |||
forward that RTP packet stream to a third party. The are some | forward that RTP packet stream to a third party. The are some | |||
obvious security and privacy implications in supporting this, but | obvious security and privacy implications in supporting this, but | |||
also potential uses. This is supported in the W3C API by taking | also potential uses. This is supported in the W3C API by taking | |||
the received and decoded media and using it as media source that | the received and decoded media and using it as media source that | |||
is re-encoding and transmitted as a new stream. | is re-encoding and transmitted as a new stream. | |||
At the RTP layer, media forwarding acts as a back-to-back RTP | At the RTP layer, media forwarding acts as a back-to-back RTP | |||
receiver and RTP sender. The receiving side terminates the RTP | receiver and RTP sender. The receiving side terminates the RTP | |||
session and decodes the media, while the sender side re-encodes | session and decodes the media, while the sender side re-encodes | |||
and transmits the media using an entirely separate RTP session. | and transmits the media using an entirely separate RTP session. | |||
The original sender will only see a single receiver of the media, | The original sender will only see a single receiver of the media, | |||
and will not be able to tell that forwarding is happening based on | and will not be able to tell that forwarding is happening based on | |||
RTP-layer information since the RTP session that is used to send | RTP-layer information since the RTP session that is used to send | |||
the forwarded media is not connected to the RTP session on which | the forwarded media is not connected to the RTP session on which | |||
the media was received by the node doing the forwarding. | the media was received by the node doing the forwarding. | |||
The end-point that is performing the forwarding is responsible for | The endpoint that is performing the forwarding is responsible for | |||
producing an RTP packet stream suitable for onwards transmission. | producing an RTP packet stream suitable for onwards transmission. | |||
The outgoing RTP session that is used to send the forwarded media | The outgoing RTP session that is used to send the forwarded media | |||
is entirely separate to the RTP session on which the media was | is entirely separate to the RTP session on which the media was | |||
received. This will require media transcoding for congestion | received. This will require media transcoding for congestion | |||
control purpose to produce a suitable bit-rate for the outgoing | control purpose to produce a suitable bit-rate for the outgoing | |||
RTP session, reducing media quality and forcing the forwarding | RTP session, reducing media quality and forcing the forwarding | |||
end-point to spend the resource on the transcoding. The media | endpoint to spend the resource on the transcoding. The media | |||
transcoding does result in a separation of the two different legs | transcoding does result in a separation of the two different legs | |||
removing almost all dependencies, and allowing the forwarding end- | removing almost all dependencies, and allowing the forwarding | |||
point to optimise its media transcoding operation. The cost is | endpoint to optimise its media transcoding operation. The cost is | |||
greatly increased computational complexity on the forwarding node. | greatly increased computational complexity on the forwarding node. | |||
Receivers of the forwarded stream will see the forwarding device | Receivers of the forwarded stream will see the forwarding device | |||
as the sender of the stream, and will not be able to tell from the | as the sender of the stream, and will not be able to tell from the | |||
RTP layer that they are receiving a forwarded stream rather than | RTP layer that they are receiving a forwarded stream rather than | |||
an entirely new RTP packet stream generated by the forwarding | an entirely new RTP packet stream generated by the forwarding | |||
device. | device. | |||
12.1.3. Differentiated Treatment of RTP Packet Streams | 12.1.3. Differentiated Treatment of RTP Packet Streams | |||
There are use cases for differentiated treatment of RTP packet | There are use cases for differentiated treatment of RTP packet | |||
streams. Such differentiation can happen at several places in the | streams. Such differentiation can happen at several places in the | |||
system. First of all is the prioritization within the end-point | system. First of all is the prioritization within the endpoint | |||
sending the media, which controls, both which RTP packet streams that | sending the media, which controls, both which RTP packet streams that | |||
will be sent, and their allocation of bit-rate out of the current | will be sent, and their allocation of bit-rate out of the current | |||
available aggregate as determined by the congestion control. | available aggregate as determined by the congestion control. | |||
It is expected that the WebRTC API [W3C.WD-webrtc-20130910] will | It is expected that the WebRTC API [W3C.WD-webrtc-20130910] will | |||
allow the application to indicate relative priorities for different | allow the application to indicate relative priorities for different | |||
MediaStreamTracks. These priorities can then be used to influence | MediaStreamTracks. These priorities can then be used to influence | |||
the local RTP processing, especially when it comes to congestion | the local RTP processing, especially when it comes to congestion | |||
control response in how to divide the available bandwidth between the | control response in how to divide the available bandwidth between the | |||
RTP packet streams. Any changes in relative priority will also need | RTP packet streams. Any changes in relative priority will also need | |||
skipping to change at page 33, line 38 | skipping to change at page 33, line 45 | |||
might to be to use the same priority for redundant RTP packet stream | might to be to use the same priority for redundant RTP packet stream | |||
as for the source RTP packet stream. | as for the source RTP packet stream. | |||
Secondly, the network can prioritize transport-layer flows and sub- | Secondly, the network can prioritize transport-layer flows and sub- | |||
flows, including RTP packet streams. Typically, differential | flows, including RTP packet streams. Typically, differential | |||
treatment includes two steps, the first being identifying whether an | treatment includes two steps, the first being identifying whether an | |||
IP packet belongs to a class that has to be treated differently, the | IP packet belongs to a class that has to be treated differently, the | |||
second consisting of the actual mechanism to prioritize packets. | second consisting of the actual mechanism to prioritize packets. | |||
Three common methods for classifying IP packets are: | Three common methods for classifying IP packets are: | |||
DiffServ: The end-point marks a packet with a DiffServ code point to | DiffServ: The endpoint marks a packet with a DiffServ code point to | |||
indicate to the network that the packet belongs to a particular | indicate to the network that the packet belongs to a particular | |||
class. | class. | |||
Flow based: Packets that need to be given a particular treatment are | Flow based: Packets that need to be given a particular treatment are | |||
identified using a combination of IP and port address. | identified using a combination of IP and port address. | |||
Deep Packet Inspection: A network classifier (DPI) inspects the | Deep Packet Inspection: A network classifier (DPI) inspects the | |||
packet and tries to determine if the packet represents a | packet and tries to determine if the packet represents a | |||
particular application and type that is to be prioritized. | particular application and type that is to be prioritized. | |||
skipping to change at page 34, line 15 | skipping to change at page 34, line 23 | |||
for all the RTP packet streams used in a WebRTC session. The use of | for all the RTP packet streams used in a WebRTC session. The use of | |||
flow-based differentiation needs to be coordinated between the WebRTC | flow-based differentiation needs to be coordinated between the WebRTC | |||
system and the network(s). The WebRTC endpoint needs to know that | system and the network(s). The WebRTC endpoint needs to know that | |||
flow-based differentiation might be used to provide the separation of | flow-based differentiation might be used to provide the separation of | |||
the RTP packet streams onto different UDP flows to enable a more | the RTP packet streams onto different UDP flows to enable a more | |||
granular usage of flow based differentiation. The used flows, their | granular usage of flow based differentiation. The used flows, their | |||
5-tuples and prioritization will need to be communicated to the | 5-tuples and prioritization will need to be communicated to the | |||
network so that it can identify the flows correctly to enable | network so that it can identify the flows correctly to enable | |||
prioritization. No specific protocol support for this is specified. | prioritization. No specific protocol support for this is specified. | |||
DiffServ assumes that either the end-point or a classifier can mark | DiffServ assumes that either the endpoint or a classifier can mark | |||
the packets with an appropriate DSCP so that the packets are treated | the packets with an appropriate DSCP so that the packets are treated | |||
according to that marking. If the end-point is to mark the traffic | according to that marking. If the endpoint is to mark the traffic | |||
two requirements arise in the WebRTC context: 1) The WebRTC Endpoint | two requirements arise in the WebRTC context: 1) The WebRTC Endpoint | |||
has to know which DSCP to use and that it can use them on some set of | has to know which DSCP to use and that it can use them on some set of | |||
RTP packet streams. 2) The information needs to be propagated to the | RTP packet streams. 2) The information needs to be propagated to the | |||
operating system when transmitting the packet. Details of this | operating system when transmitting the packet. Details of this | |||
process are outside the scope of this memo and are further discussed | process are outside the scope of this memo and are further discussed | |||
in "DSCP and other packet markings for RTCWeb QoS" | in "DSCP and other packet markings for RTCWeb QoS" | |||
[I-D.ietf-tsvwg-rtcweb-qos]. | [I-D.ietf-tsvwg-rtcweb-qos]. | |||
Deep Packet Inspectors will, despite the SRTP media encryption, still | Deep Packet Inspectors will, despite the SRTP media encryption, still | |||
be fairly capable at classifying the RTP streams. The reason is that | be fairly capable at classifying the RTP streams. The reason is that | |||
skipping to change at page 34, line 42 | skipping to change at page 34, line 50 | |||
reception times, packet inter-spacing, RTP timestamp increments and | reception times, packet inter-spacing, RTP timestamp increments and | |||
sequence numbers, fairly reliable classifications are achieved. | sequence numbers, fairly reliable classifications are achieved. | |||
For packet based marking schemes it might be possible to mark | For packet based marking schemes it might be possible to mark | |||
individual RTP packets differently based on the relative priority of | individual RTP packets differently based on the relative priority of | |||
the RTP payload. For example video codecs that have I, P, and B | the RTP payload. For example video codecs that have I, P, and B | |||
pictures could prioritise any payloads carrying only B frames less, | pictures could prioritise any payloads carrying only B frames less, | |||
as these are less damaging to loose. However, depending on the QoS | as these are less damaging to loose. However, depending on the QoS | |||
mechanism and what markings that are applied, this can result in not | mechanism and what markings that are applied, this can result in not | |||
only different packet drop probabilities but also packet reordering, | only different packet drop probabilities but also packet reordering, | |||
see [I-D.ietf-tsvwg-rtcweb-qos] for further discussion. As a default | see [I-D.ietf-tsvwg-rtcweb-qos] and [I-D.ietf-dart-dscp-rtp] for | |||
policy all RTP packets related to a RTP packet stream ought to be | further discussion. As a default policy all RTP packets related to a | |||
provided with the same prioritization; per-packet prioritization is | RTP packet stream ought to be provided with the same prioritization; | |||
outside the scope of this memo, but might be specified elsewhere in | per-packet prioritization is outside the scope of this memo, but | |||
future. | might be specified elsewhere in future. | |||
It is also important to consider how RTCP packets associated with a | It is also important to consider how RTCP packets associated with a | |||
particular RTP packet stream need to be marked. RTCP compound | particular RTP packet stream need to be marked. RTCP compound | |||
packets with Sender Reports (SR), ought to be marked with the same | packets with Sender Reports (SR), ought to be marked with the same | |||
priority as the RTP packet stream itself, so the RTCP-based round- | priority as the RTP packet stream itself, so the RTCP-based round- | |||
trip time (RTT) measurements are done using the same transport-layer | trip time (RTT) measurements are done using the same transport-layer | |||
flow priority as the RTP packet stream experiences. RTCP compound | flow priority as the RTP packet stream experiences. RTCP compound | |||
packets containing RR packet ought to be sent with the priority used | packets containing RR packet ought to be sent with the priority used | |||
by the majority of the RTP packet streams reported on. RTCP packets | by the majority of the RTP packet streams reported on. RTCP packets | |||
containing time-critical feedback packets can use higher priority to | containing time-critical feedback packets can use higher priority to | |||
skipping to change at page 36, line 9 | skipping to change at page 36, line 13 | |||
in the session (see Section 5.2.3), the information in the CSRC list | in the session (see Section 5.2.3), the information in the CSRC list | |||
is augmented by audio level information for each contributing source. | is augmented by audio level information for each contributing source. | |||
It is desirable to expose this information to the WebRTC application | It is desirable to expose this information to the WebRTC application | |||
using some API, after mapping the CSRC values to WebRTC MediaStream | using some API, after mapping the CSRC values to WebRTC MediaStream | |||
identities, so it can be exposed in the user interface. | identities, so it can be exposed in the user interface. | |||
12.2.2. SSRC Collision Detection | 12.2.2. SSRC Collision Detection | |||
The RTP standard requires RTP implementations to have support for | The RTP standard requires RTP implementations to have support for | |||
detecting and handling SSRC collisions, i.e., resolve the conflict | detecting and handling SSRC collisions, i.e., resolve the conflict | |||
when two different end-points use the same SSRC value (see section | when two different endpoints use the same SSRC value (see section 8.2 | |||
8.2 of [RFC3550]). This requirement also applies to WebRTC | of [RFC3550]). This requirement also applies to WebRTC Endpoints. | |||
Endpoints. There are several scenarios where SSRC collisions can | There are several scenarios where SSRC collisions can occur: | |||
occur: | ||||
o In a point-to-point session where each SSRC is associated with | o In a point-to-point session where each SSRC is associated with | |||
either of the two end-points and where the main media carrying | either of the two endpoints and where the main media carrying SSRC | |||
SSRC identifier will be announced in the signalling channel, a | identifier will be announced in the signalling channel, a | |||
collision is less likely to occur due to the information about | collision is less likely to occur due to the information about | |||
used SSRCs. If SDP is used, this information is provided by | used SSRCs. If SDP is used, this information is provided by | |||
Source-Specific SDP Attributes [RFC5576]. Still, collisions can | Source-Specific SDP Attributes [RFC5576]. Still, collisions can | |||
occur if both end-points start using a new SSRC identifier prior | occur if both endpoints start using a new SSRC identifier prior to | |||
to having signalled it to the peer and received acknowledgement on | having signalled it to the peer and received acknowledgement on | |||
the signalling message. The Source-Specific SDP Attributes | the signalling message. The Source-Specific SDP Attributes | |||
[RFC5576] contains a mechanism to signal how the end-point | [RFC5576] contains a mechanism to signal how the endpoint resolved | |||
resolved the SSRC collision. | the SSRC collision. | |||
o SSRC values that have not been signalled could also appear in an | o SSRC values that have not been signalled could also appear in an | |||
RTP session. This is more likely than it appears, since some RTP | RTP session. This is more likely than it appears, since some RTP | |||
functions use extra SSRCs to provide their functionality. For | functions use extra SSRCs to provide their functionality. For | |||
example, retransmission data might be transmitted using a separate | example, retransmission data might be transmitted using a separate | |||
RTP packet stream that requires its own SSRC, separate to the SSRC | RTP packet stream that requires its own SSRC, separate to the SSRC | |||
of the source RTP packet stream [RFC4588]. In those cases, an | of the source RTP packet stream [RFC4588]. In those cases, an | |||
end-point can create a new SSRC that strictly doesn't need to be | endpoint can create a new SSRC that strictly doesn't need to be | |||
announced over the signalling channel to function correctly on | announced over the signalling channel to function correctly on | |||
both RTP and RTCPeerConnection level. | both RTP and RTCPeerConnection level. | |||
o Multiple end-points in a multiparty conference can create new | o Multiple endpoints in a multiparty conference can create new | |||
sources and signal those towards the RTP middlebox. In cases | sources and signal those towards the RTP middlebox. In cases | |||
where the SSRC/CSRC are propagated between the different end- | where the SSRC/CSRC are propagated between the different endpoints | |||
points from the RTP middlebox collisions can occur. | from the RTP middlebox collisions can occur. | |||
o An RTP middlebox could connect an end-point's RTCPeerConnection to | o An RTP middlebox could connect an endpoint's RTCPeerConnection to | |||
another RTCPeerConnection from the same end-point, thus forming a | another RTCPeerConnection from the same endpoint, thus forming a | |||
loop where the end-point will receive its own traffic. While it | loop where the endpoint will receive its own traffic. While it is | |||
is clearly considered a bug, it is important that the end-point is | clearly considered a bug, it is important that the endpoint is | |||
able to recognise and handle the case when it occurs. This case | able to recognise and handle the case when it occurs. This case | |||
becomes even more problematic when media mixers, and so on, are | becomes even more problematic when media mixers, and so on, are | |||
involved, where the stream received is a different stream but | involved, where the stream received is a different stream but | |||
still contains this client's input. | still contains this client's input. | |||
These SSRC/CSRC collisions can only be handled on RTP level as long | These SSRC/CSRC collisions can only be handled on RTP level as long | |||
as the same RTP session is extended across multiple | as the same RTP session is extended across multiple | |||
RTCPeerConnections by a RTP middlebox. To resolve the more generic | RTCPeerConnections by a RTP middlebox. To resolve the more generic | |||
case where multiple RTCPeerConnections are interconnected, | case where multiple RTCPeerConnections are interconnected, | |||
identification of the media source(s) part of a MediaStreamTrack | identification of the media source(s) part of a MediaStreamTrack | |||
being propagated across multiple interconnected RTCPeerConnection | being propagated across multiple interconnected RTCPeerConnection | |||
needs to be preserved across these interconnections. | needs to be preserved across these interconnections. | |||
12.2.3. Media Synchronisation Context | 12.2.3. Media Synchronisation Context | |||
When an end-point sends media from more than one media source, it | When an endpoint sends media from more than one media source, it | |||
needs to consider if (and which of) these media sources are to be | needs to consider if (and which of) these media sources are to be | |||
synchronized. In RTP/RTCP, synchronisation is provided by having a | synchronized. In RTP/RTCP, synchronisation is provided by having a | |||
set of RTP packet streams be indicated as coming from the same | set of RTP packet streams be indicated as coming from the same | |||
synchronisation context and logical end-point by using the same RTCP | synchronisation context and logical endpoint by using the same RTCP | |||
CNAME identifier. | CNAME identifier. | |||
The next provision is that the internal clocks of all media sources, | The next provision is that the internal clocks of all media sources, | |||
i.e., what drives the RTP timestamp, can be correlated to a system | i.e., what drives the RTP timestamp, can be correlated to a system | |||
clock that is provided in RTCP Sender Reports encoded in an NTP | clock that is provided in RTCP Sender Reports encoded in an NTP | |||
format. By correlating all RTP timestamps to a common system clock | format. By correlating all RTP timestamps to a common system clock | |||
for all sources, the timing relation of the different RTP packet | for all sources, the timing relation of the different RTP packet | |||
streams, also across multiple RTP sessions can be derived at the | streams, also across multiple RTP sessions can be derived at the | |||
receiver and, if desired, the streams can be synchronized. The | receiver and, if desired, the streams can be synchronized. The | |||
requirement is for the media sender to provide the correlation | requirement is for the media sender to provide the correlation | |||
skipping to change at page 37, line 44 | skipping to change at page 37, line 48 | |||
The security considerations of the RTP specification, the RTP/SAVPF | The security considerations of the RTP specification, the RTP/SAVPF | |||
profile, and the various RTP/RTCP extensions and RTP payload formats | profile, and the various RTP/RTCP extensions and RTP payload formats | |||
that form the complete protocol suite described in this memo apply. | that form the complete protocol suite described in this memo apply. | |||
It is not believed there are any new security considerations | It is not believed there are any new security considerations | |||
resulting from the combination of these various protocol extensions. | resulting from the combination of these various protocol extensions. | |||
The Extended Secure RTP Profile for Real-time Transport Control | The Extended Secure RTP Profile for Real-time Transport Control | |||
Protocol (RTCP)-Based Feedback [RFC5124] (RTP/SAVPF) provides | Protocol (RTCP)-Based Feedback [RFC5124] (RTP/SAVPF) provides | |||
handling of fundamental issues by offering confidentiality, integrity | handling of fundamental issues by offering confidentiality, integrity | |||
and partial source authentication. A mandatory to implement media | and partial source authentication. A mandatory to implement and use | |||
security solution is created by combing this secured RTP profile and | media security solution is created by combining this secured RTP | |||
DTLS-SRTP keying [RFC5764] as defined by Section 5.5 of | profile and DTLS-SRTP keying [RFC5764] as defined by Section 5.5 of | |||
[I-D.ietf-rtcweb-security-arch]. | [I-D.ietf-rtcweb-security-arch]. | |||
RTCP packets convey a Canonical Name (CNAME) identifier that is used | RTCP packets convey a Canonical Name (CNAME) identifier that is used | |||
to associate RTP packet streams that need to be synchronised across | to associate RTP packet streams that need to be synchronised across | |||
related RTP sessions. Inappropriate choice of CNAME values can be a | related RTP sessions. Inappropriate choice of CNAME values can be a | |||
privacy concern, since long-term persistent CNAME identifiers can be | privacy concern, since long-term persistent CNAME identifiers can be | |||
used to track users across multiple WebRTC calls. Section 4.9 of | used to track users across multiple WebRTC calls. Section 4.9 of | |||
this memo provides guidelines for generation of untraceable CNAME | this memo mandates generation of short-term persistent RTCP CNAMES, | |||
values that alleviate this risk. | as specified in RFC7022, resulting in untraceable CNAME values that | |||
alleviate this risk. | ||||
Some potential denial of service attacks exist if the RTCP reporting | Some potential denial of service attacks exist if the RTCP reporting | |||
interval is configured to an inappropriate value. This could be done | interval is configured to an inappropriate value. This could be done | |||
by configuring the RTCP bandwidth fraction to an excessively large or | by configuring the RTCP bandwidth fraction to an excessively large or | |||
small value using the SDP "b=RR:" or "b=RS:" lines [RFC3556], or some | small value using the SDP "b=RR:" or "b=RS:" lines [RFC3556], or some | |||
similar mechanism, or by choosing an excessively large or small value | similar mechanism, or by choosing an excessively large or small value | |||
for the RTP/AVPF minimal receiver report interval (if using SDP, this | for the RTP/AVPF minimal receiver report interval (if using SDP, this | |||
is the "a=rtcp-fb:... trr-int" parameter) [RFC4585]. The risks are | is the "a=rtcp-fb:... trr-int" parameter) [RFC4585]. The risks are | |||
as follows: | as follows: | |||
skipping to change at page 39, line 15 | skipping to change at page 39, line 19 | |||
extensions (Section 5.2.2) or the mixer-to-client audio level header | extensions (Section 5.2.2) or the mixer-to-client audio level header | |||
extensions (Section 5.2.3). The use of the encryption of the header | extensions (Section 5.2.3). The use of the encryption of the header | |||
extensions are RECOMMENDED, unless there are known reasons, like RTP | extensions are RECOMMENDED, unless there are known reasons, like RTP | |||
middleboxes performing voice activity based source selection or third | middleboxes performing voice activity based source selection or third | |||
party monitoring that will greatly benefit from the information, and | party monitoring that will greatly benefit from the information, and | |||
this has been expressed using API or signalling. If further evidence | this has been expressed using API or signalling. If further evidence | |||
are produced to show that information leakage is significant from | are produced to show that information leakage is significant from | |||
audio level indications, then use of encryption needs to be mandated | audio level indications, then use of encryption needs to be mandated | |||
at that time. | at that time. | |||
In multi-party communication scenarios using RTP Middleboxes, a lot | ||||
of trust is placed on these middleboxes to preserve the sessions | ||||
security. The middlebox needs to maintain the confidentiality, | ||||
integrity and perform source authentication. As discussed in | ||||
Section 12.1.1 the middlebox can perform checks that prevents any | ||||
endpoint participating in a conference to impersonate another. Some | ||||
additional security considerations regarding multi-party topologies | ||||
can be found in [I-D.ietf-avtcore-rtp-topologies-update]. | ||||
14. IANA Considerations | 14. IANA Considerations | |||
This memo makes no request of IANA. | This memo makes no request of IANA. | |||
Note to RFC Editor: this section is to be removed on publication as | Note to RFC Editor: this section is to be removed on publication as | |||
an RFC. | an RFC. | |||
15. Acknowledgements | 15. Acknowledgements | |||
The authors would like to thank Bernard Aboba, Harald Alvestrand, | The authors would like to thank Bernard Aboba, Harald Alvestrand, | |||
Cary Bran, Ben Campbell, Alissa Cooper, Charles Eckel, Alex | Cary Bran, Ben Campbell, Alissa Cooper, Spencer Dawkins, Charles | |||
Eleftheriadis, Christian Groves, Cullen Jennings, Olle Johansson, | Eckel, Alex Eleftheriadis, Christian Groves, Chris Inacio, Cullen | |||
Suhas Nandakumar, Dan Romascanu, Jim Spring, Martin Thomson, and the | Jennings, Olle Johansson, Suhas Nandakumar, Dan Romascanu, Jim | |||
other members of the IETF RTCWEB working group for their valuable | Spring, Martin Thomson, and the other members of the IETF RTCWEB | |||
feedback. | working group for their valuable feedback. | |||
16. References | 16. References | |||
16.1. Normative References | 16.1. Normative References | |||
[I-D.ietf-avtcore-multi-media-rtp-session] | [I-D.ietf-avtcore-multi-media-rtp-session] | |||
Westerlund, M., Perkins, C., and J. Lennox, "Sending | Westerlund, M., Perkins, C., and J. Lennox, "Sending | |||
Multiple Types of Media in a Single RTP Session", draft- | Multiple Types of Media in a Single RTP Session", draft- | |||
ietf-avtcore-multi-media-rtp-session-07 (work in | ietf-avtcore-multi-media-rtp-session-07 (work in | |||
progress), March 2015. | progress), March 2015. | |||
skipping to change at page 40, line 12 | skipping to change at page 40, line 24 | |||
draft-ietf-avtcore-rtp-multi-stream-07 (work in progress), | draft-ietf-avtcore-rtp-multi-stream-07 (work in progress), | |||
March 2015. | March 2015. | |||
[I-D.ietf-avtcore-rtp-multi-stream-optimisation] | [I-D.ietf-avtcore-rtp-multi-stream-optimisation] | |||
Lennox, J., Westerlund, M., Wu, W., and C. Perkins, | Lennox, J., Westerlund, M., Wu, W., and C. Perkins, | |||
"Sending Multiple Media Streams in a Single RTP Session: | "Sending Multiple Media Streams in a Single RTP Session: | |||
Grouping RTCP Reception Statistics and Other Feedback", | Grouping RTCP Reception Statistics and Other Feedback", | |||
draft-ietf-avtcore-rtp-multi-stream-optimisation-05 (work | draft-ietf-avtcore-rtp-multi-stream-optimisation-05 (work | |||
in progress), February 2015. | in progress), February 2015. | |||
[I-D.ietf-avtcore-rtp-topologies-update] | ||||
Westerlund, M. and S. Wenger, "RTP Topologies", draft- | ||||
ietf-avtcore-rtp-topologies-update-07 (work in progress), | ||||
April 2015. | ||||
[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-19 (work in progress), March 2015. | negotiation-19 (work in progress), March 2015. | |||
[I-D.ietf-rtcweb-audio] | [I-D.ietf-rtcweb-audio] | |||
Valin, J. and C. Bran, "WebRTC Audio Codec and Processing | Valin, J. and C. Bran, "WebRTC Audio Codec and Processing | |||
Requirements", draft-ietf-rtcweb-audio-08 (work in | Requirements", draft-ietf-rtcweb-audio-08 (work in | |||
progress), April 2015. | progress), April 2015. | |||
[I-D.ietf-rtcweb-fec] | [I-D.ietf-rtcweb-fec] | |||
Uberti, J., "WebRTC Forward Error Correction | Uberti, J., "WebRTC Forward Error Correction | |||
Requirements", draft-ietf-rtcweb-fec-01 (work in | Requirements", draft-ietf-rtcweb-fec-01 (work in | |||
progress), March 2015. | progress), March 2015. | |||
[I-D.ietf-rtcweb-overview] | ||||
Alvestrand, H., "Overview: Real Time Protocols for | ||||
Browser-based Applications", draft-ietf-rtcweb-overview-13 | ||||
(work in progress), November 2014. | ||||
[I-D.ietf-rtcweb-security] | [I-D.ietf-rtcweb-security] | |||
Rescorla, E., "Security Considerations for WebRTC", draft- | Rescorla, E., "Security Considerations for WebRTC", draft- | |||
ietf-rtcweb-security-08 (work in progress), February 2015. | ietf-rtcweb-security-08 (work in progress), February 2015. | |||
[I-D.ietf-rtcweb-security-arch] | [I-D.ietf-rtcweb-security-arch] | |||
Rescorla, E., "WebRTC Security Architecture", draft-ietf- | Rescorla, E., "WebRTC Security Architecture", draft-ietf- | |||
rtcweb-security-arch-11 (work in progress), March 2015. | rtcweb-security-arch-11 (work in progress), March 2015. | |||
[I-D.ietf-rtcweb-video] | [I-D.ietf-rtcweb-video] | |||
Roach, A., "WebRTC Video Processing and Codec | Roach, A., "WebRTC Video Processing and Codec | |||
skipping to change at page 42, line 39 | skipping to change at page 43, line 15 | |||
[RFC7022] Begen, A., Perkins, C., Wing, D., and E. Rescorla, | [RFC7022] Begen, A., Perkins, C., Wing, D., and E. Rescorla, | |||
"Guidelines for Choosing RTP Control Protocol (RTCP) | "Guidelines for Choosing RTP Control Protocol (RTCP) | |||
Canonical Names (CNAMEs)", RFC 7022, September 2013. | Canonical Names (CNAMEs)", RFC 7022, September 2013. | |||
[RFC7160] Petit-Huguenin, M. and G. Zorn, "Support for Multiple | [RFC7160] Petit-Huguenin, M. and G. Zorn, "Support for Multiple | |||
Clock Rates in an RTP Session", RFC 7160, April 2014. | Clock Rates in an RTP Session", RFC 7160, April 2014. | |||
[RFC7164] Gross, K. and R. Brandenburg, "RTP and Leap Seconds", RFC | [RFC7164] Gross, K. and R. Brandenburg, "RTP and Leap Seconds", RFC | |||
7164, March 2014. | 7164, March 2014. | |||
[W3C.WD-mediacapture-streams-20130903] | ||||
Burnett, D., Bergkvist, A., Jennings, C., and A. | ||||
Narayanan, "Media Capture and Streams", World Wide Web | ||||
Consortium WD WD-mediacapture-streams-20130903, September | ||||
2013, <http://www.w3.org/TR/2013/ | ||||
WD-mediacapture-streams-20130903>. | ||||
[W3C.WD-webrtc-20130910] | ||||
Bergkvist, A., Burnett, D., Jennings, C., and A. | ||||
Narayanan, "WebRTC 1.0: Real-time Communication Between | ||||
Browsers", World Wide Web Consortium WD WD-webrtc- | ||||
20130910, September 2013, | ||||
<http://www.w3.org/TR/2013/WD-webrtc-20130910>. | ||||
16.2. Informative References | 16.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. | |||
[I-D.ietf-avtcore-rtp-topologies-update] | ||||
Westerlund, M. and S. Wenger, "RTP Topologies", draft- | ||||
ietf-avtcore-rtp-topologies-update-07 (work in progress), | ||||
April 2015. | ||||
[I-D.ietf-avtext-rtp-grouping-taxonomy] | [I-D.ietf-avtext-rtp-grouping-taxonomy] | |||
Lennox, J., Gross, K., Nandakumar, S., Salgueiro, G., and | Lennox, J., Gross, K., Nandakumar, S., Salgueiro, G., and | |||
B. Burman, "A Taxonomy of Grouping Semantics and | B. Burman, "A Taxonomy of Grouping Semantics and | |||
Mechanisms for Real-Time Transport Protocol (RTP) | Mechanisms for Real-Time Transport Protocol (RTP) | |||
Sources", draft-ietf-avtext-rtp-grouping-taxonomy-06 (work | Sources", draft-ietf-avtext-rtp-grouping-taxonomy-06 (work | |||
in progress), March 2015. | in progress), March 2015. | |||
[I-D.ietf-dart-dscp-rtp] | ||||
Black, D. and P. Jones, "Differentiated Services | ||||
(DiffServ) and Real-time Communication", draft-ietf-dart- | ||||
dscp-rtp-10 (work in progress), November 2014. | ||||
[I-D.ietf-mmusic-msid] | [I-D.ietf-mmusic-msid] | |||
Alvestrand, H., "WebRTC MediaStream Identification in the | Alvestrand, H., "WebRTC MediaStream Identification in the | |||
Session Description Protocol", draft-ietf-mmusic-msid-10 | Session Description Protocol", draft-ietf-mmusic-msid-10 | |||
(work in progress), April 2015. | (work in progress), April 2015. | |||
[I-D.ietf-payload-rtp-howto] | [I-D.ietf-payload-rtp-howto] | |||
Westerlund, M., "How to Write an RTP Payload Format", | Westerlund, M., "How to Write an RTP Payload Format", | |||
draft-ietf-payload-rtp-howto-14 (work in progress), May | draft-ietf-payload-rtp-howto-14 (work in progress), May | |||
2015. | 2015. | |||
[I-D.ietf-rmcat-cc-requirements] | [I-D.ietf-rmcat-cc-requirements] | |||
Jesup, R. and Z. Sarker, "Congestion Control Requirements | Jesup, R. and Z. Sarker, "Congestion Control Requirements | |||
for Interactive Real-Time Media", draft-ietf-rmcat-cc- | for Interactive Real-Time Media", draft-ietf-rmcat-cc- | |||
requirements-09 (work in progress), December 2014. | requirements-09 (work in progress), December 2014. | |||
[I-D.ietf-rtcweb-overview] | [I-D.ietf-rtcweb-jsep] | |||
Alvestrand, H., "Overview: Real Time Protocols for | Uberti, J., Jennings, C., and E. Rescorla, "Javascript | |||
Browser-based Applications", draft-ietf-rtcweb-overview-13 | Session Establishment Protocol", draft-ietf-rtcweb-jsep-09 | |||
(work in progress), November 2014. | (work in progress), March 2015. | |||
[I-D.ietf-tsvwg-rtcweb-qos] | [I-D.ietf-tsvwg-rtcweb-qos] | |||
Dhesikan, S., Jennings, C., Druta, D., Jones, P., and J. | Dhesikan, S., Jennings, C., Druta, D., Jones, P., and J. | |||
Polk, "DSCP and other packet markings for RTCWeb QoS", | Polk, "DSCP and other packet markings for RTCWeb QoS", | |||
draft-ietf-tsvwg-rtcweb-qos-03 (work in progress), | draft-ietf-tsvwg-rtcweb-qos-03 (work in progress), | |||
November 2014. | November 2014. | |||
[RFC3611] Friedman, T., Caceres, R., and A. Clark, "RTP Control | [RFC3611] Friedman, T., Caceres, R., and A. Clark, "RTP Control | |||
Protocol Extended Reports (RTCP XR)", RFC 3611, November | Protocol Extended Reports (RTCP XR)", RFC 3611, November | |||
2003. | 2003. | |||
skipping to change at page 44, line 23 | skipping to change at page 45, line 9 | |||
Keeping Alive the NAT Mappings Associated with RTP / RTP | Keeping Alive the NAT Mappings Associated with RTP / RTP | |||
Control Protocol (RTCP) Flows", RFC 6263, June 2011. | Control Protocol (RTCP) Flows", RFC 6263, June 2011. | |||
[RFC6792] Wu, Q., Hunt, G., and P. Arden, "Guidelines for Use of the | [RFC6792] Wu, Q., Hunt, G., and P. Arden, "Guidelines for Use of the | |||
RTP Monitoring Framework", RFC 6792, November 2012. | RTP Monitoring Framework", RFC 6792, November 2012. | |||
[RFC7478] Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | [RFC7478] Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | |||
Time Communication Use Cases and Requirements", RFC 7478, | Time Communication Use Cases and Requirements", RFC 7478, | |||
March 2015. | March 2015. | |||
[W3C.WD-mediacapture-streams-20130903] | ||||
Burnett, D., Bergkvist, A., Jennings, C., and A. | ||||
Narayanan, "Media Capture and Streams", World Wide Web | ||||
Consortium WD WD-mediacapture-streams-20130903, September | ||||
2013, <http://www.w3.org/TR/2013/ | ||||
WD-mediacapture-streams-20130903>. | ||||
[W3C.WD-webrtc-20130910] | ||||
Bergkvist, A., Burnett, D., Jennings, C., and A. | ||||
Narayanan, "WebRTC 1.0: Real-time Communication Between | ||||
Browsers", World Wide Web Consortium WD WD-webrtc- | ||||
20130910, September 2013, | ||||
<http://www.w3.org/TR/2013/WD-webrtc-20130910>. | ||||
Authors' Addresses | Authors' Addresses | |||
Colin Perkins | Colin Perkins | |||
University of Glasgow | University of Glasgow | |||
School of Computing Science | School of Computing Science | |||
Glasgow G12 8QQ | Glasgow G12 8QQ | |||
United Kingdom | United Kingdom | |||
Email: csp@csperkins.org | Email: csp@csperkins.org | |||
URI: http://csperkins.org/ | URI: https://csperkins.org/ | |||
Magnus Westerlund | Magnus Westerlund | |||
Ericsson | Ericsson | |||
Farogatan 6 | Farogatan 6 | |||
SE-164 80 Kista | SE-164 80 Kista | |||
Sweden | Sweden | |||
Phone: +46 10 714 82 87 | Phone: +46 10 714 82 87 | |||
Email: magnus.westerlund@ericsson.com | Email: magnus.westerlund@ericsson.com | |||
Joerg Ott | Joerg Ott | |||
End of changes. 107 change blocks. | ||||
237 lines changed or deleted | 269 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |