draft-ietf-rtcweb-rtp-usage-13.txt | draft-ietf-rtcweb-rtp-usage-14.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: October 25, 2014 Ericsson | Expires: November 17, 2014 Ericsson | |||
J. Ott | J. Ott | |||
Aalto University | Aalto University | |||
April 23, 2014 | May 16, 2014 | |||
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-13 | draft-ietf-rtcweb-rtp-usage-14 | |||
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 October 25, 2014. | This Internet-Draft will expire on November 17, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 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 18 | skipping to change at page 2, line 18 | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. 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 . . . . . . . . . . . . . . 7 | 4.3. Choice of RTP Payload Formats . . . . . . . . . . . . . . 8 | |||
4.4. Use of RTP Sessions . . . . . . . . . . . . . . . . . . . 9 | 4.4. Use of RTP Sessions . . . . . . . . . . . . . . . . . . . 9 | |||
4.5. RTP and RTCP Multiplexing . . . . . . . . . . . . . . . . 9 | 4.5. RTP and RTCP Multiplexing . . . . . . . . . . . . . . . . 10 | |||
4.6. Reduced Size RTCP . . . . . . . . . . . . . . . . . . . . 10 | 4.6. Reduced Size RTCP . . . . . . . . . . . . . . . . . . . . 10 | |||
4.7. Symmetric RTP/RTCP . . . . . . . . . . . . . . . . . . . 10 | 4.7. Symmetric RTP/RTCP . . . . . . . . . . . . . . . . . . . 11 | |||
4.8. Choice of RTP Synchronisation Source (SSRC) . . . . . . . 11 | 4.8. Choice of RTP Synchronisation Source (SSRC) . . . . . . . 11 | |||
4.9. Generation of the RTCP Canonical Name (CNAME) . . . . . . 11 | 4.9. Generation of the RTCP Canonical Name (CNAME) . . . . . . 12 | |||
4.10. Handling of Leap Seconds . . . . . . . . . . . . . . . . 12 | 4.10. Handling of Leap Seconds . . . . . . . . . . . . . . . . 13 | |||
5. WebRTC Use of RTP: Extensions . . . . . . . . . . . . . . . . 12 | 5. WebRTC Use of RTP: Extensions . . . . . . . . . . . . . . . . 13 | |||
5.1. Conferencing Extensions and Topologies . . . . . . . . . 12 | 5.1. Conferencing Extensions and Topologies . . . . . . . . . 13 | |||
5.1.1. Full Intra Request (FIR) . . . . . . . . . . . . . . 14 | 5.1.1. Full Intra Request (FIR) . . . . . . . . . . . . . . 15 | |||
5.1.2. Picture Loss Indication (PLI) . . . . . . . . . . . . 14 | 5.1.2. Picture Loss Indication (PLI) . . . . . . . . . . . . 15 | |||
5.1.3. Slice Loss Indication (SLI) . . . . . . . . . . . . . 14 | 5.1.3. Slice Loss Indication (SLI) . . . . . . . . . . . . . 15 | |||
5.1.4. Reference Picture Selection Indication (RPSI) . . . . 15 | 5.1.4. Reference Picture Selection Indication (RPSI) . . . . 15 | |||
5.1.5. Temporal-Spatial Trade-off Request (TSTR) . . . . . . 15 | 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) . . . . . . . . . . . . . . . . . . . . . . . 15 | (TMMBR) . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
5.2. Header Extensions . . . . . . . . . . . . . . . . . . . . 16 | 5.2. Header Extensions . . . . . . . . . . . . . . . . . . . . 16 | |||
5.2.1. Rapid Synchronisation . . . . . . . . . . . . . . . . 16 | 5.2.1. Rapid Synchronisation . . . . . . . . . . . . . . . . 17 | |||
5.2.2. Client-to-Mixer Audio Level . . . . . . . . . . . . . 16 | 5.2.2. Client-to-Mixer Audio Level . . . . . . . . . . . . . 17 | |||
5.2.3. Mixer-to-Client Audio Level . . . . . . . . . . . . . 17 | 5.2.3. Mixer-to-Client Audio Level . . . . . . . . . . . . . 17 | |||
6. WebRTC Use of RTP: Improving Transport Robustness . . . . . . 17 | 6. WebRTC Use of RTP: Improving Transport Robustness . . . . . . 18 | |||
6.1. Negative Acknowledgements and RTP Retransmission . . . . 17 | 6.1. Negative Acknowledgements and RTP Retransmission . . . . 18 | |||
6.2. Forward Error Correction (FEC) . . . . . . . . . . . . . 18 | 6.2. Forward Error Correction (FEC) . . . . . . . . . . . . . 19 | |||
7. WebRTC Use of RTP: Rate Control and Media Adaptation . . . . 19 | 7. WebRTC Use of RTP: Rate Control and Media Adaptation . . . . 19 | |||
7.1. Boundary Conditions and Circuit Breakers . . . . . . . . 20 | 7.1. Boundary Conditions and Circuit Breakers . . . . . . . . 20 | |||
7.2. RTCP Limitations for Congestion Control . . . . . . . . . 20 | 7.2. Congestion Control Interoperability and Legacy Systems . 21 | |||
7.3. Congestion Control Interoperability and Legacy Systems . 22 | 8. WebRTC Use of RTP: Performance Monitoring . . . . . . . . . . 22 | |||
8. WebRTC Use of RTP: Performance Monitoring . . . . . . . . . . 23 | 9. WebRTC Use of RTP: Future Extensions . . . . . . . . . . . . 22 | |||
9. WebRTC Use of RTP: Future Extensions . . . . . . . . . . . . 24 | 10. Signalling Considerations . . . . . . . . . . . . . . . . . . 22 | |||
10. Signalling Considerations . . . . . . . . . . . . . . . . . . 24 | 11. WebRTC API Considerations . . . . . . . . . . . . . . . . . . 24 | |||
11. WebRTC API Considerations . . . . . . . . . . . . . . . . . . 25 | 12. RTP Implementation Considerations . . . . . . . . . . . . . . 26 | |||
12. RTP Implementation Considerations . . . . . . . . . . . . . . 28 | 12.1. Configuration and Use of RTP Sessions . . . . . . . . . 26 | |||
12.1. Configuration and Use of RTP Sessions . . . . . . . . . 28 | 12.1.1. Use of Multiple Media Sources Within an RTP Session 26 | |||
12.1.1. Use of Multiple Media Sources Within an RTP Session 28 | 12.1.2. Use of Multiple RTP Sessions . . . . . . . . . . . . 27 | |||
12.1.2. Use of Multiple RTP Sessions . . . . . . . . . . . . 29 | 12.1.3. Differentiated Treatment of RTP Packet Streams . . . 32 | |||
12.1.3. Differentiated Treatment of RTP Packet Streams . . . 34 | ||||
12.2. Media Source, RTP Packet Streams, and Participant | 12.2. Media Source, RTP Packet Streams, and Participant | |||
Identification . . . . . . . . . . . . . . . . . . . . . 35 | Identification . . . . . . . . . . . . . . . . . . . . . 34 | |||
12.2.1. Media Source . . . . . . . . . . . . . . . . . . . . 36 | 12.2.1. Media Source Identification . . . . . . . . . . . . 34 | |||
12.2.2. SSRC Collision Detection . . . . . . . . . . . . . . 36 | 12.2.2. SSRC Collision Detection . . . . . . . . . . . . . . 34 | |||
12.2.3. Media Synchronisation Context . . . . . . . . . . . 37 | 12.2.3. Media Synchronisation Context . . . . . . . . . . . 36 | |||
13. Security Considerations . . . . . . . . . . . . . . . . . . . 38 | 13. Security Considerations . . . . . . . . . . . . . . . . . . . 36 | |||
14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 | 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 | |||
15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 39 | 15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 37 | |||
16. References . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
16.1. Normative References . . . . . . . . . . . . . . . . . . 39 | 16.1. Normative References . . . . . . . . . . . . . . . . . . 37 | |||
16.2. Informative References . . . . . . . . . . . . . . . . . 42 | 16.2. Informative References . . . . . . . . . . . . . . . . . 40 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 44 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
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 5, line 23 | skipping to change at page 5, line 23 | |||
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]. Other terms are used | [I-D.ietf-avtext-rtp-grouping-taxonomy]. Other terms are used | |||
according to their definitions from the RTP Specification [RFC3550]. | according to their definitions from the RTP Specification [RFC3550]. | |||
We especially note the following frequently used terms: RTP Packet | Especially note the following frequently used terms: RTP Packet | |||
Stream, RTP Session, and End-point. | Stream, RTP Session, and End-point. | |||
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 implementations need to implement to function | that all WebRTC implementations need to implement to function | |||
effectively on today's networks. | effectively on today's networks. | |||
skipping to change at page 6, line 12 | skipping to change at page 6, line 12 | |||
optimisations for multi-SSRC sessions defined in | optimisations for multi-SSRC sessions defined in | |||
[I-D.ietf-avtcore-rtp-multi-stream-optimisation] is RECOMMENDED. | [I-D.ietf-avtcore-rtp-multi-stream-optimisation] is RECOMMENDED. | |||
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, | |||
as generated by RTP mixers, and RTCP packets relating to CSRCs. | as generated by RTP mixers, and RTCP packets relating to CSRCs. | |||
o Sending correct synchronisation information in the RTCP Sender | o Sending correct synchronisation information in the RTCP Sender | |||
Reports, to allow receivers to implement lip-synchronisation; | Reports, to allow receivers to implement lip-synchronisation; see | |||
support for the rapid RTP synchronisation extensions (see | Section 5.2.1 regarding support for the rapid RTP synchronisation | |||
Section 5.2.1) is RECOMMENDED. | 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 requires 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, with OPTIONAL support for other RTCP packet types | |||
unless mandated by other parts of this specification; | unless mandated by other parts of this specification. Note that | |||
implementations MUST ignore unknown RTCP packet types. Note that | ||||
additional RTCP Packet types are used by the RTP/SAVPF Profile | additional RTCP Packet types are used by the RTP/SAVPF Profile | |||
(Section 4.2) and the other RTCP extensions (Section 5). | (Section 4.2) and the other RTCP extensions (Section 5). | |||
o Support for multiple end-points in a single RTP session, and for | o Support for multiple end-points 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. | support for RTCP timer reconsideration (Section 6.3.6 of | |||
[RFC3550]) and reverse reconsideration (Section 6.3.4 of | ||||
[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]. Support for the reduced minimum RTCP | [RFC4566][RFC3556]. | |||
reporting interval described in Section 6.2 of [RFC3550] is | ||||
RECOMMENDED. | o Support for the reduced minimum RTCP reporting interval described | |||
in Section 6.2 of [RFC3550] is REQUIRED. When using the reduced | ||||
minimum RTCP reporting interval, the fixed (non-reduced) minimum | ||||
interval MUST be used when calculating the participant timeout | ||||
interval (see Sections 6.2 and 6.3.5 of [RFC3550]). The delay | ||||
before sending the initial compound RTCP packet can be set to zero | ||||
(see Section 6.2 of [RFC3550] as updated by | ||||
[I-D.ietf-avtcore-rtp-multi-stream]). | ||||
o Ignore unknown RTCP packet types and RTP header extensions. This | ||||
to ensure robust handling of future extensions, middlebox | ||||
behaviours, etc., that can result in not signalled RTCP packet | ||||
types or RTP header extensions being received. If a compound RTCP | ||||
packet is received that contains a mixture of known and unknown | ||||
RTCP packet types, the known packets types need to be processed as | ||||
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 | |||
degradation when interoperating with legacy implementations. | degradation when interoperating with legacy implementations. | |||
Other implementation considerations are discussed in Section 12. | Other implementation considerations are discussed in Section 12. | |||
4.2. Choice of the RTP Profile | 4.2. Choice of the RTP Profile | |||
skipping to change at page 8, line 21 | skipping to change at page 8, line 40 | |||
End-points can signal support for multiple RTP payload formats, or | End-points 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. If RTP packet streams are being associated with | sections of the SDP. This leads to the following considerations: | |||
signalling contexts based on the RTP payload type, then the | ||||
assignment of RTP payload type numbers MUST be unique across | If RTP packet streams are being associated with signalling | |||
signalling contexts; if the same RTP payload format configuration is | contexts based on the RTP payload type, then the assignment of RTP | |||
used in multiple contexts, then a different RTP payload type number | payload type numbers MUST be unique across signalling contexts. | |||
has to be assigned in each context to ensure uniqueness. If the RTP | ||||
payload type number is not being used to associate RTP packet streams | If the same RTP payload format configuration is used in multiple | |||
with a signalling context, then the same RTP payload type number can | contexts, then a different RTP payload type number has to be | |||
be used to indicate the exact same RTP payload format configuration | assigned in each context to ensure uniqueness. | |||
in multiple contexts. A single RTP payload type number MUST NOT be | ||||
assigned to different RTP payload formats, or different | If the RTP payload type number is not being used to associate RTP | |||
configurations of the same RTP payload format, within a single RTP | packet streams with a signalling context, then the same RTP | |||
session (note that the different "m=" lines in an SDP bundle group | payload type number can be used to indicate the exact same RTP | |||
[I-D.ietf-mmusic-sdp-bundle-negotiation] form a single RTP session). | payload format configuration in multiple contexts. | |||
A single RTP payload type number MUST NOT be assigned to different | ||||
RTP payload formats, or different configurations of the same RTP | ||||
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 | ||||
a single RTP session). | ||||
An end-point that has signalled support for multiple RTP payload | An end-point that has signalled support for multiple RTP payload | |||
formats SHOULD 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. | |||
An RTP sender that changes between two RTP payload types that use | If performing changes between two RTP payload types that use | |||
different RTP clock rates MUST follow the recommendations in | different RTP clock rates, an RTP sender MUST follow the | |||
Section 4.1 of [RFC7160]. RTP receivers MUST follow the | recommendations in Section 4.1 of [RFC7160]. RTP receivers MUST | |||
recommendations in Section 4.3 of [RFC7160] in order to support | follow the recommendations in Section 4.3 of [RFC7160] in order to | |||
sources that switch between clock rates in an RTP session (these | support sources that switch between clock rates in an RTP session | |||
recommendations for receivers are backwards compatible with the case | (these recommendations for receivers are backwards compatible with | |||
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 end-points communicating using RTP is | |||
known as an RTP session [RFC3550]. An end-point can be involved in | known as an RTP session [RFC3550]. An end-point 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 implementations of RTP are REQUIRED to implement support for | WebRTC implementations of RTP are REQUIRED to implement support for | |||
skipping to change at page 9, line 38 | skipping to change at page 10, line 15 | |||
REQUIRED to support transport of all RTP packet streams, independent | REQUIRED to support transport of all RTP packet streams, independent | |||
of media type, in a single RTP session using a single transport layer | of media type, in a single RTP session using a single transport layer | |||
flow, according to [I-D.ietf-avtcore-multi-media-rtp-session]. If | flow, according to [I-D.ietf-avtcore-multi-media-rtp-session]. If | |||
multiple types of media are to be used in a single RTP session, all | multiple types of media are to be used in a single RTP session, all | |||
participants in that RTP session MUST agree to this usage. In an SDP | participants in that RTP session MUST agree to this usage. In an SDP | |||
context, [I-D.ietf-mmusic-sdp-bundle-negotiation] can be used to | context, [I-D.ietf-mmusic-sdp-bundle-negotiation] can be used to | |||
signal such a bundle of RTP packet streams forming a single RTP | signal such a bundle of RTP packet streams forming a single RTP | |||
session. | session. | |||
Further discussion about the suitability of different RTP session | Further discussion about the suitability of different RTP session | |||
structures and multiplexing methods to different scenarios are | structures and multiplexing methods to different scenarios can be | |||
suitable can be found in [I-D.ietf-avtcore-multiplex-guidelines]. | found in [I-D.ietf-avtcore-multiplex-guidelines]. | |||
4.5. RTP and RTCP Multiplexing | 4.5. RTP and RTCP Multiplexing | |||
Historically, RTP and RTCP have been run on separate transport layer | Historically, RTP and RTCP have been run on separate transport layer | |||
flows (e.g., two UDP ports for each RTP session, one port for RTP and | flows (e.g., two UDP ports for each RTP session, one port for RTP and | |||
one port for RTCP). With the increased use of Network Address/Port | one port for RTCP). With the increased use of Network Address/Port | |||
Translation (NAT/NAPT) this has become problematic, since maintaining | Translation (NAT/NAPT) this has become problematic, since maintaining | |||
multiple NAT bindings can be costly. It also complicates firewall | multiple NAT bindings can be costly. It also complicates firewall | |||
administration, since multiple ports need to be opened to allow RTP | administration, since multiple ports need to be opened to allow RTP | |||
traffic. To reduce these costs and session set-up times, support for | traffic. To reduce these costs and session set-up times, | |||
multiplexing RTP data packets and RTCP control packets on a single | implementations are REQUIRED to support multiplexing RTP data packets | |||
transport-layer flow for each RTP session is REQUIRED, provided it is | and RTCP control packets on a single transport-layer flow [RFC5761]. | |||
negotiated in the signalling channel before use as specified in | Such RTP and RTCP multiplexing MUST be negotiated in the signalling | |||
[RFC5761]. For backwards compatibility, implementations are also | channel before it is used. If SDP is used for signalling, this | |||
REQUIRED to support RTP and RTCP sent on separate transport-layer | negotiation MUST use the attributes defined in [RFC5761]. For | |||
flows. | backwards compatibility, implementations are also REQUIRED to support | |||
RTP and RTCP sent on separate transport-layer flows. | ||||
Note that the use of RTP and RTCP multiplexed onto a single | Note that the use of RTP and RTCP multiplexed onto a single | |||
transport-layer flow ensures that there is occasional traffic sent on | transport-layer flow ensures that there is occasional traffic sent on | |||
that port, even if there is no active media traffic. This can be | that port, even if there is no active media traffic. This can be | |||
useful to keep NAT bindings alive, and is the recommend method for | useful to keep NAT bindings alive [RFC6263]. | |||
application level keep-alives of RTP sessions [RFC6263]. | ||||
4.6. Reduced Size RTCP | 4.6. Reduced Size RTCP | |||
RTCP packets are usually sent as compound RTCP packets, and [RFC3550] | RTCP packets are usually sent as compound RTCP packets, and [RFC3550] | |||
requires that those compound packets start with an Sender Report (SR) | requires that those compound packets start with an Sender Report (SR) | |||
or Receiver Report (RR) packet. When using frequent RTCP feedback | or Receiver Report (RR) packet. When using frequent RTCP feedback | |||
messages under the RTP/AVPF Profile [RFC4585] these statistics are | messages under the RTP/AVPF Profile [RFC4585] these statistics are | |||
not needed in every packet, and unnecessarily increase the mean RTCP | not needed in every packet, and unnecessarily increase the mean RTCP | |||
packet size. This can limit the frequency at which RTCP packets can | packet size. This can limit the frequency at which RTCP packets can | |||
be sent within the RTCP bandwidth share. | be sent within the RTCP bandwidth share. | |||
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. Support for non- | adapt their transmission and encoding behaviour. Implementations | |||
compound RTCP feedback packets [RFC5506] is REQUIRED, but MUST be | MUST support sending and receiving non-compound RTCP feedback packets | |||
negotiated using the signalling channel before use. For backwards | [RFC5506]. Use of non-compound RTCP packets MUST be negotiated using | |||
compatibility, implementations are also REQUIRED to support the use | the signalling channel. If SDP is used for signalling, this | |||
of compound RTCP feedback packets if the remote end-point does not | negotiation MUST use the attributes defined in [RFC5506]. For | |||
agree to the use of non-compound RTCP in the signalling exchange. | backwards compatibility, implementations are also REQUIRED to support | |||
the use of compound RTCP feedback packets if the remote end-point | ||||
does not agree to the use of non-compound RTCP in the signalling | ||||
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 end-points, 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, using the "a=ssrc:" SDP attribute defined | source (SSRC) identifiers. If SDP is used, this MUST be done using | |||
in Section 4.1 and Section 5 of [RFC5576]. Implementations MUST also | the "a=ssrc:" SDP attribute defined in Section 4.1 and Section 5 of | |||
support the "previous-ssrc" source attribute defined in Section 6.2 | [RFC5576] and the "previous-ssrc" source attribute defined in | |||
of [RFC5576]. Other per-SSRC attributes defined in [RFC5576] MAY be | Section 6.2 of [RFC5576]; other per-SSRC attributes defined in | |||
supported. | [RFC5576] MAY be supported. | |||
Use of the "a=ssrc:" attribute to signal SSRC identifiers in an RTP | While support for signalled SSRC identifiers is mandated, their use | |||
session is OPTIONAL. Implementations MUST be prepared to accept RTP | in an RTP session is OPTIONAL. Implementations MUST be prepared to | |||
and RTCP packets using SSRCs that have not been explicitly signalled | accept RTP and RTCP packets using SSRCs that have not been explicitly | |||
ahead of time. Implementations MUST support random SSRC assignment, | signalled ahead of time. Implementations MUST support random SSRC | |||
and MUST support SSRC collision detection and resolution, according | assignment, and MUST support SSRC collision detection and resolution, | |||
to [RFC3550]. When using signalled SSRC values, collision detection | according to [RFC3550]. When using signalled SSRC values, collision | |||
MUST be performed as described in Section 5 of [RFC5576]. | detection MUST be performed as described in Section 5 of [RFC5576]. | |||
It is often desirable to associate an RTP packet stream with a non- | It is often desirable to associate an RTP packet stream with a non- | |||
RTP context. For users of the WebRTC API a mapping between SSRCs and | RTP context. For users of the WebRTC API a mapping between SSRCs and | |||
MediaStreamTracks are provided per Section 11. For gateways or other | MediaStreamTracks are provided per Section 11. For gateways or other | |||
usages it is possible to associate an RTP packet stream with an "m=" | usages it is possible to associate an RTP packet stream with an "m=" | |||
line in a session description formatted using SDP. If SSRCs are | line in a session description formatted using SDP. If SSRCs are | |||
signalled this is straightforward (in SDP the "a=ssrc:" line will be | signalled this is straightforward (in SDP the "a=ssrc:" line will be | |||
at the media level, allowing a direct association with an "m=" line). | at the media level, allowing a direct association with an "m=" line). | |||
If SSRCs are not signalled, the RTP payload type numbers used in an | If SSRCs are not signalled, the RTP payload type numbers used in an | |||
RTP packet stream are often sufficient to associate that packet | RTP packet stream are often sufficient to associate that packet | |||
skipping to change at page 12, line 34 | skipping to change at page 13, line 13 | |||
RTCPeerConnection within their common same-origin context. | RTCPeerConnection within their common same-origin context. | |||
An WebRTC end-point MUST support reception of any CNAME that matches | An WebRTC end-point MUST support reception of any CNAME that matches | |||
the syntax limitations specified by the RTP specification [RFC3550] | the syntax limitations specified by the RTP specification [RFC3550] | |||
and cannot assume that any CNAME will be chosen according to the form | and cannot assume that any CNAME will be chosen according to the form | |||
suggested above. | suggested above. | |||
4.10. Handling of Leap Seconds | 4.10. Handling of Leap Seconds | |||
The guidelines regarding handling of leap seconds to limit their | The guidelines regarding handling of leap seconds to limit their | |||
impact on RTP media playout and synchronization given in [RFC7164] | impact on RTP media play-out and synchronization given in [RFC7164] | |||
SHOULD be followed. | SHOULD be followed. | |||
5. WebRTC Use of RTP: Extensions | 5. WebRTC Use of RTP: Extensions | |||
There are a number of RTP extensions that are either needed to obtain | There are a number of RTP extensions that are either needed to obtain | |||
full functionality, or extremely useful to improve on the baseline | full functionality, or extremely useful to improve on the baseline | |||
performance, in the WebRTC application context. One set of these | performance, in the WebRTC application context. One set of these | |||
extensions is related to conferencing, while others are more generic | extensions is related to conferencing, while others are more generic | |||
in nature. The following subsections describe the various RTP | in nature. The following subsections describe the various RTP | |||
extensions mandated or suggested for use within the WebRTC context. | extensions mandated or suggested for use within the WebRTC context. | |||
skipping to change at page 13, line 18 | skipping to change at page 13, line 45 | |||
While the use of IP multicast groups is popular in IPTV systems, the | While the use of IP multicast groups is popular in IPTV systems, the | |||
topologies based on RTP middleboxes are dominant in interactive video | topologies based on RTP middleboxes are dominant in interactive video | |||
conferencing environments. Topologies based on a mesh of unicast | conferencing environments. Topologies based on a mesh of unicast | |||
transport-layer flows to create a common RTP session have not seen | transport-layer flows to create a common RTP session have not seen | |||
widespread deployment to date. Accordingly, WebRTC implementations | widespread deployment to date. Accordingly, WebRTC implementations | |||
are not expected to support topologies based on IP multicast groups | are not expected to support topologies based on IP multicast groups | |||
or to support mesh-based topologies, such as a point-to-multipoint | or to support mesh-based topologies, such as a point-to-multipoint | |||
mesh configured as a single RTP session (Topo-Mesh in the terminology | mesh configured as a single RTP session (Topo-Mesh in the terminology | |||
of [I-D.ietf-avtcore-rtp-topologies-update]). However, a point-to- | of [I-D.ietf-avtcore-rtp-topologies-update]). However, a point-to- | |||
multipoint mesh constructed using several RTP sessions, implemented | multipoint mesh constructed using several RTP sessions, implemented | |||
in the WebRTC context using independent RTCPeerConnections, can be | in the WebRTC context using independent RTCPeerConnections | |||
expected to be utilised by WebRTC applications and needs to be | [W3C.WD-webrtc-20130910], can be expected to be utilised by WebRTC | |||
supported. | applications and needs to be supported. | |||
WebRTC implementations of RTP endpoints implemented according to this | WebRTC implementations of RTP endpoints implemented according to this | |||
memo are expected to support all the topologies described in | memo are expected to support all the topologies described in | |||
[I-D.ietf-avtcore-rtp-topologies-update] where the RTP endpoints send | [I-D.ietf-avtcore-rtp-topologies-update] where the RTP endpoints send | |||
and receive unicast RTP packet streams to and from some peer device, | and receive unicast RTP packet streams to and from some peer device, | |||
provided that peer can participate in performing congestion control | provided that peer can participate in performing congestion control | |||
on the RTP packet streams. The peer device could be another RTP | on the RTP packet streams. The peer device could be another RTP | |||
endpoint, or it could be an RTP middlebox that redistributes the RTP | endpoint, or it could be an RTP middlebox that redistributes the RTP | |||
packet streams to other RTP endpoints. This limitation means that | packet streams to other RTP endpoints. This limitation means that | |||
some of the RTP middlebox-based topologies are not suitable for use | some of the RTP middlebox-based topologies are not suitable for use | |||
skipping to change at page 14, line 32 | skipping to change at page 15, line 13 | |||
profile (RTP/SAVPF) [RFC5124]. | profile (RTP/SAVPF) [RFC5124]. | |||
5.1.1. Full Intra Request (FIR) | 5.1.1. Full Intra Request (FIR) | |||
The Full Intra Request message is defined in Sections 3.5.1 and 4.3.1 | The Full Intra Request message is defined in Sections 3.5.1 and 4.3.1 | |||
of the Codec Control Messages [RFC5104]. It is used to make the | of the Codec Control Messages [RFC5104]. It is used to make the | |||
mixer request a new Intra picture from a participant in the session. | mixer request a new Intra picture from a participant in the session. | |||
This is used when switching between sources to ensure that the | This is used when switching between sources to ensure that the | |||
receivers can decode the video or other predictive media encoding | receivers can decode the video or other predictive media encoding | |||
with long prediction chains. WebRTC senders MUST understand and | with long prediction chains. WebRTC senders MUST understand and | |||
react to FIR feedback messages they receiver, since this greatly | react to FIR feedback messages they receive, since this greatly | |||
improves the user experience when using centralised mixer-based | improves the user experience when using centralised mixer-based | |||
conferencing. Support for sending FIR messages is OPTIONAL. | conferencing. Support for sending FIR messages is OPTIONAL. | |||
5.1.2. Picture Loss Indication (PLI) | 5.1.2. Picture Loss Indication (PLI) | |||
The Picture Loss Indication message is defined in Section 6.3.1 of | The Picture Loss Indication message is defined in Section 6.3.1 of | |||
the RTP/AVPF profile [RFC4585]. It is used by a receiver to tell the | the RTP/AVPF profile [RFC4585]. It is used by a receiver to tell the | |||
sending encoder that it lost the decoder context and would like to | sending encoder that it lost the decoder context and would like to | |||
have it repaired somehow. This is semantically different from the | have it repaired somehow. This is semantically different from the | |||
Full Intra Request above as there could be multiple ways to fulfil | Full Intra Request above as there could be multiple ways to fulfil | |||
skipping to change at page 16, line 46 | skipping to change at page 17, line 24 | |||
general RTP header extension mechanism [RFC5285], which requires | general RTP header extension mechanism [RFC5285], which requires | |||
signalling, but are otherwise backwards compatible. | signalling, but are otherwise backwards compatible. | |||
5.2.2. Client-to-Mixer Audio Level | 5.2.2. Client-to-Mixer Audio Level | |||
The Client to Mixer Audio Level extension [RFC6464] is an RTP header | The Client to Mixer Audio Level extension [RFC6464] is an RTP header | |||
extension used by an endpoint to inform a mixer about the level of | extension used by an endpoint to inform a mixer about the level of | |||
audio activity in the packet to which the header is attached. This | audio activity in the packet to which the header is attached. This | |||
enables an RTP middlebox to make mixing or selection decisions | enables an RTP middlebox to make mixing or selection decisions | |||
without decoding or detailed inspection of the payload, reducing the | without decoding or detailed inspection of the payload, reducing the | |||
complexity in some types of mixer. It can also save decoding | complexity in some types of mixers. It can also save decoding | |||
resources in receivers, which can choose to decode only the most | resources in receivers, which can choose to decode only the most | |||
relevant RTP packet streams based on audio activity levels. | relevant RTP packet streams based on audio activity levels. | |||
The Client-to-Mixer Audio Level [RFC6464] header extension is | The Client-to-Mixer Audio Level [RFC6464] header extension is | |||
RECOMMENDED to be implemented. If this header extension is | RECOMMENDED to be implemented. If this header extension is | |||
implemented, it is REQUIRED that implementations are capable of | implemented, it is REQUIRED that implementations are capable of | |||
encrypting the header extension according to [RFC6904] since the | encrypting the header extension according to [RFC6904] since the | |||
information contained in these header extensions can be considered | information contained in these header extensions can be considered | |||
sensitive. It is further RECOMMENDED that this encryption is used, | sensitive. The use of this encryption is RECOMMENDED, however usage | |||
unless the encryption has been explicitly disabled through API or | of the encryption can be explicitly disabled through API or | |||
signalling. | signalling. | |||
5.2.3. Mixer-to-Client Audio Level | 5.2.3. Mixer-to-Client Audio Level | |||
The Mixer to Client Audio Level header extension [RFC6465] provides | The Mixer to Client Audio Level header extension [RFC6465] provides | |||
an endpoint with the audio level of the different sources mixed into | an endpoint with the audio level of the different sources mixed into | |||
a common mix by a RTP mixer. This enables a user interface to | a common source stream by a RTP mixer. This enables a user interface | |||
indicate the relative activity level of each session participant, | to indicate the relative activity level of each session participant, | |||
rather than just being included or not based on the CSRC field. This | rather than just being included or not based on the CSRC field. This | |||
is a pure optimisations of non critical functions, and is hence | is a pure optimisation of non critical functions, and is hence | |||
OPTIONAL to implement. If this header extension is implemented, it | OPTIONAL to implement. If this header extension is implemented, it | |||
is REQUIRED that implementations are capable of encrypting the header | is REQUIRED that implementations are capable of encrypting the header | |||
extension according to [RFC6904] since the information contained in | extension according to [RFC6904] since the information contained in | |||
these header extensions can be considered sensitive. It is further | these header extensions can be considered sensitive. It is further | |||
RECOMMENDED that this encryption is used, unless the encryption has | RECOMMENDED that this encryption is used, unless the encryption has | |||
been explicitly disabled through API or signalling. | been explicitly disabled through API or signalling. | |||
6. WebRTC Use of RTP: Improving Transport Robustness | 6. WebRTC Use of RTP: Improving Transport Robustness | |||
There are tools that can make RTP packet streams robust against | There are tools that can make RTP packet streams robust against | |||
packet loss and reduce the impact of loss on media quality. However, | packet loss and reduce the impact of loss on media quality. However, | |||
they all add overhead compared to a non-robust stream. The overhead | they generally some add overhead compared to a non-robust stream. | |||
needs to be considered, and the aggregate bit-rate MUST be rate | The overhead needs to be considered, and the aggregate bit-rate MUST | |||
controlled to avoid causing network congestion (see Section 7). As a | be rate controlled to avoid causing network congestion (see | |||
result, improving robustness might require a lower base encoding | Section 7). As a result, improving robustness might require a lower | |||
quality, but has the potential to deliver that quality with fewer | base encoding quality, but has the potential to deliver that quality | |||
errors. The mechanisms described in the following sub-sections can | with fewer errors. The mechanisms described in the following sub- | |||
be used to improve tolerance to packet loss. | sections can be used to improve tolerance to packet loss. | |||
6.1. Negative Acknowledgements and RTP Retransmission | 6.1. Negative Acknowledgements and RTP Retransmission | |||
As a consequence of supporting the RTP/SAVPF profile, implementations | As a consequence of supporting the RTP/SAVPF profile, implementations | |||
can send negative acknowledgements (NACKs) for RTP data packets | can send negative acknowledgements (NACKs) for RTP data packets | |||
[RFC4585]. This feedback can be used to inform a sender of the loss | [RFC4585]. This feedback can be used to inform a sender of the loss | |||
of particular RTP packets, subject to the capacity limitations of the | of particular RTP packets, subject to the capacity limitations of the | |||
RTCP feedback channel. A sender can use this information to optimise | RTCP feedback channel. A sender can use this information to optimise | |||
the user experience by adapting the media encoding to compensate for | the user experience by adapting the media encoding to compensate for | |||
known lost packets. | known lost packets. | |||
RTP packet stream Senders are REQUIRED to understand the Generic NACK | RTP packet stream senders are REQUIRED to understand the Generic NACK | |||
message defined in Section 6.2.1 of [RFC4585], but MAY choose to | message defined in Section 6.2.1 of [RFC4585], but MAY choose to | |||
ignore some or all of this feedback (following Section 4.2 of | ignore some or all of this feedback (following Section 4.2 of | |||
[RFC4585]). Receivers MAY send NACKs for missing RTP packets. | [RFC4585]). Receivers MAY send NACKs for missing RTP packets. | |||
Guidelines on when to send NACKs are provided in [RFC4585]. It is | Guidelines on when to send NACKs are provided in [RFC4585]. It is | |||
not expected that a receiver will send a NACK for every lost RTP | not expected that a receiver will send a NACK for every lost RTP | |||
packet, rather it needs to consider the cost of sending NACK | packet, rather it needs to consider the cost of sending NACK | |||
feedback, and the importance of the lost packet, to make an informed | feedback, and the importance of the lost packet, to make an informed | |||
decision on whether it is worth telling the sender about a packet | decision on whether it is worth telling the sender about a packet | |||
loss event. | loss event. | |||
The RTP Retransmission Payload Format [RFC4588] offers the ability to | The RTP Retransmission Payload Format [RFC4588] offers the ability to | |||
retransmit lost packets based on NACK feedback. Retransmission needs | retransmit lost packets based on NACK feedback. Retransmission needs | |||
to be used with care in interactive real-time applications to ensure | to be used with care in interactive real-time applications to ensure | |||
that the retransmitted packet arrives in time to be useful, but can | that the retransmitted packet arrives in time to be useful, but can | |||
be effective in environments with relatively low network RTT (an RTP | be effective in environments with relatively low network RTT (an RTP | |||
sender can estimate the RTT to the receivers using the information in | sender can estimate the RTT to the receivers using the information in | |||
RTCP SR and RR packets, as described at the end of Section 6.4.1 of | RTCP SR and RR packets, as described at the end of Section 6.4.1 of | |||
[RFC3550]). The use of retransmissions can also increase the forward | [RFC3550]). The use of retransmissions can also increase the forward | |||
RTP bandwidth, and can potentially caused increased packet loss if | RTP bandwidth, and can potentially caused increased packet loss if | |||
the original packet loss was caused by network congestion. We note, | the original packet loss was caused by network congestion. Note, | |||
however, that retransmission of an important lost packet to repair | however, that retransmission of an important lost packet to repair | |||
decoder state can have lower cost than sending a full intra frame. | decoder state can have lower cost than sending a full intra frame. | |||
It is not appropriate to blindly retransmit RTP packets in response | It is not appropriate to blindly retransmit RTP packets in response | |||
to a NACK. The importance of lost packets and the likelihood of them | to a NACK. The importance of lost packets and the likelihood of them | |||
arriving in time to be useful needs to be considered before RTP | arriving in time to be useful needs to be considered before RTP | |||
retransmission is used. | retransmission is used. | |||
Receivers are REQUIRED to implement support for RTP retransmission | Receivers are REQUIRED to implement support for RTP retransmission | |||
packets [RFC4588]. Senders MAY send RTP retransmission packets in | packets [RFC4588]. Senders MAY send RTP retransmission packets in | |||
response to NACKs if the RTP retransmission payload format has been | response to NACKs if the RTP retransmission payload format has been | |||
skipping to change at page 19, line 47 | skipping to change at page 20, line 25 | |||
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 | |||
writing, there is no standard congestion control algorithm that can | writing, there is no standard congestion control algorithm that can | |||
be used for interactive media applications such as WebRTC's flows. | be used for interactive media applications such as WebRTC's flows. | |||
Some requirements for congestion control algorithms for | Some requirements for congestion control algorithms for | |||
RTCPeerConnections are discussed in [I-D.ietf-rmcat-cc-requirements]. | RTCPeerConnections are discussed in [I-D.ietf-rmcat-cc-requirements]. | |||
It is expected that a future version of this memo will mandate the | A future version of this memo will mandate the use of a congestion | |||
use of a congestion control algorithm that satisfies these | control algorithm that satisfies these requirements. | |||
requirements. | ||||
7.1. Boundary Conditions and Circuit Breakers | 7.1. Boundary Conditions and Circuit Breakers | |||
In the absence of a concrete congestion control algorithm, all WebRTC | WebRTC implementations MUST implement the RTP circuit breaker | |||
implementations MUST implement the RTP circuit breaker algorithm that | algorithm that is described in | |||
is described in [I-D.ietf-avtcore-rtp-circuit-breakers]. The RTP | [I-D.ietf-avtcore-rtp-circuit-breakers]. The RTP circuit breaker is | |||
circuit breaker is designed to enable applications to recognise and | designed to enable applications to recognise and react to situations | |||
react to situations of extreme network congestion. However, since | of extreme network congestion. However, since the RTP circuit | |||
the RTP circuit breaker might not be triggered until congestion | breaker might not be triggered until congestion becomes extreme, it | |||
becomes extreme, it cannot be considered a substitute for congestion | cannot be considered a substitute for congestion control, and | |||
control, and applications MUST also implement congestion control to | applications MUST also implement congestion control to allow them to | |||
allow them to adapt to changes in network capacity. Any future RTP | adapt to changes in network capacity. Any future RTP congestion | |||
congestion control algorithms are expected to operate within the | control algorithms are expected to operate within the envelope | |||
envelope allowed by the circuit breaker. | 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 packetization 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 the SDP | channel can establish maximum media bit-rate boundaries using, for | |||
"b=AS:" or "b=CT:" lines, and the RTP/AVPF Temporary Maximum Media | example, the SDP "b=AS:" or "b=CT:" lines and the RTP/AVPF Temporary | |||
Stream Bit Rate (TMMBR) Requests (see Section 5.1.6 of this memo). | Maximum Media Stream Bit Rate (TMMBR) Requests (see Section 5.1.6 of | |||
The combination of media codec choice and signalled bandwidth limits | this memo). Signalled bandwidth limitations, such as SDP "b=AS:" or | |||
SHOULD be used to limit traffic based on known bandwidth limitations, | "b=CT:" lines received from the peer, MUST be followed when sending | |||
for example the capacity of the edge links, to the extent possible. | RTP packet streams. A WebRTC endpoint receiving media SHOULD signal | |||
its bandwidth limitations, these limitations have to be based on | ||||
7.2. RTCP Limitations for Congestion Control | known bandwidth limitations, for example the capacity of the edge | |||
links. | ||||
Experience with the congestion control algorithms of TCP [RFC5681], | ||||
TFRC [RFC5348], and DCCP [RFC4341], [RFC4342], [RFC4828], has shown | ||||
that feedback on packet arrivals needs to be sent frequently (roughly | ||||
once per round trip time is common). We note that the real-time | ||||
media traffic might not be able to adapt to changing path conditions | ||||
as rapidly as elastic applications using TCP, but frequent feedback, | ||||
perhaps on the order of once per video frame, is still needed to | ||||
allow the congestion control algorithm to track the path dynamics. | ||||
As an example of the type of RTCP congestion control feedback that is | ||||
possible, consider one of the simplest scenarios for WebRTC: a point | ||||
to point video call between two end systems. There will be four RTP | ||||
flows in this scenario, two audio and two video, with all four flows | ||||
being active for essentially all the time (the audio flows will | ||||
likely use voice activity detection and comfort noise to reduce the | ||||
packet rate during silent periods, but doesn't cause transmissions to | ||||
stop). Assume all four flows are sent in a single RTP session, each | ||||
using a separate SSRC. Further, assume each SSRC sends RTCP reports | ||||
for all other SSRCs in the session (i.e., the optimisations in | ||||
[I-D.ietf-avtcore-rtp-multi-stream-optimisation] are not used, giving | ||||
the worst case for the RTCP overhead). When all members are senders | ||||
like this, the RTCP timing rules in Sections 6.2 and 6.3 of [RFC3550] | ||||
and [RFC4585] reduce to: | ||||
rtcp_interval = avg_rtcp_size * n / rtcp_bw | ||||
where avg_rtcp_size is measured in octets, and the rtcp_bw is the | ||||
bandwidth available for RTCP. The average RTCP size will depend on | ||||
the amount of feedback that is sent in each RTCP packet, on the | ||||
number of members in the session, and on the size of source | ||||
description (RTCP SDES) information sent. As a baseline, each RTCP | ||||
packet will be a compound RTCP packet that contains an RTCP SR and an | ||||
RTCP SDES packet. In the scenario above, each RTCP SR packet will | ||||
contain three report blocks, once for each of the other RTP SSRCs | ||||
sending data, for a total of 100 octets (this is 8 octets header, 20 | ||||
octets sender info, and 3 * 24 octets report blocks). The RTCP SDES | ||||
packet will comprise a header (4 octets), an originating SSRC (4 | ||||
octets), a CNAME chunk, and padding. If the CNAME follows [RFC7022] | ||||
and it will be 19 octets in size, and require 1 octet of padding. | ||||
The resulting compound RTCP packet will be 128 octets in size. If | ||||
sent in UDP/IPv4 with no IP options and using Secure RTP, which adds | ||||
20 (IPv4) + 8 (UDP) + 14 (SRTP with 80 bit Authentication tag), the | ||||
avg_rtcp_size will therefore be 170 octets, including the header | ||||
overhead. The value n is this scenario is 4, and the rtcp_bw is | ||||
assumed to be 5% of the session bandwidth. | ||||
If it is desired to send RTCP feedback packets on average 30 times | ||||
per second, to correspond to one RTCP report every frame for 30fps | ||||
video, we can invert the above rtcp_interval calculation to get an | ||||
rtcp_bw that gives an interval of 1/30th of a second or lower. This | ||||
corresponds to an rtcp_bw of 20400 octets per second (since 1/30 = | ||||
170 * 4 / 20400). This is 163200 bits per second, which if 5% of the | ||||
session bandwidth, gives a session bandwidth of approximately 3.3Mbps | ||||
(i.e., 3.3Mbps media rate, plus an additional 5% for RTCP, to give a | ||||
total data rate of approximately 3.4Mbps). That is, RTCP can report | ||||
on every frame of video provided the session bandwidth is 3.3Mbps or | ||||
larger, when every SSRC sends a report for every video frame. Please | ||||
note that the actual RTCP transmission intervals will be within the | ||||
interval [0.0135, 0.0406]s, but maintaining an average RTCP | ||||
transmission interval of 0.033s. | ||||
Note: To achieve the RTCP transmission intervals above the RTP/ | ||||
SAVPF profile with T_rr_interval=0 is used, since even when using | ||||
the reduced minimal transmission interval, the RTP/SAVP profile | ||||
would only allow sending RTCP at most every 0.11s (every third | ||||
frame of video). Using RTP/SAVPF with T_rr_interval=0 however is | ||||
capable of fully utilizing the configured 5% RTCP bandwidth | ||||
fraction. | ||||
If additional feedback beyond the standard report block is needed, | ||||
the session bandwidth needed will increase. For example, with an | ||||
additional 20 octets data being reported in each RTCP packet, the | ||||
session bandwidth needed increases to 3.5Mbps for every SSRC to be | ||||
able to report on every frame. However, the above baseline might not | ||||
be the most appropriate usage of the RTCP bandwidth. Depending on | ||||
needs, a less frequent usage of regular RTCP compound packets, | ||||
controlled by T_rr_interval combined with using the reduced size RTCP | ||||
packets, can achieve more frequent and useful reporting. Also the | ||||
reporting requirements defined in | ||||
[I-D.ietf-avtcore-rtp-multi-stream-optimisation] will reduced the | ||||
amount of bandwidth consumed for reporting when each endpoint has | ||||
multiple SSRCs. | ||||
Calculations such as these show that RTCP cannot be used to send per- | ||||
packet congestion feedback. RTCP can, however, be used to send | ||||
congestion feedback on each frame of video sent in an interactive | ||||
video conferencing scenario, provided the RTCP parameters are | ||||
correctly configured and the overall session bandwidth exceeds a | ||||
couple of megabits per second (the exact rate depending on the number | ||||
of session participants, the RTCP bandwidth fraction, and whether | ||||
audio and video are sent in one or two RTP sessions). Using similar | ||||
calculations, it can be shown that RTCP can likely also be used to | ||||
send feedback on a per-RTT basis, provided the RTT is not too low. | ||||
Interactive communication might not be able to afford to wait for | ||||
packet losses to occur to indicate congestion, because an increase in | ||||
play out delay due to queuing (most prominent in wireless networks) | ||||
can easily lead to packets being dropped due to late arrival at the | ||||
receiver. Therefore, more sophisticated cues might need to be | ||||
reported -- to be defined in a suitable congestion control framework | ||||
as noted above -- which, in turn, increase the report size again. | ||||
For example, different RTCP XR report blocks (jointly) provide the | ||||
necessary details to implement a variety of congestion control | ||||
algorithms, but the (compound) report size grows quickly. | ||||
7.3. Congestion Control Interoperability and Legacy Systems | 7.2. Congestion Control Interoperability and Legacy Systems | |||
There are legacy RTP implementations that do not implement RTCP, and | There are legacy RTP implementations that do not implement RTCP, and | |||
hence do not provide any congestion feedback. Congestion control | hence do not provide any congestion feedback. Congestion control | |||
cannot be performed with these end-points. WebRTC implementations | cannot be performed with these end-points. WebRTC implementations | |||
that need to interwork with such end-points MUST limit their | that need to interwork with such end-points MUST limit their | |||
transmission to a low rate, equivalent to a VoIP call using a low | transmission to a low rate, equivalent to a VoIP call using a low | |||
bandwidth codec, that is unlikely to cause any significant | bandwidth codec, that is unlikely to cause any significant | |||
congestion. | congestion. | |||
When interworking with legacy implementations that support RTCP using | When interworking with legacy implementations that support RTCP using | |||
skipping to change at page 23, line 29 | skipping to change at page 21, line 46 | |||
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 | |||
where one direction is dual controlled, when the other direction is | where one direction is dual controlled, when the other direction is | |||
not controlled. This memo cannot mandate behaviour for proprietary | not controlled. This memo cannot mandate behaviour for proprietary | |||
congestion control algorithms, but implementations that use such | congestion control algorithms, but implementations that use such | |||
algorithms ought to be aware of this issue, and try to ensure that | algorithms ought to be aware of this issue, and try to ensure that | |||
both effective congestion control is negotiated for media flowing in | effective congestion control is negotiated for media flowing in both | |||
both directions. If the IETF were to standardise both sender- and | directions. If the IETF were to standardise both sender- and | |||
receiver-based congestion control algorithms for WebRTC traffic in | receiver-based congestion control algorithms for WebRTC traffic in | |||
the future, the issues of interoperability, control, and ensuring | the future, the issues of interoperability, control, and ensuring | |||
that both directions of media flow are congestion controlled would | that both directions of media flow are congestion controlled would | |||
also need to be considered. | also need to be considered. | |||
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 | |||
skipping to change at page 24, line 5 | skipping to change at page 22, line 22 | |||
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 [RFC3611][RFC6792]. At the time | |||
of this writing, it is not clear what extended metrics are suitable | of this writing, it is not clear what extended metrics are suitable | |||
for use in the WebRTC context, so there is no requirement that | for use in the WebRTC context, so there is no requirement that | |||
implementations generate RTCP XR packets. However, implementations | implementations generate RTCP XR packets. However, implementations | |||
that can use detailed performance monitoring data MAY generate RTCP | that can use detailed performance monitoring data MAY generate RTCP | |||
XR packets as appropriate; the use of such packets SHOULD be | XR packets as appropriate; the use of such packets SHOULD be | |||
signalled in advance. | signalled in advance. | |||
All WebRTC implementations MUST be prepared to receive RTP XR report | ||||
packets, whether or not they were signalled. There is no requirement | ||||
that the data contained in such reports be used, or exposed to the | ||||
Javascript application, however. | ||||
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 applications. In this case, future updates to this memo | of WebRTC applications. In this case, future updates to this memo | |||
MUST be made following the Guidelines for Writers of RTP Payload | MUST be made following the Guidelines for Writers of RTP Payload | |||
Format Specifications [RFC2736], How to Write an RTP Payload Format | 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 | |||
skipping to change at page 24, line 45 | skipping to change at page 23, line 8 | |||
parameters: | parameters: | |||
RTP Profile: The name of the RTP profile to be used in session. The | RTP Profile: The name of the RTP profile to be used in session. The | |||
RTP/AVP [RFC3551] and RTP/AVPF [RFC4585] profiles can interoperate | RTP/AVP [RFC3551] and RTP/AVPF [RFC4585] profiles can interoperate | |||
on basic level, as can their secure variants RTP/SAVP [RFC3711] | on basic level, as can their secure variants RTP/SAVP [RFC3711] | |||
and RTP/SAVPF [RFC5124]. The secure variants of the profiles do | and RTP/SAVPF [RFC5124]. The secure variants of the profiles do | |||
not directly interoperate with the non-secure variants, due to the | not directly interoperate with the non-secure variants, due to the | |||
presence of additional header fields for authentication in SRTP | presence of additional header fields for authentication in SRTP | |||
packets and cryptographic transformation of the payload. WebRTC | packets and cryptographic transformation of the payload. WebRTC | |||
requires the use of the RTP/SAVPF profile, and this MUST be | requires the use of the RTP/SAVPF profile, and this MUST be | |||
signalled if SDP is used. Interworking functions might transform | signalled. Interworking functions might transform this into the | |||
this into the RTP/SAVP profile for a legacy use case, by | RTP/SAVP profile for a legacy use case, by indicating to the | |||
indicating to the WebRTC end-point that the RTP/SAVPF is used, and | WebRTC end-point that the RTP/SAVPF is used and configuring a trr- | |||
limiting the usage of the "a=rtcp-fb:" attribute to indicate a | int value of 4 seconds. | |||
trr-int value of 4 seconds. | ||||
Transport Information: Source and destination IP address(s) and | Transport Information: Source and destination IP address(s) and | |||
ports for RTP and RTCP MUST be signalled for each RTP session. In | ports for RTP and RTCP MUST be signalled for each RTP session. In | |||
WebRTC these transport addresses will be provided by ICE that | WebRTC these transport addresses will be provided by ICE [RFC5245] | |||
signals candidates and arrives at nominated candidate address | that signals candidates and arrives at nominated candidate address | |||
pairs. If RTP and RTCP multiplexing [RFC5761] is to be used, such | pairs. If RTP and RTCP multiplexing [RFC5761] is to be used, such | |||
that a single port, i.e. transport-layer flow, is used for RTP and | that a single port, i.e. transport-layer flow, is used for RTP and | |||
RTCP flows, this MUST be signalled (see Section 4.5). | RTCP flows, this MUST be signalled (see Section 4.5). | |||
RTP Payload Types, media formats, and format parameters: The mapping | RTP Payload Types, media formats, and format parameters: The mapping | |||
between media type names (and hence the RTP payload formats to be | between media type names (and hence the RTP payload formats to be | |||
used), and the RTP payload type numbers MUST be signalled. Each | used), and the RTP payload type numbers MUST be signalled. Each | |||
media type MAY also have a number of media type parameters that | media type MAY also have a number of media type parameters that | |||
MUST also be signalled to configure the codec and RTP payload | MUST also be signalled to configure the codec and RTP payload | |||
format (the "a=fmtp:" line from SDP). Section 4.3 of this memo | format (the "a=fmtp:" line from SDP). Section 4.3 of this memo | |||
discusses requirements for uniqueness of payload types. | discusses requirements for uniqueness of payload types. | |||
RTP Extensions: The RTP extensions to be used SHOULD be agreed upon, | RTP Extensions: The use of any additional RTP header extensions and | |||
including any parameters for each respective extension. At the | RTCP packet types, including any necessary parameters, SHOULD be | |||
very least, this will help avoiding using bandwidth for features | signalled. For robustness, and for compatibility with non-WebRTC | |||
that the other end-point will ignore. But for certain mechanisms | systems that might be connected to a WebRTC session via a gateway, | |||
there is requirement for this to happen as interoperability | implementations are required to ignore unknown RTCP packets and | |||
failure otherwise happens. | RTP header extensions (See 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 | end-points 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], or something | Control Protocol (RTCP) Bandwidth" [RFC3556] if using SDP, or | |||
semantically equivalent. This also ensures that the end-points | something semantically equivalent. This also ensures that the | |||
have a common view of the RTCP bandwidth, this is important as too | end-points have a common view of the RTCP bandwidth. A common | |||
different view of the bandwidths can lead to failure to | RTCP bandwidth is important as a too different view of the | |||
interoperate. | bandwidths can lead to failure to interoperate. | |||
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 offer | an offer/answer exchange. RTP does not depend on SDP or on the offer | |||
/answer model, but does require all the necessary parameters to be | /answer model, but does require all the necessary parameters to be | |||
agreed upon, and provided to the RTP implementation. We note that in | agreed upon, and provided to the RTP implementation. Note that in | |||
the WebRTC context it will depend on the signalling model and API how | the WebRTC context it will depend on the signalling model and API how | |||
these parameters need to be configured but they will be need to | these parameters need to be configured but they will be need to | |||
either set in the API or explicitly signalled between the peers. | either be 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 need to be | |||
skipping to change at page 26, line 24 | skipping to change at page 24, line 35 | |||
the source packet stream. | the source packet stream. | |||
It is important to note that the same media source can be feeding | It is important to note that the same media source can be feeding | |||
multiple MediaStreamTracks. As different sets of constraints or | multiple MediaStreamTracks. As different sets of constraints or | |||
other parameters can be applied to the MediaStreamTrack, each | other parameters can be applied to the MediaStreamTrack, each | |||
MediaStreamTrack instance added to a RTCPeerConnection SHALL result | MediaStreamTrack instance added to a RTCPeerConnection SHALL result | |||
in an independent source packet stream, with its own set of | in an independent source packet stream, with its own set of | |||
associated packet streams, and thus different SSRC(s). It will | associated packet streams, and thus different SSRC(s). It will | |||
depend on applied constraints and parameters if the source stream and | depend on applied constraints and parameters if the source stream and | |||
the encoding configuration will be identical between different | the encoding configuration will be identical between different | |||
MediaStreamTracks sharing the same media source. Thus it is possible | MediaStreamTracks sharing the same media source. If the encoding | |||
for multiple source packet streams to share encoded streams (but not | parameters and constraints are the same, an implementation could | |||
packet streams), but this is an implementation choice to try to | choose to use only one encoded stream to create the different RTP | |||
utilise such optimisations. Note that such optimizations would need | packet streams. Note that such optimisations would need to take into | |||
to take into account that the constraints for one of the | account that the constraints for one of the MediaStreamTracks can at | |||
MediaStreamTracks can at any moment change, meaning that the encoding | any moment change, meaning that the encoding configurations might no | |||
configurations might no longer be identical. | longer be identical and two different encoder instances would then be | |||
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 don't forces a end-point to change synchronisation | all cases, and does not force an end-point to to disrupt the media by | |||
base and CNAME in the middle of a ongoing delivery of any packet | changing synchronisation base and CNAME during delivery of any | |||
streams, which would cause media disruption; all MediaStreamTracks | ongoing packet streams, all MediaStreamTracks and their associated | |||
and their associated SSRCs originating from the same end-point needs | SSRCs originating from the same end-point need to be sent using the | |||
to be sent using the same CNAME within one RTCPeerConnection. This | same CNAME within one RTCPeerConnection. This is motivating the | |||
is motivating the strong recommendation in Section 4.9 to only use a | strong recommendation in Section 4.9 to only use a single CNAME. | |||
single CNAME. | ||||
The requirement on using the same CNAME for all SSRCs that | The requirement on using the same CNAME for all SSRCs that | |||
originates from the same end-point, does not require middleboxes | originate from the same end-point, does not require a middlebox | |||
that forwards traffic from multiple end-points to only use a | that forwards traffic from multiple end-points to only use a | |||
single CNAME. | single 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 RTCPeerConnection within a | request that the CNAMEs used in different RTCPeerConnections (within | |||
same-orign context to be the same, this allow 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. | |||
Note: this doesn't result in a tracking issue, since the creation | Note: this doesn't result in a tracking issue, since the creation | |||
of matching CNAMEs depends on existing tracking. | of matching CNAMEs depends on existing tracking. | |||
The above will currently force a WebRTC end-point that receives an | The above will currently force a WebRTC end-point that receives a | |||
MediaStreamTrack on one RTCPeerConnection and adds it as an outgoing | MediaStreamTrack on one RTCPeerConnection and adds it as an outgoing | |||
on any RTCPeerConnection to perform resynchronisation of the stream. | on any RTCPeerConnection to perform resynchronisation of the stream. | |||
This, as the sending party needs to change the CNAME, which implies | This, as the sending party needs to change the CNAME to the one it | |||
that it has to use a locally available system clock as timebase for | uses, which implies that the sender has to use a local system clock | |||
the synchronisation. Thus, the relative relation between the | as timebase for the synchronisation. Thus, the relative relation | |||
timebase of the incoming stream and the system sending out needs to | between the timebase of the incoming stream and the system sending | |||
defined. This relation also needs monitoring for clock drift and | out needs to defined. This relation also needs monitoring for clock | |||
likely adjustments of the synchronisation. The sending entity is | drift and likely adjustments of the synchronisation. The sending | |||
also responsible for congestion control for its the sent streams. In | entity is also responsible for congestion control for its sent | |||
cases of packet loss the loss of incoming data also needs to be | streams. In cases of packet loss the loss of incoming data also | |||
handled. This leads to the observation that the method that is least | needs to be handled. This leads to the observation that the method | |||
likely to cause issues or interruptions in the outgoing source packet | that is least likely to cause issues or interruptions in the outgoing | |||
stream is a model of full decoding, including repair etc followed by | source packet stream is a model of full decoding, including repair | |||
encoding of the media again into the outgoing packet stream. | etc., followed by encoding of the media again into the outgoing | |||
Optimisations of this method is clearly possible and implementation | packet stream. Optimisations of this method is clearly possible and | |||
specific. | implementation specific. | |||
A WebRTC end-point MUST support receiving multiple MediaStreamTracks, | A WebRTC end-point MUST support receiving multiple MediaStreamTracks, | |||
where each of different MediaStreamTracks (and their sets of | where each of 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 | |||
are to allow for forward compatibility with any future changes | is to allow for forward compatibility with any future changes that | |||
that enables more efficient stream handling when end-points relay/ | enables more efficient stream handling when end-points relay/ | |||
forward streams. It also ensures that end-points can interoperate | forward streams. It also ensures that end-points can interoperate | |||
with certain types of multi-stream middleboxes or end-points that | with certain types of multi-stream middleboxes or end-points that | |||
are not WebRTC. | are not WebRTC. | |||
The binding between the WebRTC MediaStreams, MediaStreamTracks and | The binding between the WebRTC MediaStreams, MediaStreamTracks and | |||
the SSRC is done as specified in "Cross Session Stream Identification | the SSRC is done as specified in "Cross Session Stream Identification | |||
in the Session Description Protocol" [I-D.ietf-mmusic-msid]. This | in the Session Description Protocol" [I-D.ietf-mmusic-msid]. This | |||
document [I-D.ietf-mmusic-msid] also defines, in section 4.1, how to | document [I-D.ietf-mmusic-msid] also defines, in section 4.1, how to | |||
map unknown source packet stream SSRCs to MediaStreamTracks and | map unknown source packet stream SSRCs to MediaStreamTracks and | |||
MediaStreams. Commonly the RTP Payload Type of any incoming packets | MediaStreams. This later is relevant to handle some cases of legacy | |||
will reveal if the packet stream is a source stream or a redundancy | interop. Commonly the RTP Payload Type of any incoming packets will | |||
or dependent packet stream. The association to the correct source | reveal if the packet stream is a source stream or a redundancy or | |||
dependent packet stream. The association to the correct source | ||||
packet stream depends on the payload format in use for the packet | packet stream depends on the payload format in use for the packet | |||
stream. | 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 | |||
skipping to change at page 28, line 25 | skipping to change at page 26, line 35 | |||
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 | |||
end-point implementation perspective, and while some mention is made | end-point 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 end-point will be a simultaneous participant in one or more | A WebRTC end-point 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 end-points. In the | |||
following, we outline some ways in which WebRTC end-points can | following, some ways in which WebRTC end-points can configure and use | |||
configure and use RTP sessions. | RTP sessions is 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 sources (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 | |||
skipping to change at page 30, line 23 | skipping to change at page 28, line 32 | |||
To separate media with different purposes: An end-point might want | To separate media with different purposes: An end-point might want | |||
to send RTP packet streams that have different purposes on | to send RTP packet streams that have different purposes on | |||
different RTP sessions, to make it easy for the peer device to | different RTP sessions, to make it easy for the peer device to | |||
distinguish them. For example, some centralised multiparty | distinguish them. For example, some centralised multiparty | |||
conferencing systems display the active speaker in high | conferencing systems display the active speaker in high | |||
resolution, but show low resolution "thumbnails" of other | resolution, but show low resolution "thumbnails" of other | |||
participants. Such systems might configure the end-points to send | participants. Such systems might configure the end-points to send | |||
simulcast high- and low-resolution versions of their video using | simulcast high- and low-resolution versions of their video using | |||
separate RTP sessions, to simplify the operation of the RTP | separate RTP sessions, to simplify the operation of the RTP | |||
middlebox. In the WebRTC context this is currently possible to | middlebox. In the WebRTC context this is currently possible by | |||
accomplished by establishing multiple WebRTC MediaStreamTracks | establishing multiple WebRTC MediaStreamTracks that have the same | |||
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 31, line 22 | skipping to change at page 29, line 26 | |||
+---+ | +---+ | |||
| 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 between the | |||
relation between RTP sessions and RTCPeerConnection objects we | relation between RTP sessions and RTCPeerConnection objects it is | |||
recommend that this is implemented as several individual RTP | recommend that this is implemented as several individual RTP | |||
sessions. The only downside is that end-point A will not learn of | sessions. The only downside is that end-point A will not learn of | |||
the quality of any transmission happening between B and C, since | the quality of any transmission happening between B and C, since | |||
it will not see RTCP reports for the RTP session between B and C, | it will not see RTCP reports for the RTP session between B and C, | |||
whereas it would it all three participants were part of a single | whereas it would it all three participants were part of a single | |||
RTP session. Experience with the Mbone tools (experimental RTP- | RTP session. Experience with the Mbone tools (experimental RTP- | |||
based multicast conferencing tools from the late 1990s) has showed | based multicast conferencing tools from the late 1990s) has showed | |||
that RTCP reception quality reports for third parties can usefully | that RTCP reception quality reports for third parties can be | |||
be presented to the users in a way that helps them understand | presented to users in a way that helps them understand asymmetric | |||
asymmetric network problems, and the approach of using separate | network problems, and the approach of using separate RTP sessions | |||
RTP sessions prevents this. However, an advantage of using | prevents this. However, an advantage of using separate RTP | |||
separate RTP sessions is that it enables using different media | sessions is that it enables using different media bit-rates and | |||
bit-rates and RTP session configurations between the different | RTP session configurations between the different peers, thus not | |||
peers, thus not forcing B to endure the same quality reductions if | forcing B to endure the same quality reductions if there are | |||
there are limitations in the transport from A to C as C will. It | limitations in the transport from A to C as C will. It is | |||
it believed that these advantages outweigh the limitations in | believed that these 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 | |||
skipping to change at page 32, line 23 | skipping to change at page 30, line 26 | |||
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 | end-points 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 end-point 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 end-point. This includes functions like requesting | WebRTC end-point. This includes functions like requesting the | |||
breaking 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 gets the significant responsibility to correctly | The middlebox has the responsibility to correctly perform | |||
perform congestion control, source identification, manage | congestion control, source identification, manage synchronisation | |||
synchronisation while providing the application with suitable | while providing the application with suitable media optimisations. | |||
media optimizations. The middlebox is also has to be a trusted | The middlebox also has to be a trusted node when it comes to | |||
node when it comes to security, since it manipulates either the | security, since it manipulates either the RTP header or the media | |||
RTP header or the media itself (or both) received from one end- | itself (or both) received from one end-point, before sending it on | |||
point, before sending it on towards the end-point(s), thus they | towards the end-point(s), thus they need to be able to decrypt and | |||
need to be able to decrypt and then encrypt it before sending it | then re-encrypt the RTP packet stream before sending it out. | |||
out. | ||||
RTP Mixers can create a situation where an end-point experiences a | RTP Mixers can create a situation where an end-point experiences a | |||
situation in-between a session with only two end-points and | situation in-between a session with only two end-points 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 end-points. 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 end-point's | |||
feedback or requests goes to the mixer. When the mixer can't act | feedback or requests goes to the mixer. When the mixer can't act | |||
skipping to change at page 33, line 16 | skipping to change at page 31, line 20 | |||
challenge. In the mixer-based topologies, end-points source | challenge. In the mixer-based topologies, end-points 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 end- | |||
point. In RTP sessions where multiple end-points are directly | point. In RTP sessions where multiple end-points are directly | |||
visible to an end-point, all end-points will have knowledge about | visible to an end-point, all end-points 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 end-point 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 | end-points 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 end-point 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 | |||
skipping to change at page 33, line 49 | skipping to change at page 32, line 5 | |||
The end-point that is performing the forwarding is responsible for | The end-point 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 | end-point 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 end- | |||
point to optimize its media transcoding operation. The cost is | point 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 | |||
skipping to change at page 34, line 35 | skipping to change at page 32, line 40 | |||
retransmission and FEC. The importance of such redundant RTP packet | retransmission and FEC. The importance of such redundant RTP packet | |||
streams is dependent on the media type and codec used, in regards to | streams is dependent on the media type and codec used, in regards to | |||
how robust that codec is to packet loss. However, a default policy | how robust that codec is to packet loss. However, a default policy | |||
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 the actual mechanism to prioritize packets. This is done | second consisting of the actual mechanism to prioritize packets. | |||
according to three methods: | This is done according to three methods: | |||
DiffServ: The end-point marks a packet with a DiffServ code point to | DiffServ: The end-point 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 | |||
skipping to change at page 35, line 30 | skipping to change at page 33, line 38 | |||
and are further discussed in "DSCP and other packet markings for | and are further discussed in "DSCP and other packet markings for | |||
RTCWeb QoS" [I-D.ietf-tsvwg-rtcweb-qos]. | RTCWeb QoS" [I-D.ietf-tsvwg-rtcweb-qos]. | |||
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 default | see [I-D.ietf-tsvwg-rtcweb-qos] for further discussion. As a default | |||
policy all RTP packets related to a RTP packet stream ought to be | policy all RTP packets related to a RTP packet stream ought to be | |||
provided with the same prioritization; per-packet prioritization is | provided with the same prioritization; per-packet prioritization is | |||
outside the scope of this memo, but might be specified elsewhere in | outside the scope of this memo, but might be specified elsewhere in | |||
future. | 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 | |||
improve the timeliness and likelihood of delivery of such feedback. | improve the timeliness and likelihood of delivery of such feedback. | |||
12.2. Media Source, RTP Packet Streams, and Participant Identification | 12.2. Media Source, RTP Packet Streams, and Participant Identification | |||
12.2.1. Media Source | 12.2.1. Media Source Identification | |||
Each RTP packet stream is identified by a unique synchronisation | Each RTP packet stream is identified by a unique synchronisation | |||
source (SSRC) identifier. The SSRC identifier is carried in each of | source (SSRC) identifier. The SSRC identifier is carried in each of | |||
the RTP packets comprising a RTP packet stream, and is also used to | the RTP packets comprising a RTP packet stream, and is also used to | |||
identify that stream in the corresponding RTCP reports. The SSRC is | identify that stream in the corresponding RTCP reports. The SSRC is | |||
chosen as discussed in Section 4.8. The first stage in | chosen as discussed in Section 4.8. The first stage in | |||
demultiplexing RTP and RTCP packets received on a single transport | demultiplexing RTP and RTCP packets received on a single transport | |||
layer flow at a WebRTC end-point is to separate the RTP packet | layer flow at a WebRTC end-point is to separate the RTP packet | |||
streams based on their SSRC value; once that is done, additional | streams based on their SSRC value; once that is done, additional | |||
demultiplexing steps can determine how and where to render the media. | demultiplexing steps can determine how and where to render the media. | |||
skipping to change at page 36, line 38 | skipping to change at page 34, line 42 | |||
indicates which participants are active in the session. Changes in | indicates which participants are active in the session. Changes in | |||
the CSRC list included in packets needs to be exposed to the WebRTC | the CSRC list included in packets needs to be exposed to the WebRTC | |||
application using some API, if the application is to be able to track | application using some API, if the application is to be able to track | |||
changes in session participation. It is desirable to map CSRC values | changes in session participation. It is desirable to map CSRC values | |||
back into WebRTC MediaStream identities as they cross this API, to | back into WebRTC MediaStream identities as they cross this API, to | |||
avoid exposing the SSRC/CSRC name space to JavaScript applications. | avoid exposing the SSRC/CSRC name space to JavaScript applications. | |||
If the mixer-to-client audio level extension [RFC6465] is being used | If the mixer-to-client audio level extension [RFC6465] is being used | |||
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. | |||
This information can usefully be exposed in the user interface. | It is desirable to expose this information to the WebRTC application | |||
using some API, after mapping the CSRC values to WebRTC MediaStream | ||||
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 [RFC3550] requires any RTP implementation to have | The RTP standard requires RTP implementations to have support for | |||
support for detecting and handling SSRC collisions, i.e., resolve the | detecting and handling SSRC collisions, i.e., resolve the conflict | |||
conflict when two different end-points use the same SSRC value. This | when two different end-points use the same SSRC value (see section | |||
requirement also applies to WebRTC end-points. There are several | 8.2 of [RFC3550]). This requirement also applies to WebRTC end- | |||
scenarios where SSRC collisions can occur: | points. There are several scenarios where SSRC collisions can 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 end-points and where the main media carrying | |||
SSRC identifier will be announced in the signalling channel, a | SSRC 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 provided by Source-Specific SDP Attributes [RFC5576]. | used SSRCs. If SDP is used, this information is provided by | |||
Source-Specific SDP Attributes [RFC5576]. Still, collisions can | ||||
Still, collisions can occur if both end-points start uses an new | occur if both end-points start using a new SSRC identifier prior | |||
SSRC identifier prior to having signalled it to the peer and | to having signalled it to the peer and received acknowledgement on | |||
received acknowledgement on the signalling message. The Source- | the signalling message. The Source-Specific SDP Attributes | |||
Specific SDP Attributes [RFC5576] contains no mechanism to resolve | [RFC5576] contains a mechanism to signal how the end-point | |||
SSRC collisions or reject a end-points usage of an SSRC. | resolved 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 | end-point 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 end-points 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 end- | |||
points from the RTP middlebox collisions can occur. | points 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 end-point's RTCPeerConnection to | |||
another RTCPeerConnection from the same end-point, thus forming a | another RTCPeerConnection from the same end-point, thus forming a | |||
loop where the end-point will receive its own traffic. While is | loop where the end-point will receive its own traffic. While it | |||
is clearly considered a bug, it is important that the end-point is | is clearly considered a bug, it is important that the end-point 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, then | 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 end-point 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 | |||
skipping to change at page 38, line 25 | skipping to change at page 36, line 34 | |||
13. Security Considerations | 13. Security Considerations | |||
The overall security architecture for WebRTC is described in | The overall security architecture for WebRTC is described in | |||
[I-D.ietf-rtcweb-security-arch], and security considerations for the | [I-D.ietf-rtcweb-security-arch], and security considerations for the | |||
WebRTC framework are described in [I-D.ietf-rtcweb-security]. These | WebRTC framework are described in [I-D.ietf-rtcweb-security]. These | |||
considerations also apply to this memo. | considerations also apply to this memo. | |||
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. | |||
We do not believe there are any new security considerations resulting | It is not believed there are any new security considerations | |||
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 media | |||
security solution is created by combing this secured RTP profile and | security solution is created by combing this secured RTP profile and | |||
DTLS-SRTP keying [RFC5764] as defined by Section 5.5 of | 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 | |||
skipping to change at page 39, line 19 | skipping to change at page 37, line 28 | |||
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, Charles Eckel, Christian Groves, Cullen Jennings, Dan | Cary Bran, Ben Campbell, Charles Eckel, Alex Eleftheriadis, Christian | |||
Romascanu, Martin Thomson, and the other members of the IETF RTCWEB | Groves, Cullen Jennings, Olle Johansson, Suhas Nandakumar, Dan | |||
working group for their valuable feedback. | Romascanu, Jim Spring, Martin Thomson, and the other members of the | |||
IETF RTCWEB 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-05 (work in | ietf-avtcore-multi-media-rtp-session-05 (work in | |||
progress), February 2014. | progress), February 2014. | |||
skipping to change at page 42, line 15 | skipping to change at page 40, line 24 | |||
[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-02 (work in progress), January 2014. | multiplex-guidelines-02 (work in progress), January 2014. | |||
[I-D.ietf-avtcore-rtp-topologies-update] | [I-D.ietf-avtcore-rtp-topologies-update] | |||
Westerlund, M. and S. Wenger, "RTP Topologies", draft- | Westerlund, M. and S. Wenger, "RTP Topologies", draft- | |||
skipping to change at page 43, line 46 | skipping to change at page 41, line 46 | |||
[I-D.ietf-tsvwg-rtcweb-qos] | [I-D.ietf-tsvwg-rtcweb-qos] | |||
Dhesikan, S., Druta, D., Jones, P., and J. Polk, "DSCP and | Dhesikan, S., Druta, D., Jones, P., and J. Polk, "DSCP and | |||
other packet markings for RTCWeb QoS", draft-ietf-tsvwg- | other packet markings for RTCWeb QoS", draft-ietf-tsvwg- | |||
rtcweb-qos-00 (work in progress), April 2014. | rtcweb-qos-00 (work in progress), April 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. | |||
[RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion | ||||
Control Protocol (DCCP) Congestion Control ID 2: TCP-like | ||||
Congestion Control", RFC 4341, March 2006. | ||||
[RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for | ||||
Datagram Congestion Control Protocol (DCCP) Congestion | ||||
Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342, | ||||
March 2006. | ||||
[RFC4383] Baugher, M. and E. Carrara, "The Use of Timed Efficient | [RFC4383] Baugher, M. and E. Carrara, "The Use of Timed Efficient | |||
Stream Loss-Tolerant Authentication (TESLA) in the Secure | Stream Loss-Tolerant Authentication (TESLA) in the Secure | |||
Real-time Transport Protocol (SRTP)", RFC 4383, February | Real-time Transport Protocol (SRTP)", RFC 4383, February | |||
2006. | 2006. | |||
[RFC4828] Floyd, S. and E. Kohler, "TCP Friendly Rate Control | [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | |||
(TFRC): The Small-Packet (SP) Variant", RFC 4828, April | (ICE): A Protocol for Network Address Translator (NAT) | |||
2007. | Traversal for Offer/Answer Protocols", RFC 5245, April | |||
2010. | ||||
[RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | ||||
Friendly Rate Control (TFRC): Protocol Specification", RFC | ||||
5348, September 2008. | ||||
[RFC5576] Lennox, J., Ott, J., and T. Schierl, "Source-Specific | [RFC5576] Lennox, J., Ott, J., and T. Schierl, "Source-Specific | |||
Media Attributes in the Session Description Protocol | Media Attributes in the Session Description Protocol | |||
(SDP)", RFC 5576, June 2009. | (SDP)", RFC 5576, June 2009. | |||
[RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion | ||||
Control", RFC 5681, September 2009. | ||||
[RFC5968] Ott, J. and C. Perkins, "Guidelines for Extending the RTP | [RFC5968] Ott, J. and C. Perkins, "Guidelines for Extending the RTP | |||
Control Protocol (RTCP)", RFC 5968, September 2010. | Control Protocol (RTCP)", RFC 5968, September 2010. | |||
[RFC6263] Marjou, X. and A. Sollaud, "Application Mechanism for | [RFC6263] Marjou, X. and A. Sollaud, "Application Mechanism for | |||
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. | |||
[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: http://csperkins.org/ | |||
End of changes. 81 change blocks. | ||||
412 lines changed or deleted | 313 lines changed or added | |||
This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |