153a5a1b3Sopenharmony_ci
253a5a1b3Sopenharmony_ci
353a5a1b3Sopenharmony_ci
453a5a1b3Sopenharmony_ci
553a5a1b3Sopenharmony_ci
653a5a1b3Sopenharmony_ci
753a5a1b3Sopenharmony_ciNetwork Working Group                                     H. Schulzrinne
853a5a1b3Sopenharmony_ciRequest for Comments: 3550                           Columbia University
953a5a1b3Sopenharmony_ciObsoletes: 1889                                               S.  Casner
1053a5a1b3Sopenharmony_ciCategory: Standards Track                                  Packet Design
1153a5a1b3Sopenharmony_ci                                                            R. Frederick
1253a5a1b3Sopenharmony_ci                                                  Blue Coat Systems Inc.
1353a5a1b3Sopenharmony_ci                                                             V. Jacobson
1453a5a1b3Sopenharmony_ci                                                           Packet Design
1553a5a1b3Sopenharmony_ci                                                               July 2003
1653a5a1b3Sopenharmony_ci
1753a5a1b3Sopenharmony_ci
1853a5a1b3Sopenharmony_ci          RTP: A Transport Protocol for Real-Time Applications
1953a5a1b3Sopenharmony_ci
2053a5a1b3Sopenharmony_ciStatus of this Memo
2153a5a1b3Sopenharmony_ci
2253a5a1b3Sopenharmony_ci   This document specifies an Internet standards track protocol for the
2353a5a1b3Sopenharmony_ci   Internet community, and requests discussion and suggestions for
2453a5a1b3Sopenharmony_ci   improvements.  Please refer to the current edition of the "Internet
2553a5a1b3Sopenharmony_ci   Official Protocol Standards" (STD 1) for the standardization state
2653a5a1b3Sopenharmony_ci   and status of this protocol.  Distribution of this memo is unlimited.
2753a5a1b3Sopenharmony_ci
2853a5a1b3Sopenharmony_ciCopyright Notice
2953a5a1b3Sopenharmony_ci
3053a5a1b3Sopenharmony_ci   Copyright (C) The Internet Society (2003).  All Rights Reserved.
3153a5a1b3Sopenharmony_ci
3253a5a1b3Sopenharmony_ciAbstract
3353a5a1b3Sopenharmony_ci
3453a5a1b3Sopenharmony_ci   This memorandum describes RTP, the real-time transport protocol.  RTP
3553a5a1b3Sopenharmony_ci   provides end-to-end network transport functions suitable for
3653a5a1b3Sopenharmony_ci   applications transmitting real-time data, such as audio, video or
3753a5a1b3Sopenharmony_ci   simulation data, over multicast or unicast network services.  RTP
3853a5a1b3Sopenharmony_ci   does not address resource reservation and does not guarantee
3953a5a1b3Sopenharmony_ci   quality-of-service for real-time services.  The data transport is
4053a5a1b3Sopenharmony_ci   augmented by a control protocol (RTCP) to allow monitoring of the
4153a5a1b3Sopenharmony_ci   data delivery in a manner scalable to large multicast networks, and
4253a5a1b3Sopenharmony_ci   to provide minimal control and identification functionality.  RTP and
4353a5a1b3Sopenharmony_ci   RTCP are designed to be independent of the underlying transport and
4453a5a1b3Sopenharmony_ci   network layers.  The protocol supports the use of RTP-level
4553a5a1b3Sopenharmony_ci   translators and mixers.
4653a5a1b3Sopenharmony_ci
4753a5a1b3Sopenharmony_ci   Most of the text in this memorandum is identical to RFC 1889 which it
4853a5a1b3Sopenharmony_ci   obsoletes.  There are no changes in the packet formats on the wire,
4953a5a1b3Sopenharmony_ci   only changes to the rules and algorithms governing how the protocol
5053a5a1b3Sopenharmony_ci   is used.  The biggest change is an enhancement to the scalable timer
5153a5a1b3Sopenharmony_ci   algorithm for calculating when to send RTCP packets in order to
5253a5a1b3Sopenharmony_ci   minimize transmission in excess of the intended rate when many
5353a5a1b3Sopenharmony_ci   participants join a session simultaneously.
5453a5a1b3Sopenharmony_ci
5553a5a1b3Sopenharmony_ci
5653a5a1b3Sopenharmony_ci
5753a5a1b3Sopenharmony_ci
5853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 1]
5953a5a1b3Sopenharmony_ci
6053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
6153a5a1b3Sopenharmony_ci
6253a5a1b3Sopenharmony_ci
6353a5a1b3Sopenharmony_ciTable of Contents
6453a5a1b3Sopenharmony_ci
6553a5a1b3Sopenharmony_ci   1.  Introduction ................................................   4
6653a5a1b3Sopenharmony_ci       1.1  Terminology ............................................   5
6753a5a1b3Sopenharmony_ci   2.  RTP Use Scenarios ...........................................   5
6853a5a1b3Sopenharmony_ci       2.1  Simple Multicast Audio Conference ......................   6
6953a5a1b3Sopenharmony_ci       2.2  Audio and Video Conference .............................   7
7053a5a1b3Sopenharmony_ci       2.3  Mixers and Translators .................................   7
7153a5a1b3Sopenharmony_ci       2.4  Layered Encodings ......................................   8
7253a5a1b3Sopenharmony_ci   3.  Definitions .................................................   8
7353a5a1b3Sopenharmony_ci   4.  Byte Order, Alignment, and Time Format ......................  12
7453a5a1b3Sopenharmony_ci   5.  RTP Data Transfer Protocol ..................................  13
7553a5a1b3Sopenharmony_ci       5.1  RTP Fixed Header Fields ................................  13
7653a5a1b3Sopenharmony_ci       5.2  Multiplexing RTP Sessions ..............................  16
7753a5a1b3Sopenharmony_ci       5.3  Profile-Specific Modifications to the RTP Header .......  18
7853a5a1b3Sopenharmony_ci            5.3.1  RTP Header Extension ............................  18
7953a5a1b3Sopenharmony_ci   6.  RTP Control Protocol -- RTCP ................................  19
8053a5a1b3Sopenharmony_ci       6.1  RTCP Packet Format .....................................  21
8153a5a1b3Sopenharmony_ci       6.2  RTCP Transmission Interval .............................  24
8253a5a1b3Sopenharmony_ci            6.2.1  Maintaining the Number of Session Members .......  28
8353a5a1b3Sopenharmony_ci       6.3  RTCP Packet Send and Receive Rules .....................  28
8453a5a1b3Sopenharmony_ci            6.3.1  Computing the RTCP Transmission Interval ........  29
8553a5a1b3Sopenharmony_ci            6.3.2  Initialization ..................................  30
8653a5a1b3Sopenharmony_ci            6.3.3  Receiving an RTP or Non-BYE RTCP Packet .........  31
8753a5a1b3Sopenharmony_ci            6.3.4  Receiving an RTCP BYE Packet ....................  31
8853a5a1b3Sopenharmony_ci            6.3.5  Timing Out an SSRC ..............................  32
8953a5a1b3Sopenharmony_ci            6.3.6  Expiration of Transmission Timer ................  32
9053a5a1b3Sopenharmony_ci            6.3.7  Transmitting a BYE Packet .......................  33
9153a5a1b3Sopenharmony_ci            6.3.8  Updating we_sent ................................  34
9253a5a1b3Sopenharmony_ci            6.3.9  Allocation of Source Description Bandwidth ......  34
9353a5a1b3Sopenharmony_ci       6.4  Sender and Receiver Reports ............................  35
9453a5a1b3Sopenharmony_ci            6.4.1  SR: Sender Report RTCP Packet ...................  36
9553a5a1b3Sopenharmony_ci            6.4.2  RR: Receiver Report RTCP Packet .................  42
9653a5a1b3Sopenharmony_ci            6.4.3  Extending the Sender and Receiver Reports .......  42
9753a5a1b3Sopenharmony_ci            6.4.4  Analyzing Sender and Receiver Reports ...........  43
9853a5a1b3Sopenharmony_ci       6.5  SDES: Source Description RTCP Packet ...................  45
9953a5a1b3Sopenharmony_ci            6.5.1  CNAME: Canonical End-Point Identifier SDES Item .  46
10053a5a1b3Sopenharmony_ci            6.5.2  NAME: User Name SDES Item .......................  48
10153a5a1b3Sopenharmony_ci            6.5.3  EMAIL: Electronic Mail Address SDES Item ........  48
10253a5a1b3Sopenharmony_ci            6.5.4  PHONE: Phone Number SDES Item ...................  49
10353a5a1b3Sopenharmony_ci            6.5.5  LOC: Geographic User Location SDES Item .........  49
10453a5a1b3Sopenharmony_ci            6.5.6  TOOL: Application or Tool Name SDES Item ........  49
10553a5a1b3Sopenharmony_ci            6.5.7  NOTE: Notice/Status SDES Item ...................  50
10653a5a1b3Sopenharmony_ci            6.5.8  PRIV: Private Extensions SDES Item ..............  50
10753a5a1b3Sopenharmony_ci       6.6  BYE: Goodbye RTCP Packet ...............................  51
10853a5a1b3Sopenharmony_ci       6.7  APP: Application-Defined RTCP Packet ...................  52
10953a5a1b3Sopenharmony_ci   7.  RTP Translators and Mixers ..................................  53
11053a5a1b3Sopenharmony_ci       7.1  General Description ....................................  53
11153a5a1b3Sopenharmony_ci
11253a5a1b3Sopenharmony_ci
11353a5a1b3Sopenharmony_ci
11453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 2]
11553a5a1b3Sopenharmony_ci
11653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
11753a5a1b3Sopenharmony_ci
11853a5a1b3Sopenharmony_ci
11953a5a1b3Sopenharmony_ci       7.2  RTCP Processing in Translators .........................  55
12053a5a1b3Sopenharmony_ci       7.3  RTCP Processing in Mixers ..............................  57
12153a5a1b3Sopenharmony_ci       7.4  Cascaded Mixers ........................................  58
12253a5a1b3Sopenharmony_ci   8.  SSRC Identifier Allocation and Use ..........................  59
12353a5a1b3Sopenharmony_ci       8.1  Probability of Collision ...............................  59
12453a5a1b3Sopenharmony_ci       8.2  Collision Resolution and Loop Detection ................  60
12553a5a1b3Sopenharmony_ci       8.3  Use with Layered Encodings .............................  64
12653a5a1b3Sopenharmony_ci   9.  Security ....................................................  65
12753a5a1b3Sopenharmony_ci       9.1  Confidentiality ........................................  65
12853a5a1b3Sopenharmony_ci       9.2  Authentication and Message Integrity ...................  67
12953a5a1b3Sopenharmony_ci   10. Congestion Control ..........................................  67
13053a5a1b3Sopenharmony_ci   11. RTP over Network and Transport Protocols ....................  68
13153a5a1b3Sopenharmony_ci   12. Summary of Protocol Constants ...............................  69
13253a5a1b3Sopenharmony_ci       12.1 RTCP Packet Types ......................................  70
13353a5a1b3Sopenharmony_ci       12.2 SDES Types .............................................  70
13453a5a1b3Sopenharmony_ci   13. RTP Profiles and Payload Format Specifications ..............  71
13553a5a1b3Sopenharmony_ci   14. Security Considerations .....................................  73
13653a5a1b3Sopenharmony_ci   15. IANA Considerations .........................................  73
13753a5a1b3Sopenharmony_ci   16. Intellectual Property Rights Statement ......................  74
13853a5a1b3Sopenharmony_ci   17. Acknowledgments .............................................  74
13953a5a1b3Sopenharmony_ci   Appendix A.   Algorithms ........................................  75
14053a5a1b3Sopenharmony_ci   Appendix A.1  RTP Data Header Validity Checks ...................  78
14153a5a1b3Sopenharmony_ci   Appendix A.2  RTCP Header Validity Checks .......................  82
14253a5a1b3Sopenharmony_ci   Appendix A.3  Determining Number of Packets Expected and Lost ...  83
14353a5a1b3Sopenharmony_ci   Appendix A.4  Generating RTCP SDES Packets ......................  84
14453a5a1b3Sopenharmony_ci   Appendix A.5  Parsing RTCP SDES Packets .........................  85
14553a5a1b3Sopenharmony_ci   Appendix A.6  Generating a Random 32-bit Identifier .............  85
14653a5a1b3Sopenharmony_ci   Appendix A.7  Computing the RTCP Transmission Interval ..........  87
14753a5a1b3Sopenharmony_ci   Appendix A.8  Estimating the Interarrival Jitter ................  94
14853a5a1b3Sopenharmony_ci   Appendix B.   Changes from RFC 1889 .............................  95
14953a5a1b3Sopenharmony_ci   References ...................................................... 100
15053a5a1b3Sopenharmony_ci   Normative References ............................................ 100
15153a5a1b3Sopenharmony_ci   Informative References .......................................... 100
15253a5a1b3Sopenharmony_ci   Authors' Addresses .............................................. 103
15353a5a1b3Sopenharmony_ci   Full Copyright Statement ........................................ 104
15453a5a1b3Sopenharmony_ci
15553a5a1b3Sopenharmony_ci
15653a5a1b3Sopenharmony_ci
15753a5a1b3Sopenharmony_ci
15853a5a1b3Sopenharmony_ci
15953a5a1b3Sopenharmony_ci
16053a5a1b3Sopenharmony_ci
16153a5a1b3Sopenharmony_ci
16253a5a1b3Sopenharmony_ci
16353a5a1b3Sopenharmony_ci
16453a5a1b3Sopenharmony_ci
16553a5a1b3Sopenharmony_ci
16653a5a1b3Sopenharmony_ci
16753a5a1b3Sopenharmony_ci
16853a5a1b3Sopenharmony_ci
16953a5a1b3Sopenharmony_ci
17053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 3]
17153a5a1b3Sopenharmony_ci
17253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
17353a5a1b3Sopenharmony_ci
17453a5a1b3Sopenharmony_ci
17553a5a1b3Sopenharmony_ci1. Introduction
17653a5a1b3Sopenharmony_ci
17753a5a1b3Sopenharmony_ci   This memorandum specifies the real-time transport protocol (RTP),
17853a5a1b3Sopenharmony_ci   which provides end-to-end delivery services for data with real-time
17953a5a1b3Sopenharmony_ci   characteristics, such as interactive audio and video.  Those services
18053a5a1b3Sopenharmony_ci   include payload type identification, sequence numbering, timestamping
18153a5a1b3Sopenharmony_ci   and delivery monitoring.  Applications typically run RTP on top of
18253a5a1b3Sopenharmony_ci   UDP to make use of its multiplexing and checksum services; both
18353a5a1b3Sopenharmony_ci   protocols contribute parts of the transport protocol functionality.
18453a5a1b3Sopenharmony_ci   However, RTP may be used with other suitable underlying network or
18553a5a1b3Sopenharmony_ci   transport protocols (see Section 11).  RTP supports data transfer to
18653a5a1b3Sopenharmony_ci   multiple destinations using multicast distribution if provided by the
18753a5a1b3Sopenharmony_ci   underlying network.
18853a5a1b3Sopenharmony_ci
18953a5a1b3Sopenharmony_ci   Note that RTP itself does not provide any mechanism to ensure timely
19053a5a1b3Sopenharmony_ci   delivery or provide other quality-of-service guarantees, but relies
19153a5a1b3Sopenharmony_ci   on lower-layer services to do so.  It does not guarantee delivery or
19253a5a1b3Sopenharmony_ci   prevent out-of-order delivery, nor does it assume that the underlying
19353a5a1b3Sopenharmony_ci   network is reliable and delivers packets in sequence.  The sequence
19453a5a1b3Sopenharmony_ci   numbers included in RTP allow the receiver to reconstruct the
19553a5a1b3Sopenharmony_ci   sender's packet sequence, but sequence numbers might also be used to
19653a5a1b3Sopenharmony_ci   determine the proper location of a packet, for example in video
19753a5a1b3Sopenharmony_ci   decoding, without necessarily decoding packets in sequence.
19853a5a1b3Sopenharmony_ci
19953a5a1b3Sopenharmony_ci   While RTP is primarily designed to satisfy the needs of multi-
20053a5a1b3Sopenharmony_ci   participant multimedia conferences, it is not limited to that
20153a5a1b3Sopenharmony_ci   particular application.  Storage of continuous data, interactive
20253a5a1b3Sopenharmony_ci   distributed simulation, active badge, and control and measurement
20353a5a1b3Sopenharmony_ci   applications may also find RTP applicable.
20453a5a1b3Sopenharmony_ci
20553a5a1b3Sopenharmony_ci   This document defines RTP, consisting of two closely-linked parts:
20653a5a1b3Sopenharmony_ci
20753a5a1b3Sopenharmony_ci   o  the real-time transport protocol (RTP), to carry data that has
20853a5a1b3Sopenharmony_ci      real-time properties.
20953a5a1b3Sopenharmony_ci
21053a5a1b3Sopenharmony_ci   o  the RTP control protocol (RTCP), to monitor the quality of service
21153a5a1b3Sopenharmony_ci      and to convey information about the participants in an on-going
21253a5a1b3Sopenharmony_ci      session.  The latter aspect of RTCP may be sufficient for "loosely
21353a5a1b3Sopenharmony_ci      controlled" sessions, i.e., where there is no explicit membership
21453a5a1b3Sopenharmony_ci      control and set-up, but it is not necessarily intended to support
21553a5a1b3Sopenharmony_ci      all of an application's control communication requirements.  This
21653a5a1b3Sopenharmony_ci      functionality may be fully or partially subsumed by a separate
21753a5a1b3Sopenharmony_ci      session control protocol, which is beyond the scope of this
21853a5a1b3Sopenharmony_ci      document.
21953a5a1b3Sopenharmony_ci
22053a5a1b3Sopenharmony_ci   RTP represents a new style of protocol following the principles of
22153a5a1b3Sopenharmony_ci   application level framing and integrated layer processing proposed by
22253a5a1b3Sopenharmony_ci   Clark and Tennenhouse [10].  That is, RTP is intended to be malleable
22353a5a1b3Sopenharmony_ci
22453a5a1b3Sopenharmony_ci
22553a5a1b3Sopenharmony_ci
22653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 4]
22753a5a1b3Sopenharmony_ci
22853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
22953a5a1b3Sopenharmony_ci
23053a5a1b3Sopenharmony_ci
23153a5a1b3Sopenharmony_ci   to provide the information required by a particular application and
23253a5a1b3Sopenharmony_ci   will often be integrated into the application processing rather than
23353a5a1b3Sopenharmony_ci   being implemented as a separate layer.  RTP is a protocol framework
23453a5a1b3Sopenharmony_ci   that is deliberately not complete.  This document specifies those
23553a5a1b3Sopenharmony_ci   functions expected to be common across all the applications for which
23653a5a1b3Sopenharmony_ci   RTP would be appropriate.  Unlike conventional protocols in which
23753a5a1b3Sopenharmony_ci   additional functions might be accommodated by making the protocol
23853a5a1b3Sopenharmony_ci   more general or by adding an option mechanism that would require
23953a5a1b3Sopenharmony_ci   parsing, RTP is intended to be tailored through modifications and/or
24053a5a1b3Sopenharmony_ci   additions to the headers as needed.  Examples are given in Sections
24153a5a1b3Sopenharmony_ci   5.3 and 6.4.3.
24253a5a1b3Sopenharmony_ci
24353a5a1b3Sopenharmony_ci   Therefore, in addition to this document, a complete specification of
24453a5a1b3Sopenharmony_ci   RTP for a particular application will require one or more companion
24553a5a1b3Sopenharmony_ci   documents (see Section 13):
24653a5a1b3Sopenharmony_ci
24753a5a1b3Sopenharmony_ci   o  a profile specification document, which defines a set of payload
24853a5a1b3Sopenharmony_ci      type codes and their mapping to payload formats (e.g., media
24953a5a1b3Sopenharmony_ci      encodings).  A profile may also define extensions or modifications
25053a5a1b3Sopenharmony_ci      to RTP that are specific to a particular class of applications.
25153a5a1b3Sopenharmony_ci      Typically an application will operate under only one profile.  A
25253a5a1b3Sopenharmony_ci      profile for audio and video data may be found in the companion RFC
25353a5a1b3Sopenharmony_ci      3551 [1].
25453a5a1b3Sopenharmony_ci
25553a5a1b3Sopenharmony_ci   o  payload format specification documents, which define how a
25653a5a1b3Sopenharmony_ci      particular payload, such as an audio or video encoding, is to be
25753a5a1b3Sopenharmony_ci      carried in RTP.
25853a5a1b3Sopenharmony_ci
25953a5a1b3Sopenharmony_ci   A discussion of real-time services and algorithms for their
26053a5a1b3Sopenharmony_ci   implementation as well as background discussion on some of the RTP
26153a5a1b3Sopenharmony_ci   design decisions can be found in [11].
26253a5a1b3Sopenharmony_ci
26353a5a1b3Sopenharmony_ci1.1 Terminology
26453a5a1b3Sopenharmony_ci
26553a5a1b3Sopenharmony_ci   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
26653a5a1b3Sopenharmony_ci   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
26753a5a1b3Sopenharmony_ci   document are to be interpreted as described in BCP 14, RFC 2119 [2]
26853a5a1b3Sopenharmony_ci   and indicate requirement levels for compliant RTP implementations.
26953a5a1b3Sopenharmony_ci
27053a5a1b3Sopenharmony_ci2. RTP Use Scenarios
27153a5a1b3Sopenharmony_ci
27253a5a1b3Sopenharmony_ci   The following sections describe some aspects of the use of RTP.  The
27353a5a1b3Sopenharmony_ci   examples were chosen to illustrate the basic operation of
27453a5a1b3Sopenharmony_ci   applications using RTP, not to limit what RTP may be used for.  In
27553a5a1b3Sopenharmony_ci   these examples, RTP is carried on top of IP and UDP, and follows the
27653a5a1b3Sopenharmony_ci   conventions established by the profile for audio and video specified
27753a5a1b3Sopenharmony_ci   in the companion RFC 3551.
27853a5a1b3Sopenharmony_ci
27953a5a1b3Sopenharmony_ci
28053a5a1b3Sopenharmony_ci
28153a5a1b3Sopenharmony_ci
28253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 5]
28353a5a1b3Sopenharmony_ci
28453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
28553a5a1b3Sopenharmony_ci
28653a5a1b3Sopenharmony_ci
28753a5a1b3Sopenharmony_ci2.1 Simple Multicast Audio Conference
28853a5a1b3Sopenharmony_ci
28953a5a1b3Sopenharmony_ci   A working group of the IETF meets to discuss the latest protocol
29053a5a1b3Sopenharmony_ci   document, using the IP multicast services of the Internet for voice
29153a5a1b3Sopenharmony_ci   communications.  Through some allocation mechanism the working group
29253a5a1b3Sopenharmony_ci   chair obtains a multicast group address and pair of ports.  One port
29353a5a1b3Sopenharmony_ci   is used for audio data, and the other is used for control (RTCP)
29453a5a1b3Sopenharmony_ci   packets.  This address and port information is distributed to the
29553a5a1b3Sopenharmony_ci   intended participants.  If privacy is desired, the data and control
29653a5a1b3Sopenharmony_ci   packets may be encrypted as specified in Section 9.1, in which case
29753a5a1b3Sopenharmony_ci   an encryption key must also be generated and distributed.  The exact
29853a5a1b3Sopenharmony_ci   details of these allocation and distribution mechanisms are beyond
29953a5a1b3Sopenharmony_ci   the scope of RTP.
30053a5a1b3Sopenharmony_ci
30153a5a1b3Sopenharmony_ci   The audio conferencing application used by each conference
30253a5a1b3Sopenharmony_ci   participant sends audio data in small chunks of, say, 20 ms duration.
30353a5a1b3Sopenharmony_ci   Each chunk of audio data is preceded by an RTP header; RTP header and
30453a5a1b3Sopenharmony_ci   data are in turn contained in a UDP packet.  The RTP header indicates
30553a5a1b3Sopenharmony_ci   what type of audio encoding (such as PCM, ADPCM or LPC) is contained
30653a5a1b3Sopenharmony_ci   in each packet so that senders can change the encoding during a
30753a5a1b3Sopenharmony_ci   conference, for example, to accommodate a new participant that is
30853a5a1b3Sopenharmony_ci   connected through a low-bandwidth link or react to indications of
30953a5a1b3Sopenharmony_ci   network congestion.
31053a5a1b3Sopenharmony_ci
31153a5a1b3Sopenharmony_ci   The Internet, like other packet networks, occasionally loses and
31253a5a1b3Sopenharmony_ci   reorders packets and delays them by variable amounts of time.  To
31353a5a1b3Sopenharmony_ci   cope with these impairments, the RTP header contains timing
31453a5a1b3Sopenharmony_ci   information and a sequence number that allow the receivers to
31553a5a1b3Sopenharmony_ci   reconstruct the timing produced by the source, so that in this
31653a5a1b3Sopenharmony_ci   example, chunks of audio are contiguously played out the speaker
31753a5a1b3Sopenharmony_ci   every 20 ms.  This timing reconstruction is performed separately for
31853a5a1b3Sopenharmony_ci   each source of RTP packets in the conference.  The sequence number
31953a5a1b3Sopenharmony_ci   can also be used by the receiver to estimate how many packets are
32053a5a1b3Sopenharmony_ci   being lost.
32153a5a1b3Sopenharmony_ci
32253a5a1b3Sopenharmony_ci   Since members of the working group join and leave during the
32353a5a1b3Sopenharmony_ci   conference, it is useful to know who is participating at any moment
32453a5a1b3Sopenharmony_ci   and how well they are receiving the audio data.  For that purpose,
32553a5a1b3Sopenharmony_ci   each instance of the audio application in the conference periodically
32653a5a1b3Sopenharmony_ci   multicasts a reception report plus the name of its user on the RTCP
32753a5a1b3Sopenharmony_ci   (control) port.  The reception report indicates how well the current
32853a5a1b3Sopenharmony_ci   speaker is being received and may be used to control adaptive
32953a5a1b3Sopenharmony_ci   encodings.  In addition to the user name, other identifying
33053a5a1b3Sopenharmony_ci   information may also be included subject to control bandwidth limits.
33153a5a1b3Sopenharmony_ci   A site sends the RTCP BYE packet (Section 6.6) when it leaves the
33253a5a1b3Sopenharmony_ci   conference.
33353a5a1b3Sopenharmony_ci
33453a5a1b3Sopenharmony_ci
33553a5a1b3Sopenharmony_ci
33653a5a1b3Sopenharmony_ci
33753a5a1b3Sopenharmony_ci
33853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 6]
33953a5a1b3Sopenharmony_ci
34053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
34153a5a1b3Sopenharmony_ci
34253a5a1b3Sopenharmony_ci
34353a5a1b3Sopenharmony_ci2.2 Audio and Video Conference
34453a5a1b3Sopenharmony_ci
34553a5a1b3Sopenharmony_ci   If both audio and video media are used in a conference, they are
34653a5a1b3Sopenharmony_ci   transmitted as separate RTP sessions.  That is, separate RTP and RTCP
34753a5a1b3Sopenharmony_ci   packets are transmitted for each medium using two different UDP port
34853a5a1b3Sopenharmony_ci   pairs and/or multicast addresses.  There is no direct coupling at the
34953a5a1b3Sopenharmony_ci   RTP level between the audio and video sessions, except that a user
35053a5a1b3Sopenharmony_ci   participating in both sessions should use the same distinguished
35153a5a1b3Sopenharmony_ci   (canonical) name in the RTCP packets for both so that the sessions
35253a5a1b3Sopenharmony_ci   can be associated.
35353a5a1b3Sopenharmony_ci
35453a5a1b3Sopenharmony_ci   One motivation for this separation is to allow some participants in
35553a5a1b3Sopenharmony_ci   the conference to receive only one medium if they choose.  Further
35653a5a1b3Sopenharmony_ci   explanation is given in Section 5.2.  Despite the separation,
35753a5a1b3Sopenharmony_ci   synchronized playback of a source's audio and video can be achieved
35853a5a1b3Sopenharmony_ci   using timing information carried in the RTCP packets for both
35953a5a1b3Sopenharmony_ci   sessions.
36053a5a1b3Sopenharmony_ci
36153a5a1b3Sopenharmony_ci2.3 Mixers and Translators
36253a5a1b3Sopenharmony_ci
36353a5a1b3Sopenharmony_ci   So far, we have assumed that all sites want to receive media data in
36453a5a1b3Sopenharmony_ci   the same format.  However, this may not always be appropriate.
36553a5a1b3Sopenharmony_ci   Consider the case where participants in one area are connected
36653a5a1b3Sopenharmony_ci   through a low-speed link to the majority of the conference
36753a5a1b3Sopenharmony_ci   participants who enjoy high-speed network access.  Instead of forcing
36853a5a1b3Sopenharmony_ci   everyone to use a lower-bandwidth, reduced-quality audio encoding, an
36953a5a1b3Sopenharmony_ci   RTP-level relay called a mixer may be placed near the low-bandwidth
37053a5a1b3Sopenharmony_ci   area.  This mixer resynchronizes incoming audio packets to
37153a5a1b3Sopenharmony_ci   reconstruct the constant 20 ms spacing generated by the sender, mixes
37253a5a1b3Sopenharmony_ci   these reconstructed audio streams into a single stream, translates
37353a5a1b3Sopenharmony_ci   the audio encoding to a lower-bandwidth one and forwards the lower-
37453a5a1b3Sopenharmony_ci   bandwidth packet stream across the low-speed link.  These packets
37553a5a1b3Sopenharmony_ci   might be unicast to a single recipient or multicast on a different
37653a5a1b3Sopenharmony_ci   address to multiple recipients.  The RTP header includes a means for
37753a5a1b3Sopenharmony_ci   mixers to identify the sources that contributed to a mixed packet so
37853a5a1b3Sopenharmony_ci   that correct talker indication can be provided at the receivers.
37953a5a1b3Sopenharmony_ci
38053a5a1b3Sopenharmony_ci   Some of the intended participants in the audio conference may be
38153a5a1b3Sopenharmony_ci   connected with high bandwidth links but might not be directly
38253a5a1b3Sopenharmony_ci   reachable via IP multicast.  For example, they might be behind an
38353a5a1b3Sopenharmony_ci   application-level firewall that will not let any IP packets pass.
38453a5a1b3Sopenharmony_ci   For these sites, mixing may not be necessary, in which case another
38553a5a1b3Sopenharmony_ci   type of RTP-level relay called a translator may be used.  Two
38653a5a1b3Sopenharmony_ci   translators are installed, one on either side of the firewall, with
38753a5a1b3Sopenharmony_ci   the outside one funneling all multicast packets received through a
38853a5a1b3Sopenharmony_ci   secure connection to the translator inside the firewall.  The
38953a5a1b3Sopenharmony_ci   translator inside the firewall sends them again as multicast packets
39053a5a1b3Sopenharmony_ci   to a multicast group restricted to the site's internal network.
39153a5a1b3Sopenharmony_ci
39253a5a1b3Sopenharmony_ci
39353a5a1b3Sopenharmony_ci
39453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 7]
39553a5a1b3Sopenharmony_ci
39653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
39753a5a1b3Sopenharmony_ci
39853a5a1b3Sopenharmony_ci
39953a5a1b3Sopenharmony_ci   Mixers and translators may be designed for a variety of purposes.  An
40053a5a1b3Sopenharmony_ci   example is a video mixer that scales the images of individual people
40153a5a1b3Sopenharmony_ci   in separate video streams and composites them into one video stream
40253a5a1b3Sopenharmony_ci   to simulate a group scene.  Other examples of translation include the
40353a5a1b3Sopenharmony_ci   connection of a group of hosts speaking only IP/UDP to a group of
40453a5a1b3Sopenharmony_ci   hosts that understand only ST-II, or the packet-by-packet encoding
40553a5a1b3Sopenharmony_ci   translation of video streams from individual sources without
40653a5a1b3Sopenharmony_ci   resynchronization or mixing.  Details of the operation of mixers and
40753a5a1b3Sopenharmony_ci   translators are given in Section 7.
40853a5a1b3Sopenharmony_ci
40953a5a1b3Sopenharmony_ci2.4 Layered Encodings
41053a5a1b3Sopenharmony_ci
41153a5a1b3Sopenharmony_ci   Multimedia applications should be able to adjust the transmission
41253a5a1b3Sopenharmony_ci   rate to match the capacity of the receiver or to adapt to network
41353a5a1b3Sopenharmony_ci   congestion.  Many implementations place the responsibility of rate-
41453a5a1b3Sopenharmony_ci   adaptivity at the source.  This does not work well with multicast
41553a5a1b3Sopenharmony_ci   transmission because of the conflicting bandwidth requirements of
41653a5a1b3Sopenharmony_ci   heterogeneous receivers.  The result is often a least-common
41753a5a1b3Sopenharmony_ci   denominator scenario, where the smallest pipe in the network mesh
41853a5a1b3Sopenharmony_ci   dictates the quality and fidelity of the overall live multimedia
41953a5a1b3Sopenharmony_ci   "broadcast".
42053a5a1b3Sopenharmony_ci
42153a5a1b3Sopenharmony_ci   Instead, responsibility for rate-adaptation can be placed at the
42253a5a1b3Sopenharmony_ci   receivers by combining a layered encoding with a layered transmission
42353a5a1b3Sopenharmony_ci   system.  In the context of RTP over IP multicast, the source can
42453a5a1b3Sopenharmony_ci   stripe the progressive layers of a hierarchically represented signal
42553a5a1b3Sopenharmony_ci   across multiple RTP sessions each carried on its own multicast group.
42653a5a1b3Sopenharmony_ci   Receivers can then adapt to network heterogeneity and control their
42753a5a1b3Sopenharmony_ci   reception bandwidth by joining only the appropriate subset of the
42853a5a1b3Sopenharmony_ci   multicast groups.
42953a5a1b3Sopenharmony_ci
43053a5a1b3Sopenharmony_ci   Details of the use of RTP with layered encodings are given in
43153a5a1b3Sopenharmony_ci   Sections 6.3.9, 8.3 and 11.
43253a5a1b3Sopenharmony_ci
43353a5a1b3Sopenharmony_ci3. Definitions
43453a5a1b3Sopenharmony_ci
43553a5a1b3Sopenharmony_ci   RTP payload: The data transported by RTP in a packet, for
43653a5a1b3Sopenharmony_ci      example audio samples or compressed video data.  The payload
43753a5a1b3Sopenharmony_ci      format and interpretation are beyond the scope of this document.
43853a5a1b3Sopenharmony_ci
43953a5a1b3Sopenharmony_ci   RTP packet: A data packet consisting of the fixed RTP header, a
44053a5a1b3Sopenharmony_ci      possibly empty list of contributing sources (see below), and the
44153a5a1b3Sopenharmony_ci      payload data.  Some underlying protocols may require an
44253a5a1b3Sopenharmony_ci      encapsulation of the RTP packet to be defined.  Typically one
44353a5a1b3Sopenharmony_ci      packet of the underlying protocol contains a single RTP packet,
44453a5a1b3Sopenharmony_ci      but several RTP packets MAY be contained if permitted by the
44553a5a1b3Sopenharmony_ci      encapsulation method (see Section 11).
44653a5a1b3Sopenharmony_ci
44753a5a1b3Sopenharmony_ci
44853a5a1b3Sopenharmony_ci
44953a5a1b3Sopenharmony_ci
45053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 8]
45153a5a1b3Sopenharmony_ci
45253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
45353a5a1b3Sopenharmony_ci
45453a5a1b3Sopenharmony_ci
45553a5a1b3Sopenharmony_ci   RTCP packet: A control packet consisting of a fixed header part
45653a5a1b3Sopenharmony_ci      similar to that of RTP data packets, followed by structured
45753a5a1b3Sopenharmony_ci      elements that vary depending upon the RTCP packet type.  The
45853a5a1b3Sopenharmony_ci      formats are defined in Section 6.  Typically, multiple RTCP
45953a5a1b3Sopenharmony_ci      packets are sent together as a compound RTCP packet in a single
46053a5a1b3Sopenharmony_ci      packet of the underlying protocol; this is enabled by the length
46153a5a1b3Sopenharmony_ci      field in the fixed header of each RTCP packet.
46253a5a1b3Sopenharmony_ci
46353a5a1b3Sopenharmony_ci   Port: The "abstraction that transport protocols use to
46453a5a1b3Sopenharmony_ci      distinguish among multiple destinations within a given host
46553a5a1b3Sopenharmony_ci      computer.  TCP/IP protocols identify ports using small positive
46653a5a1b3Sopenharmony_ci      integers." [12] The transport selectors (TSEL) used by the OSI
46753a5a1b3Sopenharmony_ci      transport layer are equivalent to ports.  RTP depends upon the
46853a5a1b3Sopenharmony_ci      lower-layer protocol to provide some mechanism such as ports to
46953a5a1b3Sopenharmony_ci      multiplex the RTP and RTCP packets of a session.
47053a5a1b3Sopenharmony_ci
47153a5a1b3Sopenharmony_ci   Transport address: The combination of a network address and port
47253a5a1b3Sopenharmony_ci      that identifies a transport-level endpoint, for example an IP
47353a5a1b3Sopenharmony_ci      address and a UDP port.  Packets are transmitted from a source
47453a5a1b3Sopenharmony_ci      transport address to a destination transport address.
47553a5a1b3Sopenharmony_ci
47653a5a1b3Sopenharmony_ci   RTP media type: An RTP media type is the collection of payload
47753a5a1b3Sopenharmony_ci      types which can be carried within a single RTP session.  The RTP
47853a5a1b3Sopenharmony_ci      Profile assigns RTP media types to RTP payload types.
47953a5a1b3Sopenharmony_ci
48053a5a1b3Sopenharmony_ci   Multimedia session: A set of concurrent RTP sessions among a
48153a5a1b3Sopenharmony_ci      common group of participants.  For example, a videoconference
48253a5a1b3Sopenharmony_ci      (which is a multimedia session) may contain an audio RTP session
48353a5a1b3Sopenharmony_ci      and a video RTP session.
48453a5a1b3Sopenharmony_ci
48553a5a1b3Sopenharmony_ci   RTP session: An association among a set of participants
48653a5a1b3Sopenharmony_ci      communicating with RTP.  A participant may be involved in multiple
48753a5a1b3Sopenharmony_ci      RTP sessions at the same time.  In a multimedia session, each
48853a5a1b3Sopenharmony_ci      medium is typically carried in a separate RTP session with its own
48953a5a1b3Sopenharmony_ci      RTCP packets unless the the encoding itself multiplexes multiple
49053a5a1b3Sopenharmony_ci      media into a single data stream.  A participant distinguishes
49153a5a1b3Sopenharmony_ci      multiple RTP sessions by reception of different sessions using
49253a5a1b3Sopenharmony_ci      different pairs of destination transport addresses, where a pair
49353a5a1b3Sopenharmony_ci      of transport addresses comprises one network address plus a pair
49453a5a1b3Sopenharmony_ci      of ports for RTP and RTCP.  All participants in an RTP session may
49553a5a1b3Sopenharmony_ci      share a common destination transport address pair, as in the case
49653a5a1b3Sopenharmony_ci      of IP multicast, or the pairs may be different for each
49753a5a1b3Sopenharmony_ci      participant, as in the case of individual unicast network
49853a5a1b3Sopenharmony_ci      addresses and port pairs.  In the unicast case, a participant may
49953a5a1b3Sopenharmony_ci      receive from all other participants in the session using the same
50053a5a1b3Sopenharmony_ci      pair of ports, or may use a distinct pair of ports for each.
50153a5a1b3Sopenharmony_ci
50253a5a1b3Sopenharmony_ci
50353a5a1b3Sopenharmony_ci
50453a5a1b3Sopenharmony_ci
50553a5a1b3Sopenharmony_ci
50653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                     [Page 9]
50753a5a1b3Sopenharmony_ci
50853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
50953a5a1b3Sopenharmony_ci
51053a5a1b3Sopenharmony_ci
51153a5a1b3Sopenharmony_ci      The distinguishing feature of an RTP session is that each
51253a5a1b3Sopenharmony_ci      maintains a full, separate space of SSRC identifiers (defined
51353a5a1b3Sopenharmony_ci      next).  The set of participants included in one RTP session
51453a5a1b3Sopenharmony_ci      consists of those that can receive an SSRC identifier transmitted
51553a5a1b3Sopenharmony_ci      by any one of the participants either in RTP as the SSRC or a CSRC
51653a5a1b3Sopenharmony_ci      (also defined below) or in RTCP.  For example, consider a three-
51753a5a1b3Sopenharmony_ci      party conference implemented using unicast UDP with each
51853a5a1b3Sopenharmony_ci      participant receiving from the other two on separate port pairs.
51953a5a1b3Sopenharmony_ci      If each participant sends RTCP feedback about data received from
52053a5a1b3Sopenharmony_ci      one other participant only back to that participant, then the
52153a5a1b3Sopenharmony_ci      conference is composed of three separate point-to-point RTP
52253a5a1b3Sopenharmony_ci      sessions.  If each participant provides RTCP feedback about its
52353a5a1b3Sopenharmony_ci      reception of one other participant to both of the other
52453a5a1b3Sopenharmony_ci      participants, then the conference is composed of one multi-party
52553a5a1b3Sopenharmony_ci      RTP session.  The latter case simulates the behavior that would
52653a5a1b3Sopenharmony_ci      occur with IP multicast communication among the three
52753a5a1b3Sopenharmony_ci      participants.
52853a5a1b3Sopenharmony_ci
52953a5a1b3Sopenharmony_ci      The RTP framework allows the variations defined here, but a
53053a5a1b3Sopenharmony_ci      particular control protocol or application design will usually
53153a5a1b3Sopenharmony_ci      impose constraints on these variations.
53253a5a1b3Sopenharmony_ci
53353a5a1b3Sopenharmony_ci   Synchronization source (SSRC): The source of a stream of RTP
53453a5a1b3Sopenharmony_ci      packets, identified by a 32-bit numeric SSRC identifier carried in
53553a5a1b3Sopenharmony_ci      the RTP header so as not to be dependent upon the network address.
53653a5a1b3Sopenharmony_ci      All packets from a synchronization source form part of the same
53753a5a1b3Sopenharmony_ci      timing and sequence number space, so a receiver groups packets by
53853a5a1b3Sopenharmony_ci      synchronization source for playback.  Examples of synchronization
53953a5a1b3Sopenharmony_ci      sources include the sender of a stream of packets derived from a
54053a5a1b3Sopenharmony_ci      signal source such as a microphone or a camera, or an RTP mixer
54153a5a1b3Sopenharmony_ci      (see below).  A synchronization source may change its data format,
54253a5a1b3Sopenharmony_ci      e.g., audio encoding, over time.  The SSRC identifier is a
54353a5a1b3Sopenharmony_ci      randomly chosen value meant to be globally unique within a
54453a5a1b3Sopenharmony_ci      particular RTP session (see Section 8).  A participant need not
54553a5a1b3Sopenharmony_ci      use the same SSRC identifier for all the RTP sessions in a
54653a5a1b3Sopenharmony_ci      multimedia session; the binding of the SSRC identifiers is
54753a5a1b3Sopenharmony_ci      provided through RTCP (see Section 6.5.1).  If a participant
54853a5a1b3Sopenharmony_ci      generates multiple streams in one RTP session, for example from
54953a5a1b3Sopenharmony_ci      separate video cameras, each MUST be identified as a different
55053a5a1b3Sopenharmony_ci      SSRC.
55153a5a1b3Sopenharmony_ci
55253a5a1b3Sopenharmony_ci   Contributing source (CSRC): A source of a stream of RTP packets
55353a5a1b3Sopenharmony_ci      that has contributed to the combined stream produced by an RTP
55453a5a1b3Sopenharmony_ci      mixer (see below).  The mixer inserts a list of the SSRC
55553a5a1b3Sopenharmony_ci      identifiers of the sources that contributed to the generation of a
55653a5a1b3Sopenharmony_ci      particular packet into the RTP header of that packet.  This list
55753a5a1b3Sopenharmony_ci      is called the CSRC list.  An example application is audio
55853a5a1b3Sopenharmony_ci      conferencing where a mixer indicates all the talkers whose speech
55953a5a1b3Sopenharmony_ci
56053a5a1b3Sopenharmony_ci
56153a5a1b3Sopenharmony_ci
56253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 10]
56353a5a1b3Sopenharmony_ci
56453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
56553a5a1b3Sopenharmony_ci
56653a5a1b3Sopenharmony_ci
56753a5a1b3Sopenharmony_ci      was combined to produce the outgoing packet, allowing the receiver
56853a5a1b3Sopenharmony_ci      to indicate the current talker, even though all the audio packets
56953a5a1b3Sopenharmony_ci      contain the same SSRC identifier (that of the mixer).
57053a5a1b3Sopenharmony_ci
57153a5a1b3Sopenharmony_ci   End system: An application that generates the content to be sent
57253a5a1b3Sopenharmony_ci      in RTP packets and/or consumes the content of received RTP
57353a5a1b3Sopenharmony_ci      packets.  An end system can act as one or more synchronization
57453a5a1b3Sopenharmony_ci      sources in a particular RTP session, but typically only one.
57553a5a1b3Sopenharmony_ci
57653a5a1b3Sopenharmony_ci   Mixer: An intermediate system that receives RTP packets from one
57753a5a1b3Sopenharmony_ci      or more sources, possibly changes the data format, combines the
57853a5a1b3Sopenharmony_ci      packets in some manner and then forwards a new RTP packet.  Since
57953a5a1b3Sopenharmony_ci      the timing among multiple input sources will not generally be
58053a5a1b3Sopenharmony_ci      synchronized, the mixer will make timing adjustments among the
58153a5a1b3Sopenharmony_ci      streams and generate its own timing for the combined stream.
58253a5a1b3Sopenharmony_ci      Thus, all data packets originating from a mixer will be identified
58353a5a1b3Sopenharmony_ci      as having the mixer as their synchronization source.
58453a5a1b3Sopenharmony_ci
58553a5a1b3Sopenharmony_ci   Translator: An intermediate system that forwards RTP packets
58653a5a1b3Sopenharmony_ci      with their synchronization source identifier intact.  Examples of
58753a5a1b3Sopenharmony_ci      translators include devices that convert encodings without mixing,
58853a5a1b3Sopenharmony_ci      replicators from multicast to unicast, and application-level
58953a5a1b3Sopenharmony_ci      filters in firewalls.
59053a5a1b3Sopenharmony_ci
59153a5a1b3Sopenharmony_ci   Monitor: An application that receives RTCP packets sent by
59253a5a1b3Sopenharmony_ci      participants in an RTP session, in particular the reception
59353a5a1b3Sopenharmony_ci      reports, and estimates the current quality of service for
59453a5a1b3Sopenharmony_ci      distribution monitoring, fault diagnosis and long-term statistics.
59553a5a1b3Sopenharmony_ci      The monitor function is likely to be built into the application(s)
59653a5a1b3Sopenharmony_ci      participating in the session, but may also be a separate
59753a5a1b3Sopenharmony_ci      application that does not otherwise participate and does not send
59853a5a1b3Sopenharmony_ci      or receive the RTP data packets (since they are on a separate
59953a5a1b3Sopenharmony_ci      port).  These are called third-party monitors.  It is also
60053a5a1b3Sopenharmony_ci      acceptable for a third-party monitor to receive the RTP data
60153a5a1b3Sopenharmony_ci      packets but not send RTCP packets or otherwise be counted in the
60253a5a1b3Sopenharmony_ci      session.
60353a5a1b3Sopenharmony_ci
60453a5a1b3Sopenharmony_ci   Non-RTP means: Protocols and mechanisms that may be needed in
60553a5a1b3Sopenharmony_ci      addition to RTP to provide a usable service.  In particular, for
60653a5a1b3Sopenharmony_ci      multimedia conferences, a control protocol may distribute
60753a5a1b3Sopenharmony_ci      multicast addresses and keys for encryption, negotiate the
60853a5a1b3Sopenharmony_ci      encryption algorithm to be used, and define dynamic mappings
60953a5a1b3Sopenharmony_ci      between RTP payload type values and the payload formats they
61053a5a1b3Sopenharmony_ci      represent for formats that do not have a predefined payload type
61153a5a1b3Sopenharmony_ci      value.  Examples of such protocols include the Session Initiation
61253a5a1b3Sopenharmony_ci      Protocol (SIP) (RFC 3261 [13]), ITU Recommendation H.323 [14] and
61353a5a1b3Sopenharmony_ci      applications using SDP (RFC 2327 [15]), such as RTSP (RFC 2326
61453a5a1b3Sopenharmony_ci      [16]).  For simple
61553a5a1b3Sopenharmony_ci
61653a5a1b3Sopenharmony_ci
61753a5a1b3Sopenharmony_ci
61853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 11]
61953a5a1b3Sopenharmony_ci
62053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
62153a5a1b3Sopenharmony_ci
62253a5a1b3Sopenharmony_ci
62353a5a1b3Sopenharmony_ci      applications, electronic mail or a conference database may also be
62453a5a1b3Sopenharmony_ci      used.  The specification of such protocols and mechanisms is
62553a5a1b3Sopenharmony_ci      outside the scope of this document.
62653a5a1b3Sopenharmony_ci
62753a5a1b3Sopenharmony_ci4. Byte Order, Alignment, and Time Format
62853a5a1b3Sopenharmony_ci
62953a5a1b3Sopenharmony_ci   All integer fields are carried in network byte order, that is, most
63053a5a1b3Sopenharmony_ci   significant byte (octet) first.  This byte order is commonly known as
63153a5a1b3Sopenharmony_ci   big-endian.  The transmission order is described in detail in [3].
63253a5a1b3Sopenharmony_ci   Unless otherwise noted, numeric constants are in decimal (base 10).
63353a5a1b3Sopenharmony_ci
63453a5a1b3Sopenharmony_ci   All header data is aligned to its natural length, i.e., 16-bit fields
63553a5a1b3Sopenharmony_ci   are aligned on even offsets, 32-bit fields are aligned at offsets
63653a5a1b3Sopenharmony_ci   divisible by four, etc.  Octets designated as padding have the value
63753a5a1b3Sopenharmony_ci   zero.
63853a5a1b3Sopenharmony_ci
63953a5a1b3Sopenharmony_ci   Wallclock time (absolute date and time) is represented using the
64053a5a1b3Sopenharmony_ci   timestamp format of the Network Time Protocol (NTP), which is in
64153a5a1b3Sopenharmony_ci   seconds relative to 0h UTC on 1 January 1900 [4].  The full
64253a5a1b3Sopenharmony_ci   resolution NTP timestamp is a 64-bit unsigned fixed-point number with
64353a5a1b3Sopenharmony_ci   the integer part in the first 32 bits and the fractional part in the
64453a5a1b3Sopenharmony_ci   last 32 bits.  In some fields where a more compact representation is
64553a5a1b3Sopenharmony_ci   appropriate, only the middle 32 bits are used; that is, the low 16
64653a5a1b3Sopenharmony_ci   bits of the integer part and the high 16 bits of the fractional part.
64753a5a1b3Sopenharmony_ci   The high 16 bits of the integer part must be determined
64853a5a1b3Sopenharmony_ci   independently.
64953a5a1b3Sopenharmony_ci
65053a5a1b3Sopenharmony_ci   An implementation is not required to run the Network Time Protocol in
65153a5a1b3Sopenharmony_ci   order to use RTP.  Other time sources, or none at all, may be used
65253a5a1b3Sopenharmony_ci   (see the description of the NTP timestamp field in Section 6.4.1).
65353a5a1b3Sopenharmony_ci   However, running NTP may be useful for synchronizing streams
65453a5a1b3Sopenharmony_ci   transmitted from separate hosts.
65553a5a1b3Sopenharmony_ci
65653a5a1b3Sopenharmony_ci   The NTP timestamp will wrap around to zero some time in the year
65753a5a1b3Sopenharmony_ci   2036, but for RTP purposes, only differences between pairs of NTP
65853a5a1b3Sopenharmony_ci   timestamps are used.  So long as the pairs of timestamps can be
65953a5a1b3Sopenharmony_ci   assumed to be within 68 years of each other, using modular arithmetic
66053a5a1b3Sopenharmony_ci   for subtractions and comparisons makes the wraparound irrelevant.
66153a5a1b3Sopenharmony_ci
66253a5a1b3Sopenharmony_ci
66353a5a1b3Sopenharmony_ci
66453a5a1b3Sopenharmony_ci
66553a5a1b3Sopenharmony_ci
66653a5a1b3Sopenharmony_ci
66753a5a1b3Sopenharmony_ci
66853a5a1b3Sopenharmony_ci
66953a5a1b3Sopenharmony_ci
67053a5a1b3Sopenharmony_ci
67153a5a1b3Sopenharmony_ci
67253a5a1b3Sopenharmony_ci
67353a5a1b3Sopenharmony_ci
67453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 12]
67553a5a1b3Sopenharmony_ci
67653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
67753a5a1b3Sopenharmony_ci
67853a5a1b3Sopenharmony_ci
67953a5a1b3Sopenharmony_ci5. RTP Data Transfer Protocol
68053a5a1b3Sopenharmony_ci
68153a5a1b3Sopenharmony_ci5.1 RTP Fixed Header Fields
68253a5a1b3Sopenharmony_ci
68353a5a1b3Sopenharmony_ci   The RTP header has the following format:
68453a5a1b3Sopenharmony_ci
68553a5a1b3Sopenharmony_ci    0                   1                   2                   3
68653a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
68753a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68853a5a1b3Sopenharmony_ci   |V=2|P|X|  CC   |M|     PT      |       sequence number         |
68953a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69053a5a1b3Sopenharmony_ci   |                           timestamp                           |
69153a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69253a5a1b3Sopenharmony_ci   |           synchronization source (SSRC) identifier            |
69353a5a1b3Sopenharmony_ci   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
69453a5a1b3Sopenharmony_ci   |            contributing source (CSRC) identifiers             |
69553a5a1b3Sopenharmony_ci   |                             ....                              |
69653a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69753a5a1b3Sopenharmony_ci
69853a5a1b3Sopenharmony_ci   The first twelve octets are present in every RTP packet, while the
69953a5a1b3Sopenharmony_ci   list of CSRC identifiers is present only when inserted by a mixer.
70053a5a1b3Sopenharmony_ci   The fields have the following meaning:
70153a5a1b3Sopenharmony_ci
70253a5a1b3Sopenharmony_ci   version (V): 2 bits
70353a5a1b3Sopenharmony_ci      This field identifies the version of RTP.  The version defined by
70453a5a1b3Sopenharmony_ci      this specification is two (2).  (The value 1 is used by the first
70553a5a1b3Sopenharmony_ci      draft version of RTP and the value 0 is used by the protocol
70653a5a1b3Sopenharmony_ci      initially implemented in the "vat" audio tool.)
70753a5a1b3Sopenharmony_ci
70853a5a1b3Sopenharmony_ci   padding (P): 1 bit
70953a5a1b3Sopenharmony_ci      If the padding bit is set, the packet contains one or more
71053a5a1b3Sopenharmony_ci      additional padding octets at the end which are not part of the
71153a5a1b3Sopenharmony_ci      payload.  The last octet of the padding contains a count of how
71253a5a1b3Sopenharmony_ci      many padding octets should be ignored, including itself.  Padding
71353a5a1b3Sopenharmony_ci      may be needed by some encryption algorithms with fixed block sizes
71453a5a1b3Sopenharmony_ci      or for carrying several RTP packets in a lower-layer protocol data
71553a5a1b3Sopenharmony_ci      unit.
71653a5a1b3Sopenharmony_ci
71753a5a1b3Sopenharmony_ci   extension (X): 1 bit
71853a5a1b3Sopenharmony_ci      If the extension bit is set, the fixed header MUST be followed by
71953a5a1b3Sopenharmony_ci      exactly one header extension, with a format defined in Section
72053a5a1b3Sopenharmony_ci      5.3.1.
72153a5a1b3Sopenharmony_ci
72253a5a1b3Sopenharmony_ci   CSRC count (CC): 4 bits
72353a5a1b3Sopenharmony_ci      The CSRC count contains the number of CSRC identifiers that follow
72453a5a1b3Sopenharmony_ci      the fixed header.
72553a5a1b3Sopenharmony_ci
72653a5a1b3Sopenharmony_ci
72753a5a1b3Sopenharmony_ci
72853a5a1b3Sopenharmony_ci
72953a5a1b3Sopenharmony_ci
73053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 13]
73153a5a1b3Sopenharmony_ci
73253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
73353a5a1b3Sopenharmony_ci
73453a5a1b3Sopenharmony_ci
73553a5a1b3Sopenharmony_ci   marker (M): 1 bit
73653a5a1b3Sopenharmony_ci      The interpretation of the marker is defined by a profile.  It is
73753a5a1b3Sopenharmony_ci      intended to allow significant events such as frame boundaries to
73853a5a1b3Sopenharmony_ci      be marked in the packet stream.  A profile MAY define additional
73953a5a1b3Sopenharmony_ci      marker bits or specify that there is no marker bit by changing the
74053a5a1b3Sopenharmony_ci      number of bits in the payload type field (see Section 5.3).
74153a5a1b3Sopenharmony_ci
74253a5a1b3Sopenharmony_ci   payload type (PT): 7 bits
74353a5a1b3Sopenharmony_ci      This field identifies the format of the RTP payload and determines
74453a5a1b3Sopenharmony_ci      its interpretation by the application.  A profile MAY specify a
74553a5a1b3Sopenharmony_ci      default static mapping of payload type codes to payload formats.
74653a5a1b3Sopenharmony_ci      Additional payload type codes MAY be defined dynamically through
74753a5a1b3Sopenharmony_ci      non-RTP means (see Section 3).  A set of default mappings for
74853a5a1b3Sopenharmony_ci      audio and video is specified in the companion RFC 3551 [1].  An
74953a5a1b3Sopenharmony_ci      RTP source MAY change the payload type during a session, but this
75053a5a1b3Sopenharmony_ci      field SHOULD NOT be used for multiplexing separate media streams
75153a5a1b3Sopenharmony_ci      (see Section 5.2).
75253a5a1b3Sopenharmony_ci
75353a5a1b3Sopenharmony_ci      A receiver MUST ignore packets with payload types that it does not
75453a5a1b3Sopenharmony_ci      understand.
75553a5a1b3Sopenharmony_ci
75653a5a1b3Sopenharmony_ci   sequence number: 16 bits
75753a5a1b3Sopenharmony_ci      The sequence number increments by one for each RTP data packet
75853a5a1b3Sopenharmony_ci      sent, and may be used by the receiver to detect packet loss and to
75953a5a1b3Sopenharmony_ci      restore packet sequence.  The initial value of the sequence number
76053a5a1b3Sopenharmony_ci      SHOULD be random (unpredictable) to make known-plaintext attacks
76153a5a1b3Sopenharmony_ci      on encryption more difficult, even if the source itself does not
76253a5a1b3Sopenharmony_ci      encrypt according to the method in Section 9.1, because the
76353a5a1b3Sopenharmony_ci      packets may flow through a translator that does.  Techniques for
76453a5a1b3Sopenharmony_ci      choosing unpredictable numbers are discussed in [17].
76553a5a1b3Sopenharmony_ci
76653a5a1b3Sopenharmony_ci   timestamp: 32 bits
76753a5a1b3Sopenharmony_ci      The timestamp reflects the sampling instant of the first octet in
76853a5a1b3Sopenharmony_ci      the RTP data packet.  The sampling instant MUST be derived from a
76953a5a1b3Sopenharmony_ci      clock that increments monotonically and linearly in time to allow
77053a5a1b3Sopenharmony_ci      synchronization and jitter calculations (see Section 6.4.1).  The
77153a5a1b3Sopenharmony_ci      resolution of the clock MUST be sufficient for the desired
77253a5a1b3Sopenharmony_ci      synchronization accuracy and for measuring packet arrival jitter
77353a5a1b3Sopenharmony_ci      (one tick per video frame is typically not sufficient).  The clock
77453a5a1b3Sopenharmony_ci      frequency is dependent on the format of data carried as payload
77553a5a1b3Sopenharmony_ci      and is specified statically in the profile or payload format
77653a5a1b3Sopenharmony_ci      specification that defines the format, or MAY be specified
77753a5a1b3Sopenharmony_ci      dynamically for payload formats defined through non-RTP means.  If
77853a5a1b3Sopenharmony_ci      RTP packets are generated periodically, the nominal sampling
77953a5a1b3Sopenharmony_ci      instant as determined from the sampling clock is to be used, not a
78053a5a1b3Sopenharmony_ci      reading of the system clock.  As an example, for fixed-rate audio
78153a5a1b3Sopenharmony_ci      the timestamp clock would likely increment by one for each
78253a5a1b3Sopenharmony_ci      sampling period.  If an audio application reads blocks covering
78353a5a1b3Sopenharmony_ci
78453a5a1b3Sopenharmony_ci
78553a5a1b3Sopenharmony_ci
78653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 14]
78753a5a1b3Sopenharmony_ci
78853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
78953a5a1b3Sopenharmony_ci
79053a5a1b3Sopenharmony_ci
79153a5a1b3Sopenharmony_ci      160 sampling periods from the input device, the timestamp would be
79253a5a1b3Sopenharmony_ci      increased by 160 for each such block, regardless of whether the
79353a5a1b3Sopenharmony_ci      block is transmitted in a packet or dropped as silent.
79453a5a1b3Sopenharmony_ci
79553a5a1b3Sopenharmony_ci      The initial value of the timestamp SHOULD be random, as for the
79653a5a1b3Sopenharmony_ci      sequence number.  Several consecutive RTP packets will have equal
79753a5a1b3Sopenharmony_ci      timestamps if they are (logically) generated at once, e.g., belong
79853a5a1b3Sopenharmony_ci      to the same video frame.  Consecutive RTP packets MAY contain
79953a5a1b3Sopenharmony_ci      timestamps that are not monotonic if the data is not transmitted
80053a5a1b3Sopenharmony_ci      in the order it was sampled, as in the case of MPEG interpolated
80153a5a1b3Sopenharmony_ci      video frames.  (The sequence numbers of the packets as transmitted
80253a5a1b3Sopenharmony_ci      will still be monotonic.)
80353a5a1b3Sopenharmony_ci
80453a5a1b3Sopenharmony_ci      RTP timestamps from different media streams may advance at
80553a5a1b3Sopenharmony_ci      different rates and usually have independent, random offsets.
80653a5a1b3Sopenharmony_ci      Therefore, although these timestamps are sufficient to reconstruct
80753a5a1b3Sopenharmony_ci      the timing of a single stream, directly comparing RTP timestamps
80853a5a1b3Sopenharmony_ci      from different media is not effective for synchronization.
80953a5a1b3Sopenharmony_ci      Instead, for each medium the RTP timestamp is related to the
81053a5a1b3Sopenharmony_ci      sampling instant by pairing it with a timestamp from a reference
81153a5a1b3Sopenharmony_ci      clock (wallclock) that represents the time when the data
81253a5a1b3Sopenharmony_ci      corresponding to the RTP timestamp was sampled.  The reference
81353a5a1b3Sopenharmony_ci      clock is shared by all media to be synchronized.  The timestamp
81453a5a1b3Sopenharmony_ci      pairs are not transmitted in every data packet, but at a lower
81553a5a1b3Sopenharmony_ci      rate in RTCP SR packets as described in Section 6.4.
81653a5a1b3Sopenharmony_ci
81753a5a1b3Sopenharmony_ci      The sampling instant is chosen as the point of reference for the
81853a5a1b3Sopenharmony_ci      RTP timestamp because it is known to the transmitting endpoint and
81953a5a1b3Sopenharmony_ci      has a common definition for all media, independent of encoding
82053a5a1b3Sopenharmony_ci      delays or other processing.  The purpose is to allow synchronized
82153a5a1b3Sopenharmony_ci      presentation of all media sampled at the same time.
82253a5a1b3Sopenharmony_ci
82353a5a1b3Sopenharmony_ci      Applications transmitting stored data rather than data sampled in
82453a5a1b3Sopenharmony_ci      real time typically use a virtual presentation timeline derived
82553a5a1b3Sopenharmony_ci      from wallclock time to determine when the next frame or other unit
82653a5a1b3Sopenharmony_ci      of each medium in the stored data should be presented.  In this
82753a5a1b3Sopenharmony_ci      case, the RTP timestamp would reflect the presentation time for
82853a5a1b3Sopenharmony_ci      each unit.  That is, the RTP timestamp for each unit would be
82953a5a1b3Sopenharmony_ci      related to the wallclock time at which the unit becomes current on
83053a5a1b3Sopenharmony_ci      the virtual presentation timeline.  Actual presentation occurs
83153a5a1b3Sopenharmony_ci      some time later as determined by the receiver.
83253a5a1b3Sopenharmony_ci
83353a5a1b3Sopenharmony_ci      An example describing live audio narration of prerecorded video
83453a5a1b3Sopenharmony_ci      illustrates the significance of choosing the sampling instant as
83553a5a1b3Sopenharmony_ci      the reference point.  In this scenario, the video would be
83653a5a1b3Sopenharmony_ci      presented locally for the narrator to view and would be
83753a5a1b3Sopenharmony_ci      simultaneously transmitted using RTP.  The "sampling instant" of a
83853a5a1b3Sopenharmony_ci      video frame transmitted in RTP would be established by referencing
83953a5a1b3Sopenharmony_ci
84053a5a1b3Sopenharmony_ci
84153a5a1b3Sopenharmony_ci
84253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 15]
84353a5a1b3Sopenharmony_ci
84453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
84553a5a1b3Sopenharmony_ci
84653a5a1b3Sopenharmony_ci
84753a5a1b3Sopenharmony_ci      its timestamp to the wallclock time when that video frame was
84853a5a1b3Sopenharmony_ci      presented to the narrator.  The sampling instant for the audio RTP
84953a5a1b3Sopenharmony_ci      packets containing the narrator's speech would be established by
85053a5a1b3Sopenharmony_ci      referencing the same wallclock time when the audio was sampled.
85153a5a1b3Sopenharmony_ci      The audio and video may even be transmitted by different hosts if
85253a5a1b3Sopenharmony_ci      the reference clocks on the two hosts are synchronized by some
85353a5a1b3Sopenharmony_ci      means such as NTP.  A receiver can then synchronize presentation
85453a5a1b3Sopenharmony_ci      of the audio and video packets by relating their RTP timestamps
85553a5a1b3Sopenharmony_ci      using the timestamp pairs in RTCP SR packets.
85653a5a1b3Sopenharmony_ci
85753a5a1b3Sopenharmony_ci   SSRC: 32 bits
85853a5a1b3Sopenharmony_ci      The SSRC field identifies the synchronization source.  This
85953a5a1b3Sopenharmony_ci      identifier SHOULD be chosen randomly, with the intent that no two
86053a5a1b3Sopenharmony_ci      synchronization sources within the same RTP session will have the
86153a5a1b3Sopenharmony_ci      same SSRC identifier.  An example algorithm for generating a
86253a5a1b3Sopenharmony_ci      random identifier is presented in Appendix A.6.  Although the
86353a5a1b3Sopenharmony_ci      probability of multiple sources choosing the same identifier is
86453a5a1b3Sopenharmony_ci      low, all RTP implementations must be prepared to detect and
86553a5a1b3Sopenharmony_ci      resolve collisions.  Section 8 describes the probability of
86653a5a1b3Sopenharmony_ci      collision along with a mechanism for resolving collisions and
86753a5a1b3Sopenharmony_ci      detecting RTP-level forwarding loops based on the uniqueness of
86853a5a1b3Sopenharmony_ci      the SSRC identifier.  If a source changes its source transport
86953a5a1b3Sopenharmony_ci      address, it must also choose a new SSRC identifier to avoid being
87053a5a1b3Sopenharmony_ci      interpreted as a looped source (see Section 8.2).
87153a5a1b3Sopenharmony_ci
87253a5a1b3Sopenharmony_ci   CSRC list: 0 to 15 items, 32 bits each
87353a5a1b3Sopenharmony_ci      The CSRC list identifies the contributing sources for the payload
87453a5a1b3Sopenharmony_ci      contained in this packet.  The number of identifiers is given by
87553a5a1b3Sopenharmony_ci      the CC field.  If there are more than 15 contributing sources,
87653a5a1b3Sopenharmony_ci      only 15 can be identified.  CSRC identifiers are inserted by
87753a5a1b3Sopenharmony_ci      mixers (see Section 7.1), using the SSRC identifiers of
87853a5a1b3Sopenharmony_ci      contributing sources.  For example, for audio packets the SSRC
87953a5a1b3Sopenharmony_ci      identifiers of all sources that were mixed together to create a
88053a5a1b3Sopenharmony_ci      packet are listed, allowing correct talker indication at the
88153a5a1b3Sopenharmony_ci      receiver.
88253a5a1b3Sopenharmony_ci
88353a5a1b3Sopenharmony_ci5.2 Multiplexing RTP Sessions
88453a5a1b3Sopenharmony_ci
88553a5a1b3Sopenharmony_ci   For efficient protocol processing, the number of multiplexing points
88653a5a1b3Sopenharmony_ci   should be minimized, as described in the integrated layer processing
88753a5a1b3Sopenharmony_ci   design principle [10].  In RTP, multiplexing is provided by the
88853a5a1b3Sopenharmony_ci   destination transport address (network address and port number) which
88953a5a1b3Sopenharmony_ci   is different for each RTP session.  For example, in a teleconference
89053a5a1b3Sopenharmony_ci   composed of audio and video media encoded separately, each medium
89153a5a1b3Sopenharmony_ci   SHOULD be carried in a separate RTP session with its own destination
89253a5a1b3Sopenharmony_ci   transport address.
89353a5a1b3Sopenharmony_ci
89453a5a1b3Sopenharmony_ci
89553a5a1b3Sopenharmony_ci
89653a5a1b3Sopenharmony_ci
89753a5a1b3Sopenharmony_ci
89853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 16]
89953a5a1b3Sopenharmony_ci
90053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
90153a5a1b3Sopenharmony_ci
90253a5a1b3Sopenharmony_ci
90353a5a1b3Sopenharmony_ci   Separate audio and video streams SHOULD NOT be carried in a single
90453a5a1b3Sopenharmony_ci   RTP session and demultiplexed based on the payload type or SSRC
90553a5a1b3Sopenharmony_ci   fields.  Interleaving packets with different RTP media types but
90653a5a1b3Sopenharmony_ci   using the same SSRC would introduce several problems:
90753a5a1b3Sopenharmony_ci
90853a5a1b3Sopenharmony_ci   1. If, say, two audio streams shared the same RTP session and the
90953a5a1b3Sopenharmony_ci      same SSRC value, and one were to change encodings and thus acquire
91053a5a1b3Sopenharmony_ci      a different RTP payload type, there would be no general way of
91153a5a1b3Sopenharmony_ci      identifying which stream had changed encodings.
91253a5a1b3Sopenharmony_ci
91353a5a1b3Sopenharmony_ci   2. An SSRC is defined to identify a single timing and sequence number
91453a5a1b3Sopenharmony_ci      space.  Interleaving multiple payload types would require
91553a5a1b3Sopenharmony_ci      different timing spaces if the media clock rates differ and would
91653a5a1b3Sopenharmony_ci      require different sequence number spaces to tell which payload
91753a5a1b3Sopenharmony_ci      type suffered packet loss.
91853a5a1b3Sopenharmony_ci
91953a5a1b3Sopenharmony_ci   3. The RTCP sender and receiver reports (see Section 6.4) can only
92053a5a1b3Sopenharmony_ci      describe one timing and sequence number space per SSRC and do not
92153a5a1b3Sopenharmony_ci      carry a payload type field.
92253a5a1b3Sopenharmony_ci
92353a5a1b3Sopenharmony_ci   4. An RTP mixer would not be able to combine interleaved streams of
92453a5a1b3Sopenharmony_ci      incompatible media into one stream.
92553a5a1b3Sopenharmony_ci
92653a5a1b3Sopenharmony_ci   5. Carrying multiple media in one RTP session precludes: the use of
92753a5a1b3Sopenharmony_ci      different network paths or network resource allocations if
92853a5a1b3Sopenharmony_ci      appropriate; reception of a subset of the media if desired, for
92953a5a1b3Sopenharmony_ci      example just audio if video would exceed the available bandwidth;
93053a5a1b3Sopenharmony_ci      and receiver implementations that use separate processes for the
93153a5a1b3Sopenharmony_ci      different media, whereas using separate RTP sessions permits
93253a5a1b3Sopenharmony_ci      either single- or multiple-process implementations.
93353a5a1b3Sopenharmony_ci
93453a5a1b3Sopenharmony_ci   Using a different SSRC for each medium but sending them in the same
93553a5a1b3Sopenharmony_ci   RTP session would avoid the first three problems but not the last
93653a5a1b3Sopenharmony_ci   two.
93753a5a1b3Sopenharmony_ci
93853a5a1b3Sopenharmony_ci   On the other hand, multiplexing multiple related sources of the same
93953a5a1b3Sopenharmony_ci   medium in one RTP session using different SSRC values is the norm for
94053a5a1b3Sopenharmony_ci   multicast sessions.  The problems listed above don't apply: an RTP
94153a5a1b3Sopenharmony_ci   mixer can combine multiple audio sources, for example, and the same
94253a5a1b3Sopenharmony_ci   treatment is applicable for all of them.  It may also be appropriate
94353a5a1b3Sopenharmony_ci   to multiplex streams of the same medium using different SSRC values
94453a5a1b3Sopenharmony_ci   in other scenarios where the last two problems do not apply.
94553a5a1b3Sopenharmony_ci
94653a5a1b3Sopenharmony_ci
94753a5a1b3Sopenharmony_ci
94853a5a1b3Sopenharmony_ci
94953a5a1b3Sopenharmony_ci
95053a5a1b3Sopenharmony_ci
95153a5a1b3Sopenharmony_ci
95253a5a1b3Sopenharmony_ci
95353a5a1b3Sopenharmony_ci
95453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 17]
95553a5a1b3Sopenharmony_ci
95653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
95753a5a1b3Sopenharmony_ci
95853a5a1b3Sopenharmony_ci
95953a5a1b3Sopenharmony_ci5.3 Profile-Specific Modifications to the RTP Header
96053a5a1b3Sopenharmony_ci
96153a5a1b3Sopenharmony_ci   The existing RTP data packet header is believed to be complete for
96253a5a1b3Sopenharmony_ci   the set of functions required in common across all the application
96353a5a1b3Sopenharmony_ci   classes that RTP might support.  However, in keeping with the ALF
96453a5a1b3Sopenharmony_ci   design principle, the header MAY be tailored through modifications or
96553a5a1b3Sopenharmony_ci   additions defined in a profile specification while still allowing
96653a5a1b3Sopenharmony_ci   profile-independent monitoring and recording tools to function.
96753a5a1b3Sopenharmony_ci
96853a5a1b3Sopenharmony_ci   o  The marker bit and payload type field carry profile-specific
96953a5a1b3Sopenharmony_ci      information, but they are allocated in the fixed header since many
97053a5a1b3Sopenharmony_ci      applications are expected to need them and might otherwise have to
97153a5a1b3Sopenharmony_ci      add another 32-bit word just to hold them.  The octet containing
97253a5a1b3Sopenharmony_ci      these fields MAY be redefined by a profile to suit different
97353a5a1b3Sopenharmony_ci      requirements, for example with more or fewer marker bits.  If
97453a5a1b3Sopenharmony_ci      there are any marker bits, one SHOULD be located in the most
97553a5a1b3Sopenharmony_ci      significant bit of the octet since profile-independent monitors
97653a5a1b3Sopenharmony_ci      may be able to observe a correlation between packet loss patterns
97753a5a1b3Sopenharmony_ci      and the marker bit.
97853a5a1b3Sopenharmony_ci
97953a5a1b3Sopenharmony_ci   o  Additional information that is required for a particular payload
98053a5a1b3Sopenharmony_ci      format, such as a video encoding, SHOULD be carried in the payload
98153a5a1b3Sopenharmony_ci      section of the packet.  This might be in a header that is always
98253a5a1b3Sopenharmony_ci      present at the start of the payload section, or might be indicated
98353a5a1b3Sopenharmony_ci      by a reserved value in the data pattern.
98453a5a1b3Sopenharmony_ci
98553a5a1b3Sopenharmony_ci   o  If a particular class of applications needs additional
98653a5a1b3Sopenharmony_ci      functionality independent of payload format, the profile under
98753a5a1b3Sopenharmony_ci      which those applications operate SHOULD define additional fixed
98853a5a1b3Sopenharmony_ci      fields to follow immediately after the SSRC field of the existing
98953a5a1b3Sopenharmony_ci      fixed header.  Those applications will be able to quickly and
99053a5a1b3Sopenharmony_ci      directly access the additional fields while profile-independent
99153a5a1b3Sopenharmony_ci      monitors or recorders can still process the RTP packets by
99253a5a1b3Sopenharmony_ci      interpreting only the first twelve octets.
99353a5a1b3Sopenharmony_ci
99453a5a1b3Sopenharmony_ci   If it turns out that additional functionality is needed in common
99553a5a1b3Sopenharmony_ci   across all profiles, then a new version of RTP should be defined to
99653a5a1b3Sopenharmony_ci   make a permanent change to the fixed header.
99753a5a1b3Sopenharmony_ci
99853a5a1b3Sopenharmony_ci5.3.1 RTP Header Extension
99953a5a1b3Sopenharmony_ci
100053a5a1b3Sopenharmony_ci   An extension mechanism is provided to allow individual
100153a5a1b3Sopenharmony_ci   implementations to experiment with new payload-format-independent
100253a5a1b3Sopenharmony_ci   functions that require additional information to be carried in the
100353a5a1b3Sopenharmony_ci   RTP data packet header.  This mechanism is designed so that the
100453a5a1b3Sopenharmony_ci   header extension may be ignored by other interoperating
100553a5a1b3Sopenharmony_ci   implementations that have not been extended.
100653a5a1b3Sopenharmony_ci
100753a5a1b3Sopenharmony_ci
100853a5a1b3Sopenharmony_ci
100953a5a1b3Sopenharmony_ci
101053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 18]
101153a5a1b3Sopenharmony_ci
101253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
101353a5a1b3Sopenharmony_ci
101453a5a1b3Sopenharmony_ci
101553a5a1b3Sopenharmony_ci   Note that this header extension is intended only for limited use.
101653a5a1b3Sopenharmony_ci   Most potential uses of this mechanism would be better done another
101753a5a1b3Sopenharmony_ci   way, using the methods described in the previous section.  For
101853a5a1b3Sopenharmony_ci   example, a profile-specific extension to the fixed header is less
101953a5a1b3Sopenharmony_ci   expensive to process because it is not conditional nor in a variable
102053a5a1b3Sopenharmony_ci   location.  Additional information required for a particular payload
102153a5a1b3Sopenharmony_ci   format SHOULD NOT use this header extension, but SHOULD be carried in
102253a5a1b3Sopenharmony_ci   the payload section of the packet.
102353a5a1b3Sopenharmony_ci
102453a5a1b3Sopenharmony_ci    0                   1                   2                   3
102553a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
102653a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
102753a5a1b3Sopenharmony_ci   |      defined by profile       |           length              |
102853a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
102953a5a1b3Sopenharmony_ci   |                        header extension                       |
103053a5a1b3Sopenharmony_ci   |                             ....                              |
103153a5a1b3Sopenharmony_ci
103253a5a1b3Sopenharmony_ci   If the X bit in the RTP header is one, a variable-length header
103353a5a1b3Sopenharmony_ci   extension MUST be appended to the RTP header, following the CSRC list
103453a5a1b3Sopenharmony_ci   if present.  The header extension contains a 16-bit length field that
103553a5a1b3Sopenharmony_ci   counts the number of 32-bit words in the extension, excluding the
103653a5a1b3Sopenharmony_ci   four-octet extension header (therefore zero is a valid length).  Only
103753a5a1b3Sopenharmony_ci   a single extension can be appended to the RTP data header.  To allow
103853a5a1b3Sopenharmony_ci   multiple interoperating implementations to each experiment
103953a5a1b3Sopenharmony_ci   independently with different header extensions, or to allow a
104053a5a1b3Sopenharmony_ci   particular implementation to experiment with more than one type of
104153a5a1b3Sopenharmony_ci   header extension, the first 16 bits of the header extension are left
104253a5a1b3Sopenharmony_ci   open for distinguishing identifiers or parameters.  The format of
104353a5a1b3Sopenharmony_ci   these 16 bits is to be defined by the profile specification under
104453a5a1b3Sopenharmony_ci   which the implementations are operating.  This RTP specification does
104553a5a1b3Sopenharmony_ci   not define any header extensions itself.
104653a5a1b3Sopenharmony_ci
104753a5a1b3Sopenharmony_ci6. RTP Control Protocol -- RTCP
104853a5a1b3Sopenharmony_ci
104953a5a1b3Sopenharmony_ci   The RTP control protocol (RTCP) is based on the periodic transmission
105053a5a1b3Sopenharmony_ci   of control packets to all participants in the session, using the same
105153a5a1b3Sopenharmony_ci   distribution mechanism as the data packets.  The underlying protocol
105253a5a1b3Sopenharmony_ci   MUST provide multiplexing of the data and control packets, for
105353a5a1b3Sopenharmony_ci   example using separate port numbers with UDP.  RTCP performs four
105453a5a1b3Sopenharmony_ci   functions:
105553a5a1b3Sopenharmony_ci
105653a5a1b3Sopenharmony_ci   1. The primary function is to provide feedback on the quality of the
105753a5a1b3Sopenharmony_ci      data distribution.  This is an integral part of the RTP's role as
105853a5a1b3Sopenharmony_ci      a transport protocol and is related to the flow and congestion
105953a5a1b3Sopenharmony_ci      control functions of other transport protocols (see Section 10 on
106053a5a1b3Sopenharmony_ci      the requirement for congestion control).  The feedback may be
106153a5a1b3Sopenharmony_ci      directly useful for control of adaptive encodings [18,19], but
106253a5a1b3Sopenharmony_ci      experiments with IP multicasting have shown that it is also
106353a5a1b3Sopenharmony_ci
106453a5a1b3Sopenharmony_ci
106553a5a1b3Sopenharmony_ci
106653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 19]
106753a5a1b3Sopenharmony_ci
106853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
106953a5a1b3Sopenharmony_ci
107053a5a1b3Sopenharmony_ci
107153a5a1b3Sopenharmony_ci      critical to get feedback from the receivers to diagnose faults in
107253a5a1b3Sopenharmony_ci      the distribution.  Sending reception feedback reports to all
107353a5a1b3Sopenharmony_ci      participants allows one who is observing problems to evaluate
107453a5a1b3Sopenharmony_ci      whether those problems are local or global.  With a distribution
107553a5a1b3Sopenharmony_ci      mechanism like IP multicast, it is also possible for an entity
107653a5a1b3Sopenharmony_ci      such as a network service provider who is not otherwise involved
107753a5a1b3Sopenharmony_ci      in the session to receive the feedback information and act as a
107853a5a1b3Sopenharmony_ci      third-party monitor to diagnose network problems.  This feedback
107953a5a1b3Sopenharmony_ci      function is performed by the RTCP sender and receiver reports,
108053a5a1b3Sopenharmony_ci      described below in Section 6.4.
108153a5a1b3Sopenharmony_ci
108253a5a1b3Sopenharmony_ci   2. RTCP carries a persistent transport-level identifier for an RTP
108353a5a1b3Sopenharmony_ci      source called the canonical name or CNAME, Section 6.5.1.  Since
108453a5a1b3Sopenharmony_ci      the SSRC identifier may change if a conflict is discovered or a
108553a5a1b3Sopenharmony_ci      program is restarted, receivers require the CNAME to keep track of
108653a5a1b3Sopenharmony_ci      each participant.  Receivers may also require the CNAME to
108753a5a1b3Sopenharmony_ci      associate multiple data streams from a given participant in a set
108853a5a1b3Sopenharmony_ci      of related RTP sessions, for example to synchronize audio and
108953a5a1b3Sopenharmony_ci      video.  Inter-media synchronization also requires the NTP and RTP
109053a5a1b3Sopenharmony_ci      timestamps included in RTCP packets by data senders.
109153a5a1b3Sopenharmony_ci
109253a5a1b3Sopenharmony_ci   3. The first two functions require that all participants send RTCP
109353a5a1b3Sopenharmony_ci      packets, therefore the rate must be controlled in order for RTP to
109453a5a1b3Sopenharmony_ci      scale up to a large number of participants.  By having each
109553a5a1b3Sopenharmony_ci      participant send its control packets to all the others, each can
109653a5a1b3Sopenharmony_ci      independently observe the number of participants.  This number is
109753a5a1b3Sopenharmony_ci      used to calculate the rate at which the packets are sent, as
109853a5a1b3Sopenharmony_ci      explained in Section 6.2.
109953a5a1b3Sopenharmony_ci
110053a5a1b3Sopenharmony_ci   4. A fourth, OPTIONAL function is to convey minimal session control
110153a5a1b3Sopenharmony_ci      information, for example participant identification to be
110253a5a1b3Sopenharmony_ci      displayed in the user interface.  This is most likely to be useful
110353a5a1b3Sopenharmony_ci      in "loosely controlled" sessions where participants enter and
110453a5a1b3Sopenharmony_ci      leave without membership control or parameter negotiation.  RTCP
110553a5a1b3Sopenharmony_ci      serves as a convenient channel to reach all the participants, but
110653a5a1b3Sopenharmony_ci      it is not necessarily expected to support all the control
110753a5a1b3Sopenharmony_ci      communication requirements of an application.  A higher-level
110853a5a1b3Sopenharmony_ci      session control protocol, which is beyond the scope of this
110953a5a1b3Sopenharmony_ci      document, may be needed.
111053a5a1b3Sopenharmony_ci
111153a5a1b3Sopenharmony_ci   Functions 1-3 SHOULD be used in all environments, but particularly in
111253a5a1b3Sopenharmony_ci   the IP multicast environment.  RTP application designers SHOULD avoid
111353a5a1b3Sopenharmony_ci   mechanisms that can only work in unicast mode and will not scale to
111453a5a1b3Sopenharmony_ci   larger numbers.  Transmission of RTCP MAY be controlled separately
111553a5a1b3Sopenharmony_ci   for senders and receivers, as described in Section 6.2, for cases
111653a5a1b3Sopenharmony_ci   such as unidirectional links where feedback from receivers is not
111753a5a1b3Sopenharmony_ci   possible.
111853a5a1b3Sopenharmony_ci
111953a5a1b3Sopenharmony_ci
112053a5a1b3Sopenharmony_ci
112153a5a1b3Sopenharmony_ci
112253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 20]
112353a5a1b3Sopenharmony_ci
112453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
112553a5a1b3Sopenharmony_ci
112653a5a1b3Sopenharmony_ci
112753a5a1b3Sopenharmony_ci   Non-normative note:  In the multicast routing approach
112853a5a1b3Sopenharmony_ci      called Source-Specific Multicast (SSM), there is only one sender
112953a5a1b3Sopenharmony_ci      per "channel" (a source address, group address pair), and
113053a5a1b3Sopenharmony_ci      receivers (except for the channel source) cannot use multicast to
113153a5a1b3Sopenharmony_ci      communicate directly with other channel members.  The
113253a5a1b3Sopenharmony_ci      recommendations here accommodate SSM only through Section 6.2's
113353a5a1b3Sopenharmony_ci      option of turning off receivers' RTCP entirely.  Future work will
113453a5a1b3Sopenharmony_ci      specify adaptation of RTCP for SSM so that feedback from receivers
113553a5a1b3Sopenharmony_ci      can be maintained.
113653a5a1b3Sopenharmony_ci
113753a5a1b3Sopenharmony_ci6.1 RTCP Packet Format
113853a5a1b3Sopenharmony_ci
113953a5a1b3Sopenharmony_ci   This specification defines several RTCP packet types to carry a
114053a5a1b3Sopenharmony_ci   variety of control information:
114153a5a1b3Sopenharmony_ci
114253a5a1b3Sopenharmony_ci   SR:   Sender report, for transmission and reception statistics from
114353a5a1b3Sopenharmony_ci         participants that are active senders
114453a5a1b3Sopenharmony_ci
114553a5a1b3Sopenharmony_ci   RR:   Receiver report, for reception statistics from participants
114653a5a1b3Sopenharmony_ci         that are not active senders and in combination with SR for
114753a5a1b3Sopenharmony_ci         active senders reporting on more than 31 sources
114853a5a1b3Sopenharmony_ci
114953a5a1b3Sopenharmony_ci   SDES: Source description items, including CNAME
115053a5a1b3Sopenharmony_ci
115153a5a1b3Sopenharmony_ci   BYE:  Indicates end of participation
115253a5a1b3Sopenharmony_ci
115353a5a1b3Sopenharmony_ci   APP:  Application-specific functions
115453a5a1b3Sopenharmony_ci
115553a5a1b3Sopenharmony_ci   Each RTCP packet begins with a fixed part similar to that of RTP data
115653a5a1b3Sopenharmony_ci   packets, followed by structured elements that MAY be of variable
115753a5a1b3Sopenharmony_ci   length according to the packet type but MUST end on a 32-bit
115853a5a1b3Sopenharmony_ci   boundary.  The alignment requirement and a length field in the fixed
115953a5a1b3Sopenharmony_ci   part of each packet are included to make RTCP packets "stackable".
116053a5a1b3Sopenharmony_ci   Multiple RTCP packets can be concatenated without any intervening
116153a5a1b3Sopenharmony_ci   separators to form a compound RTCP packet that is sent in a single
116253a5a1b3Sopenharmony_ci   packet of the lower layer protocol, for example UDP.  There is no
116353a5a1b3Sopenharmony_ci   explicit count of individual RTCP packets in the compound packet
116453a5a1b3Sopenharmony_ci   since the lower layer protocols are expected to provide an overall
116553a5a1b3Sopenharmony_ci   length to determine the end of the compound packet.
116653a5a1b3Sopenharmony_ci
116753a5a1b3Sopenharmony_ci   Each individual RTCP packet in the compound packet may be processed
116853a5a1b3Sopenharmony_ci   independently with no requirements upon the order or combination of
116953a5a1b3Sopenharmony_ci   packets.  However, in order to perform the functions of the protocol,
117053a5a1b3Sopenharmony_ci   the following constraints are imposed:
117153a5a1b3Sopenharmony_ci
117253a5a1b3Sopenharmony_ci
117353a5a1b3Sopenharmony_ci
117453a5a1b3Sopenharmony_ci
117553a5a1b3Sopenharmony_ci
117653a5a1b3Sopenharmony_ci
117753a5a1b3Sopenharmony_ci
117853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 21]
117953a5a1b3Sopenharmony_ci
118053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
118153a5a1b3Sopenharmony_ci
118253a5a1b3Sopenharmony_ci
118353a5a1b3Sopenharmony_ci   o  Reception statistics (in SR or RR) should be sent as often as
118453a5a1b3Sopenharmony_ci      bandwidth constraints will allow to maximize the resolution of the
118553a5a1b3Sopenharmony_ci      statistics, therefore each periodically transmitted compound RTCP
118653a5a1b3Sopenharmony_ci      packet MUST include a report packet.
118753a5a1b3Sopenharmony_ci
118853a5a1b3Sopenharmony_ci   o  New receivers need to receive the CNAME for a source as soon as
118953a5a1b3Sopenharmony_ci      possible to identify the source and to begin associating media for
119053a5a1b3Sopenharmony_ci      purposes such as lip-sync, so each compound RTCP packet MUST also
119153a5a1b3Sopenharmony_ci      include the SDES CNAME except when the compound RTCP packet is
119253a5a1b3Sopenharmony_ci      split for partial encryption as described in Section 9.1.
119353a5a1b3Sopenharmony_ci
119453a5a1b3Sopenharmony_ci   o  The number of packet types that may appear first in the compound
119553a5a1b3Sopenharmony_ci      packet needs to be limited to increase the number of constant bits
119653a5a1b3Sopenharmony_ci      in the first word and the probability of successfully validating
119753a5a1b3Sopenharmony_ci      RTCP packets against misaddressed RTP data packets or other
119853a5a1b3Sopenharmony_ci      unrelated packets.
119953a5a1b3Sopenharmony_ci
120053a5a1b3Sopenharmony_ci   Thus, all RTCP packets MUST be sent in a compound packet of at least
120153a5a1b3Sopenharmony_ci   two individual packets, with the following format:
120253a5a1b3Sopenharmony_ci
120353a5a1b3Sopenharmony_ci   Encryption prefix:  If and only if the compound packet is to be
120453a5a1b3Sopenharmony_ci      encrypted according to the method in Section 9.1, it MUST be
120553a5a1b3Sopenharmony_ci      prefixed by a random 32-bit quantity redrawn for every compound
120653a5a1b3Sopenharmony_ci      packet transmitted.  If padding is required for the encryption, it
120753a5a1b3Sopenharmony_ci      MUST be added to the last packet of the compound packet.
120853a5a1b3Sopenharmony_ci
120953a5a1b3Sopenharmony_ci   SR or RR:  The first RTCP packet in the compound packet MUST
121053a5a1b3Sopenharmony_ci      always be a report packet to facilitate header validation as
121153a5a1b3Sopenharmony_ci      described in Appendix A.2.  This is true even if no data has been
121253a5a1b3Sopenharmony_ci      sent or received, in which case an empty RR MUST be sent, and even
121353a5a1b3Sopenharmony_ci      if the only other RTCP packet in the compound packet is a BYE.
121453a5a1b3Sopenharmony_ci
121553a5a1b3Sopenharmony_ci   Additional RRs:  If the number of sources for which reception
121653a5a1b3Sopenharmony_ci      statistics are being reported exceeds 31, the number that will fit
121753a5a1b3Sopenharmony_ci      into one SR or RR packet, then additional RR packets SHOULD follow
121853a5a1b3Sopenharmony_ci      the initial report packet.
121953a5a1b3Sopenharmony_ci
122053a5a1b3Sopenharmony_ci   SDES:  An SDES packet containing a CNAME item MUST be included
122153a5a1b3Sopenharmony_ci      in each compound RTCP packet, except as noted in Section 9.1.
122253a5a1b3Sopenharmony_ci      Other source description items MAY optionally be included if
122353a5a1b3Sopenharmony_ci      required by a particular application, subject to bandwidth
122453a5a1b3Sopenharmony_ci      constraints (see Section 6.3.9).
122553a5a1b3Sopenharmony_ci
122653a5a1b3Sopenharmony_ci   BYE or APP:  Other RTCP packet types, including those yet to be
122753a5a1b3Sopenharmony_ci      defined, MAY follow in any order, except that BYE SHOULD be the
122853a5a1b3Sopenharmony_ci      last packet sent with a given SSRC/CSRC.  Packet types MAY appear
122953a5a1b3Sopenharmony_ci      more than once.
123053a5a1b3Sopenharmony_ci
123153a5a1b3Sopenharmony_ci
123253a5a1b3Sopenharmony_ci
123353a5a1b3Sopenharmony_ci
123453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 22]
123553a5a1b3Sopenharmony_ci
123653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
123753a5a1b3Sopenharmony_ci
123853a5a1b3Sopenharmony_ci
123953a5a1b3Sopenharmony_ci   An individual RTP participant SHOULD send only one compound RTCP
124053a5a1b3Sopenharmony_ci   packet per report interval in order for the RTCP bandwidth per
124153a5a1b3Sopenharmony_ci   participant to be estimated correctly (see Section 6.2), except when
124253a5a1b3Sopenharmony_ci   the compound RTCP packet is split for partial encryption as described
124353a5a1b3Sopenharmony_ci   in Section 9.1.  If there are too many sources to fit all the
124453a5a1b3Sopenharmony_ci   necessary RR packets into one compound RTCP packet without exceeding
124553a5a1b3Sopenharmony_ci   the maximum transmission unit (MTU) of the network path, then only
124653a5a1b3Sopenharmony_ci   the subset that will fit into one MTU SHOULD be included in each
124753a5a1b3Sopenharmony_ci   interval.  The subsets SHOULD be selected round-robin across multiple
124853a5a1b3Sopenharmony_ci   intervals so that all sources are reported.
124953a5a1b3Sopenharmony_ci
125053a5a1b3Sopenharmony_ci   It is RECOMMENDED that translators and mixers combine individual RTCP
125153a5a1b3Sopenharmony_ci   packets from the multiple sources they are forwarding into one
125253a5a1b3Sopenharmony_ci   compound packet whenever feasible in order to amortize the packet
125353a5a1b3Sopenharmony_ci   overhead (see Section 7).  An example RTCP compound packet as might
125453a5a1b3Sopenharmony_ci   be produced by a mixer is shown in Fig. 1.  If the overall length of
125553a5a1b3Sopenharmony_ci   a compound packet would exceed the MTU of the network path, it SHOULD
125653a5a1b3Sopenharmony_ci   be segmented into multiple shorter compound packets to be transmitted
125753a5a1b3Sopenharmony_ci   in separate packets of the underlying protocol.  This does not impair
125853a5a1b3Sopenharmony_ci   the RTCP bandwidth estimation because each compound packet represents
125953a5a1b3Sopenharmony_ci   at least one distinct participant.  Note that each of the compound
126053a5a1b3Sopenharmony_ci   packets MUST begin with an SR or RR packet.
126153a5a1b3Sopenharmony_ci
126253a5a1b3Sopenharmony_ci   An implementation SHOULD ignore incoming RTCP packets with types
126353a5a1b3Sopenharmony_ci   unknown to it.  Additional RTCP packet types may be registered with
126453a5a1b3Sopenharmony_ci   the Internet Assigned Numbers Authority (IANA) as described in
126553a5a1b3Sopenharmony_ci   Section 15.
126653a5a1b3Sopenharmony_ci
126753a5a1b3Sopenharmony_ci   if encrypted: random 32-bit integer
126853a5a1b3Sopenharmony_ci   |
126953a5a1b3Sopenharmony_ci   |[--------- packet --------][---------- packet ----------][-packet-]
127053a5a1b3Sopenharmony_ci   |
127153a5a1b3Sopenharmony_ci   |                receiver            chunk        chunk
127253a5a1b3Sopenharmony_ci   V                reports           item  item   item  item
127353a5a1b3Sopenharmony_ci   --------------------------------------------------------------------
127453a5a1b3Sopenharmony_ci   R[SR #sendinfo #site1#site2][SDES #CNAME PHONE #CNAME LOC][BYE##why]
127553a5a1b3Sopenharmony_ci   --------------------------------------------------------------------
127653a5a1b3Sopenharmony_ci   |                                                                  |
127753a5a1b3Sopenharmony_ci   |<-----------------------  compound packet ----------------------->|
127853a5a1b3Sopenharmony_ci   |<--------------------------  UDP packet ------------------------->|
127953a5a1b3Sopenharmony_ci
128053a5a1b3Sopenharmony_ci   #: SSRC/CSRC identifier
128153a5a1b3Sopenharmony_ci
128253a5a1b3Sopenharmony_ci              Figure 1: Example of an RTCP compound packet
128353a5a1b3Sopenharmony_ci
128453a5a1b3Sopenharmony_ci
128553a5a1b3Sopenharmony_ci
128653a5a1b3Sopenharmony_ci
128753a5a1b3Sopenharmony_ci
128853a5a1b3Sopenharmony_ci
128953a5a1b3Sopenharmony_ci
129053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 23]
129153a5a1b3Sopenharmony_ci
129253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
129353a5a1b3Sopenharmony_ci
129453a5a1b3Sopenharmony_ci
129553a5a1b3Sopenharmony_ci6.2 RTCP Transmission Interval
129653a5a1b3Sopenharmony_ci
129753a5a1b3Sopenharmony_ci   RTP is designed to allow an application to scale automatically over
129853a5a1b3Sopenharmony_ci   session sizes ranging from a few participants to thousands.  For
129953a5a1b3Sopenharmony_ci   example, in an audio conference the data traffic is inherently self-
130053a5a1b3Sopenharmony_ci   limiting because only one or two people will speak at a time, so with
130153a5a1b3Sopenharmony_ci   multicast distribution the data rate on any given link remains
130253a5a1b3Sopenharmony_ci   relatively constant independent of the number of participants.
130353a5a1b3Sopenharmony_ci   However, the control traffic is not self-limiting.  If the reception
130453a5a1b3Sopenharmony_ci   reports from each participant were sent at a constant rate, the
130553a5a1b3Sopenharmony_ci   control traffic would grow linearly with the number of participants.
130653a5a1b3Sopenharmony_ci   Therefore, the rate must be scaled down by dynamically calculating
130753a5a1b3Sopenharmony_ci   the interval between RTCP packet transmissions.
130853a5a1b3Sopenharmony_ci
130953a5a1b3Sopenharmony_ci   For each session, it is assumed that the data traffic is subject to
131053a5a1b3Sopenharmony_ci   an aggregate limit called the "session bandwidth" to be divided among
131153a5a1b3Sopenharmony_ci   the participants.  This bandwidth might be reserved and the limit
131253a5a1b3Sopenharmony_ci   enforced by the network.  If there is no reservation, there may be
131353a5a1b3Sopenharmony_ci   other constraints, depending on the environment, that establish the
131453a5a1b3Sopenharmony_ci   "reasonable" maximum for the session to use, and that would be the
131553a5a1b3Sopenharmony_ci   session bandwidth.  The session bandwidth may be chosen based on some
131653a5a1b3Sopenharmony_ci   cost or a priori knowledge of the available network bandwidth for the
131753a5a1b3Sopenharmony_ci   session.  It is somewhat independent of the media encoding, but the
131853a5a1b3Sopenharmony_ci   encoding choice may be limited by the session bandwidth.  Often, the
131953a5a1b3Sopenharmony_ci   session bandwidth is the sum of the nominal bandwidths of the senders
132053a5a1b3Sopenharmony_ci   expected to be concurrently active.  For teleconference audio, this
132153a5a1b3Sopenharmony_ci   number would typically be one sender's bandwidth.  For layered
132253a5a1b3Sopenharmony_ci   encodings, each layer is a separate RTP session with its own session
132353a5a1b3Sopenharmony_ci   bandwidth parameter.
132453a5a1b3Sopenharmony_ci
132553a5a1b3Sopenharmony_ci   The session bandwidth parameter is expected to be supplied by a
132653a5a1b3Sopenharmony_ci   session management application when it invokes a media application,
132753a5a1b3Sopenharmony_ci   but media applications MAY set a default based on the single-sender
132853a5a1b3Sopenharmony_ci   data bandwidth for the encoding selected for the session.  The
132953a5a1b3Sopenharmony_ci   application MAY also enforce bandwidth limits based on multicast
133053a5a1b3Sopenharmony_ci   scope rules or other criteria.  All participants MUST use the same
133153a5a1b3Sopenharmony_ci   value for the session bandwidth so that the same RTCP interval will
133253a5a1b3Sopenharmony_ci   be calculated.
133353a5a1b3Sopenharmony_ci
133453a5a1b3Sopenharmony_ci   Bandwidth calculations for control and data traffic include lower-
133553a5a1b3Sopenharmony_ci   layer transport and network protocols (e.g., UDP and IP) since that
133653a5a1b3Sopenharmony_ci   is what the resource reservation system would need to know.  The
133753a5a1b3Sopenharmony_ci   application can also be expected to know which of these protocols are
133853a5a1b3Sopenharmony_ci   in use.  Link level headers are not included in the calculation since
133953a5a1b3Sopenharmony_ci   the packet will be encapsulated with different link level headers as
134053a5a1b3Sopenharmony_ci   it travels.
134153a5a1b3Sopenharmony_ci
134253a5a1b3Sopenharmony_ci
134353a5a1b3Sopenharmony_ci
134453a5a1b3Sopenharmony_ci
134553a5a1b3Sopenharmony_ci
134653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 24]
134753a5a1b3Sopenharmony_ci
134853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
134953a5a1b3Sopenharmony_ci
135053a5a1b3Sopenharmony_ci
135153a5a1b3Sopenharmony_ci   The control traffic should be limited to a small and known fraction
135253a5a1b3Sopenharmony_ci   of the session bandwidth: small so that the primary function of the
135353a5a1b3Sopenharmony_ci   transport protocol to carry data is not impaired; known so that the
135453a5a1b3Sopenharmony_ci   control traffic can be included in the bandwidth specification given
135553a5a1b3Sopenharmony_ci   to a resource reservation protocol, and so that each participant can
135653a5a1b3Sopenharmony_ci   independently calculate its share.  The control traffic bandwidth is
135753a5a1b3Sopenharmony_ci   in addition to the session bandwidth for the data traffic.  It is
135853a5a1b3Sopenharmony_ci   RECOMMENDED that the fraction of the session bandwidth added for RTCP
135953a5a1b3Sopenharmony_ci   be fixed at 5%.  It is also RECOMMENDED that 1/4 of the RTCP
136053a5a1b3Sopenharmony_ci   bandwidth be dedicated to participants that are sending data so that
136153a5a1b3Sopenharmony_ci   in sessions with a large number of receivers but a small number of
136253a5a1b3Sopenharmony_ci   senders, newly joining participants will more quickly receive the
136353a5a1b3Sopenharmony_ci   CNAME for the sending sites.  When the proportion of senders is
136453a5a1b3Sopenharmony_ci   greater than 1/4 of the participants, the senders get their
136553a5a1b3Sopenharmony_ci   proportion of the full RTCP bandwidth.  While the values of these and
136653a5a1b3Sopenharmony_ci   other constants in the interval calculation are not critical, all
136753a5a1b3Sopenharmony_ci   participants in the session MUST use the same values so the same
136853a5a1b3Sopenharmony_ci   interval will be calculated.  Therefore, these constants SHOULD be
136953a5a1b3Sopenharmony_ci   fixed for a particular profile.
137053a5a1b3Sopenharmony_ci
137153a5a1b3Sopenharmony_ci   A profile MAY specify that the control traffic bandwidth may be a
137253a5a1b3Sopenharmony_ci   separate parameter of the session rather than a strict percentage of
137353a5a1b3Sopenharmony_ci   the session bandwidth.  Using a separate parameter allows rate-
137453a5a1b3Sopenharmony_ci   adaptive applications to set an RTCP bandwidth consistent with a
137553a5a1b3Sopenharmony_ci   "typical" data bandwidth that is lower than the maximum bandwidth
137653a5a1b3Sopenharmony_ci   specified by the session bandwidth parameter.
137753a5a1b3Sopenharmony_ci
137853a5a1b3Sopenharmony_ci   The profile MAY further specify that the control traffic bandwidth
137953a5a1b3Sopenharmony_ci   may be divided into two separate session parameters for those
138053a5a1b3Sopenharmony_ci   participants which are active data senders and those which are not;
138153a5a1b3Sopenharmony_ci   let us call the parameters S and R.  Following the recommendation
138253a5a1b3Sopenharmony_ci   that 1/4 of the RTCP bandwidth be dedicated to data senders, the
138353a5a1b3Sopenharmony_ci   RECOMMENDED default values for these two parameters would be 1.25%
138453a5a1b3Sopenharmony_ci   and 3.75%, respectively.  When the proportion of senders is greater
138553a5a1b3Sopenharmony_ci   than S/(S+R) of the participants, the senders get their proportion of
138653a5a1b3Sopenharmony_ci   the sum of these parameters.  Using two parameters allows RTCP
138753a5a1b3Sopenharmony_ci   reception reports to be turned off entirely for a particular session
138853a5a1b3Sopenharmony_ci   by setting the RTCP bandwidth for non-data-senders to zero while
138953a5a1b3Sopenharmony_ci   keeping the RTCP bandwidth for data senders non-zero so that sender
139053a5a1b3Sopenharmony_ci   reports can still be sent for inter-media synchronization.  Turning
139153a5a1b3Sopenharmony_ci   off RTCP reception reports is NOT RECOMMENDED because they are needed
139253a5a1b3Sopenharmony_ci   for the functions listed at the beginning of Section 6, particularly
139353a5a1b3Sopenharmony_ci   reception quality feedback and congestion control.  However, doing so
139453a5a1b3Sopenharmony_ci   may be appropriate for systems operating on unidirectional links or
139553a5a1b3Sopenharmony_ci   for sessions that don't require feedback on the quality of reception
139653a5a1b3Sopenharmony_ci   or liveness of receivers and that have other means to avoid
139753a5a1b3Sopenharmony_ci   congestion.
139853a5a1b3Sopenharmony_ci
139953a5a1b3Sopenharmony_ci
140053a5a1b3Sopenharmony_ci
140153a5a1b3Sopenharmony_ci
140253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 25]
140353a5a1b3Sopenharmony_ci
140453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
140553a5a1b3Sopenharmony_ci
140653a5a1b3Sopenharmony_ci
140753a5a1b3Sopenharmony_ci   The calculated interval between transmissions of compound RTCP
140853a5a1b3Sopenharmony_ci   packets SHOULD also have a lower bound to avoid having bursts of
140953a5a1b3Sopenharmony_ci   packets exceed the allowed bandwidth when the number of participants
141053a5a1b3Sopenharmony_ci   is small and the traffic isn't smoothed according to the law of large
141153a5a1b3Sopenharmony_ci   numbers.  It also keeps the report interval from becoming too small
141253a5a1b3Sopenharmony_ci   during transient outages like a network partition such that
141353a5a1b3Sopenharmony_ci   adaptation is delayed when the partition heals.  At application
141453a5a1b3Sopenharmony_ci   startup, a delay SHOULD be imposed before the first compound RTCP
141553a5a1b3Sopenharmony_ci   packet is sent to allow time for RTCP packets to be received from
141653a5a1b3Sopenharmony_ci   other participants so the report interval will converge to the
141753a5a1b3Sopenharmony_ci   correct value more quickly.  This delay MAY be set to half the
141853a5a1b3Sopenharmony_ci   minimum interval to allow quicker notification that the new
141953a5a1b3Sopenharmony_ci   participant is present.  The RECOMMENDED value for a fixed minimum
142053a5a1b3Sopenharmony_ci   interval is 5 seconds.
142153a5a1b3Sopenharmony_ci
142253a5a1b3Sopenharmony_ci   An implementation MAY scale the minimum RTCP interval to a smaller
142353a5a1b3Sopenharmony_ci   value inversely proportional to the session bandwidth parameter with
142453a5a1b3Sopenharmony_ci   the following limitations:
142553a5a1b3Sopenharmony_ci
142653a5a1b3Sopenharmony_ci   o  For multicast sessions, only active data senders MAY use the
142753a5a1b3Sopenharmony_ci      reduced minimum value to calculate the interval for transmission
142853a5a1b3Sopenharmony_ci      of compound RTCP packets.
142953a5a1b3Sopenharmony_ci
143053a5a1b3Sopenharmony_ci   o  For unicast sessions, the reduced value MAY be used by
143153a5a1b3Sopenharmony_ci      participants that are not active data senders as well, and the
143253a5a1b3Sopenharmony_ci      delay before sending the initial compound RTCP packet MAY be zero.
143353a5a1b3Sopenharmony_ci
143453a5a1b3Sopenharmony_ci   o  For all sessions, the fixed minimum SHOULD be used when
143553a5a1b3Sopenharmony_ci      calculating the participant timeout interval (see Section 6.3.5)
143653a5a1b3Sopenharmony_ci      so that implementations which do not use the reduced value for
143753a5a1b3Sopenharmony_ci      transmitting RTCP packets are not timed out by other participants
143853a5a1b3Sopenharmony_ci      prematurely.
143953a5a1b3Sopenharmony_ci
144053a5a1b3Sopenharmony_ci   o  The RECOMMENDED value for the reduced minimum in seconds is 360
144153a5a1b3Sopenharmony_ci      divided by the session bandwidth in kilobits/second.  This minimum
144253a5a1b3Sopenharmony_ci      is smaller than 5 seconds for bandwidths greater than 72 kb/s.
144353a5a1b3Sopenharmony_ci
144453a5a1b3Sopenharmony_ci   The algorithm described in Section 6.3 and Appendix A.7 was designed
144553a5a1b3Sopenharmony_ci   to meet the goals outlined in this section.  It calculates the
144653a5a1b3Sopenharmony_ci   interval between sending compound RTCP packets to divide the allowed
144753a5a1b3Sopenharmony_ci   control traffic bandwidth among the participants.  This allows an
144853a5a1b3Sopenharmony_ci   application to provide fast response for small sessions where, for
144953a5a1b3Sopenharmony_ci   example, identification of all participants is important, yet
145053a5a1b3Sopenharmony_ci   automatically adapt to large sessions.  The algorithm incorporates
145153a5a1b3Sopenharmony_ci   the following characteristics:
145253a5a1b3Sopenharmony_ci
145353a5a1b3Sopenharmony_ci
145453a5a1b3Sopenharmony_ci
145553a5a1b3Sopenharmony_ci
145653a5a1b3Sopenharmony_ci
145753a5a1b3Sopenharmony_ci
145853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 26]
145953a5a1b3Sopenharmony_ci
146053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
146153a5a1b3Sopenharmony_ci
146253a5a1b3Sopenharmony_ci
146353a5a1b3Sopenharmony_ci   o  The calculated interval between RTCP packets scales linearly with
146453a5a1b3Sopenharmony_ci      the number of members in the group.  It is this linear factor
146553a5a1b3Sopenharmony_ci      which allows for a constant amount of control traffic when summed
146653a5a1b3Sopenharmony_ci      across all members.
146753a5a1b3Sopenharmony_ci
146853a5a1b3Sopenharmony_ci   o  The interval between RTCP packets is varied randomly over the
146953a5a1b3Sopenharmony_ci      range [0.5,1.5] times the calculated interval to avoid unintended
147053a5a1b3Sopenharmony_ci      synchronization of all participants [20].  The first RTCP packet
147153a5a1b3Sopenharmony_ci      sent after joining a session is also delayed by a random variation
147253a5a1b3Sopenharmony_ci      of half the minimum RTCP interval.
147353a5a1b3Sopenharmony_ci
147453a5a1b3Sopenharmony_ci   o  A dynamic estimate of the average compound RTCP packet size is
147553a5a1b3Sopenharmony_ci      calculated, including all those packets received and sent, to
147653a5a1b3Sopenharmony_ci      automatically adapt to changes in the amount of control
147753a5a1b3Sopenharmony_ci      information carried.
147853a5a1b3Sopenharmony_ci
147953a5a1b3Sopenharmony_ci   o  Since the calculated interval is dependent on the number of
148053a5a1b3Sopenharmony_ci      observed group members, there may be undesirable startup effects
148153a5a1b3Sopenharmony_ci      when a new user joins an existing session, or many users
148253a5a1b3Sopenharmony_ci      simultaneously join a new session.  These new users will initially
148353a5a1b3Sopenharmony_ci      have incorrect estimates of the group membership, and thus their
148453a5a1b3Sopenharmony_ci      RTCP transmission interval will be too short.  This problem can be
148553a5a1b3Sopenharmony_ci      significant if many users join the session simultaneously.  To
148653a5a1b3Sopenharmony_ci      deal with this, an algorithm called "timer reconsideration" is
148753a5a1b3Sopenharmony_ci      employed.  This algorithm implements a simple back-off mechanism
148853a5a1b3Sopenharmony_ci      which causes users to hold back RTCP packet transmission if the
148953a5a1b3Sopenharmony_ci      group sizes are increasing.
149053a5a1b3Sopenharmony_ci
149153a5a1b3Sopenharmony_ci   o  When users leave a session, either with a BYE or by timeout, the
149253a5a1b3Sopenharmony_ci      group membership decreases, and thus the calculated interval
149353a5a1b3Sopenharmony_ci      should decrease.  A "reverse reconsideration" algorithm is used to
149453a5a1b3Sopenharmony_ci      allow members to more quickly reduce their intervals in response
149553a5a1b3Sopenharmony_ci      to group membership decreases.
149653a5a1b3Sopenharmony_ci
149753a5a1b3Sopenharmony_ci   o  BYE packets are given different treatment than other RTCP packets.
149853a5a1b3Sopenharmony_ci      When a user leaves a group, and wishes to send a BYE packet, it
149953a5a1b3Sopenharmony_ci      may do so before its next scheduled RTCP packet.  However,
150053a5a1b3Sopenharmony_ci      transmission of BYEs follows a back-off algorithm which avoids
150153a5a1b3Sopenharmony_ci      floods of BYE packets should a large number of members
150253a5a1b3Sopenharmony_ci      simultaneously leave the session.
150353a5a1b3Sopenharmony_ci
150453a5a1b3Sopenharmony_ci   This algorithm may be used for sessions in which all participants are
150553a5a1b3Sopenharmony_ci   allowed to send.  In that case, the session bandwidth parameter is
150653a5a1b3Sopenharmony_ci   the product of the individual sender's bandwidth times the number of
150753a5a1b3Sopenharmony_ci   participants, and the RTCP bandwidth is 5% of that.
150853a5a1b3Sopenharmony_ci
150953a5a1b3Sopenharmony_ci   Details of the algorithm's operation are given in the sections that
151053a5a1b3Sopenharmony_ci   follow.  Appendix A.7 gives an example implementation.
151153a5a1b3Sopenharmony_ci
151253a5a1b3Sopenharmony_ci
151353a5a1b3Sopenharmony_ci
151453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 27]
151553a5a1b3Sopenharmony_ci
151653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
151753a5a1b3Sopenharmony_ci
151853a5a1b3Sopenharmony_ci
151953a5a1b3Sopenharmony_ci6.2.1 Maintaining the Number of Session Members
152053a5a1b3Sopenharmony_ci
152153a5a1b3Sopenharmony_ci   Calculation of the RTCP packet interval depends upon an estimate of
152253a5a1b3Sopenharmony_ci   the number of sites participating in the session.  New sites are
152353a5a1b3Sopenharmony_ci   added to the count when they are heard, and an entry for each SHOULD
152453a5a1b3Sopenharmony_ci   be created in a table indexed by the SSRC or CSRC identifier (see
152553a5a1b3Sopenharmony_ci   Section 8.2) to keep track of them.  New entries MAY be considered
152653a5a1b3Sopenharmony_ci   not valid until multiple packets carrying the new SSRC have been
152753a5a1b3Sopenharmony_ci   received (see Appendix A.1), or until an SDES RTCP packet containing
152853a5a1b3Sopenharmony_ci   a CNAME for that SSRC has been received.  Entries MAY be deleted from
152953a5a1b3Sopenharmony_ci   the table when an RTCP BYE packet with the corresponding SSRC
153053a5a1b3Sopenharmony_ci   identifier is received, except that some straggler data packets might
153153a5a1b3Sopenharmony_ci   arrive after the BYE and cause the entry to be recreated.  Instead,
153253a5a1b3Sopenharmony_ci   the entry SHOULD be marked as having received a BYE and then deleted
153353a5a1b3Sopenharmony_ci   after an appropriate delay.
153453a5a1b3Sopenharmony_ci
153553a5a1b3Sopenharmony_ci   A participant MAY mark another site inactive, or delete it if not yet
153653a5a1b3Sopenharmony_ci   valid, if no RTP or RTCP packet has been received for a small number
153753a5a1b3Sopenharmony_ci   of RTCP report intervals (5 is RECOMMENDED).  This provides some
153853a5a1b3Sopenharmony_ci   robustness against packet loss.  All sites must have the same value
153953a5a1b3Sopenharmony_ci   for this multiplier and must calculate roughly the same value for the
154053a5a1b3Sopenharmony_ci   RTCP report interval in order for this timeout to work properly.
154153a5a1b3Sopenharmony_ci   Therefore, this multiplier SHOULD be fixed for a particular profile.
154253a5a1b3Sopenharmony_ci
154353a5a1b3Sopenharmony_ci   For sessions with a very large number of participants, it may be
154453a5a1b3Sopenharmony_ci   impractical to maintain a table to store the SSRC identifier and
154553a5a1b3Sopenharmony_ci   state information for all of them.  An implementation MAY use SSRC
154653a5a1b3Sopenharmony_ci   sampling, as described in [21], to reduce the storage requirements.
154753a5a1b3Sopenharmony_ci   An implementation MAY use any other algorithm with similar
154853a5a1b3Sopenharmony_ci   performance.  A key requirement is that any algorithm considered
154953a5a1b3Sopenharmony_ci   SHOULD NOT substantially underestimate the group size, although it
155053a5a1b3Sopenharmony_ci   MAY overestimate.
155153a5a1b3Sopenharmony_ci
155253a5a1b3Sopenharmony_ci6.3 RTCP Packet Send and Receive Rules
155353a5a1b3Sopenharmony_ci
155453a5a1b3Sopenharmony_ci   The rules for how to send, and what to do when receiving an RTCP
155553a5a1b3Sopenharmony_ci   packet are outlined here.  An implementation that allows operation in
155653a5a1b3Sopenharmony_ci   a multicast environment or a multipoint unicast environment MUST meet
155753a5a1b3Sopenharmony_ci   the requirements in Section 6.2.  Such an implementation MAY use the
155853a5a1b3Sopenharmony_ci   algorithm defined in this section to meet those requirements, or MAY
155953a5a1b3Sopenharmony_ci   use some other algorithm so long as it provides equivalent or better
156053a5a1b3Sopenharmony_ci   performance.  An implementation which is constrained to two-party
156153a5a1b3Sopenharmony_ci   unicast operation SHOULD still use randomization of the RTCP
156253a5a1b3Sopenharmony_ci   transmission interval to avoid unintended synchronization of multiple
156353a5a1b3Sopenharmony_ci   instances operating in the same environment, but MAY omit the "timer
156453a5a1b3Sopenharmony_ci   reconsideration" and "reverse reconsideration" algorithms in Sections
156553a5a1b3Sopenharmony_ci   6.3.3, 6.3.6 and 6.3.7.
156653a5a1b3Sopenharmony_ci
156753a5a1b3Sopenharmony_ci
156853a5a1b3Sopenharmony_ci
156953a5a1b3Sopenharmony_ci
157053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 28]
157153a5a1b3Sopenharmony_ci
157253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
157353a5a1b3Sopenharmony_ci
157453a5a1b3Sopenharmony_ci
157553a5a1b3Sopenharmony_ci   To execute these rules, a session participant must maintain several
157653a5a1b3Sopenharmony_ci   pieces of state:
157753a5a1b3Sopenharmony_ci
157853a5a1b3Sopenharmony_ci   tp: the last time an RTCP packet was transmitted;
157953a5a1b3Sopenharmony_ci
158053a5a1b3Sopenharmony_ci   tc: the current time;
158153a5a1b3Sopenharmony_ci
158253a5a1b3Sopenharmony_ci   tn: the next scheduled transmission time of an RTCP packet;
158353a5a1b3Sopenharmony_ci
158453a5a1b3Sopenharmony_ci   pmembers: the estimated number of session members at the time tn
158553a5a1b3Sopenharmony_ci      was last recomputed;
158653a5a1b3Sopenharmony_ci
158753a5a1b3Sopenharmony_ci   members: the most current estimate for the number of session
158853a5a1b3Sopenharmony_ci      members;
158953a5a1b3Sopenharmony_ci
159053a5a1b3Sopenharmony_ci   senders: the most current estimate for the number of senders in
159153a5a1b3Sopenharmony_ci      the session;
159253a5a1b3Sopenharmony_ci
159353a5a1b3Sopenharmony_ci   rtcp_bw: The target RTCP bandwidth, i.e., the total bandwidth
159453a5a1b3Sopenharmony_ci      that will be used for RTCP packets by all members of this session,
159553a5a1b3Sopenharmony_ci      in octets per second.  This will be a specified fraction of the
159653a5a1b3Sopenharmony_ci      "session bandwidth" parameter supplied to the application at
159753a5a1b3Sopenharmony_ci      startup.
159853a5a1b3Sopenharmony_ci
159953a5a1b3Sopenharmony_ci   we_sent: Flag that is true if the application has sent data
160053a5a1b3Sopenharmony_ci      since the 2nd previous RTCP report was transmitted.
160153a5a1b3Sopenharmony_ci
160253a5a1b3Sopenharmony_ci   avg_rtcp_size: The average compound RTCP packet size, in octets,
160353a5a1b3Sopenharmony_ci      over all RTCP packets sent and received by this participant.  The
160453a5a1b3Sopenharmony_ci      size includes lower-layer transport and network protocol headers
160553a5a1b3Sopenharmony_ci      (e.g., UDP and IP) as explained in Section 6.2.
160653a5a1b3Sopenharmony_ci
160753a5a1b3Sopenharmony_ci   initial: Flag that is true if the application has not yet sent
160853a5a1b3Sopenharmony_ci      an RTCP packet.
160953a5a1b3Sopenharmony_ci
161053a5a1b3Sopenharmony_ci   Many of these rules make use of the "calculated interval" between
161153a5a1b3Sopenharmony_ci   packet transmissions.  This interval is described in the following
161253a5a1b3Sopenharmony_ci   section.
161353a5a1b3Sopenharmony_ci
161453a5a1b3Sopenharmony_ci6.3.1 Computing the RTCP Transmission Interval
161553a5a1b3Sopenharmony_ci
161653a5a1b3Sopenharmony_ci   To maintain scalability, the average interval between packets from a
161753a5a1b3Sopenharmony_ci   session participant should scale with the group size.  This interval
161853a5a1b3Sopenharmony_ci   is called the calculated interval.  It is obtained by combining a
161953a5a1b3Sopenharmony_ci   number of the pieces of state described above.  The calculated
162053a5a1b3Sopenharmony_ci   interval T is then determined as follows:
162153a5a1b3Sopenharmony_ci
162253a5a1b3Sopenharmony_ci
162353a5a1b3Sopenharmony_ci
162453a5a1b3Sopenharmony_ci
162553a5a1b3Sopenharmony_ci
162653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 29]
162753a5a1b3Sopenharmony_ci
162853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
162953a5a1b3Sopenharmony_ci
163053a5a1b3Sopenharmony_ci
163153a5a1b3Sopenharmony_ci   1. If the number of senders is less than or equal to 25% of the
163253a5a1b3Sopenharmony_ci      membership (members), the interval depends on whether the
163353a5a1b3Sopenharmony_ci      participant is a sender or not (based on the value of we_sent).
163453a5a1b3Sopenharmony_ci      If the participant is a sender (we_sent true), the constant C is
163553a5a1b3Sopenharmony_ci      set to the average RTCP packet size (avg_rtcp_size) divided by 25%
163653a5a1b3Sopenharmony_ci      of the RTCP bandwidth (rtcp_bw), and the constant n is set to the
163753a5a1b3Sopenharmony_ci      number of senders.  If we_sent is not true, the constant C is set
163853a5a1b3Sopenharmony_ci      to the average RTCP packet size divided by 75% of the RTCP
163953a5a1b3Sopenharmony_ci      bandwidth.  The constant n is set to the number of receivers
164053a5a1b3Sopenharmony_ci      (members - senders).  If the number of senders is greater than
164153a5a1b3Sopenharmony_ci      25%, senders and receivers are treated together.  The constant C
164253a5a1b3Sopenharmony_ci      is set to the average RTCP packet size divided by the total RTCP
164353a5a1b3Sopenharmony_ci      bandwidth and n is set to the total number of members.  As stated
164453a5a1b3Sopenharmony_ci      in Section 6.2, an RTP profile MAY specify that the RTCP bandwidth
164553a5a1b3Sopenharmony_ci      may be explicitly defined by two separate parameters (call them S
164653a5a1b3Sopenharmony_ci      and R) for those participants which are senders and those which
164753a5a1b3Sopenharmony_ci      are not.  In that case, the 25% fraction becomes S/(S+R) and the
164853a5a1b3Sopenharmony_ci      75% fraction becomes R/(S+R).  Note that if R is zero, the
164953a5a1b3Sopenharmony_ci      percentage of senders is never greater than S/(S+R), and the
165053a5a1b3Sopenharmony_ci      implementation must avoid division by zero.
165153a5a1b3Sopenharmony_ci
165253a5a1b3Sopenharmony_ci   2. If the participant has not yet sent an RTCP packet (the variable
165353a5a1b3Sopenharmony_ci      initial is true), the constant Tmin is set to 2.5 seconds, else it
165453a5a1b3Sopenharmony_ci      is set to 5 seconds.
165553a5a1b3Sopenharmony_ci
165653a5a1b3Sopenharmony_ci   3. The deterministic calculated interval Td is set to max(Tmin, n*C).
165753a5a1b3Sopenharmony_ci
165853a5a1b3Sopenharmony_ci   4. The calculated interval T is set to a number uniformly distributed
165953a5a1b3Sopenharmony_ci      between 0.5 and 1.5 times the deterministic calculated interval.
166053a5a1b3Sopenharmony_ci
166153a5a1b3Sopenharmony_ci   5. The resulting value of T is divided by e-3/2=1.21828 to compensate
166253a5a1b3Sopenharmony_ci      for the fact that the timer reconsideration algorithm converges to
166353a5a1b3Sopenharmony_ci      a value of the RTCP bandwidth below the intended average.
166453a5a1b3Sopenharmony_ci
166553a5a1b3Sopenharmony_ci   This procedure results in an interval which is random, but which, on
166653a5a1b3Sopenharmony_ci   average, gives at least 25% of the RTCP bandwidth to senders and the
166753a5a1b3Sopenharmony_ci   rest to receivers.  If the senders constitute more than one quarter
166853a5a1b3Sopenharmony_ci   of the membership, this procedure splits the bandwidth equally among
166953a5a1b3Sopenharmony_ci   all participants, on average.
167053a5a1b3Sopenharmony_ci
167153a5a1b3Sopenharmony_ci6.3.2 Initialization
167253a5a1b3Sopenharmony_ci
167353a5a1b3Sopenharmony_ci   Upon joining the session, the participant initializes tp to 0, tc to
167453a5a1b3Sopenharmony_ci   0, senders to 0, pmembers to 1, members to 1, we_sent to false,
167553a5a1b3Sopenharmony_ci   rtcp_bw to the specified fraction of the session bandwidth, initial
167653a5a1b3Sopenharmony_ci   to true, and avg_rtcp_size to the probable size of the first RTCP
167753a5a1b3Sopenharmony_ci   packet that the application will later construct.  The calculated
167853a5a1b3Sopenharmony_ci   interval T is then computed, and the first packet is scheduled for
167953a5a1b3Sopenharmony_ci
168053a5a1b3Sopenharmony_ci
168153a5a1b3Sopenharmony_ci
168253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 30]
168353a5a1b3Sopenharmony_ci
168453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
168553a5a1b3Sopenharmony_ci
168653a5a1b3Sopenharmony_ci
168753a5a1b3Sopenharmony_ci   time tn = T.  This means that a transmission timer is set which
168853a5a1b3Sopenharmony_ci   expires at time T.  Note that an application MAY use any desired
168953a5a1b3Sopenharmony_ci   approach for implementing this timer.
169053a5a1b3Sopenharmony_ci
169153a5a1b3Sopenharmony_ci   The participant adds its own SSRC to the member table.
169253a5a1b3Sopenharmony_ci
169353a5a1b3Sopenharmony_ci6.3.3 Receiving an RTP or Non-BYE RTCP Packet
169453a5a1b3Sopenharmony_ci
169553a5a1b3Sopenharmony_ci   When an RTP or RTCP packet is received from a participant whose SSRC
169653a5a1b3Sopenharmony_ci   is not in the member table, the SSRC is added to the table, and the
169753a5a1b3Sopenharmony_ci   value for members is updated once the participant has been validated
169853a5a1b3Sopenharmony_ci   as described in Section 6.2.1.  The same processing occurs for each
169953a5a1b3Sopenharmony_ci   CSRC in a validated RTP packet.
170053a5a1b3Sopenharmony_ci
170153a5a1b3Sopenharmony_ci   When an RTP packet is received from a participant whose SSRC is not
170253a5a1b3Sopenharmony_ci   in the sender table, the SSRC is added to the table, and the value
170353a5a1b3Sopenharmony_ci   for senders is updated.
170453a5a1b3Sopenharmony_ci
170553a5a1b3Sopenharmony_ci   For each compound RTCP packet received, the value of avg_rtcp_size is
170653a5a1b3Sopenharmony_ci   updated:
170753a5a1b3Sopenharmony_ci
170853a5a1b3Sopenharmony_ci      avg_rtcp_size = (1/16) * packet_size + (15/16) * avg_rtcp_size
170953a5a1b3Sopenharmony_ci
171053a5a1b3Sopenharmony_ci   where packet_size is the size of the RTCP packet just received.
171153a5a1b3Sopenharmony_ci
171253a5a1b3Sopenharmony_ci6.3.4 Receiving an RTCP BYE Packet
171353a5a1b3Sopenharmony_ci
171453a5a1b3Sopenharmony_ci   Except as described in Section 6.3.7 for the case when an RTCP BYE is
171553a5a1b3Sopenharmony_ci   to be transmitted, if the received packet is an RTCP BYE packet, the
171653a5a1b3Sopenharmony_ci   SSRC is checked against the member table.  If present, the entry is
171753a5a1b3Sopenharmony_ci   removed from the table, and the value for members is updated.  The
171853a5a1b3Sopenharmony_ci   SSRC is then checked against the sender table.  If present, the entry
171953a5a1b3Sopenharmony_ci   is removed from the table, and the value for senders is updated.
172053a5a1b3Sopenharmony_ci
172153a5a1b3Sopenharmony_ci   Furthermore, to make the transmission rate of RTCP packets more
172253a5a1b3Sopenharmony_ci   adaptive to changes in group membership, the following "reverse
172353a5a1b3Sopenharmony_ci   reconsideration" algorithm SHOULD be executed when a BYE packet is
172453a5a1b3Sopenharmony_ci   received that reduces members to a value less than pmembers:
172553a5a1b3Sopenharmony_ci
172653a5a1b3Sopenharmony_ci   o  The value for tn is updated according to the following formula:
172753a5a1b3Sopenharmony_ci
172853a5a1b3Sopenharmony_ci         tn = tc + (members/pmembers) * (tn - tc)
172953a5a1b3Sopenharmony_ci
173053a5a1b3Sopenharmony_ci   o  The value for tp is updated according the following formula:
173153a5a1b3Sopenharmony_ci
173253a5a1b3Sopenharmony_ci         tp = tc - (members/pmembers) * (tc - tp).
173353a5a1b3Sopenharmony_ci
173453a5a1b3Sopenharmony_ci
173553a5a1b3Sopenharmony_ci
173653a5a1b3Sopenharmony_ci
173753a5a1b3Sopenharmony_ci
173853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 31]
173953a5a1b3Sopenharmony_ci
174053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
174153a5a1b3Sopenharmony_ci
174253a5a1b3Sopenharmony_ci
174353a5a1b3Sopenharmony_ci   o  The next RTCP packet is rescheduled for transmission at time tn,
174453a5a1b3Sopenharmony_ci      which is now earlier.
174553a5a1b3Sopenharmony_ci
174653a5a1b3Sopenharmony_ci   o  The value of pmembers is set equal to members.
174753a5a1b3Sopenharmony_ci
174853a5a1b3Sopenharmony_ci   This algorithm does not prevent the group size estimate from
174953a5a1b3Sopenharmony_ci   incorrectly dropping to zero for a short time due to premature
175053a5a1b3Sopenharmony_ci   timeouts when most participants of a large session leave at once but
175153a5a1b3Sopenharmony_ci   some remain.  The algorithm does make the estimate return to the
175253a5a1b3Sopenharmony_ci   correct value more rapidly.  This situation is unusual enough and the
175353a5a1b3Sopenharmony_ci   consequences are sufficiently harmless that this problem is deemed
175453a5a1b3Sopenharmony_ci   only a secondary concern.
175553a5a1b3Sopenharmony_ci
175653a5a1b3Sopenharmony_ci6.3.5 Timing Out an SSRC
175753a5a1b3Sopenharmony_ci
175853a5a1b3Sopenharmony_ci   At occasional intervals, the participant MUST check to see if any of
175953a5a1b3Sopenharmony_ci   the other participants time out.  To do this, the participant
176053a5a1b3Sopenharmony_ci   computes the deterministic (without the randomization factor)
176153a5a1b3Sopenharmony_ci   calculated interval Td for a receiver, that is, with we_sent false.
176253a5a1b3Sopenharmony_ci   Any other session member who has not sent an RTP or RTCP packet since
176353a5a1b3Sopenharmony_ci   time tc - MTd (M is the timeout multiplier, and defaults to 5) is
176453a5a1b3Sopenharmony_ci   timed out.  This means that its SSRC is removed from the member list,
176553a5a1b3Sopenharmony_ci   and members is updated.  A similar check is performed on the sender
176653a5a1b3Sopenharmony_ci   list.  Any member on the sender list who has not sent an RTP packet
176753a5a1b3Sopenharmony_ci   since time tc - 2T (within the last two RTCP report intervals) is
176853a5a1b3Sopenharmony_ci   removed from the sender list, and senders is updated.
176953a5a1b3Sopenharmony_ci
177053a5a1b3Sopenharmony_ci   If any members time out, the reverse reconsideration algorithm
177153a5a1b3Sopenharmony_ci   described in Section 6.3.4 SHOULD be performed.
177253a5a1b3Sopenharmony_ci
177353a5a1b3Sopenharmony_ci   The participant MUST perform this check at least once per RTCP
177453a5a1b3Sopenharmony_ci   transmission interval.
177553a5a1b3Sopenharmony_ci
177653a5a1b3Sopenharmony_ci6.3.6 Expiration of Transmission Timer
177753a5a1b3Sopenharmony_ci
177853a5a1b3Sopenharmony_ci   When the packet transmission timer expires, the participant performs
177953a5a1b3Sopenharmony_ci   the following operations:
178053a5a1b3Sopenharmony_ci
178153a5a1b3Sopenharmony_ci   o  The transmission interval T is computed as described in Section
178253a5a1b3Sopenharmony_ci      6.3.1, including the randomization factor.
178353a5a1b3Sopenharmony_ci
178453a5a1b3Sopenharmony_ci   o  If tp + T is less than or equal to tc, an RTCP packet is
178553a5a1b3Sopenharmony_ci      transmitted.  tp is set to tc, then another value for T is
178653a5a1b3Sopenharmony_ci      calculated as in the previous step and tn is set to tc + T.  The
178753a5a1b3Sopenharmony_ci      transmission timer is set to expire again at time tn.  If tp + T
178853a5a1b3Sopenharmony_ci      is greater than tc, tn is set to tp + T.  No RTCP packet is
178953a5a1b3Sopenharmony_ci      transmitted.  The transmission timer is set to expire at time tn.
179053a5a1b3Sopenharmony_ci
179153a5a1b3Sopenharmony_ci
179253a5a1b3Sopenharmony_ci
179353a5a1b3Sopenharmony_ci
179453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 32]
179553a5a1b3Sopenharmony_ci
179653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
179753a5a1b3Sopenharmony_ci
179853a5a1b3Sopenharmony_ci
179953a5a1b3Sopenharmony_ci   o  pmembers is set to members.
180053a5a1b3Sopenharmony_ci
180153a5a1b3Sopenharmony_ci   If an RTCP packet is transmitted, the value of initial is set to
180253a5a1b3Sopenharmony_ci   FALSE.  Furthermore, the value of avg_rtcp_size is updated:
180353a5a1b3Sopenharmony_ci
180453a5a1b3Sopenharmony_ci      avg_rtcp_size = (1/16) * packet_size + (15/16) * avg_rtcp_size
180553a5a1b3Sopenharmony_ci
180653a5a1b3Sopenharmony_ci   where packet_size is the size of the RTCP packet just transmitted.
180753a5a1b3Sopenharmony_ci
180853a5a1b3Sopenharmony_ci6.3.7 Transmitting a BYE Packet
180953a5a1b3Sopenharmony_ci
181053a5a1b3Sopenharmony_ci   When a participant wishes to leave a session, a BYE packet is
181153a5a1b3Sopenharmony_ci   transmitted to inform the other participants of the event.  In order
181253a5a1b3Sopenharmony_ci   to avoid a flood of BYE packets when many participants leave the
181353a5a1b3Sopenharmony_ci   system, a participant MUST execute the following algorithm if the
181453a5a1b3Sopenharmony_ci   number of members is more than 50 when the participant chooses to
181553a5a1b3Sopenharmony_ci   leave.  This algorithm usurps the normal role of the members variable
181653a5a1b3Sopenharmony_ci   to count BYE packets instead:
181753a5a1b3Sopenharmony_ci
181853a5a1b3Sopenharmony_ci   o  When the participant decides to leave the system, tp is reset to
181953a5a1b3Sopenharmony_ci      tc, the current time, members and pmembers are initialized to 1,
182053a5a1b3Sopenharmony_ci      initial is set to 1, we_sent is set to false, senders is set to 0,
182153a5a1b3Sopenharmony_ci      and avg_rtcp_size is set to the size of the compound BYE packet.
182253a5a1b3Sopenharmony_ci      The calculated interval T is computed.  The BYE packet is then
182353a5a1b3Sopenharmony_ci      scheduled for time tn = tc + T.
182453a5a1b3Sopenharmony_ci
182553a5a1b3Sopenharmony_ci   o  Every time a BYE packet from another participant is received,
182653a5a1b3Sopenharmony_ci      members is incremented by 1 regardless of whether that participant
182753a5a1b3Sopenharmony_ci      exists in the member table or not, and when SSRC sampling is in
182853a5a1b3Sopenharmony_ci      use, regardless of whether or not the BYE SSRC would be included
182953a5a1b3Sopenharmony_ci      in the sample.  members is NOT incremented when other RTCP packets
183053a5a1b3Sopenharmony_ci      or RTP packets are received, but only for BYE packets.  Similarly,
183153a5a1b3Sopenharmony_ci      avg_rtcp_size is updated only for received BYE packets.  senders
183253a5a1b3Sopenharmony_ci      is NOT updated when RTP packets arrive; it remains 0.
183353a5a1b3Sopenharmony_ci
183453a5a1b3Sopenharmony_ci   o  Transmission of the BYE packet then follows the rules for
183553a5a1b3Sopenharmony_ci      transmitting a regular RTCP packet, as above.
183653a5a1b3Sopenharmony_ci
183753a5a1b3Sopenharmony_ci   This allows BYE packets to be sent right away, yet controls their
183853a5a1b3Sopenharmony_ci   total bandwidth usage.  In the worst case, this could cause RTCP
183953a5a1b3Sopenharmony_ci   control packets to use twice the bandwidth as normal (10%) -- 5% for
184053a5a1b3Sopenharmony_ci   non-BYE RTCP packets and 5% for BYE.
184153a5a1b3Sopenharmony_ci
184253a5a1b3Sopenharmony_ci   A participant that does not want to wait for the above mechanism to
184353a5a1b3Sopenharmony_ci   allow transmission of a BYE packet MAY leave the group without
184453a5a1b3Sopenharmony_ci   sending a BYE at all.  That participant will eventually be timed out
184553a5a1b3Sopenharmony_ci   by the other group members.
184653a5a1b3Sopenharmony_ci
184753a5a1b3Sopenharmony_ci
184853a5a1b3Sopenharmony_ci
184953a5a1b3Sopenharmony_ci
185053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 33]
185153a5a1b3Sopenharmony_ci
185253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
185353a5a1b3Sopenharmony_ci
185453a5a1b3Sopenharmony_ci
185553a5a1b3Sopenharmony_ci   If the group size estimate members is less than 50 when the
185653a5a1b3Sopenharmony_ci   participant decides to leave, the participant MAY send a BYE packet
185753a5a1b3Sopenharmony_ci   immediately.  Alternatively, the participant MAY choose to execute
185853a5a1b3Sopenharmony_ci   the above BYE backoff algorithm.
185953a5a1b3Sopenharmony_ci
186053a5a1b3Sopenharmony_ci   In either case, a participant which never sent an RTP or RTCP packet
186153a5a1b3Sopenharmony_ci   MUST NOT send a BYE packet when they leave the group.
186253a5a1b3Sopenharmony_ci
186353a5a1b3Sopenharmony_ci6.3.8 Updating we_sent
186453a5a1b3Sopenharmony_ci
186553a5a1b3Sopenharmony_ci   The variable we_sent contains true if the participant has sent an RTP
186653a5a1b3Sopenharmony_ci   packet recently, false otherwise.  This determination is made by
186753a5a1b3Sopenharmony_ci   using the same mechanisms as for managing the set of other
186853a5a1b3Sopenharmony_ci   participants listed in the senders table.  If the participant sends
186953a5a1b3Sopenharmony_ci   an RTP packet when we_sent is false, it adds itself to the sender
187053a5a1b3Sopenharmony_ci   table and sets we_sent to true.  The reverse reconsideration
187153a5a1b3Sopenharmony_ci   algorithm described in Section 6.3.4 SHOULD be performed to possibly
187253a5a1b3Sopenharmony_ci   reduce the delay before sending an SR packet.  Every time another RTP
187353a5a1b3Sopenharmony_ci   packet is sent, the time of transmission of that packet is maintained
187453a5a1b3Sopenharmony_ci   in the table.  The normal sender timeout algorithm is then applied to
187553a5a1b3Sopenharmony_ci   the participant -- if an RTP packet has not been transmitted since
187653a5a1b3Sopenharmony_ci   time tc - 2T, the participant removes itself from the sender table,
187753a5a1b3Sopenharmony_ci   decrements the sender count, and sets we_sent to false.
187853a5a1b3Sopenharmony_ci
187953a5a1b3Sopenharmony_ci6.3.9 Allocation of Source Description Bandwidth
188053a5a1b3Sopenharmony_ci
188153a5a1b3Sopenharmony_ci   This specification defines several source description (SDES) items in
188253a5a1b3Sopenharmony_ci   addition to the mandatory CNAME item, such as NAME (personal name)
188353a5a1b3Sopenharmony_ci   and EMAIL (email address).  It also provides a means to define new
188453a5a1b3Sopenharmony_ci   application-specific RTCP packet types.  Applications should exercise
188553a5a1b3Sopenharmony_ci   caution in allocating control bandwidth to this additional
188653a5a1b3Sopenharmony_ci   information because it will slow down the rate at which reception
188753a5a1b3Sopenharmony_ci   reports and CNAME are sent, thus impairing the performance of the
188853a5a1b3Sopenharmony_ci   protocol.  It is RECOMMENDED that no more than 20% of the RTCP
188953a5a1b3Sopenharmony_ci   bandwidth allocated to a single participant be used to carry the
189053a5a1b3Sopenharmony_ci   additional information.  Furthermore, it is not intended that all
189153a5a1b3Sopenharmony_ci   SDES items will be included in every application.  Those that are
189253a5a1b3Sopenharmony_ci   included SHOULD be assigned a fraction of the bandwidth according to
189353a5a1b3Sopenharmony_ci   their utility.  Rather than estimate these fractions dynamically, it
189453a5a1b3Sopenharmony_ci   is recommended that the percentages be translated statically into
189553a5a1b3Sopenharmony_ci   report interval counts based on the typical length of an item.
189653a5a1b3Sopenharmony_ci
189753a5a1b3Sopenharmony_ci   For example, an application may be designed to send only CNAME, NAME
189853a5a1b3Sopenharmony_ci   and EMAIL and not any others.  NAME might be given much higher
189953a5a1b3Sopenharmony_ci   priority than EMAIL because the NAME would be displayed continuously
190053a5a1b3Sopenharmony_ci   in the application's user interface, whereas EMAIL would be displayed
190153a5a1b3Sopenharmony_ci   only when requested.  At every RTCP interval, an RR packet and an
190253a5a1b3Sopenharmony_ci   SDES packet with the CNAME item would be sent.  For a small session
190353a5a1b3Sopenharmony_ci
190453a5a1b3Sopenharmony_ci
190553a5a1b3Sopenharmony_ci
190653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 34]
190753a5a1b3Sopenharmony_ci
190853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
190953a5a1b3Sopenharmony_ci
191053a5a1b3Sopenharmony_ci
191153a5a1b3Sopenharmony_ci   operating at the minimum interval, that would be every 5 seconds on
191253a5a1b3Sopenharmony_ci   the average.  Every third interval (15 seconds), one extra item would
191353a5a1b3Sopenharmony_ci   be included in the SDES packet.  Seven out of eight times this would
191453a5a1b3Sopenharmony_ci   be the NAME item, and every eighth time (2 minutes) it would be the
191553a5a1b3Sopenharmony_ci   EMAIL item.
191653a5a1b3Sopenharmony_ci
191753a5a1b3Sopenharmony_ci   When multiple applications operate in concert using cross-application
191853a5a1b3Sopenharmony_ci   binding through a common CNAME for each participant, for example in a
191953a5a1b3Sopenharmony_ci   multimedia conference composed of an RTP session for each medium, the
192053a5a1b3Sopenharmony_ci   additional SDES information MAY be sent in only one RTP session.  The
192153a5a1b3Sopenharmony_ci   other sessions would carry only the CNAME item.  In particular, this
192253a5a1b3Sopenharmony_ci   approach should be applied to the multiple sessions of a layered
192353a5a1b3Sopenharmony_ci   encoding scheme (see Section 2.4).
192453a5a1b3Sopenharmony_ci
192553a5a1b3Sopenharmony_ci6.4 Sender and Receiver Reports
192653a5a1b3Sopenharmony_ci
192753a5a1b3Sopenharmony_ci   RTP receivers provide reception quality feedback using RTCP report
192853a5a1b3Sopenharmony_ci   packets which may take one of two forms depending upon whether or not
192953a5a1b3Sopenharmony_ci   the receiver is also a sender.  The only difference between the
193053a5a1b3Sopenharmony_ci   sender report (SR) and receiver report (RR) forms, besides the packet
193153a5a1b3Sopenharmony_ci   type code, is that the sender report includes a 20-byte sender
193253a5a1b3Sopenharmony_ci   information section for use by active senders.  The SR is issued if a
193353a5a1b3Sopenharmony_ci   site has sent any data packets during the interval since issuing the
193453a5a1b3Sopenharmony_ci   last report or the previous one, otherwise the RR is issued.
193553a5a1b3Sopenharmony_ci
193653a5a1b3Sopenharmony_ci   Both the SR and RR forms include zero or more reception report
193753a5a1b3Sopenharmony_ci   blocks, one for each of the synchronization sources from which this
193853a5a1b3Sopenharmony_ci   receiver has received RTP data packets since the last report.
193953a5a1b3Sopenharmony_ci   Reports are not issued for contributing sources listed in the CSRC
194053a5a1b3Sopenharmony_ci   list.  Each reception report block provides statistics about the data
194153a5a1b3Sopenharmony_ci   received from the particular source indicated in that block.  Since a
194253a5a1b3Sopenharmony_ci   maximum of 31 reception report blocks will fit in an SR or RR packet,
194353a5a1b3Sopenharmony_ci   additional RR packets SHOULD be stacked after the initial SR or RR
194453a5a1b3Sopenharmony_ci   packet as needed to contain the reception reports for all sources
194553a5a1b3Sopenharmony_ci   heard during the interval since the last report.  If there are too
194653a5a1b3Sopenharmony_ci   many sources to fit all the necessary RR packets into one compound
194753a5a1b3Sopenharmony_ci   RTCP packet without exceeding the MTU of the network path, then only
194853a5a1b3Sopenharmony_ci   the subset that will fit into one MTU SHOULD be included in each
194953a5a1b3Sopenharmony_ci   interval.  The subsets SHOULD be selected round-robin across multiple
195053a5a1b3Sopenharmony_ci   intervals so that all sources are reported.
195153a5a1b3Sopenharmony_ci
195253a5a1b3Sopenharmony_ci   The next sections define the formats of the two reports, how they may
195353a5a1b3Sopenharmony_ci   be extended in a profile-specific manner if an application requires
195453a5a1b3Sopenharmony_ci   additional feedback information, and how the reports may be used.
195553a5a1b3Sopenharmony_ci   Details of reception reporting by translators and mixers is given in
195653a5a1b3Sopenharmony_ci   Section 7.
195753a5a1b3Sopenharmony_ci
195853a5a1b3Sopenharmony_ci
195953a5a1b3Sopenharmony_ci
196053a5a1b3Sopenharmony_ci
196153a5a1b3Sopenharmony_ci
196253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 35]
196353a5a1b3Sopenharmony_ci
196453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
196553a5a1b3Sopenharmony_ci
196653a5a1b3Sopenharmony_ci
196753a5a1b3Sopenharmony_ci6.4.1 SR: Sender Report RTCP Packet
196853a5a1b3Sopenharmony_ci
196953a5a1b3Sopenharmony_ci        0                   1                   2                   3
197053a5a1b3Sopenharmony_ci        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
197153a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
197253a5a1b3Sopenharmony_ciheader |V=2|P|    RC   |   PT=SR=200   |             length            |
197353a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
197453a5a1b3Sopenharmony_ci       |                         SSRC of sender                        |
197553a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
197653a5a1b3Sopenharmony_cisender |              NTP timestamp, most significant word             |
197753a5a1b3Sopenharmony_ciinfo   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
197853a5a1b3Sopenharmony_ci       |             NTP timestamp, least significant word             |
197953a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
198053a5a1b3Sopenharmony_ci       |                         RTP timestamp                         |
198153a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
198253a5a1b3Sopenharmony_ci       |                     sender's packet count                     |
198353a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
198453a5a1b3Sopenharmony_ci       |                      sender's octet count                     |
198553a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
198653a5a1b3Sopenharmony_cireport |                 SSRC_1 (SSRC of first source)                 |
198753a5a1b3Sopenharmony_ciblock  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
198853a5a1b3Sopenharmony_ci  1    | fraction lost |       cumulative number of packets lost       |
198953a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
199053a5a1b3Sopenharmony_ci       |           extended highest sequence number received           |
199153a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
199253a5a1b3Sopenharmony_ci       |                      interarrival jitter                      |
199353a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
199453a5a1b3Sopenharmony_ci       |                         last SR (LSR)                         |
199553a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
199653a5a1b3Sopenharmony_ci       |                   delay since last SR (DLSR)                  |
199753a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
199853a5a1b3Sopenharmony_cireport |                 SSRC_2 (SSRC of second source)                |
199953a5a1b3Sopenharmony_ciblock  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
200053a5a1b3Sopenharmony_ci  2    :                               ...                             :
200153a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
200253a5a1b3Sopenharmony_ci       |                  profile-specific extensions                  |
200353a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
200453a5a1b3Sopenharmony_ci
200553a5a1b3Sopenharmony_ci   The sender report packet consists of three sections, possibly
200653a5a1b3Sopenharmony_ci   followed by a fourth profile-specific extension section if defined.
200753a5a1b3Sopenharmony_ci   The first section, the header, is 8 octets long.  The fields have the
200853a5a1b3Sopenharmony_ci   following meaning:
200953a5a1b3Sopenharmony_ci
201053a5a1b3Sopenharmony_ci   version (V): 2 bits
201153a5a1b3Sopenharmony_ci      Identifies the version of RTP, which is the same in RTCP packets
201253a5a1b3Sopenharmony_ci      as in RTP data packets.  The version defined by this specification
201353a5a1b3Sopenharmony_ci      is two (2).
201453a5a1b3Sopenharmony_ci
201553a5a1b3Sopenharmony_ci
201653a5a1b3Sopenharmony_ci
201753a5a1b3Sopenharmony_ci
201853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 36]
201953a5a1b3Sopenharmony_ci
202053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
202153a5a1b3Sopenharmony_ci
202253a5a1b3Sopenharmony_ci
202353a5a1b3Sopenharmony_ci   padding (P): 1 bit
202453a5a1b3Sopenharmony_ci      If the padding bit is set, this individual RTCP packet contains
202553a5a1b3Sopenharmony_ci      some additional padding octets at the end which are not part of
202653a5a1b3Sopenharmony_ci      the control information but are included in the length field.  The
202753a5a1b3Sopenharmony_ci      last octet of the padding is a count of how many padding octets
202853a5a1b3Sopenharmony_ci      should be ignored, including itself (it will be a multiple of
202953a5a1b3Sopenharmony_ci      four).  Padding may be needed by some encryption algorithms with
203053a5a1b3Sopenharmony_ci      fixed block sizes.  In a compound RTCP packet, padding is only
203153a5a1b3Sopenharmony_ci      required on one individual packet because the compound packet is
203253a5a1b3Sopenharmony_ci      encrypted as a whole for the method in Section 9.1.  Thus, padding
203353a5a1b3Sopenharmony_ci      MUST only be added to the last individual packet, and if padding
203453a5a1b3Sopenharmony_ci      is added to that packet, the padding bit MUST be set only on that
203553a5a1b3Sopenharmony_ci      packet.  This convention aids the header validity checks described
203653a5a1b3Sopenharmony_ci      in Appendix A.2 and allows detection of packets from some early
203753a5a1b3Sopenharmony_ci      implementations that incorrectly set the padding bit on the first
203853a5a1b3Sopenharmony_ci      individual packet and add padding to the last individual packet.
203953a5a1b3Sopenharmony_ci
204053a5a1b3Sopenharmony_ci   reception report count (RC): 5 bits
204153a5a1b3Sopenharmony_ci      The number of reception report blocks contained in this packet.  A
204253a5a1b3Sopenharmony_ci      value of zero is valid.
204353a5a1b3Sopenharmony_ci
204453a5a1b3Sopenharmony_ci   packet type (PT): 8 bits
204553a5a1b3Sopenharmony_ci      Contains the constant 200 to identify this as an RTCP SR packet.
204653a5a1b3Sopenharmony_ci
204753a5a1b3Sopenharmony_ci   length: 16 bits
204853a5a1b3Sopenharmony_ci      The length of this RTCP packet in 32-bit words minus one,
204953a5a1b3Sopenharmony_ci      including the header and any padding.  (The offset of one makes
205053a5a1b3Sopenharmony_ci      zero a valid length and avoids a possible infinite loop in
205153a5a1b3Sopenharmony_ci      scanning a compound RTCP packet, while counting 32-bit words
205253a5a1b3Sopenharmony_ci      avoids a validity check for a multiple of 4.)
205353a5a1b3Sopenharmony_ci
205453a5a1b3Sopenharmony_ci   SSRC: 32 bits
205553a5a1b3Sopenharmony_ci      The synchronization source identifier for the originator of this
205653a5a1b3Sopenharmony_ci      SR packet.
205753a5a1b3Sopenharmony_ci
205853a5a1b3Sopenharmony_ci   The second section, the sender information, is 20 octets long and is
205953a5a1b3Sopenharmony_ci   present in every sender report packet.  It summarizes the data
206053a5a1b3Sopenharmony_ci   transmissions from this sender.  The fields have the following
206153a5a1b3Sopenharmony_ci   meaning:
206253a5a1b3Sopenharmony_ci
206353a5a1b3Sopenharmony_ci   NTP timestamp: 64 bits
206453a5a1b3Sopenharmony_ci      Indicates the wallclock time (see Section 4) when this report was
206553a5a1b3Sopenharmony_ci      sent so that it may be used in combination with timestamps
206653a5a1b3Sopenharmony_ci      returned in reception reports from other receivers to measure
206753a5a1b3Sopenharmony_ci      round-trip propagation to those receivers.  Receivers should
206853a5a1b3Sopenharmony_ci      expect that the measurement accuracy of the timestamp may be
206953a5a1b3Sopenharmony_ci      limited to far less than the resolution of the NTP timestamp.  The
207053a5a1b3Sopenharmony_ci      measurement uncertainty of the timestamp is not indicated as it
207153a5a1b3Sopenharmony_ci
207253a5a1b3Sopenharmony_ci
207353a5a1b3Sopenharmony_ci
207453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 37]
207553a5a1b3Sopenharmony_ci
207653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
207753a5a1b3Sopenharmony_ci
207853a5a1b3Sopenharmony_ci
207953a5a1b3Sopenharmony_ci      may not be known.  On a system that has no notion of wallclock
208053a5a1b3Sopenharmony_ci      time but does have some system-specific clock such as "system
208153a5a1b3Sopenharmony_ci      uptime", a sender MAY use that clock as a reference to calculate
208253a5a1b3Sopenharmony_ci      relative NTP timestamps.  It is important to choose a commonly
208353a5a1b3Sopenharmony_ci      used clock so that if separate implementations are used to produce
208453a5a1b3Sopenharmony_ci      the individual streams of a multimedia session, all
208553a5a1b3Sopenharmony_ci      implementations will use the same clock.  Until the year 2036,
208653a5a1b3Sopenharmony_ci      relative and absolute timestamps will differ in the high bit so
208753a5a1b3Sopenharmony_ci      (invalid) comparisons will show a large difference; by then one
208853a5a1b3Sopenharmony_ci      hopes relative timestamps will no longer be needed.  A sender that
208953a5a1b3Sopenharmony_ci      has no notion of wallclock or elapsed time MAY set the NTP
209053a5a1b3Sopenharmony_ci      timestamp to zero.
209153a5a1b3Sopenharmony_ci
209253a5a1b3Sopenharmony_ci   RTP timestamp: 32 bits
209353a5a1b3Sopenharmony_ci      Corresponds to the same time as the NTP timestamp (above), but in
209453a5a1b3Sopenharmony_ci      the same units and with the same random offset as the RTP
209553a5a1b3Sopenharmony_ci      timestamps in data packets.  This correspondence may be used for
209653a5a1b3Sopenharmony_ci      intra- and inter-media synchronization for sources whose NTP
209753a5a1b3Sopenharmony_ci      timestamps are synchronized, and may be used by media-independent
209853a5a1b3Sopenharmony_ci      receivers to estimate the nominal RTP clock frequency.  Note that
209953a5a1b3Sopenharmony_ci      in most cases this timestamp will not be equal to the RTP
210053a5a1b3Sopenharmony_ci      timestamp in any adjacent data packet.  Rather, it MUST be
210153a5a1b3Sopenharmony_ci      calculated from the corresponding NTP timestamp using the
210253a5a1b3Sopenharmony_ci      relationship between the RTP timestamp counter and real time as
210353a5a1b3Sopenharmony_ci      maintained by periodically checking the wallclock time at a
210453a5a1b3Sopenharmony_ci      sampling instant.
210553a5a1b3Sopenharmony_ci
210653a5a1b3Sopenharmony_ci   sender's packet count: 32 bits
210753a5a1b3Sopenharmony_ci      The total number of RTP data packets transmitted by the sender
210853a5a1b3Sopenharmony_ci      since starting transmission up until the time this SR packet was
210953a5a1b3Sopenharmony_ci      generated.  The count SHOULD be reset if the sender changes its
211053a5a1b3Sopenharmony_ci      SSRC identifier.
211153a5a1b3Sopenharmony_ci
211253a5a1b3Sopenharmony_ci   sender's octet count: 32 bits
211353a5a1b3Sopenharmony_ci      The total number of payload octets (i.e., not including header or
211453a5a1b3Sopenharmony_ci      padding) transmitted in RTP data packets by the sender since
211553a5a1b3Sopenharmony_ci      starting transmission up until the time this SR packet was
211653a5a1b3Sopenharmony_ci      generated.  The count SHOULD be reset if the sender changes its
211753a5a1b3Sopenharmony_ci      SSRC identifier.  This field can be used to estimate the average
211853a5a1b3Sopenharmony_ci      payload data rate.
211953a5a1b3Sopenharmony_ci
212053a5a1b3Sopenharmony_ci   The third section contains zero or more reception report blocks
212153a5a1b3Sopenharmony_ci   depending on the number of other sources heard by this sender since
212253a5a1b3Sopenharmony_ci   the last report.  Each reception report block conveys statistics on
212353a5a1b3Sopenharmony_ci   the reception of RTP packets from a single synchronization source.
212453a5a1b3Sopenharmony_ci   Receivers SHOULD NOT carry over statistics when a source changes its
212553a5a1b3Sopenharmony_ci   SSRC identifier due to a collision.  These statistics are:
212653a5a1b3Sopenharmony_ci
212753a5a1b3Sopenharmony_ci
212853a5a1b3Sopenharmony_ci
212953a5a1b3Sopenharmony_ci
213053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 38]
213153a5a1b3Sopenharmony_ci
213253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
213353a5a1b3Sopenharmony_ci
213453a5a1b3Sopenharmony_ci
213553a5a1b3Sopenharmony_ci   SSRC_n (source identifier): 32 bits
213653a5a1b3Sopenharmony_ci      The SSRC identifier of the source to which the information in this
213753a5a1b3Sopenharmony_ci      reception report block pertains.
213853a5a1b3Sopenharmony_ci
213953a5a1b3Sopenharmony_ci   fraction lost: 8 bits
214053a5a1b3Sopenharmony_ci      The fraction of RTP data packets from source SSRC_n lost since the
214153a5a1b3Sopenharmony_ci      previous SR or RR packet was sent, expressed as a fixed point
214253a5a1b3Sopenharmony_ci      number with the binary point at the left edge of the field.  (That
214353a5a1b3Sopenharmony_ci      is equivalent to taking the integer part after multiplying the
214453a5a1b3Sopenharmony_ci      loss fraction by 256.)  This fraction is defined to be the number
214553a5a1b3Sopenharmony_ci      of packets lost divided by the number of packets expected, as
214653a5a1b3Sopenharmony_ci      defined in the next paragraph.  An implementation is shown in
214753a5a1b3Sopenharmony_ci      Appendix A.3.  If the loss is negative due to duplicates, the
214853a5a1b3Sopenharmony_ci      fraction lost is set to zero.  Note that a receiver cannot tell
214953a5a1b3Sopenharmony_ci      whether any packets were lost after the last one received, and
215053a5a1b3Sopenharmony_ci      that there will be no reception report block issued for a source
215153a5a1b3Sopenharmony_ci      if all packets from that source sent during the last reporting
215253a5a1b3Sopenharmony_ci      interval have been lost.
215353a5a1b3Sopenharmony_ci
215453a5a1b3Sopenharmony_ci   cumulative number of packets lost: 24 bits
215553a5a1b3Sopenharmony_ci      The total number of RTP data packets from source SSRC_n that have
215653a5a1b3Sopenharmony_ci      been lost since the beginning of reception.  This number is
215753a5a1b3Sopenharmony_ci      defined to be the number of packets expected less the number of
215853a5a1b3Sopenharmony_ci      packets actually received, where the number of packets received
215953a5a1b3Sopenharmony_ci      includes any which are late or duplicates.  Thus, packets that
216053a5a1b3Sopenharmony_ci      arrive late are not counted as lost, and the loss may be negative
216153a5a1b3Sopenharmony_ci      if there are duplicates.  The number of packets expected is
216253a5a1b3Sopenharmony_ci      defined to be the extended last sequence number received, as
216353a5a1b3Sopenharmony_ci      defined next, less the initial sequence number received.  This may
216453a5a1b3Sopenharmony_ci      be calculated as shown in Appendix A.3.
216553a5a1b3Sopenharmony_ci
216653a5a1b3Sopenharmony_ci   extended highest sequence number received: 32 bits
216753a5a1b3Sopenharmony_ci      The low 16 bits contain the highest sequence number received in an
216853a5a1b3Sopenharmony_ci      RTP data packet from source SSRC_n, and the most significant 16
216953a5a1b3Sopenharmony_ci      bits extend that sequence number with the corresponding count of
217053a5a1b3Sopenharmony_ci      sequence number cycles, which may be maintained according to the
217153a5a1b3Sopenharmony_ci      algorithm in Appendix A.1.  Note that different receivers within
217253a5a1b3Sopenharmony_ci      the same session will generate different extensions to the
217353a5a1b3Sopenharmony_ci      sequence number if their start times differ significantly.
217453a5a1b3Sopenharmony_ci
217553a5a1b3Sopenharmony_ci   interarrival jitter: 32 bits
217653a5a1b3Sopenharmony_ci      An estimate of the statistical variance of the RTP data packet
217753a5a1b3Sopenharmony_ci      interarrival time, measured in timestamp units and expressed as an
217853a5a1b3Sopenharmony_ci      unsigned integer.  The interarrival jitter J is defined to be the
217953a5a1b3Sopenharmony_ci      mean deviation (smoothed absolute value) of the difference D in
218053a5a1b3Sopenharmony_ci      packet spacing at the receiver compared to the sender for a pair
218153a5a1b3Sopenharmony_ci      of packets.  As shown in the equation below, this is equivalent to
218253a5a1b3Sopenharmony_ci      the difference in the "relative transit time" for the two packets;
218353a5a1b3Sopenharmony_ci
218453a5a1b3Sopenharmony_ci
218553a5a1b3Sopenharmony_ci
218653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 39]
218753a5a1b3Sopenharmony_ci
218853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
218953a5a1b3Sopenharmony_ci
219053a5a1b3Sopenharmony_ci
219153a5a1b3Sopenharmony_ci      the relative transit time is the difference between a packet's RTP
219253a5a1b3Sopenharmony_ci      timestamp and the receiver's clock at the time of arrival,
219353a5a1b3Sopenharmony_ci      measured in the same units.
219453a5a1b3Sopenharmony_ci
219553a5a1b3Sopenharmony_ci      If Si is the RTP timestamp from packet i, and Ri is the time of
219653a5a1b3Sopenharmony_ci      arrival in RTP timestamp units for packet i, then for two packets
219753a5a1b3Sopenharmony_ci      i and j, D may be expressed as
219853a5a1b3Sopenharmony_ci
219953a5a1b3Sopenharmony_ci         D(i,j) = (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)
220053a5a1b3Sopenharmony_ci
220153a5a1b3Sopenharmony_ci      The interarrival jitter SHOULD be calculated continuously as each
220253a5a1b3Sopenharmony_ci      data packet i is received from source SSRC_n, using this
220353a5a1b3Sopenharmony_ci      difference D for that packet and the previous packet i-1 in order
220453a5a1b3Sopenharmony_ci      of arrival (not necessarily in sequence), according to the formula
220553a5a1b3Sopenharmony_ci
220653a5a1b3Sopenharmony_ci         J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16
220753a5a1b3Sopenharmony_ci
220853a5a1b3Sopenharmony_ci      Whenever a reception report is issued, the current value of J is
220953a5a1b3Sopenharmony_ci      sampled.
221053a5a1b3Sopenharmony_ci
221153a5a1b3Sopenharmony_ci      The jitter calculation MUST conform to the formula specified here
221253a5a1b3Sopenharmony_ci      in order to allow profile-independent monitors to make valid
221353a5a1b3Sopenharmony_ci      interpretations of reports coming from different implementations.
221453a5a1b3Sopenharmony_ci      This algorithm is the optimal first-order estimator and the gain
221553a5a1b3Sopenharmony_ci      parameter 1/16 gives a good noise reduction ratio while
221653a5a1b3Sopenharmony_ci      maintaining a reasonable rate of convergence [22].  A sample
221753a5a1b3Sopenharmony_ci      implementation is shown in Appendix A.8.  See Section 6.4.4 for a
221853a5a1b3Sopenharmony_ci      discussion of the effects of varying packet duration and delay
221953a5a1b3Sopenharmony_ci      before transmission.
222053a5a1b3Sopenharmony_ci
222153a5a1b3Sopenharmony_ci   last SR timestamp (LSR): 32 bits
222253a5a1b3Sopenharmony_ci      The middle 32 bits out of 64 in the NTP timestamp (as explained in
222353a5a1b3Sopenharmony_ci      Section 4) received as part of the most recent RTCP sender report
222453a5a1b3Sopenharmony_ci      (SR) packet from source SSRC_n.  If no SR has been received yet,
222553a5a1b3Sopenharmony_ci      the field is set to zero.
222653a5a1b3Sopenharmony_ci
222753a5a1b3Sopenharmony_ci   delay since last SR (DLSR): 32 bits
222853a5a1b3Sopenharmony_ci      The delay, expressed in units of 1/65536 seconds, between
222953a5a1b3Sopenharmony_ci      receiving the last SR packet from source SSRC_n and sending this
223053a5a1b3Sopenharmony_ci      reception report block.  If no SR packet has been received yet
223153a5a1b3Sopenharmony_ci      from SSRC_n, the DLSR field is set to zero.
223253a5a1b3Sopenharmony_ci
223353a5a1b3Sopenharmony_ci      Let SSRC_r denote the receiver issuing this receiver report.
223453a5a1b3Sopenharmony_ci      Source SSRC_n can compute the round-trip propagation delay to
223553a5a1b3Sopenharmony_ci      SSRC_r by recording the time A when this reception report block is
223653a5a1b3Sopenharmony_ci      received.  It calculates the total round-trip time A-LSR using the
223753a5a1b3Sopenharmony_ci      last SR timestamp (LSR) field, and then subtracting this field to
223853a5a1b3Sopenharmony_ci      leave the round-trip propagation delay as (A - LSR - DLSR).  This
223953a5a1b3Sopenharmony_ci
224053a5a1b3Sopenharmony_ci
224153a5a1b3Sopenharmony_ci
224253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 40]
224353a5a1b3Sopenharmony_ci
224453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
224553a5a1b3Sopenharmony_ci
224653a5a1b3Sopenharmony_ci
224753a5a1b3Sopenharmony_ci      is illustrated in Fig. 2.  Times are shown in both a hexadecimal
224853a5a1b3Sopenharmony_ci      representation of the 32-bit fields and the equivalent floating-
224953a5a1b3Sopenharmony_ci      point decimal representation.  Colons indicate a 32-bit field
225053a5a1b3Sopenharmony_ci      divided into a 16-bit integer part and 16-bit fraction part.
225153a5a1b3Sopenharmony_ci
225253a5a1b3Sopenharmony_ci      This may be used as an approximate measure of distance to cluster
225353a5a1b3Sopenharmony_ci      receivers, although some links have very asymmetric delays.
225453a5a1b3Sopenharmony_ci
225553a5a1b3Sopenharmony_ci   [10 Nov 1995 11:33:25.125 UTC]       [10 Nov 1995 11:33:36.5 UTC]
225653a5a1b3Sopenharmony_ci   n                 SR(n)              A=b710:8000 (46864.500 s)
225753a5a1b3Sopenharmony_ci   ---------------------------------------------------------------->
225853a5a1b3Sopenharmony_ci                      v                 ^
225953a5a1b3Sopenharmony_ci   ntp_sec =0xb44db705 v               ^ dlsr=0x0005:4000 (    5.250s)
226053a5a1b3Sopenharmony_ci   ntp_frac=0x20000000  v             ^  lsr =0xb705:2000 (46853.125s)
226153a5a1b3Sopenharmony_ci     (3024992005.125 s)  v           ^
226253a5a1b3Sopenharmony_ci   r                      v         ^ RR(n)
226353a5a1b3Sopenharmony_ci   ---------------------------------------------------------------->
226453a5a1b3Sopenharmony_ci                          |<-DLSR->|
226553a5a1b3Sopenharmony_ci                           (5.250 s)
226653a5a1b3Sopenharmony_ci
226753a5a1b3Sopenharmony_ci   A     0xb710:8000 (46864.500 s)
226853a5a1b3Sopenharmony_ci   DLSR -0x0005:4000 (    5.250 s)
226953a5a1b3Sopenharmony_ci   LSR  -0xb705:2000 (46853.125 s)
227053a5a1b3Sopenharmony_ci   -------------------------------
227153a5a1b3Sopenharmony_ci   delay 0x0006:2000 (    6.125 s)
227253a5a1b3Sopenharmony_ci
227353a5a1b3Sopenharmony_ci           Figure 2: Example for round-trip time computation
227453a5a1b3Sopenharmony_ci
227553a5a1b3Sopenharmony_ci
227653a5a1b3Sopenharmony_ci
227753a5a1b3Sopenharmony_ci
227853a5a1b3Sopenharmony_ci
227953a5a1b3Sopenharmony_ci
228053a5a1b3Sopenharmony_ci
228153a5a1b3Sopenharmony_ci
228253a5a1b3Sopenharmony_ci
228353a5a1b3Sopenharmony_ci
228453a5a1b3Sopenharmony_ci
228553a5a1b3Sopenharmony_ci
228653a5a1b3Sopenharmony_ci
228753a5a1b3Sopenharmony_ci
228853a5a1b3Sopenharmony_ci
228953a5a1b3Sopenharmony_ci
229053a5a1b3Sopenharmony_ci
229153a5a1b3Sopenharmony_ci
229253a5a1b3Sopenharmony_ci
229353a5a1b3Sopenharmony_ci
229453a5a1b3Sopenharmony_ci
229553a5a1b3Sopenharmony_ci
229653a5a1b3Sopenharmony_ci
229753a5a1b3Sopenharmony_ci
229853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 41]
229953a5a1b3Sopenharmony_ci
230053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
230153a5a1b3Sopenharmony_ci
230253a5a1b3Sopenharmony_ci
230353a5a1b3Sopenharmony_ci6.4.2 RR: Receiver Report RTCP Packet
230453a5a1b3Sopenharmony_ci
230553a5a1b3Sopenharmony_ci        0                   1                   2                   3
230653a5a1b3Sopenharmony_ci        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
230753a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
230853a5a1b3Sopenharmony_ciheader |V=2|P|    RC   |   PT=RR=201   |             length            |
230953a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
231053a5a1b3Sopenharmony_ci       |                     SSRC of packet sender                     |
231153a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
231253a5a1b3Sopenharmony_cireport |                 SSRC_1 (SSRC of first source)                 |
231353a5a1b3Sopenharmony_ciblock  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
231453a5a1b3Sopenharmony_ci  1    | fraction lost |       cumulative number of packets lost       |
231553a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
231653a5a1b3Sopenharmony_ci       |           extended highest sequence number received           |
231753a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
231853a5a1b3Sopenharmony_ci       |                      interarrival jitter                      |
231953a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
232053a5a1b3Sopenharmony_ci       |                         last SR (LSR)                         |
232153a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
232253a5a1b3Sopenharmony_ci       |                   delay since last SR (DLSR)                  |
232353a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
232453a5a1b3Sopenharmony_cireport |                 SSRC_2 (SSRC of second source)                |
232553a5a1b3Sopenharmony_ciblock  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
232653a5a1b3Sopenharmony_ci  2    :                               ...                             :
232753a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
232853a5a1b3Sopenharmony_ci       |                  profile-specific extensions                  |
232953a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
233053a5a1b3Sopenharmony_ci
233153a5a1b3Sopenharmony_ci   The format of the receiver report (RR) packet is the same as that of
233253a5a1b3Sopenharmony_ci   the SR packet except that the packet type field contains the constant
233353a5a1b3Sopenharmony_ci   201 and the five words of sender information are omitted (these are
233453a5a1b3Sopenharmony_ci   the NTP and RTP timestamps and sender's packet and octet counts).
233553a5a1b3Sopenharmony_ci   The remaining fields have the same meaning as for the SR packet.
233653a5a1b3Sopenharmony_ci
233753a5a1b3Sopenharmony_ci   An empty RR packet (RC = 0) MUST be put at the head of a compound
233853a5a1b3Sopenharmony_ci   RTCP packet when there is no data transmission or reception to
233953a5a1b3Sopenharmony_ci   report.
234053a5a1b3Sopenharmony_ci
234153a5a1b3Sopenharmony_ci6.4.3 Extending the Sender and Receiver Reports
234253a5a1b3Sopenharmony_ci
234353a5a1b3Sopenharmony_ci   A profile SHOULD define profile-specific extensions to the sender
234453a5a1b3Sopenharmony_ci   report and receiver report if there is additional information that
234553a5a1b3Sopenharmony_ci   needs to be reported regularly about the sender or receivers.  This
234653a5a1b3Sopenharmony_ci   method SHOULD be used in preference to defining another RTCP packet
234753a5a1b3Sopenharmony_ci   type because it requires less overhead:
234853a5a1b3Sopenharmony_ci
234953a5a1b3Sopenharmony_ci   o  fewer octets in the packet (no RTCP header or SSRC field);
235053a5a1b3Sopenharmony_ci
235153a5a1b3Sopenharmony_ci
235253a5a1b3Sopenharmony_ci
235353a5a1b3Sopenharmony_ci
235453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 42]
235553a5a1b3Sopenharmony_ci
235653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
235753a5a1b3Sopenharmony_ci
235853a5a1b3Sopenharmony_ci
235953a5a1b3Sopenharmony_ci   o  simpler and faster parsing because applications running under that
236053a5a1b3Sopenharmony_ci      profile would be programmed to always expect the extension fields
236153a5a1b3Sopenharmony_ci      in the directly accessible location after the reception reports.
236253a5a1b3Sopenharmony_ci
236353a5a1b3Sopenharmony_ci   The extension is a fourth section in the sender- or receiver-report
236453a5a1b3Sopenharmony_ci   packet which comes at the end after the reception report blocks, if
236553a5a1b3Sopenharmony_ci   any.  If additional sender information is required, then for sender
236653a5a1b3Sopenharmony_ci   reports it would be included first in the extension section, but for
236753a5a1b3Sopenharmony_ci   receiver reports it would not be present.  If information about
236853a5a1b3Sopenharmony_ci   receivers is to be included, that data SHOULD be structured as an
236953a5a1b3Sopenharmony_ci   array of blocks parallel to the existing array of reception report
237053a5a1b3Sopenharmony_ci   blocks; that is, the number of blocks would be indicated by the RC
237153a5a1b3Sopenharmony_ci   field.
237253a5a1b3Sopenharmony_ci
237353a5a1b3Sopenharmony_ci6.4.4 Analyzing Sender and Receiver Reports
237453a5a1b3Sopenharmony_ci
237553a5a1b3Sopenharmony_ci   It is expected that reception quality feedback will be useful not
237653a5a1b3Sopenharmony_ci   only for the sender but also for other receivers and third-party
237753a5a1b3Sopenharmony_ci   monitors.  The sender may modify its transmissions based on the
237853a5a1b3Sopenharmony_ci   feedback; receivers can determine whether problems are local,
237953a5a1b3Sopenharmony_ci   regional or global; network managers may use profile-independent
238053a5a1b3Sopenharmony_ci   monitors that receive only the RTCP packets and not the corresponding
238153a5a1b3Sopenharmony_ci   RTP data packets to evaluate the performance of their networks for
238253a5a1b3Sopenharmony_ci   multicast distribution.
238353a5a1b3Sopenharmony_ci
238453a5a1b3Sopenharmony_ci   Cumulative counts are used in both the sender information and
238553a5a1b3Sopenharmony_ci   receiver report blocks so that differences may be calculated between
238653a5a1b3Sopenharmony_ci   any two reports to make measurements over both short and long time
238753a5a1b3Sopenharmony_ci   periods, and to provide resilience against the loss of a report.  The
238853a5a1b3Sopenharmony_ci   difference between the last two reports received can be used to
238953a5a1b3Sopenharmony_ci   estimate the recent quality of the distribution.  The NTP timestamp
239053a5a1b3Sopenharmony_ci   is included so that rates may be calculated from these differences
239153a5a1b3Sopenharmony_ci   over the interval between two reports.  Since that timestamp is
239253a5a1b3Sopenharmony_ci   independent of the clock rate for the data encoding, it is possible
239353a5a1b3Sopenharmony_ci   to implement encoding- and profile-independent quality monitors.
239453a5a1b3Sopenharmony_ci
239553a5a1b3Sopenharmony_ci   An example calculation is the packet loss rate over the interval
239653a5a1b3Sopenharmony_ci   between two reception reports.  The difference in the cumulative
239753a5a1b3Sopenharmony_ci   number of packets lost gives the number lost during that interval.
239853a5a1b3Sopenharmony_ci   The difference in the extended last sequence numbers received gives
239953a5a1b3Sopenharmony_ci   the number of packets expected during the interval.  The ratio of
240053a5a1b3Sopenharmony_ci   these two is the packet loss fraction over the interval.  This ratio
240153a5a1b3Sopenharmony_ci   should equal the fraction lost field if the two reports are
240253a5a1b3Sopenharmony_ci   consecutive, but otherwise it may not.  The loss rate per second can
240353a5a1b3Sopenharmony_ci   be obtained by dividing the loss fraction by the difference in NTP
240453a5a1b3Sopenharmony_ci   timestamps, expressed in seconds.  The number of packets received is
240553a5a1b3Sopenharmony_ci   the number of packets expected minus the number lost.  The number of
240653a5a1b3Sopenharmony_ci
240753a5a1b3Sopenharmony_ci
240853a5a1b3Sopenharmony_ci
240953a5a1b3Sopenharmony_ci
241053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 43]
241153a5a1b3Sopenharmony_ci
241253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
241353a5a1b3Sopenharmony_ci
241453a5a1b3Sopenharmony_ci
241553a5a1b3Sopenharmony_ci   packets expected may also be used to judge the statistical validity
241653a5a1b3Sopenharmony_ci   of any loss estimates.  For example, 1 out of 5 packets lost has a
241753a5a1b3Sopenharmony_ci   lower significance than 200 out of 1000.
241853a5a1b3Sopenharmony_ci
241953a5a1b3Sopenharmony_ci   From the sender information, a third-party monitor can calculate the
242053a5a1b3Sopenharmony_ci   average payload data rate and the average packet rate over an
242153a5a1b3Sopenharmony_ci   interval without receiving the data.  Taking the ratio of the two
242253a5a1b3Sopenharmony_ci   gives the average payload size.  If it can be assumed that packet
242353a5a1b3Sopenharmony_ci   loss is independent of packet size, then the number of packets
242453a5a1b3Sopenharmony_ci   received by a particular receiver times the average payload size (or
242553a5a1b3Sopenharmony_ci   the corresponding packet size) gives the apparent throughput
242653a5a1b3Sopenharmony_ci   available to that receiver.
242753a5a1b3Sopenharmony_ci
242853a5a1b3Sopenharmony_ci   In addition to the cumulative counts which allow long-term packet
242953a5a1b3Sopenharmony_ci   loss measurements using differences between reports, the fraction
243053a5a1b3Sopenharmony_ci   lost field provides a short-term measurement from a single report.
243153a5a1b3Sopenharmony_ci   This becomes more important as the size of a session scales up enough
243253a5a1b3Sopenharmony_ci   that reception state information might not be kept for all receivers
243353a5a1b3Sopenharmony_ci   or the interval between reports becomes long enough that only one
243453a5a1b3Sopenharmony_ci   report might have been received from a particular receiver.
243553a5a1b3Sopenharmony_ci
243653a5a1b3Sopenharmony_ci   The interarrival jitter field provides a second short-term measure of
243753a5a1b3Sopenharmony_ci   network congestion.  Packet loss tracks persistent congestion while
243853a5a1b3Sopenharmony_ci   the jitter measure tracks transient congestion.  The jitter measure
243953a5a1b3Sopenharmony_ci   may indicate congestion before it leads to packet loss.  The
244053a5a1b3Sopenharmony_ci   interarrival jitter field is only a snapshot of the jitter at the
244153a5a1b3Sopenharmony_ci   time of a report and is not intended to be taken quantitatively.
244253a5a1b3Sopenharmony_ci   Rather, it is intended for comparison across a number of reports from
244353a5a1b3Sopenharmony_ci   one receiver over time or from multiple receivers, e.g., within a
244453a5a1b3Sopenharmony_ci   single network, at the same time.  To allow comparison across
244553a5a1b3Sopenharmony_ci   receivers, it is important the the jitter be calculated according to
244653a5a1b3Sopenharmony_ci   the same formula by all receivers.
244753a5a1b3Sopenharmony_ci
244853a5a1b3Sopenharmony_ci   Because the jitter calculation is based on the RTP timestamp which
244953a5a1b3Sopenharmony_ci   represents the instant when the first data in the packet was sampled,
245053a5a1b3Sopenharmony_ci   any variation in the delay between that sampling instant and the time
245153a5a1b3Sopenharmony_ci   the packet is transmitted will affect the resulting jitter that is
245253a5a1b3Sopenharmony_ci   calculated.  Such a variation in delay would occur for audio packets
245353a5a1b3Sopenharmony_ci   of varying duration.  It will also occur for video encodings because
245453a5a1b3Sopenharmony_ci   the timestamp is the same for all the packets of one frame but those
245553a5a1b3Sopenharmony_ci   packets are not all transmitted at the same time.  The variation in
245653a5a1b3Sopenharmony_ci   delay until transmission does reduce the accuracy of the jitter
245753a5a1b3Sopenharmony_ci   calculation as a measure of the behavior of the network by itself,
245853a5a1b3Sopenharmony_ci   but it is appropriate to include considering that the receiver buffer
245953a5a1b3Sopenharmony_ci   must accommodate it.  When the jitter calculation is used as a
246053a5a1b3Sopenharmony_ci   comparative measure, the (constant) component due to variation in
246153a5a1b3Sopenharmony_ci   delay until transmission subtracts out so that a change in the
246253a5a1b3Sopenharmony_ci
246353a5a1b3Sopenharmony_ci
246453a5a1b3Sopenharmony_ci
246553a5a1b3Sopenharmony_ci
246653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 44]
246753a5a1b3Sopenharmony_ci
246853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
246953a5a1b3Sopenharmony_ci
247053a5a1b3Sopenharmony_ci
247153a5a1b3Sopenharmony_ci   network jitter component can then be observed unless it is relatively
247253a5a1b3Sopenharmony_ci   small.  If the change is small, then it is likely to be
247353a5a1b3Sopenharmony_ci   inconsequential.
247453a5a1b3Sopenharmony_ci
247553a5a1b3Sopenharmony_ci6.5 SDES: Source Description RTCP Packet
247653a5a1b3Sopenharmony_ci
247753a5a1b3Sopenharmony_ci        0                   1                   2                   3
247853a5a1b3Sopenharmony_ci        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
247953a5a1b3Sopenharmony_ci       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
248053a5a1b3Sopenharmony_ciheader |V=2|P|    SC   |  PT=SDES=202  |             length            |
248153a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
248253a5a1b3Sopenharmony_cichunk  |                          SSRC/CSRC_1                          |
248353a5a1b3Sopenharmony_ci  1    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
248453a5a1b3Sopenharmony_ci       |                           SDES items                          |
248553a5a1b3Sopenharmony_ci       |                              ...                              |
248653a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
248753a5a1b3Sopenharmony_cichunk  |                          SSRC/CSRC_2                          |
248853a5a1b3Sopenharmony_ci  2    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
248953a5a1b3Sopenharmony_ci       |                           SDES items                          |
249053a5a1b3Sopenharmony_ci       |                              ...                              |
249153a5a1b3Sopenharmony_ci       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
249253a5a1b3Sopenharmony_ci
249353a5a1b3Sopenharmony_ci   The SDES packet is a three-level structure composed of a header and
249453a5a1b3Sopenharmony_ci   zero or more chunks, each of which is composed of items describing
249553a5a1b3Sopenharmony_ci   the source identified in that chunk.  The items are described
249653a5a1b3Sopenharmony_ci   individually in subsequent sections.
249753a5a1b3Sopenharmony_ci
249853a5a1b3Sopenharmony_ci   version (V), padding (P), length:
249953a5a1b3Sopenharmony_ci      As described for the SR packet (see Section 6.4.1).
250053a5a1b3Sopenharmony_ci
250153a5a1b3Sopenharmony_ci   packet type (PT): 8 bits
250253a5a1b3Sopenharmony_ci      Contains the constant 202 to identify this as an RTCP SDES packet.
250353a5a1b3Sopenharmony_ci
250453a5a1b3Sopenharmony_ci   source count (SC): 5 bits
250553a5a1b3Sopenharmony_ci      The number of SSRC/CSRC chunks contained in this SDES packet.  A
250653a5a1b3Sopenharmony_ci      value of zero is valid but useless.
250753a5a1b3Sopenharmony_ci
250853a5a1b3Sopenharmony_ci   Each chunk consists of an SSRC/CSRC identifier followed by a list of
250953a5a1b3Sopenharmony_ci   zero or more items, which carry information about the SSRC/CSRC.
251053a5a1b3Sopenharmony_ci   Each chunk starts on a 32-bit boundary.  Each item consists of an 8-
251153a5a1b3Sopenharmony_ci   bit type field, an 8-bit octet count describing the length of the
251253a5a1b3Sopenharmony_ci   text (thus, not including this two-octet header), and the text
251353a5a1b3Sopenharmony_ci   itself.  Note that the text can be no longer than 255 octets, but
251453a5a1b3Sopenharmony_ci   this is consistent with the need to limit RTCP bandwidth consumption.
251553a5a1b3Sopenharmony_ci
251653a5a1b3Sopenharmony_ci
251753a5a1b3Sopenharmony_ci
251853a5a1b3Sopenharmony_ci
251953a5a1b3Sopenharmony_ci
252053a5a1b3Sopenharmony_ci
252153a5a1b3Sopenharmony_ci
252253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 45]
252353a5a1b3Sopenharmony_ci
252453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
252553a5a1b3Sopenharmony_ci
252653a5a1b3Sopenharmony_ci
252753a5a1b3Sopenharmony_ci   The text is encoded according to the UTF-8 encoding specified in RFC
252853a5a1b3Sopenharmony_ci   2279 [5].  US-ASCII is a subset of this encoding and requires no
252953a5a1b3Sopenharmony_ci   additional encoding.  The presence of multi-octet encodings is
253053a5a1b3Sopenharmony_ci   indicated by setting the most significant bit of a character to a
253153a5a1b3Sopenharmony_ci   value of one.
253253a5a1b3Sopenharmony_ci
253353a5a1b3Sopenharmony_ci   Items are contiguous, i.e., items are not individually padded to a
253453a5a1b3Sopenharmony_ci   32-bit boundary.  Text is not null terminated because some multi-
253553a5a1b3Sopenharmony_ci   octet encodings include null octets.  The list of items in each chunk
253653a5a1b3Sopenharmony_ci   MUST be terminated by one or more null octets, the first of which is
253753a5a1b3Sopenharmony_ci   interpreted as an item type of zero to denote the end of the list.
253853a5a1b3Sopenharmony_ci   No length octet follows the null item type octet, but additional null
253953a5a1b3Sopenharmony_ci   octets MUST be included if needed to pad until the next 32-bit
254053a5a1b3Sopenharmony_ci   boundary.  Note that this padding is separate from that indicated by
254153a5a1b3Sopenharmony_ci   the P bit in the RTCP header.  A chunk with zero items (four null
254253a5a1b3Sopenharmony_ci   octets) is valid but useless.
254353a5a1b3Sopenharmony_ci
254453a5a1b3Sopenharmony_ci   End systems send one SDES packet containing their own source
254553a5a1b3Sopenharmony_ci   identifier (the same as the SSRC in the fixed RTP header).  A mixer
254653a5a1b3Sopenharmony_ci   sends one SDES packet containing a chunk for each contributing source
254753a5a1b3Sopenharmony_ci   from which it is receiving SDES information, or multiple complete
254853a5a1b3Sopenharmony_ci   SDES packets in the format above if there are more than 31 such
254953a5a1b3Sopenharmony_ci   sources (see Section 7).
255053a5a1b3Sopenharmony_ci
255153a5a1b3Sopenharmony_ci   The SDES items currently defined are described in the next sections.
255253a5a1b3Sopenharmony_ci   Only the CNAME item is mandatory.  Some items shown here may be
255353a5a1b3Sopenharmony_ci   useful only for particular profiles, but the item types are all
255453a5a1b3Sopenharmony_ci   assigned from one common space to promote shared use and to simplify
255553a5a1b3Sopenharmony_ci   profile-independent applications.  Additional items may be defined in
255653a5a1b3Sopenharmony_ci   a profile by registering the type numbers with IANA as described in
255753a5a1b3Sopenharmony_ci   Section 15.
255853a5a1b3Sopenharmony_ci
255953a5a1b3Sopenharmony_ci6.5.1 CNAME: Canonical End-Point Identifier SDES Item
256053a5a1b3Sopenharmony_ci
256153a5a1b3Sopenharmony_ci    0                   1                   2                   3
256253a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
256353a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
256453a5a1b3Sopenharmony_ci   |    CNAME=1    |     length    | user and domain name        ...
256553a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
256653a5a1b3Sopenharmony_ci
256753a5a1b3Sopenharmony_ci   The CNAME identifier has the following properties:
256853a5a1b3Sopenharmony_ci
256953a5a1b3Sopenharmony_ci   o  Because the randomly allocated SSRC identifier may change if a
257053a5a1b3Sopenharmony_ci      conflict is discovered or if a program is restarted, the CNAME
257153a5a1b3Sopenharmony_ci      item MUST be included to provide the binding from the SSRC
257253a5a1b3Sopenharmony_ci      identifier to an identifier for the source (sender or receiver)
257353a5a1b3Sopenharmony_ci      that remains constant.
257453a5a1b3Sopenharmony_ci
257553a5a1b3Sopenharmony_ci
257653a5a1b3Sopenharmony_ci
257753a5a1b3Sopenharmony_ci
257853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 46]
257953a5a1b3Sopenharmony_ci
258053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
258153a5a1b3Sopenharmony_ci
258253a5a1b3Sopenharmony_ci
258353a5a1b3Sopenharmony_ci   o  Like the SSRC identifier, the CNAME identifier SHOULD also be
258453a5a1b3Sopenharmony_ci      unique among all participants within one RTP session.
258553a5a1b3Sopenharmony_ci
258653a5a1b3Sopenharmony_ci   o  To provide a binding across multiple media tools used by one
258753a5a1b3Sopenharmony_ci      participant in a set of related RTP sessions, the CNAME SHOULD be
258853a5a1b3Sopenharmony_ci      fixed for that participant.
258953a5a1b3Sopenharmony_ci
259053a5a1b3Sopenharmony_ci   o  To facilitate third-party monitoring, the CNAME SHOULD be suitable
259153a5a1b3Sopenharmony_ci      for either a program or a person to locate the source.
259253a5a1b3Sopenharmony_ci
259353a5a1b3Sopenharmony_ci   Therefore, the CNAME SHOULD be derived algorithmically and not
259453a5a1b3Sopenharmony_ci   entered manually, when possible.  To meet these requirements, the
259553a5a1b3Sopenharmony_ci   following format SHOULD be used unless a profile specifies an
259653a5a1b3Sopenharmony_ci   alternate syntax or semantics.  The CNAME item SHOULD have the format
259753a5a1b3Sopenharmony_ci   "user@host", or "host" if a user name is not available as on single-
259853a5a1b3Sopenharmony_ci   user systems.  For both formats, "host" is either the fully qualified
259953a5a1b3Sopenharmony_ci   domain name of the host from which the real-time data originates,
260053a5a1b3Sopenharmony_ci   formatted according to the rules specified in RFC 1034 [6], RFC 1035
260153a5a1b3Sopenharmony_ci   [7] and Section 2.1 of RFC 1123 [8]; or the standard ASCII
260253a5a1b3Sopenharmony_ci   representation of the host's numeric address on the interface used
260353a5a1b3Sopenharmony_ci   for the RTP communication.  For example, the standard ASCII
260453a5a1b3Sopenharmony_ci   representation of an IP Version 4 address is "dotted decimal", also
260553a5a1b3Sopenharmony_ci   known as dotted quad, and for IP Version 6, addresses are textually
260653a5a1b3Sopenharmony_ci   represented as groups of hexadecimal digits separated by colons (with
260753a5a1b3Sopenharmony_ci   variations as detailed in RFC 3513 [23]).  Other address types are
260853a5a1b3Sopenharmony_ci   expected to have ASCII representations that are mutually unique.  The
260953a5a1b3Sopenharmony_ci   fully qualified domain name is more convenient for a human observer
261053a5a1b3Sopenharmony_ci   and may avoid the need to send a NAME item in addition, but it may be
261153a5a1b3Sopenharmony_ci   difficult or impossible to obtain reliably in some operating
261253a5a1b3Sopenharmony_ci   environments.  Applications that may be run in such environments
261353a5a1b3Sopenharmony_ci   SHOULD use the ASCII representation of the address instead.
261453a5a1b3Sopenharmony_ci
261553a5a1b3Sopenharmony_ci   Examples are "doe@sleepy.example.com", "doe@192.0.2.89" or
261653a5a1b3Sopenharmony_ci   "doe@2201:056D::112E:144A:1E24" for a multi-user system.  On a system
261753a5a1b3Sopenharmony_ci   with no user name, examples would be "sleepy.example.com",
261853a5a1b3Sopenharmony_ci   "192.0.2.89" or "2201:056D::112E:144A:1E24".
261953a5a1b3Sopenharmony_ci
262053a5a1b3Sopenharmony_ci   The user name SHOULD be in a form that a program such as "finger" or
262153a5a1b3Sopenharmony_ci   "talk" could use, i.e., it typically is the login name rather than
262253a5a1b3Sopenharmony_ci   the personal name.  The host name is not necessarily identical to the
262353a5a1b3Sopenharmony_ci   one in the participant's electronic mail address.
262453a5a1b3Sopenharmony_ci
262553a5a1b3Sopenharmony_ci   This syntax will not provide unique identifiers for each source if an
262653a5a1b3Sopenharmony_ci   application permits a user to generate multiple sources from one
262753a5a1b3Sopenharmony_ci   host.  Such an application would have to rely on the SSRC to further
262853a5a1b3Sopenharmony_ci   identify the source, or the profile for that application would have
262953a5a1b3Sopenharmony_ci   to specify additional syntax for the CNAME identifier.
263053a5a1b3Sopenharmony_ci
263153a5a1b3Sopenharmony_ci
263253a5a1b3Sopenharmony_ci
263353a5a1b3Sopenharmony_ci
263453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 47]
263553a5a1b3Sopenharmony_ci
263653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
263753a5a1b3Sopenharmony_ci
263853a5a1b3Sopenharmony_ci
263953a5a1b3Sopenharmony_ci   If each application creates its CNAME independently, the resulting
264053a5a1b3Sopenharmony_ci   CNAMEs may not be identical as would be required to provide a binding
264153a5a1b3Sopenharmony_ci   across multiple media tools belonging to one participant in a set of
264253a5a1b3Sopenharmony_ci   related RTP sessions.  If cross-media binding is required, it may be
264353a5a1b3Sopenharmony_ci   necessary for the CNAME of each tool to be externally configured with
264453a5a1b3Sopenharmony_ci   the same value by a coordination tool.
264553a5a1b3Sopenharmony_ci
264653a5a1b3Sopenharmony_ci   Application writers should be aware that private network address
264753a5a1b3Sopenharmony_ci   assignments such as the Net-10 assignment proposed in RFC 1918 [24]
264853a5a1b3Sopenharmony_ci   may create network addresses that are not globally unique.  This
264953a5a1b3Sopenharmony_ci   would lead to non-unique CNAMEs if hosts with private addresses and
265053a5a1b3Sopenharmony_ci   no direct IP connectivity to the public Internet have their RTP
265153a5a1b3Sopenharmony_ci   packets forwarded to the public Internet through an RTP-level
265253a5a1b3Sopenharmony_ci   translator.  (See also RFC 1627 [25].)  To handle this case,
265353a5a1b3Sopenharmony_ci   applications MAY provide a means to configure a unique CNAME, but the
265453a5a1b3Sopenharmony_ci   burden is on the translator to translate CNAMEs from private
265553a5a1b3Sopenharmony_ci   addresses to public addresses if necessary to keep private addresses
265653a5a1b3Sopenharmony_ci   from being exposed.
265753a5a1b3Sopenharmony_ci
265853a5a1b3Sopenharmony_ci6.5.2 NAME: User Name SDES Item
265953a5a1b3Sopenharmony_ci
266053a5a1b3Sopenharmony_ci    0                   1                   2                   3
266153a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
266253a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
266353a5a1b3Sopenharmony_ci   |     NAME=2    |     length    | common name of source       ...
266453a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
266553a5a1b3Sopenharmony_ci
266653a5a1b3Sopenharmony_ci   This is the real name used to describe the source, e.g., "John Doe,
266753a5a1b3Sopenharmony_ci   Bit Recycler".  It may be in any form desired by the user.  For
266853a5a1b3Sopenharmony_ci   applications such as conferencing, this form of name may be the most
266953a5a1b3Sopenharmony_ci   desirable for display in participant lists, and therefore might be
267053a5a1b3Sopenharmony_ci   sent most frequently of those items other than CNAME.  Profiles MAY
267153a5a1b3Sopenharmony_ci   establish such priorities.  The NAME value is expected to remain
267253a5a1b3Sopenharmony_ci   constant at least for the duration of a session.  It SHOULD NOT be
267353a5a1b3Sopenharmony_ci   relied upon to be unique among all participants in the session.
267453a5a1b3Sopenharmony_ci
267553a5a1b3Sopenharmony_ci6.5.3 EMAIL: Electronic Mail Address SDES Item
267653a5a1b3Sopenharmony_ci
267753a5a1b3Sopenharmony_ci    0                   1                   2                   3
267853a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
267953a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
268053a5a1b3Sopenharmony_ci   |    EMAIL=3    |     length    | email address of source     ...
268153a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
268253a5a1b3Sopenharmony_ci
268353a5a1b3Sopenharmony_ci   The email address is formatted according to RFC 2822 [9], for
268453a5a1b3Sopenharmony_ci   example, "John.Doe@example.com".  The EMAIL value is expected to
268553a5a1b3Sopenharmony_ci   remain constant for the duration of a session.
268653a5a1b3Sopenharmony_ci
268753a5a1b3Sopenharmony_ci
268853a5a1b3Sopenharmony_ci
268953a5a1b3Sopenharmony_ci
269053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 48]
269153a5a1b3Sopenharmony_ci
269253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
269353a5a1b3Sopenharmony_ci
269453a5a1b3Sopenharmony_ci
269553a5a1b3Sopenharmony_ci6.5.4 PHONE: Phone Number SDES Item
269653a5a1b3Sopenharmony_ci
269753a5a1b3Sopenharmony_ci    0                   1                   2                   3
269853a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
269953a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
270053a5a1b3Sopenharmony_ci   |    PHONE=4    |     length    | phone number of source      ...
270153a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
270253a5a1b3Sopenharmony_ci
270353a5a1b3Sopenharmony_ci   The phone number SHOULD be formatted with the plus sign replacing the
270453a5a1b3Sopenharmony_ci   international access code.  For example, "+1 908 555 1212" for a
270553a5a1b3Sopenharmony_ci   number in the United States.
270653a5a1b3Sopenharmony_ci
270753a5a1b3Sopenharmony_ci6.5.5 LOC: Geographic User Location SDES Item
270853a5a1b3Sopenharmony_ci
270953a5a1b3Sopenharmony_ci    0                   1                   2                   3
271053a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
271153a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
271253a5a1b3Sopenharmony_ci   |     LOC=5     |     length    | geographic location of site ...
271353a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
271453a5a1b3Sopenharmony_ci
271553a5a1b3Sopenharmony_ci   Depending on the application, different degrees of detail are
271653a5a1b3Sopenharmony_ci   appropriate for this item.  For conference applications, a string
271753a5a1b3Sopenharmony_ci   like "Murray Hill, New Jersey" may be sufficient, while, for an
271853a5a1b3Sopenharmony_ci   active badge system, strings like "Room 2A244, AT&T BL MH" might be
271953a5a1b3Sopenharmony_ci   appropriate.  The degree of detail is left to the implementation
272053a5a1b3Sopenharmony_ci   and/or user, but format and content MAY be prescribed by a profile.
272153a5a1b3Sopenharmony_ci   The LOC value is expected to remain constant for the duration of a
272253a5a1b3Sopenharmony_ci   session, except for mobile hosts.
272353a5a1b3Sopenharmony_ci
272453a5a1b3Sopenharmony_ci6.5.6 TOOL: Application or Tool Name SDES Item
272553a5a1b3Sopenharmony_ci
272653a5a1b3Sopenharmony_ci    0                   1                   2                   3
272753a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
272853a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
272953a5a1b3Sopenharmony_ci   |     TOOL=6    |     length    |name/version of source appl. ...
273053a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
273153a5a1b3Sopenharmony_ci
273253a5a1b3Sopenharmony_ci   A string giving the name and possibly version of the application
273353a5a1b3Sopenharmony_ci   generating the stream, e.g., "videotool 1.2".  This information may
273453a5a1b3Sopenharmony_ci   be useful for debugging purposes and is similar to the Mailer or
273553a5a1b3Sopenharmony_ci   Mail-System-Version SMTP headers.  The TOOL value is expected to
273653a5a1b3Sopenharmony_ci   remain constant for the duration of the session.
273753a5a1b3Sopenharmony_ci
273853a5a1b3Sopenharmony_ci
273953a5a1b3Sopenharmony_ci
274053a5a1b3Sopenharmony_ci
274153a5a1b3Sopenharmony_ci
274253a5a1b3Sopenharmony_ci
274353a5a1b3Sopenharmony_ci
274453a5a1b3Sopenharmony_ci
274553a5a1b3Sopenharmony_ci
274653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 49]
274753a5a1b3Sopenharmony_ci
274853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
274953a5a1b3Sopenharmony_ci
275053a5a1b3Sopenharmony_ci
275153a5a1b3Sopenharmony_ci6.5.7 NOTE: Notice/Status SDES Item
275253a5a1b3Sopenharmony_ci
275353a5a1b3Sopenharmony_ci    0                   1                   2                   3
275453a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
275553a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
275653a5a1b3Sopenharmony_ci   |     NOTE=7    |     length    | note about the source       ...
275753a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
275853a5a1b3Sopenharmony_ci
275953a5a1b3Sopenharmony_ci   The following semantics are suggested for this item, but these or
276053a5a1b3Sopenharmony_ci   other semantics MAY be explicitly defined by a profile.  The NOTE
276153a5a1b3Sopenharmony_ci   item is intended for transient messages describing the current state
276253a5a1b3Sopenharmony_ci   of the source, e.g., "on the phone, can't talk".  Or, during a
276353a5a1b3Sopenharmony_ci   seminar, this item might be used to convey the title of the talk.  It
276453a5a1b3Sopenharmony_ci   should be used only to carry exceptional information and SHOULD NOT
276553a5a1b3Sopenharmony_ci   be included routinely by all participants because this would slow
276653a5a1b3Sopenharmony_ci   down the rate at which reception reports and CNAME are sent, thus
276753a5a1b3Sopenharmony_ci   impairing the performance of the protocol.  In particular, it SHOULD
276853a5a1b3Sopenharmony_ci   NOT be included as an item in a user's configuration file nor
276953a5a1b3Sopenharmony_ci   automatically generated as in a quote-of-the-day.
277053a5a1b3Sopenharmony_ci
277153a5a1b3Sopenharmony_ci   Since the NOTE item may be important to display while it is active,
277253a5a1b3Sopenharmony_ci   the rate at which other non-CNAME items such as NAME are transmitted
277353a5a1b3Sopenharmony_ci   might be reduced so that the NOTE item can take that part of the RTCP
277453a5a1b3Sopenharmony_ci   bandwidth.  When the transient message becomes inactive, the NOTE
277553a5a1b3Sopenharmony_ci   item SHOULD continue to be transmitted a few times at the same
277653a5a1b3Sopenharmony_ci   repetition rate but with a string of length zero to signal the
277753a5a1b3Sopenharmony_ci   receivers.  However, receivers SHOULD also consider the NOTE item
277853a5a1b3Sopenharmony_ci   inactive if it is not received for a small multiple of the repetition
277953a5a1b3Sopenharmony_ci   rate, or perhaps 20-30 RTCP intervals.
278053a5a1b3Sopenharmony_ci
278153a5a1b3Sopenharmony_ci6.5.8 PRIV: Private Extensions SDES Item
278253a5a1b3Sopenharmony_ci
278353a5a1b3Sopenharmony_ci     0                   1                   2                   3
278453a5a1b3Sopenharmony_ci     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
278553a5a1b3Sopenharmony_ci    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
278653a5a1b3Sopenharmony_ci    |     PRIV=8    |     length    | prefix length |prefix string...
278753a5a1b3Sopenharmony_ci    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
278853a5a1b3Sopenharmony_ci    ...             |                  value string               ...
278953a5a1b3Sopenharmony_ci    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
279053a5a1b3Sopenharmony_ci
279153a5a1b3Sopenharmony_ci   This item is used to define experimental or application-specific SDES
279253a5a1b3Sopenharmony_ci   extensions.  The item contains a prefix consisting of a length-string
279353a5a1b3Sopenharmony_ci   pair, followed by the value string filling the remainder of the item
279453a5a1b3Sopenharmony_ci   and carrying the desired information.  The prefix length field is 8
279553a5a1b3Sopenharmony_ci   bits long.  The prefix string is a name chosen by the person defining
279653a5a1b3Sopenharmony_ci   the PRIV item to be unique with respect to other PRIV items this
279753a5a1b3Sopenharmony_ci   application might receive.  The application creator might choose to
279853a5a1b3Sopenharmony_ci   use the application name plus an additional subtype identification if
279953a5a1b3Sopenharmony_ci
280053a5a1b3Sopenharmony_ci
280153a5a1b3Sopenharmony_ci
280253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 50]
280353a5a1b3Sopenharmony_ci
280453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
280553a5a1b3Sopenharmony_ci
280653a5a1b3Sopenharmony_ci
280753a5a1b3Sopenharmony_ci   needed.  Alternatively, it is RECOMMENDED that others choose a name
280853a5a1b3Sopenharmony_ci   based on the entity they represent, then coordinate the use of the
280953a5a1b3Sopenharmony_ci   name within that entity.
281053a5a1b3Sopenharmony_ci
281153a5a1b3Sopenharmony_ci   Note that the prefix consumes some space within the item's total
281253a5a1b3Sopenharmony_ci   length of 255 octets, so the prefix should be kept as short as
281353a5a1b3Sopenharmony_ci   possible.  This facility and the constrained RTCP bandwidth SHOULD
281453a5a1b3Sopenharmony_ci   NOT be overloaded; it is not intended to satisfy all the control
281553a5a1b3Sopenharmony_ci   communication requirements of all applications.
281653a5a1b3Sopenharmony_ci
281753a5a1b3Sopenharmony_ci   SDES PRIV prefixes will not be registered by IANA.  If some form of
281853a5a1b3Sopenharmony_ci   the PRIV item proves to be of general utility, it SHOULD instead be
281953a5a1b3Sopenharmony_ci   assigned a regular SDES item type registered with IANA so that no
282053a5a1b3Sopenharmony_ci   prefix is required.  This simplifies use and increases transmission
282153a5a1b3Sopenharmony_ci   efficiency.
282253a5a1b3Sopenharmony_ci
282353a5a1b3Sopenharmony_ci6.6 BYE: Goodbye RTCP Packet
282453a5a1b3Sopenharmony_ci
282553a5a1b3Sopenharmony_ci       0                   1                   2                   3
282653a5a1b3Sopenharmony_ci       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
282753a5a1b3Sopenharmony_ci      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
282853a5a1b3Sopenharmony_ci      |V=2|P|    SC   |   PT=BYE=203  |             length            |
282953a5a1b3Sopenharmony_ci      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
283053a5a1b3Sopenharmony_ci      |                           SSRC/CSRC                           |
283153a5a1b3Sopenharmony_ci      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
283253a5a1b3Sopenharmony_ci      :                              ...                              :
283353a5a1b3Sopenharmony_ci      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
283453a5a1b3Sopenharmony_ci(opt) |     length    |               reason for leaving            ...
283553a5a1b3Sopenharmony_ci      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
283653a5a1b3Sopenharmony_ci
283753a5a1b3Sopenharmony_ci   The BYE packet indicates that one or more sources are no longer
283853a5a1b3Sopenharmony_ci   active.
283953a5a1b3Sopenharmony_ci
284053a5a1b3Sopenharmony_ci   version (V), padding (P), length:
284153a5a1b3Sopenharmony_ci      As described for the SR packet (see Section 6.4.1).
284253a5a1b3Sopenharmony_ci
284353a5a1b3Sopenharmony_ci   packet type (PT): 8 bits
284453a5a1b3Sopenharmony_ci      Contains the constant 203 to identify this as an RTCP BYE packet.
284553a5a1b3Sopenharmony_ci
284653a5a1b3Sopenharmony_ci   source count (SC): 5 bits
284753a5a1b3Sopenharmony_ci      The number of SSRC/CSRC identifiers included in this BYE packet.
284853a5a1b3Sopenharmony_ci      A count value of zero is valid, but useless.
284953a5a1b3Sopenharmony_ci
285053a5a1b3Sopenharmony_ci   The rules for when a BYE packet should be sent are specified in
285153a5a1b3Sopenharmony_ci   Sections 6.3.7 and 8.2.
285253a5a1b3Sopenharmony_ci
285353a5a1b3Sopenharmony_ci
285453a5a1b3Sopenharmony_ci
285553a5a1b3Sopenharmony_ci
285653a5a1b3Sopenharmony_ci
285753a5a1b3Sopenharmony_ci
285853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 51]
285953a5a1b3Sopenharmony_ci
286053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
286153a5a1b3Sopenharmony_ci
286253a5a1b3Sopenharmony_ci
286353a5a1b3Sopenharmony_ci   If a BYE packet is received by a mixer, the mixer SHOULD forward the
286453a5a1b3Sopenharmony_ci   BYE packet with the SSRC/CSRC identifier(s) unchanged.  If a mixer
286553a5a1b3Sopenharmony_ci   shuts down, it SHOULD send a BYE packet listing all contributing
286653a5a1b3Sopenharmony_ci   sources it handles, as well as its own SSRC identifier.  Optionally,
286753a5a1b3Sopenharmony_ci   the BYE packet MAY include an 8-bit octet count followed by that many
286853a5a1b3Sopenharmony_ci   octets of text indicating the reason for leaving, e.g., "camera
286953a5a1b3Sopenharmony_ci   malfunction" or "RTP loop detected".  The string has the same
287053a5a1b3Sopenharmony_ci   encoding as that described for SDES.  If the string fills the packet
287153a5a1b3Sopenharmony_ci   to the next 32-bit boundary, the string is not null terminated.  If
287253a5a1b3Sopenharmony_ci   not, the BYE packet MUST be padded with null octets to the next 32-
287353a5a1b3Sopenharmony_ci   bit boundary.  This padding is separate from that indicated by the P
287453a5a1b3Sopenharmony_ci   bit in the RTCP header.
287553a5a1b3Sopenharmony_ci
287653a5a1b3Sopenharmony_ci6.7 APP: Application-Defined RTCP Packet
287753a5a1b3Sopenharmony_ci
287853a5a1b3Sopenharmony_ci    0                   1                   2                   3
287953a5a1b3Sopenharmony_ci    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
288053a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
288153a5a1b3Sopenharmony_ci   |V=2|P| subtype |   PT=APP=204  |             length            |
288253a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
288353a5a1b3Sopenharmony_ci   |                           SSRC/CSRC                           |
288453a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
288553a5a1b3Sopenharmony_ci   |                          name (ASCII)                         |
288653a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
288753a5a1b3Sopenharmony_ci   |                   application-dependent data                ...
288853a5a1b3Sopenharmony_ci   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
288953a5a1b3Sopenharmony_ci
289053a5a1b3Sopenharmony_ci   The APP packet is intended for experimental use as new applications
289153a5a1b3Sopenharmony_ci   and new features are developed, without requiring packet type value
289253a5a1b3Sopenharmony_ci   registration.  APP packets with unrecognized names SHOULD be ignored.
289353a5a1b3Sopenharmony_ci   After testing and if wider use is justified, it is RECOMMENDED that
289453a5a1b3Sopenharmony_ci   each APP packet be redefined without the subtype and name fields and
289553a5a1b3Sopenharmony_ci   registered with IANA using an RTCP packet type.
289653a5a1b3Sopenharmony_ci
289753a5a1b3Sopenharmony_ci   version (V), padding (P), length:
289853a5a1b3Sopenharmony_ci      As described for the SR packet (see Section 6.4.1).
289953a5a1b3Sopenharmony_ci
290053a5a1b3Sopenharmony_ci   subtype: 5 bits
290153a5a1b3Sopenharmony_ci      May be used as a subtype to allow a set of APP packets to be
290253a5a1b3Sopenharmony_ci      defined under one unique name, or for any application-dependent
290353a5a1b3Sopenharmony_ci      data.
290453a5a1b3Sopenharmony_ci
290553a5a1b3Sopenharmony_ci   packet type (PT): 8 bits
290653a5a1b3Sopenharmony_ci      Contains the constant 204 to identify this as an RTCP APP packet.
290753a5a1b3Sopenharmony_ci
290853a5a1b3Sopenharmony_ci
290953a5a1b3Sopenharmony_ci
291053a5a1b3Sopenharmony_ci
291153a5a1b3Sopenharmony_ci
291253a5a1b3Sopenharmony_ci
291353a5a1b3Sopenharmony_ci
291453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 52]
291553a5a1b3Sopenharmony_ci
291653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
291753a5a1b3Sopenharmony_ci
291853a5a1b3Sopenharmony_ci
291953a5a1b3Sopenharmony_ci   name: 4 octets
292053a5a1b3Sopenharmony_ci      A name chosen by the person defining the set of APP packets to be
292153a5a1b3Sopenharmony_ci      unique with respect to other APP packets this application might
292253a5a1b3Sopenharmony_ci      receive.  The application creator might choose to use the
292353a5a1b3Sopenharmony_ci      application name, and then coordinate the allocation of subtype
292453a5a1b3Sopenharmony_ci      values to others who want to define new packet types for the
292553a5a1b3Sopenharmony_ci      application.  Alternatively, it is RECOMMENDED that others choose
292653a5a1b3Sopenharmony_ci      a name based on the entity they represent, then coordinate the use
292753a5a1b3Sopenharmony_ci      of the name within that entity.  The name is interpreted as a
292853a5a1b3Sopenharmony_ci      sequence of four ASCII characters, with uppercase and lowercase
292953a5a1b3Sopenharmony_ci      characters treated as distinct.
293053a5a1b3Sopenharmony_ci
293153a5a1b3Sopenharmony_ci   application-dependent data: variable length
293253a5a1b3Sopenharmony_ci      Application-dependent data may or may not appear in an APP packet.
293353a5a1b3Sopenharmony_ci      It is interpreted by the application and not RTP itself.  It MUST
293453a5a1b3Sopenharmony_ci      be a multiple of 32 bits long.
293553a5a1b3Sopenharmony_ci
293653a5a1b3Sopenharmony_ci7. RTP Translators and Mixers
293753a5a1b3Sopenharmony_ci
293853a5a1b3Sopenharmony_ci   In addition to end systems, RTP supports the notion of "translators"
293953a5a1b3Sopenharmony_ci   and "mixers", which could be considered as "intermediate systems" at
294053a5a1b3Sopenharmony_ci   the RTP level.  Although this support adds some complexity to the
294153a5a1b3Sopenharmony_ci   protocol, the need for these functions has been clearly established
294253a5a1b3Sopenharmony_ci   by experiments with multicast audio and video applications in the
294353a5a1b3Sopenharmony_ci   Internet.  Example uses of translators and mixers given in Section
294453a5a1b3Sopenharmony_ci   2.3 stem from the presence of firewalls and low bandwidth
294553a5a1b3Sopenharmony_ci   connections, both of which are likely to remain.
294653a5a1b3Sopenharmony_ci
294753a5a1b3Sopenharmony_ci7.1 General Description
294853a5a1b3Sopenharmony_ci
294953a5a1b3Sopenharmony_ci   An RTP translator/mixer connects two or more transport-level
295053a5a1b3Sopenharmony_ci   "clouds".  Typically, each cloud is defined by a common network and
295153a5a1b3Sopenharmony_ci   transport protocol (e.g., IP/UDP) plus a multicast address and
295253a5a1b3Sopenharmony_ci   transport level destination port or a pair of unicast addresses and
295353a5a1b3Sopenharmony_ci   ports.  (Network-level protocol translators, such as IP version 4 to
295453a5a1b3Sopenharmony_ci   IP version 6, may be present within a cloud invisibly to RTP.)  One
295553a5a1b3Sopenharmony_ci   system may serve as a translator or mixer for a number of RTP
295653a5a1b3Sopenharmony_ci   sessions, but each is considered a logically separate entity.
295753a5a1b3Sopenharmony_ci
295853a5a1b3Sopenharmony_ci   In order to avoid creating a loop when a translator or mixer is
295953a5a1b3Sopenharmony_ci   installed, the following rules MUST be observed:
296053a5a1b3Sopenharmony_ci
296153a5a1b3Sopenharmony_ci   o  Each of the clouds connected by translators and mixers
296253a5a1b3Sopenharmony_ci      participating in one RTP session either MUST be distinct from all
296353a5a1b3Sopenharmony_ci      the others in at least one of these parameters (protocol, address,
296453a5a1b3Sopenharmony_ci      port), or MUST be isolated at the network level from the others.
296553a5a1b3Sopenharmony_ci
296653a5a1b3Sopenharmony_ci
296753a5a1b3Sopenharmony_ci
296853a5a1b3Sopenharmony_ci
296953a5a1b3Sopenharmony_ci
297053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 53]
297153a5a1b3Sopenharmony_ci
297253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
297353a5a1b3Sopenharmony_ci
297453a5a1b3Sopenharmony_ci
297553a5a1b3Sopenharmony_ci   o  A derivative of the first rule is that there MUST NOT be multiple
297653a5a1b3Sopenharmony_ci      translators or mixers connected in parallel unless by some
297753a5a1b3Sopenharmony_ci      arrangement they partition the set of sources to be forwarded.
297853a5a1b3Sopenharmony_ci
297953a5a1b3Sopenharmony_ci   Similarly, all RTP end systems that can communicate through one or
298053a5a1b3Sopenharmony_ci   more RTP translators or mixers share the same SSRC space, that is,
298153a5a1b3Sopenharmony_ci   the SSRC identifiers MUST be unique among all these end systems.
298253a5a1b3Sopenharmony_ci   Section 8.2 describes the collision resolution algorithm by which
298353a5a1b3Sopenharmony_ci   SSRC identifiers are kept unique and loops are detected.
298453a5a1b3Sopenharmony_ci
298553a5a1b3Sopenharmony_ci   There may be many varieties of translators and mixers designed for
298653a5a1b3Sopenharmony_ci   different purposes and applications.  Some examples are to add or
298753a5a1b3Sopenharmony_ci   remove encryption, change the encoding of the data or the underlying
298853a5a1b3Sopenharmony_ci   protocols, or replicate between a multicast address and one or more
298953a5a1b3Sopenharmony_ci   unicast addresses.  The distinction between translators and mixers is
299053a5a1b3Sopenharmony_ci   that a translator passes through the data streams from different
299153a5a1b3Sopenharmony_ci   sources separately, whereas a mixer combines them to form one new
299253a5a1b3Sopenharmony_ci   stream:
299353a5a1b3Sopenharmony_ci
299453a5a1b3Sopenharmony_ci   Translator: Forwards RTP packets with their SSRC identifier
299553a5a1b3Sopenharmony_ci      intact; this makes it possible for receivers to identify
299653a5a1b3Sopenharmony_ci      individual sources even though packets from all the sources pass
299753a5a1b3Sopenharmony_ci      through the same translator and carry the translator's network
299853a5a1b3Sopenharmony_ci      source address.  Some kinds of translators will pass through the
299953a5a1b3Sopenharmony_ci      data untouched, but others MAY change the encoding of the data and
300053a5a1b3Sopenharmony_ci      thus the RTP data payload type and timestamp.  If multiple data
300153a5a1b3Sopenharmony_ci      packets are re-encoded into one, or vice versa, a translator MUST
300253a5a1b3Sopenharmony_ci      assign new sequence numbers to the outgoing packets.  Losses in
300353a5a1b3Sopenharmony_ci      the incoming packet stream may induce corresponding gaps in the
300453a5a1b3Sopenharmony_ci      outgoing sequence numbers.  Receivers cannot detect the presence
300553a5a1b3Sopenharmony_ci      of a translator unless they know by some other means what payload
300653a5a1b3Sopenharmony_ci      type or transport address was used by the original source.
300753a5a1b3Sopenharmony_ci
300853a5a1b3Sopenharmony_ci   Mixer: Receives streams of RTP data packets from one or more
300953a5a1b3Sopenharmony_ci      sources, possibly changes the data format, combines the streams in
301053a5a1b3Sopenharmony_ci      some manner and then forwards the combined stream.  Since the
301153a5a1b3Sopenharmony_ci      timing among multiple input sources will not generally be
301253a5a1b3Sopenharmony_ci      synchronized, the mixer will make timing adjustments among the
301353a5a1b3Sopenharmony_ci      streams and generate its own timing for the combined stream, so it
301453a5a1b3Sopenharmony_ci      is the synchronization source.  Thus, all data packets forwarded
301553a5a1b3Sopenharmony_ci      by a mixer MUST be marked with the mixer's own SSRC identifier.
301653a5a1b3Sopenharmony_ci      In order to preserve the identity of the original sources
301753a5a1b3Sopenharmony_ci      contributing to the mixed packet, the mixer SHOULD insert their
301853a5a1b3Sopenharmony_ci      SSRC identifiers into the CSRC identifier list following the fixed
301953a5a1b3Sopenharmony_ci      RTP header of the packet.  A mixer that is also itself a
302053a5a1b3Sopenharmony_ci      contributing source for some packet SHOULD explicitly include its
302153a5a1b3Sopenharmony_ci      own SSRC identifier in the CSRC list for that packet.
302253a5a1b3Sopenharmony_ci
302353a5a1b3Sopenharmony_ci
302453a5a1b3Sopenharmony_ci
302553a5a1b3Sopenharmony_ci
302653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 54]
302753a5a1b3Sopenharmony_ci
302853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
302953a5a1b3Sopenharmony_ci
303053a5a1b3Sopenharmony_ci
303153a5a1b3Sopenharmony_ci      For some applications, it MAY be acceptable for a mixer not to
303253a5a1b3Sopenharmony_ci      identify sources in the CSRC list.  However, this introduces the
303353a5a1b3Sopenharmony_ci      danger that loops involving those sources could not be detected.
303453a5a1b3Sopenharmony_ci
303553a5a1b3Sopenharmony_ci   The advantage of a mixer over a translator for applications like
303653a5a1b3Sopenharmony_ci   audio is that the output bandwidth is limited to that of one source
303753a5a1b3Sopenharmony_ci   even when multiple sources are active on the input side.  This may be
303853a5a1b3Sopenharmony_ci   important for low-bandwidth links.  The disadvantage is that
303953a5a1b3Sopenharmony_ci   receivers on the output side don't have any control over which
304053a5a1b3Sopenharmony_ci   sources are passed through or muted, unless some mechanism is
304153a5a1b3Sopenharmony_ci   implemented for remote control of the mixer.  The regeneration of
304253a5a1b3Sopenharmony_ci   synchronization information by mixers also means that receivers can't
304353a5a1b3Sopenharmony_ci   do inter-media synchronization of the original streams.  A multi-
304453a5a1b3Sopenharmony_ci   media mixer could do it.
304553a5a1b3Sopenharmony_ci
304653a5a1b3Sopenharmony_ci         [E1]                                    [E6]
304753a5a1b3Sopenharmony_ci          |                                       |
304853a5a1b3Sopenharmony_ci    E1:17 |                                 E6:15 |
304953a5a1b3Sopenharmony_ci          |                                       |   E6:15
305053a5a1b3Sopenharmony_ci          V  M1:48 (1,17)         M1:48 (1,17)    V   M1:48 (1,17)
305153a5a1b3Sopenharmony_ci         (M1)-------------><T1>-----------------><T2>-------------->[E7]
305253a5a1b3Sopenharmony_ci          ^                 ^     E4:47           ^   E4:47
305353a5a1b3Sopenharmony_ci     E2:1 |           E4:47 |                     |   M3:89 (64,45)
305453a5a1b3Sopenharmony_ci          |                 |                     |
305553a5a1b3Sopenharmony_ci         [E2]              [E4]     M3:89 (64,45) |
305653a5a1b3Sopenharmony_ci                                                  |        legend:
305753a5a1b3Sopenharmony_ci   [E3] --------->(M2)----------->(M3)------------|        [End system]
305853a5a1b3Sopenharmony_ci          E3:64        M2:12 (64)  ^                       (Mixer)
305953a5a1b3Sopenharmony_ci                                   | E5:45                 <Translator>
306053a5a1b3Sopenharmony_ci                                   |
306153a5a1b3Sopenharmony_ci                                  [E5]          source: SSRC (CSRCs)
306253a5a1b3Sopenharmony_ci                                                ------------------->
306353a5a1b3Sopenharmony_ci
306453a5a1b3Sopenharmony_ci   Figure 3: Sample RTP network with end systems, mixers and translators
306553a5a1b3Sopenharmony_ci
306653a5a1b3Sopenharmony_ci   A collection of mixers and translators is shown in Fig. 3 to
306753a5a1b3Sopenharmony_ci   illustrate their effect on SSRC and CSRC identifiers.  In the figure,
306853a5a1b3Sopenharmony_ci   end systems are shown as rectangles (named E), translators as
306953a5a1b3Sopenharmony_ci   triangles (named T) and mixers as ovals (named M).  The notation "M1:
307053a5a1b3Sopenharmony_ci   48(1,17)" designates a packet originating a mixer M1, identified by
307153a5a1b3Sopenharmony_ci   M1's (random) SSRC value of 48 and two CSRC identifiers, 1 and 17,
307253a5a1b3Sopenharmony_ci   copied from the SSRC identifiers of packets from E1 and E2.
307353a5a1b3Sopenharmony_ci
307453a5a1b3Sopenharmony_ci7.2 RTCP Processing in Translators
307553a5a1b3Sopenharmony_ci
307653a5a1b3Sopenharmony_ci   In addition to forwarding data packets, perhaps modified, translators
307753a5a1b3Sopenharmony_ci   and mixers MUST also process RTCP packets.  In many cases, they will
307853a5a1b3Sopenharmony_ci   take apart the compound RTCP packets received from end systems to
307953a5a1b3Sopenharmony_ci
308053a5a1b3Sopenharmony_ci
308153a5a1b3Sopenharmony_ci
308253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 55]
308353a5a1b3Sopenharmony_ci
308453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
308553a5a1b3Sopenharmony_ci
308653a5a1b3Sopenharmony_ci
308753a5a1b3Sopenharmony_ci   aggregate SDES information and to modify the SR or RR packets.
308853a5a1b3Sopenharmony_ci   Retransmission of this information may be triggered by the packet
308953a5a1b3Sopenharmony_ci   arrival or by the RTCP interval timer of the translator or mixer
309053a5a1b3Sopenharmony_ci   itself.
309153a5a1b3Sopenharmony_ci
309253a5a1b3Sopenharmony_ci   A translator that does not modify the data packets, for example one
309353a5a1b3Sopenharmony_ci   that just replicates between a multicast address and a unicast
309453a5a1b3Sopenharmony_ci   address, MAY simply forward RTCP packets unmodified as well.  A
309553a5a1b3Sopenharmony_ci   translator that transforms the payload in some way MUST make
309653a5a1b3Sopenharmony_ci   corresponding transformations in the SR and RR information so that it
309753a5a1b3Sopenharmony_ci   still reflects the characteristics of the data and the reception
309853a5a1b3Sopenharmony_ci   quality.  These translators MUST NOT simply forward RTCP packets.  In
309953a5a1b3Sopenharmony_ci   general, a translator SHOULD NOT aggregate SR and RR packets from
310053a5a1b3Sopenharmony_ci   different sources into one packet since that would reduce the
310153a5a1b3Sopenharmony_ci   accuracy of the propagation delay measurements based on the LSR and
310253a5a1b3Sopenharmony_ci   DLSR fields.
310353a5a1b3Sopenharmony_ci
310453a5a1b3Sopenharmony_ci   SR sender information:  A translator does not generate its own
310553a5a1b3Sopenharmony_ci      sender information, but forwards the SR packets received from one
310653a5a1b3Sopenharmony_ci      cloud to the others.  The SSRC is left intact but the sender
310753a5a1b3Sopenharmony_ci      information MUST be modified if required by the translation.  If a
310853a5a1b3Sopenharmony_ci      translator changes the data encoding, it MUST change the "sender's
310953a5a1b3Sopenharmony_ci      byte count" field.  If it also combines several data packets into
311053a5a1b3Sopenharmony_ci      one output packet, it MUST change the "sender's packet count"
311153a5a1b3Sopenharmony_ci      field.  If it changes the timestamp frequency, it MUST change the
311253a5a1b3Sopenharmony_ci      "RTP timestamp" field in the SR packet.
311353a5a1b3Sopenharmony_ci
311453a5a1b3Sopenharmony_ci   SR/RR reception report blocks:  A translator forwards reception
311553a5a1b3Sopenharmony_ci      reports received from one cloud to the others.  Note that these
311653a5a1b3Sopenharmony_ci      flow in the direction opposite to the data.  The SSRC is left
311753a5a1b3Sopenharmony_ci      intact.  If a translator combines several data packets into one
311853a5a1b3Sopenharmony_ci      output packet, and therefore changes the sequence numbers, it MUST
311953a5a1b3Sopenharmony_ci      make the inverse manipulation for the packet loss fields and the
312053a5a1b3Sopenharmony_ci      "extended last sequence number" field.  This may be complex.  In
312153a5a1b3Sopenharmony_ci      the extreme case, there may be no meaningful way to translate the
312253a5a1b3Sopenharmony_ci      reception reports, so the translator MAY pass on no reception
312353a5a1b3Sopenharmony_ci      report at all or a synthetic report based on its own reception.
312453a5a1b3Sopenharmony_ci      The general rule is to do what makes sense for a particular
312553a5a1b3Sopenharmony_ci      translation.
312653a5a1b3Sopenharmony_ci
312753a5a1b3Sopenharmony_ci      A translator does not require an SSRC identifier of its own, but
312853a5a1b3Sopenharmony_ci      MAY choose to allocate one for the purpose of sending reports
312953a5a1b3Sopenharmony_ci      about what it has received.  These would be sent to all the
313053a5a1b3Sopenharmony_ci      connected clouds, each corresponding to the translation of the
313153a5a1b3Sopenharmony_ci      data stream as sent to that cloud, since reception reports are
313253a5a1b3Sopenharmony_ci      normally multicast to all participants.
313353a5a1b3Sopenharmony_ci
313453a5a1b3Sopenharmony_ci
313553a5a1b3Sopenharmony_ci
313653a5a1b3Sopenharmony_ci
313753a5a1b3Sopenharmony_ci
313853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 56]
313953a5a1b3Sopenharmony_ci
314053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
314153a5a1b3Sopenharmony_ci
314253a5a1b3Sopenharmony_ci
314353a5a1b3Sopenharmony_ci   SDES:  Translators typically forward without change the SDES
314453a5a1b3Sopenharmony_ci      information they receive from one cloud to the others, but MAY,
314553a5a1b3Sopenharmony_ci      for example, decide to filter non-CNAME SDES information if
314653a5a1b3Sopenharmony_ci      bandwidth is limited.  The CNAMEs MUST be forwarded to allow SSRC
314753a5a1b3Sopenharmony_ci      identifier collision detection to work.  A translator that
314853a5a1b3Sopenharmony_ci      generates its own RR packets MUST send SDES CNAME information
314953a5a1b3Sopenharmony_ci      about itself to the same clouds that it sends those RR packets.
315053a5a1b3Sopenharmony_ci
315153a5a1b3Sopenharmony_ci   BYE:  Translators forward BYE packets unchanged.  A translator
315253a5a1b3Sopenharmony_ci      that is about to cease forwarding packets SHOULD send a BYE packet
315353a5a1b3Sopenharmony_ci      to each connected cloud containing all the SSRC identifiers that
315453a5a1b3Sopenharmony_ci      were previously being forwarded to that cloud, including the
315553a5a1b3Sopenharmony_ci      translator's own SSRC identifier if it sent reports of its own.
315653a5a1b3Sopenharmony_ci
315753a5a1b3Sopenharmony_ci   APP:  Translators forward APP packets unchanged.
315853a5a1b3Sopenharmony_ci
315953a5a1b3Sopenharmony_ci7.3 RTCP Processing in Mixers
316053a5a1b3Sopenharmony_ci
316153a5a1b3Sopenharmony_ci   Since a mixer generates a new data stream of its own, it does not
316253a5a1b3Sopenharmony_ci   pass through SR or RR packets at all and instead generates new
316353a5a1b3Sopenharmony_ci   information for both sides.
316453a5a1b3Sopenharmony_ci
316553a5a1b3Sopenharmony_ci   SR sender information:  A mixer does not pass through sender
316653a5a1b3Sopenharmony_ci      information from the sources it mixes because the characteristics
316753a5a1b3Sopenharmony_ci      of the source streams are lost in the mix.  As a synchronization
316853a5a1b3Sopenharmony_ci      source, the mixer SHOULD generate its own SR packets with sender
316953a5a1b3Sopenharmony_ci      information about the mixed data stream and send them in the same
317053a5a1b3Sopenharmony_ci      direction as the mixed stream.
317153a5a1b3Sopenharmony_ci
317253a5a1b3Sopenharmony_ci   SR/RR reception report blocks:  A mixer generates its own
317353a5a1b3Sopenharmony_ci      reception reports for sources in each cloud and sends them out
317453a5a1b3Sopenharmony_ci      only to the same cloud.  It MUST NOT send these reception reports
317553a5a1b3Sopenharmony_ci      to the other clouds and MUST NOT forward reception reports from
317653a5a1b3Sopenharmony_ci      one cloud to the others because the sources would not be SSRCs
317753a5a1b3Sopenharmony_ci      there (only CSRCs).
317853a5a1b3Sopenharmony_ci
317953a5a1b3Sopenharmony_ci   SDES:  Mixers typically forward without change the SDES
318053a5a1b3Sopenharmony_ci      information they receive from one cloud to the others, but MAY,
318153a5a1b3Sopenharmony_ci      for example, decide to filter non-CNAME SDES information if
318253a5a1b3Sopenharmony_ci      bandwidth is limited.  The CNAMEs MUST be forwarded to allow SSRC
318353a5a1b3Sopenharmony_ci      identifier collision detection to work.  (An identifier in a CSRC
318453a5a1b3Sopenharmony_ci      list generated by a mixer might collide with an SSRC identifier
318553a5a1b3Sopenharmony_ci      generated by an end system.)  A mixer MUST send SDES CNAME
318653a5a1b3Sopenharmony_ci      information about itself to the same clouds that it sends SR or RR
318753a5a1b3Sopenharmony_ci      packets.
318853a5a1b3Sopenharmony_ci
318953a5a1b3Sopenharmony_ci
319053a5a1b3Sopenharmony_ci
319153a5a1b3Sopenharmony_ci
319253a5a1b3Sopenharmony_ci
319353a5a1b3Sopenharmony_ci
319453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 57]
319553a5a1b3Sopenharmony_ci
319653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
319753a5a1b3Sopenharmony_ci
319853a5a1b3Sopenharmony_ci
319953a5a1b3Sopenharmony_ci      Since mixers do not forward SR or RR packets, they will typically
320053a5a1b3Sopenharmony_ci      be extracting SDES packets from a compound RTCP packet.  To
320153a5a1b3Sopenharmony_ci      minimize overhead, chunks from the SDES packets MAY be aggregated
320253a5a1b3Sopenharmony_ci      into a single SDES packet which is then stacked on an SR or RR
320353a5a1b3Sopenharmony_ci      packet originating from the mixer.  A mixer which aggregates SDES
320453a5a1b3Sopenharmony_ci      packets will use more RTCP bandwidth than an individual source
320553a5a1b3Sopenharmony_ci      because the compound packets will be longer, but that is
320653a5a1b3Sopenharmony_ci      appropriate since the mixer represents multiple sources.
320753a5a1b3Sopenharmony_ci      Similarly, a mixer which passes through SDES packets as they are
320853a5a1b3Sopenharmony_ci      received will be transmitting RTCP packets at higher than the
320953a5a1b3Sopenharmony_ci      single source rate, but again that is correct since the packets
321053a5a1b3Sopenharmony_ci      come from multiple sources.  The RTCP packet rate may be different
321153a5a1b3Sopenharmony_ci      on each side of the mixer.
321253a5a1b3Sopenharmony_ci
321353a5a1b3Sopenharmony_ci      A mixer that does not insert CSRC identifiers MAY also refrain
321453a5a1b3Sopenharmony_ci      from forwarding SDES CNAMEs.  In this case, the SSRC identifier
321553a5a1b3Sopenharmony_ci      spaces in the two clouds are independent.  As mentioned earlier,
321653a5a1b3Sopenharmony_ci      this mode of operation creates a danger that loops can't be
321753a5a1b3Sopenharmony_ci      detected.
321853a5a1b3Sopenharmony_ci
321953a5a1b3Sopenharmony_ci   BYE:  Mixers MUST forward BYE packets.  A mixer that is about to
322053a5a1b3Sopenharmony_ci      cease forwarding packets SHOULD send a BYE packet to each
322153a5a1b3Sopenharmony_ci      connected cloud containing all the SSRC identifiers that were
322253a5a1b3Sopenharmony_ci      previously being forwarded to that cloud, including the mixer's
322353a5a1b3Sopenharmony_ci      own SSRC identifier if it sent reports of its own.
322453a5a1b3Sopenharmony_ci
322553a5a1b3Sopenharmony_ci   APP:  The treatment of APP packets by mixers is application-specific.
322653a5a1b3Sopenharmony_ci
322753a5a1b3Sopenharmony_ci7.4 Cascaded Mixers
322853a5a1b3Sopenharmony_ci
322953a5a1b3Sopenharmony_ci   An RTP session may involve a collection of mixers and translators as
323053a5a1b3Sopenharmony_ci   shown in Fig. 3.  If two mixers are cascaded, such as M2 and M3 in
323153a5a1b3Sopenharmony_ci   the figure, packets received by a mixer may already have been mixed
323253a5a1b3Sopenharmony_ci   and may include a CSRC list with multiple identifiers.  The second
323353a5a1b3Sopenharmony_ci   mixer SHOULD build the CSRC list for the outgoing packet using the
323453a5a1b3Sopenharmony_ci   CSRC identifiers from already-mixed input packets and the SSRC
323553a5a1b3Sopenharmony_ci   identifiers from unmixed input packets.  This is shown in the output
323653a5a1b3Sopenharmony_ci   arc from mixer M3 labeled M3:89(64,45) in the figure.  As in the case
323753a5a1b3Sopenharmony_ci   of mixers that are not cascaded, if the resulting CSRC list has more
323853a5a1b3Sopenharmony_ci   than 15 identifiers, the remainder cannot be included.
323953a5a1b3Sopenharmony_ci
324053a5a1b3Sopenharmony_ci
324153a5a1b3Sopenharmony_ci
324253a5a1b3Sopenharmony_ci
324353a5a1b3Sopenharmony_ci
324453a5a1b3Sopenharmony_ci
324553a5a1b3Sopenharmony_ci
324653a5a1b3Sopenharmony_ci
324753a5a1b3Sopenharmony_ci
324853a5a1b3Sopenharmony_ci
324953a5a1b3Sopenharmony_ci
325053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 58]
325153a5a1b3Sopenharmony_ci
325253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
325353a5a1b3Sopenharmony_ci
325453a5a1b3Sopenharmony_ci
325553a5a1b3Sopenharmony_ci8.  SSRC Identifier Allocation and Use
325653a5a1b3Sopenharmony_ci
325753a5a1b3Sopenharmony_ci   The SSRC identifier carried in the RTP header and in various fields
325853a5a1b3Sopenharmony_ci   of RTCP packets is a random 32-bit number that is required to be
325953a5a1b3Sopenharmony_ci   globally unique within an RTP session.  It is crucial that the number
326053a5a1b3Sopenharmony_ci   be chosen with care in order that participants on the same network or
326153a5a1b3Sopenharmony_ci   starting at the same time are not likely to choose the same number.
326253a5a1b3Sopenharmony_ci
326353a5a1b3Sopenharmony_ci   It is not sufficient to use the local network address (such as an
326453a5a1b3Sopenharmony_ci   IPv4 address) for the identifier because the address may not be
326553a5a1b3Sopenharmony_ci   unique.  Since RTP translators and mixers enable interoperation among
326653a5a1b3Sopenharmony_ci   multiple networks with different address spaces, the allocation
326753a5a1b3Sopenharmony_ci   patterns for addresses within two spaces might result in a much
326853a5a1b3Sopenharmony_ci   higher rate of collision than would occur with random allocation.
326953a5a1b3Sopenharmony_ci
327053a5a1b3Sopenharmony_ci   Multiple sources running on one host would also conflict.
327153a5a1b3Sopenharmony_ci
327253a5a1b3Sopenharmony_ci   It is also not sufficient to obtain an SSRC identifier simply by
327353a5a1b3Sopenharmony_ci   calling random() without carefully initializing the state.  An
327453a5a1b3Sopenharmony_ci   example of how to generate a random identifier is presented in
327553a5a1b3Sopenharmony_ci   Appendix A.6.
327653a5a1b3Sopenharmony_ci
327753a5a1b3Sopenharmony_ci8.1 Probability of Collision
327853a5a1b3Sopenharmony_ci
327953a5a1b3Sopenharmony_ci   Since the identifiers are chosen randomly, it is possible that two or
328053a5a1b3Sopenharmony_ci   more sources will choose the same number.  Collision occurs with the
328153a5a1b3Sopenharmony_ci   highest probability when all sources are started simultaneously, for
328253a5a1b3Sopenharmony_ci   example when triggered automatically by some session management
328353a5a1b3Sopenharmony_ci   event.  If N is the number of sources and L the length of the
328453a5a1b3Sopenharmony_ci   identifier (here, 32 bits), the probability that two sources
328553a5a1b3Sopenharmony_ci   independently pick the same value can be approximated for large N
328653a5a1b3Sopenharmony_ci   [26] as 1 - exp(-N**2 / 2**(L+1)).  For N=1000, the probability is
328753a5a1b3Sopenharmony_ci   roughly 10**-4.
328853a5a1b3Sopenharmony_ci
328953a5a1b3Sopenharmony_ci   The typical collision probability is much lower than the worst-case
329053a5a1b3Sopenharmony_ci   above.  When one new source joins an RTP session in which all the
329153a5a1b3Sopenharmony_ci   other sources already have unique identifiers, the probability of
329253a5a1b3Sopenharmony_ci   collision is just the fraction of numbers used out of the space.
329353a5a1b3Sopenharmony_ci   Again, if N is the number of sources and L the length of the
329453a5a1b3Sopenharmony_ci   identifier, the probability of collision is N / 2**L.  For N=1000,
329553a5a1b3Sopenharmony_ci   the probability is roughly 2*10**-7.
329653a5a1b3Sopenharmony_ci
329753a5a1b3Sopenharmony_ci   The probability of collision is further reduced by the opportunity
329853a5a1b3Sopenharmony_ci   for a new source to receive packets from other participants before
329953a5a1b3Sopenharmony_ci   sending its first packet (either data or control).  If the new source
330053a5a1b3Sopenharmony_ci   keeps track of the other participants (by SSRC identifier), then
330153a5a1b3Sopenharmony_ci
330253a5a1b3Sopenharmony_ci
330353a5a1b3Sopenharmony_ci
330453a5a1b3Sopenharmony_ci
330553a5a1b3Sopenharmony_ci
330653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 59]
330753a5a1b3Sopenharmony_ci
330853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
330953a5a1b3Sopenharmony_ci
331053a5a1b3Sopenharmony_ci
331153a5a1b3Sopenharmony_ci   before transmitting its first packet the new source can verify that
331253a5a1b3Sopenharmony_ci   its identifier does not conflict with any that have been received, or
331353a5a1b3Sopenharmony_ci   else choose again.
331453a5a1b3Sopenharmony_ci
331553a5a1b3Sopenharmony_ci8.2 Collision Resolution and Loop Detection
331653a5a1b3Sopenharmony_ci
331753a5a1b3Sopenharmony_ci   Although the probability of SSRC identifier collision is low, all RTP
331853a5a1b3Sopenharmony_ci   implementations MUST be prepared to detect collisions and take the
331953a5a1b3Sopenharmony_ci   appropriate actions to resolve them.  If a source discovers at any
332053a5a1b3Sopenharmony_ci   time that another source is using the same SSRC identifier as its
332153a5a1b3Sopenharmony_ci   own, it MUST send an RTCP BYE packet for the old identifier and
332253a5a1b3Sopenharmony_ci   choose another random one.  (As explained below, this step is taken
332353a5a1b3Sopenharmony_ci   only once in case of a loop.)  If a receiver discovers that two other
332453a5a1b3Sopenharmony_ci   sources are colliding, it MAY keep the packets from one and discard
332553a5a1b3Sopenharmony_ci   the packets from the other when this can be detected by different
332653a5a1b3Sopenharmony_ci   source transport addresses or CNAMEs.  The two sources are expected
332753a5a1b3Sopenharmony_ci   to resolve the collision so that the situation doesn't last.
332853a5a1b3Sopenharmony_ci
332953a5a1b3Sopenharmony_ci   Because the random SSRC identifiers are kept globally unique for each
333053a5a1b3Sopenharmony_ci   RTP session, they can also be used to detect loops that may be
333153a5a1b3Sopenharmony_ci   introduced by mixers or translators.  A loop causes duplication of
333253a5a1b3Sopenharmony_ci   data and control information, either unmodified or possibly mixed, as
333353a5a1b3Sopenharmony_ci   in the following examples:
333453a5a1b3Sopenharmony_ci
333553a5a1b3Sopenharmony_ci   o  A translator may incorrectly forward a packet to the same
333653a5a1b3Sopenharmony_ci      multicast group from which it has received the packet, either
333753a5a1b3Sopenharmony_ci      directly or through a chain of translators.  In that case, the
333853a5a1b3Sopenharmony_ci      same packet appears several times, originating from different
333953a5a1b3Sopenharmony_ci      network sources.
334053a5a1b3Sopenharmony_ci
334153a5a1b3Sopenharmony_ci   o  Two translators incorrectly set up in parallel, i.e., with the
334253a5a1b3Sopenharmony_ci      same multicast groups on both sides, would both forward packets
334353a5a1b3Sopenharmony_ci      from one multicast group to the other.  Unidirectional translators
334453a5a1b3Sopenharmony_ci      would produce two copies; bidirectional translators would form a
334553a5a1b3Sopenharmony_ci      loop.
334653a5a1b3Sopenharmony_ci
334753a5a1b3Sopenharmony_ci   o  A mixer can close a loop by sending to the same transport
334853a5a1b3Sopenharmony_ci      destination upon which it receives packets, either directly or
334953a5a1b3Sopenharmony_ci      through another mixer or translator.  In this case a source might
335053a5a1b3Sopenharmony_ci      show up both as an SSRC on a data packet and a CSRC in a mixed
335153a5a1b3Sopenharmony_ci      data packet.
335253a5a1b3Sopenharmony_ci
335353a5a1b3Sopenharmony_ci   A source may discover that its own packets are being looped, or that
335453a5a1b3Sopenharmony_ci   packets from another source are being looped (a third-party loop).
335553a5a1b3Sopenharmony_ci   Both loops and collisions in the random selection of a source
335653a5a1b3Sopenharmony_ci   identifier result in packets arriving with the same SSRC identifier
335753a5a1b3Sopenharmony_ci   but a different source transport address, which may be that of the
335853a5a1b3Sopenharmony_ci   end system originating the packet or an intermediate system.
335953a5a1b3Sopenharmony_ci
336053a5a1b3Sopenharmony_ci
336153a5a1b3Sopenharmony_ci
336253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 60]
336353a5a1b3Sopenharmony_ci
336453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
336553a5a1b3Sopenharmony_ci
336653a5a1b3Sopenharmony_ci
336753a5a1b3Sopenharmony_ci   Therefore, if a source changes its source transport address, it MAY
336853a5a1b3Sopenharmony_ci   also choose a new SSRC identifier to avoid being interpreted as a
336953a5a1b3Sopenharmony_ci   looped source.  (This is not MUST because in some applications of RTP
337053a5a1b3Sopenharmony_ci   sources may be expected to change addresses during a session.)  Note
337153a5a1b3Sopenharmony_ci   that if a translator restarts and consequently changes the source
337253a5a1b3Sopenharmony_ci   transport address (e.g., changes the UDP source port number) on which
337353a5a1b3Sopenharmony_ci   it forwards packets, then all those packets will appear to receivers
337453a5a1b3Sopenharmony_ci   to be looped because the SSRC identifiers are applied by the original
337553a5a1b3Sopenharmony_ci   source and will not change.  This problem can be avoided by keeping
337653a5a1b3Sopenharmony_ci   the source transport address fixed across restarts, but in any case
337753a5a1b3Sopenharmony_ci   will be resolved after a timeout at the receivers.
337853a5a1b3Sopenharmony_ci
337953a5a1b3Sopenharmony_ci   Loops or collisions occurring on the far side of a translator or
338053a5a1b3Sopenharmony_ci   mixer cannot be detected using the source transport address if all
338153a5a1b3Sopenharmony_ci   copies of the packets go through the translator or mixer, however,
338253a5a1b3Sopenharmony_ci   collisions may still be detected when chunks from two RTCP SDES
338353a5a1b3Sopenharmony_ci   packets contain the same SSRC identifier but different CNAMEs.
338453a5a1b3Sopenharmony_ci
338553a5a1b3Sopenharmony_ci   To detect and resolve these conflicts, an RTP implementation MUST
338653a5a1b3Sopenharmony_ci   include an algorithm similar to the one described below, though the
338753a5a1b3Sopenharmony_ci   implementation MAY choose a different policy for which packets from
338853a5a1b3Sopenharmony_ci   colliding third-party sources are kept.  The algorithm described
338953a5a1b3Sopenharmony_ci   below ignores packets from a new source or loop that collide with an
339053a5a1b3Sopenharmony_ci   established source.  It resolves collisions with the participant's
339153a5a1b3Sopenharmony_ci   own SSRC identifier by sending an RTCP BYE for the old identifier and
339253a5a1b3Sopenharmony_ci   choosing a new one.  However, when the collision was induced by a
339353a5a1b3Sopenharmony_ci   loop of the participant's own packets, the algorithm will choose a
339453a5a1b3Sopenharmony_ci   new identifier only once and thereafter ignore packets from the
339553a5a1b3Sopenharmony_ci   looping source transport address.  This is required to avoid a flood
339653a5a1b3Sopenharmony_ci   of BYE packets.
339753a5a1b3Sopenharmony_ci
339853a5a1b3Sopenharmony_ci   This algorithm requires keeping a table indexed by the source
339953a5a1b3Sopenharmony_ci   identifier and containing the source transport addresses from the
340053a5a1b3Sopenharmony_ci   first RTP packet and first RTCP packet received with that identifier,
340153a5a1b3Sopenharmony_ci   along with other state for that source.  Two source transport
340253a5a1b3Sopenharmony_ci   addresses are required since, for example, the UDP source port
340353a5a1b3Sopenharmony_ci   numbers may be different on RTP and RTCP packets.  However, it may be
340453a5a1b3Sopenharmony_ci   assumed that the network address is the same in both source transport
340553a5a1b3Sopenharmony_ci   addresses.
340653a5a1b3Sopenharmony_ci
340753a5a1b3Sopenharmony_ci   Each SSRC or CSRC identifier received in an RTP or RTCP packet is
340853a5a1b3Sopenharmony_ci   looked up in the source identifier table in order to process that
340953a5a1b3Sopenharmony_ci   data or control information.  The source transport address from the
341053a5a1b3Sopenharmony_ci   packet is compared to the corresponding source transport address in
341153a5a1b3Sopenharmony_ci   the table to detect a loop or collision if they don't match.  For
341253a5a1b3Sopenharmony_ci   control packets, each element with its own SSRC identifier, for
341353a5a1b3Sopenharmony_ci   example an SDES chunk, requires a separate lookup.  (The SSRC
341453a5a1b3Sopenharmony_ci   identifier in a reception report block is an exception because it
341553a5a1b3Sopenharmony_ci
341653a5a1b3Sopenharmony_ci
341753a5a1b3Sopenharmony_ci
341853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 61]
341953a5a1b3Sopenharmony_ci
342053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
342153a5a1b3Sopenharmony_ci
342253a5a1b3Sopenharmony_ci
342353a5a1b3Sopenharmony_ci   identifies a source heard by the reporter, and that SSRC identifier
342453a5a1b3Sopenharmony_ci   is unrelated to the source transport address of the RTCP packet sent
342553a5a1b3Sopenharmony_ci   by the reporter.)  If the SSRC or CSRC is not found, a new entry is
342653a5a1b3Sopenharmony_ci   created.  These table entries are removed when an RTCP BYE packet is
342753a5a1b3Sopenharmony_ci   received with the corresponding SSRC identifier and validated by a
342853a5a1b3Sopenharmony_ci   matching source transport address, or after no packets have arrived
342953a5a1b3Sopenharmony_ci   for a relatively long time (see Section 6.2.1).
343053a5a1b3Sopenharmony_ci
343153a5a1b3Sopenharmony_ci   Note that if two sources on the same host are transmitting with the
343253a5a1b3Sopenharmony_ci   same source identifier at the time a receiver begins operation, it
343353a5a1b3Sopenharmony_ci   would be possible that the first RTP packet received came from one of
343453a5a1b3Sopenharmony_ci   the sources while the first RTCP packet received came from the other.
343553a5a1b3Sopenharmony_ci   This would cause the wrong RTCP information to be associated with the
343653a5a1b3Sopenharmony_ci   RTP data, but this situation should be sufficiently rare and harmless
343753a5a1b3Sopenharmony_ci   that it may be disregarded.
343853a5a1b3Sopenharmony_ci
343953a5a1b3Sopenharmony_ci   In order to track loops of the participant's own data packets, the
344053a5a1b3Sopenharmony_ci   implementation MUST also keep a separate list of source transport
344153a5a1b3Sopenharmony_ci   addresses (not identifiers) that have been found to be conflicting.
344253a5a1b3Sopenharmony_ci   As in the source identifier table, two source transport addresses
344353a5a1b3Sopenharmony_ci   MUST be kept to separately track conflicting RTP and RTCP packets.
344453a5a1b3Sopenharmony_ci   Note that the conflicting address list should be short, usually
344553a5a1b3Sopenharmony_ci   empty.  Each element in this list stores the source addresses plus
344653a5a1b3Sopenharmony_ci   the time when the most recent conflicting packet was received.  An
344753a5a1b3Sopenharmony_ci   element MAY be removed from the list when no conflicting packet has
344853a5a1b3Sopenharmony_ci   arrived from that source for a time on the order of 10 RTCP report
344953a5a1b3Sopenharmony_ci   intervals (see Section 6.2).
345053a5a1b3Sopenharmony_ci
345153a5a1b3Sopenharmony_ci   For the algorithm as shown, it is assumed that the participant's own
345253a5a1b3Sopenharmony_ci   source identifier and state are included in the source identifier
345353a5a1b3Sopenharmony_ci   table.  The algorithm could be restructured to first make a separate
345453a5a1b3Sopenharmony_ci   comparison against the participant's own source identifier.
345553a5a1b3Sopenharmony_ci
345653a5a1b3Sopenharmony_ci      if (SSRC or CSRC identifier is not found in the source
345753a5a1b3Sopenharmony_ci          identifier table) {
345853a5a1b3Sopenharmony_ci          create a new entry storing the data or control source
345953a5a1b3Sopenharmony_ci              transport address, the SSRC or CSRC and other state;
346053a5a1b3Sopenharmony_ci      }
346153a5a1b3Sopenharmony_ci
346253a5a1b3Sopenharmony_ci      /* Identifier is found in the table */
346353a5a1b3Sopenharmony_ci
346453a5a1b3Sopenharmony_ci      else if (table entry was created on receipt of a control packet
346553a5a1b3Sopenharmony_ci               and this is the first data packet or vice versa) {
346653a5a1b3Sopenharmony_ci          store the source transport address from this packet;
346753a5a1b3Sopenharmony_ci      }
346853a5a1b3Sopenharmony_ci      else if (source transport address from the packet does not match
346953a5a1b3Sopenharmony_ci               the one saved in the table entry for this identifier) {
347053a5a1b3Sopenharmony_ci
347153a5a1b3Sopenharmony_ci
347253a5a1b3Sopenharmony_ci
347353a5a1b3Sopenharmony_ci
347453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 62]
347553a5a1b3Sopenharmony_ci
347653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
347753a5a1b3Sopenharmony_ci
347853a5a1b3Sopenharmony_ci
347953a5a1b3Sopenharmony_ci          /* An identifier collision or a loop is indicated */
348053a5a1b3Sopenharmony_ci
348153a5a1b3Sopenharmony_ci          if (source identifier is not the participant's own) {
348253a5a1b3Sopenharmony_ci              /* OPTIONAL error counter step */
348353a5a1b3Sopenharmony_ci              if (source identifier is from an RTCP SDES chunk
348453a5a1b3Sopenharmony_ci                  containing a CNAME item that differs from the CNAME
348553a5a1b3Sopenharmony_ci                  in the table entry) {
348653a5a1b3Sopenharmony_ci                  count a third-party collision;
348753a5a1b3Sopenharmony_ci              } else {
348853a5a1b3Sopenharmony_ci                  count a third-party loop;
348953a5a1b3Sopenharmony_ci              }
349053a5a1b3Sopenharmony_ci              abort processing of data packet or control element;
349153a5a1b3Sopenharmony_ci              /* MAY choose a different policy to keep new source */
349253a5a1b3Sopenharmony_ci          }
349353a5a1b3Sopenharmony_ci
349453a5a1b3Sopenharmony_ci          /* A collision or loop of the participant's own packets */
349553a5a1b3Sopenharmony_ci
349653a5a1b3Sopenharmony_ci          else if (source transport address is found in the list of
349753a5a1b3Sopenharmony_ci                   conflicting data or control source transport
349853a5a1b3Sopenharmony_ci                   addresses) {
349953a5a1b3Sopenharmony_ci              /* OPTIONAL error counter step */
350053a5a1b3Sopenharmony_ci              if (source identifier is not from an RTCP SDES chunk
350153a5a1b3Sopenharmony_ci                  containing a CNAME item or CNAME is the
350253a5a1b3Sopenharmony_ci                  participant's own) {
350353a5a1b3Sopenharmony_ci                  count occurrence of own traffic looped;
350453a5a1b3Sopenharmony_ci              }
350553a5a1b3Sopenharmony_ci              mark current time in conflicting address list entry;
350653a5a1b3Sopenharmony_ci              abort processing of data packet or control element;
350753a5a1b3Sopenharmony_ci          }
350853a5a1b3Sopenharmony_ci
350953a5a1b3Sopenharmony_ci          /* New collision, change SSRC identifier */
351053a5a1b3Sopenharmony_ci
351153a5a1b3Sopenharmony_ci          else {
351253a5a1b3Sopenharmony_ci              log occurrence of a collision;
351353a5a1b3Sopenharmony_ci              create a new entry in the conflicting data or control
351453a5a1b3Sopenharmony_ci                  source transport address list and mark current time;
351553a5a1b3Sopenharmony_ci              send an RTCP BYE packet with the old SSRC identifier;
351653a5a1b3Sopenharmony_ci              choose a new SSRC identifier;
351753a5a1b3Sopenharmony_ci              create a new entry in the source identifier table with
351853a5a1b3Sopenharmony_ci                  the old SSRC plus the source transport address from
351953a5a1b3Sopenharmony_ci                  the data or control packet being processed;
352053a5a1b3Sopenharmony_ci          }
352153a5a1b3Sopenharmony_ci      }
352253a5a1b3Sopenharmony_ci
352353a5a1b3Sopenharmony_ci   In this algorithm, packets from a newly conflicting source address
352453a5a1b3Sopenharmony_ci   will be ignored and packets from the original source address will be
352553a5a1b3Sopenharmony_ci   kept.  If no packets arrive from the original source for an extended
352653a5a1b3Sopenharmony_ci   period, the table entry will be timed out and the new source will be
352753a5a1b3Sopenharmony_ci
352853a5a1b3Sopenharmony_ci
352953a5a1b3Sopenharmony_ci
353053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 63]
353153a5a1b3Sopenharmony_ci
353253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
353353a5a1b3Sopenharmony_ci
353453a5a1b3Sopenharmony_ci
353553a5a1b3Sopenharmony_ci   able to take over.  This might occur if the original source detects
353653a5a1b3Sopenharmony_ci   the collision and moves to a new source identifier, but in the usual
353753a5a1b3Sopenharmony_ci   case an RTCP BYE packet will be received from the original source to
353853a5a1b3Sopenharmony_ci   delete the state without having to wait for a timeout.
353953a5a1b3Sopenharmony_ci
354053a5a1b3Sopenharmony_ci   If the original source address was received through a mixer (i.e.,
354153a5a1b3Sopenharmony_ci   learned as a CSRC) and later the same source is received directly,
354253a5a1b3Sopenharmony_ci   the receiver may be well advised to switch to the new source address
354353a5a1b3Sopenharmony_ci   unless other sources in the mix would be lost.  Furthermore, for
354453a5a1b3Sopenharmony_ci   applications such as telephony in which some sources such as mobile
354553a5a1b3Sopenharmony_ci   entities may change addresses during the course of an RTP session,
354653a5a1b3Sopenharmony_ci   the RTP implementation SHOULD modify the collision detection
354753a5a1b3Sopenharmony_ci   algorithm to accept packets from the new source transport address.
354853a5a1b3Sopenharmony_ci   To guard against flip-flopping between addresses if a genuine
354953a5a1b3Sopenharmony_ci   collision does occur, the algorithm SHOULD include some means to
355053a5a1b3Sopenharmony_ci   detect this case and avoid switching.
355153a5a1b3Sopenharmony_ci
355253a5a1b3Sopenharmony_ci   When a new SSRC identifier is chosen due to a collision, the
355353a5a1b3Sopenharmony_ci   candidate identifier SHOULD first be looked up in the source
355453a5a1b3Sopenharmony_ci   identifier table to see if it was already in use by some other
355553a5a1b3Sopenharmony_ci   source.  If so, another candidate MUST be generated and the process
355653a5a1b3Sopenharmony_ci   repeated.
355753a5a1b3Sopenharmony_ci
355853a5a1b3Sopenharmony_ci   A loop of data packets to a multicast destination can cause severe
355953a5a1b3Sopenharmony_ci   network flooding.  All mixers and translators MUST implement a loop
356053a5a1b3Sopenharmony_ci   detection algorithm like the one here so that they can break loops.
356153a5a1b3Sopenharmony_ci   This should limit the excess traffic to no more than one duplicate
356253a5a1b3Sopenharmony_ci   copy of the original traffic, which may allow the session to continue
356353a5a1b3Sopenharmony_ci   so that the cause of the loop can be found and fixed.  However, in
356453a5a1b3Sopenharmony_ci   extreme cases where a mixer or translator does not properly break the
356553a5a1b3Sopenharmony_ci   loop and high traffic levels result, it may be necessary for end
356653a5a1b3Sopenharmony_ci   systems to cease transmitting data or control packets entirely.  This
356753a5a1b3Sopenharmony_ci   decision may depend upon the application.  An error condition SHOULD
356853a5a1b3Sopenharmony_ci   be indicated as appropriate.  Transmission MAY be attempted again
356953a5a1b3Sopenharmony_ci   periodically after a long, random time (on the order of minutes).
357053a5a1b3Sopenharmony_ci
357153a5a1b3Sopenharmony_ci8.3 Use with Layered Encodings
357253a5a1b3Sopenharmony_ci
357353a5a1b3Sopenharmony_ci   For layered encodings transmitted on separate RTP sessions (see
357453a5a1b3Sopenharmony_ci   Section 2.4), a single SSRC identifier space SHOULD be used across
357553a5a1b3Sopenharmony_ci   the sessions of all layers and the core (base) layer SHOULD be used
357653a5a1b3Sopenharmony_ci   for SSRC identifier allocation and collision resolution.  When a
357753a5a1b3Sopenharmony_ci   source discovers that it has collided, it transmits an RTCP BYE
357853a5a1b3Sopenharmony_ci   packet on only the base layer but changes the SSRC identifier to the
357953a5a1b3Sopenharmony_ci   new value in all layers.
358053a5a1b3Sopenharmony_ci
358153a5a1b3Sopenharmony_ci
358253a5a1b3Sopenharmony_ci
358353a5a1b3Sopenharmony_ci
358453a5a1b3Sopenharmony_ci
358553a5a1b3Sopenharmony_ci
358653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 64]
358753a5a1b3Sopenharmony_ci
358853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
358953a5a1b3Sopenharmony_ci
359053a5a1b3Sopenharmony_ci
359153a5a1b3Sopenharmony_ci9. Security
359253a5a1b3Sopenharmony_ci
359353a5a1b3Sopenharmony_ci   Lower layer protocols may eventually provide all the security
359453a5a1b3Sopenharmony_ci   services that may be desired for applications of RTP, including
359553a5a1b3Sopenharmony_ci   authentication, integrity, and confidentiality.  These services have
359653a5a1b3Sopenharmony_ci   been specified for IP in [27].  Since the initial audio and video
359753a5a1b3Sopenharmony_ci   applications using RTP needed a confidentiality service before such
359853a5a1b3Sopenharmony_ci   services were available for the IP layer, the confidentiality service
359953a5a1b3Sopenharmony_ci   described in the next section was defined for use with RTP and RTCP.
360053a5a1b3Sopenharmony_ci   That description is included here to codify existing practice.  New
360153a5a1b3Sopenharmony_ci   applications of RTP MAY implement this RTP-specific confidentiality
360253a5a1b3Sopenharmony_ci   service for backward compatibility, and/or they MAY implement
360353a5a1b3Sopenharmony_ci   alternative security services.  The overhead on the RTP protocol for
360453a5a1b3Sopenharmony_ci   this confidentiality service is low, so the penalty will be minimal
360553a5a1b3Sopenharmony_ci   if this service is obsoleted by other services in the future.
360653a5a1b3Sopenharmony_ci
360753a5a1b3Sopenharmony_ci   Alternatively, other services, other implementations of services and
360853a5a1b3Sopenharmony_ci   other algorithms may be defined for RTP in the future.  In
360953a5a1b3Sopenharmony_ci   particular, an RTP profile called Secure Real-time Transport Protocol
361053a5a1b3Sopenharmony_ci   (SRTP) [28] is being developed to provide confidentiality of the RTP
361153a5a1b3Sopenharmony_ci   payload while leaving the RTP header in the clear so that link-level
361253a5a1b3Sopenharmony_ci   header compression algorithms can still operate.  It is expected that
361353a5a1b3Sopenharmony_ci   SRTP will be the correct choice for many applications.  SRTP is based
361453a5a1b3Sopenharmony_ci   on the Advanced Encryption Standard (AES) and provides stronger
361553a5a1b3Sopenharmony_ci   security than the service described here.  No claim is made that the
361653a5a1b3Sopenharmony_ci   methods presented here are appropriate for a particular security
361753a5a1b3Sopenharmony_ci   need.  A profile may specify which services and algorithms should be
361853a5a1b3Sopenharmony_ci   offered by applications, and may provide guidance as to their
361953a5a1b3Sopenharmony_ci   appropriate use.
362053a5a1b3Sopenharmony_ci
362153a5a1b3Sopenharmony_ci   Key distribution and certificates are outside the scope of this
362253a5a1b3Sopenharmony_ci   document.
362353a5a1b3Sopenharmony_ci
362453a5a1b3Sopenharmony_ci9.1 Confidentiality
362553a5a1b3Sopenharmony_ci
362653a5a1b3Sopenharmony_ci   Confidentiality means that only the intended receiver(s) can decode
362753a5a1b3Sopenharmony_ci   the received packets; for others, the packet contains no useful
362853a5a1b3Sopenharmony_ci   information.  Confidentiality of the content is achieved by
362953a5a1b3Sopenharmony_ci   encryption.
363053a5a1b3Sopenharmony_ci
363153a5a1b3Sopenharmony_ci   When it is desired to encrypt RTP or RTCP according to the method
363253a5a1b3Sopenharmony_ci   specified in this section, all the octets that will be encapsulated
363353a5a1b3Sopenharmony_ci   for transmission in a single lower-layer packet are encrypted as a
363453a5a1b3Sopenharmony_ci   unit.  For RTCP, a 32-bit random number redrawn for each unit MUST be
363553a5a1b3Sopenharmony_ci   prepended to the unit before encryption.  For RTP, no prefix is
363653a5a1b3Sopenharmony_ci   prepended; instead, the sequence number and timestamp fields are
363753a5a1b3Sopenharmony_ci   initialized with random offsets.  This is considered to be a weak
363853a5a1b3Sopenharmony_ci
363953a5a1b3Sopenharmony_ci
364053a5a1b3Sopenharmony_ci
364153a5a1b3Sopenharmony_ci
364253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 65]
364353a5a1b3Sopenharmony_ci
364453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
364553a5a1b3Sopenharmony_ci
364653a5a1b3Sopenharmony_ci
364753a5a1b3Sopenharmony_ci   initialization vector (IV) because of poor randomness properties.  In
364853a5a1b3Sopenharmony_ci   addition, if the subsequent field, the SSRC, can be manipulated by an
364953a5a1b3Sopenharmony_ci   enemy, there is further weakness of the encryption method.
365053a5a1b3Sopenharmony_ci
365153a5a1b3Sopenharmony_ci   For RTCP, an implementation MAY segregate the individual RTCP packets
365253a5a1b3Sopenharmony_ci   in a compound RTCP packet into two separate compound RTCP packets,
365353a5a1b3Sopenharmony_ci   one to be encrypted and one to be sent in the clear.  For example,
365453a5a1b3Sopenharmony_ci   SDES information might be encrypted while reception reports were sent
365553a5a1b3Sopenharmony_ci   in the clear to accommodate third-party monitors that are not privy
365653a5a1b3Sopenharmony_ci   to the encryption key.  In this example, depicted in Fig. 4, the SDES
365753a5a1b3Sopenharmony_ci   information MUST be appended to an RR packet with no reports (and the
365853a5a1b3Sopenharmony_ci   random number) to satisfy the requirement that all compound RTCP
365953a5a1b3Sopenharmony_ci   packets begin with an SR or RR packet.  The SDES CNAME item is
366053a5a1b3Sopenharmony_ci   required in either the encrypted or unencrypted packet, but not both.
366153a5a1b3Sopenharmony_ci   The same SDES information SHOULD NOT be carried in both packets as
366253a5a1b3Sopenharmony_ci   this may compromise the encryption.
366353a5a1b3Sopenharmony_ci
366453a5a1b3Sopenharmony_ci             UDP packet                     UDP packet
366553a5a1b3Sopenharmony_ci   -----------------------------  ------------------------------
366653a5a1b3Sopenharmony_ci   [random][RR][SDES #CNAME ...]  [SR #senderinfo #site1 #site2]
366753a5a1b3Sopenharmony_ci   -----------------------------  ------------------------------
366853a5a1b3Sopenharmony_ci             encrypted                     not encrypted
366953a5a1b3Sopenharmony_ci
367053a5a1b3Sopenharmony_ci   #: SSRC identifier
367153a5a1b3Sopenharmony_ci
367253a5a1b3Sopenharmony_ci       Figure 4: Encrypted and non-encrypted RTCP packets
367353a5a1b3Sopenharmony_ci
367453a5a1b3Sopenharmony_ci   The presence of encryption and the use of the correct key are
367553a5a1b3Sopenharmony_ci   confirmed by the receiver through header or payload validity checks.
367653a5a1b3Sopenharmony_ci   Examples of such validity checks for RTP and RTCP headers are given
367753a5a1b3Sopenharmony_ci   in Appendices A.1 and A.2.
367853a5a1b3Sopenharmony_ci
367953a5a1b3Sopenharmony_ci   To be consistent with existing implementations of the initial
368053a5a1b3Sopenharmony_ci   specification of RTP in RFC 1889, the default encryption algorithm is
368153a5a1b3Sopenharmony_ci   the Data Encryption Standard (DES) algorithm in cipher block chaining
368253a5a1b3Sopenharmony_ci   (CBC) mode, as described in Section 1.1 of RFC 1423 [29], except that
368353a5a1b3Sopenharmony_ci   padding to a multiple of 8 octets is indicated as described for the P
368453a5a1b3Sopenharmony_ci   bit in Section 5.1.  The initialization vector is zero because random
368553a5a1b3Sopenharmony_ci   values are supplied in the RTP header or by the random prefix for
368653a5a1b3Sopenharmony_ci   compound RTCP packets.  For details on the use of CBC initialization
368753a5a1b3Sopenharmony_ci   vectors, see [30].
368853a5a1b3Sopenharmony_ci
368953a5a1b3Sopenharmony_ci   Implementations that support the encryption method specified here
369053a5a1b3Sopenharmony_ci   SHOULD always support the DES algorithm in CBC mode as the default
369153a5a1b3Sopenharmony_ci   cipher for this method to maximize interoperability.  This method was
369253a5a1b3Sopenharmony_ci   chosen because it has been demonstrated to be easy and practical to
369353a5a1b3Sopenharmony_ci   use in experimental audio and video tools in operation on the
369453a5a1b3Sopenharmony_ci   Internet.  However, DES has since been found to be too easily broken.
369553a5a1b3Sopenharmony_ci
369653a5a1b3Sopenharmony_ci
369753a5a1b3Sopenharmony_ci
369853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 66]
369953a5a1b3Sopenharmony_ci
370053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
370153a5a1b3Sopenharmony_ci
370253a5a1b3Sopenharmony_ci
370353a5a1b3Sopenharmony_ci   It is RECOMMENDED that stronger encryption algorithms such as
370453a5a1b3Sopenharmony_ci   Triple-DES be used in place of the default algorithm.  Furthermore,
370553a5a1b3Sopenharmony_ci   secure CBC mode requires that the first block of each packet be XORed
370653a5a1b3Sopenharmony_ci   with a random, independent IV of the same size as the cipher's block
370753a5a1b3Sopenharmony_ci   size.  For RTCP, this is (partially) achieved by prepending each
370853a5a1b3Sopenharmony_ci   packet with a 32-bit random number, independently chosen for each
370953a5a1b3Sopenharmony_ci   packet.  For RTP, the timestamp and sequence number start from random
371053a5a1b3Sopenharmony_ci   values, but consecutive packets will not be independently randomized.
371153a5a1b3Sopenharmony_ci   It should be noted that the randomness in both cases (RTP and RTCP)
371253a5a1b3Sopenharmony_ci   is limited.  High-security applications SHOULD consider other, more
371353a5a1b3Sopenharmony_ci   conventional, protection means.  Other encryption algorithms MAY be
371453a5a1b3Sopenharmony_ci   specified dynamically for a session by non-RTP means.  In particular,
371553a5a1b3Sopenharmony_ci   the SRTP profile [28] based on AES is being developed to take into
371653a5a1b3Sopenharmony_ci   account known plaintext and CBC plaintext manipulation concerns, and
371753a5a1b3Sopenharmony_ci   will be the correct choice in the future.
371853a5a1b3Sopenharmony_ci
371953a5a1b3Sopenharmony_ci   As an alternative to encryption at the IP level or at the RTP level
372053a5a1b3Sopenharmony_ci   as described above, profiles MAY define additional payload types for
372153a5a1b3Sopenharmony_ci   encrypted encodings.  Those encodings MUST specify how padding and
372253a5a1b3Sopenharmony_ci   other aspects of the encryption are to be handled.  This method
372353a5a1b3Sopenharmony_ci   allows encrypting only the data while leaving the headers in the
372453a5a1b3Sopenharmony_ci   clear for applications where that is desired.  It may be particularly
372553a5a1b3Sopenharmony_ci   useful for hardware devices that will handle both decryption and
372653a5a1b3Sopenharmony_ci   decoding.  It is also valuable for applications where link-level
372753a5a1b3Sopenharmony_ci   compression of RTP and lower-layer headers is desired and
372853a5a1b3Sopenharmony_ci   confidentiality of the payload (but not addresses) is sufficient
372953a5a1b3Sopenharmony_ci   since encryption of the headers precludes compression.
373053a5a1b3Sopenharmony_ci
373153a5a1b3Sopenharmony_ci9.2 Authentication and Message Integrity
373253a5a1b3Sopenharmony_ci
373353a5a1b3Sopenharmony_ci   Authentication and message integrity services are not defined at the
373453a5a1b3Sopenharmony_ci   RTP level since these services would not be directly feasible without
373553a5a1b3Sopenharmony_ci   a key management infrastructure.  It is expected that authentication
373653a5a1b3Sopenharmony_ci   and integrity services will be provided by lower layer protocols.
373753a5a1b3Sopenharmony_ci
373853a5a1b3Sopenharmony_ci10. Congestion Control
373953a5a1b3Sopenharmony_ci
374053a5a1b3Sopenharmony_ci   All transport protocols used on the Internet need to address
374153a5a1b3Sopenharmony_ci   congestion control in some way [31].  RTP is not an exception, but
374253a5a1b3Sopenharmony_ci   because the data transported over RTP is often inelastic (generated
374353a5a1b3Sopenharmony_ci   at a fixed or controlled rate), the means to control congestion in
374453a5a1b3Sopenharmony_ci   RTP may be quite different from those for other transport protocols
374553a5a1b3Sopenharmony_ci   such as TCP.  In one sense, inelasticity reduces the risk of
374653a5a1b3Sopenharmony_ci   congestion because the RTP stream will not expand to consume all
374753a5a1b3Sopenharmony_ci   available bandwidth as a TCP stream can.  However, inelasticity also
374853a5a1b3Sopenharmony_ci   means that the RTP stream cannot arbitrarily reduce its load on the
374953a5a1b3Sopenharmony_ci   network to eliminate congestion when it occurs.
375053a5a1b3Sopenharmony_ci
375153a5a1b3Sopenharmony_ci
375253a5a1b3Sopenharmony_ci
375353a5a1b3Sopenharmony_ci
375453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 67]
375553a5a1b3Sopenharmony_ci
375653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
375753a5a1b3Sopenharmony_ci
375853a5a1b3Sopenharmony_ci
375953a5a1b3Sopenharmony_ci   Since RTP may be used for a wide variety of applications in many
376053a5a1b3Sopenharmony_ci   different contexts, there is no single congestion control mechanism
376153a5a1b3Sopenharmony_ci   that will work for all.  Therefore, congestion control SHOULD be
376253a5a1b3Sopenharmony_ci   defined in each RTP profile as appropriate.  For some profiles, it
376353a5a1b3Sopenharmony_ci   may be sufficient to include an applicability statement restricting
376453a5a1b3Sopenharmony_ci   the use of that profile to environments where congestion is avoided
376553a5a1b3Sopenharmony_ci   by engineering.  For other profiles, specific methods such as data
376653a5a1b3Sopenharmony_ci   rate adaptation based on RTCP feedback may be required.
376753a5a1b3Sopenharmony_ci
376853a5a1b3Sopenharmony_ci11. RTP over Network and Transport Protocols
376953a5a1b3Sopenharmony_ci
377053a5a1b3Sopenharmony_ci   This section describes issues specific to carrying RTP packets within
377153a5a1b3Sopenharmony_ci   particular network and transport protocols.  The following rules
377253a5a1b3Sopenharmony_ci   apply unless superseded by protocol-specific definitions outside this
377353a5a1b3Sopenharmony_ci   specification.
377453a5a1b3Sopenharmony_ci
377553a5a1b3Sopenharmony_ci   RTP relies on the underlying protocol(s) to provide demultiplexing of
377653a5a1b3Sopenharmony_ci   RTP data and RTCP control streams.  For UDP and similar protocols,
377753a5a1b3Sopenharmony_ci   RTP SHOULD use an even destination port number and the corresponding
377853a5a1b3Sopenharmony_ci   RTCP stream SHOULD use the next higher (odd) destination port number.
377953a5a1b3Sopenharmony_ci   For applications that take a single port number as a parameter and
378053a5a1b3Sopenharmony_ci   derive the RTP and RTCP port pair from that number, if an odd number
378153a5a1b3Sopenharmony_ci   is supplied then the application SHOULD replace that number with the
378253a5a1b3Sopenharmony_ci   next lower (even) number to use as the base of the port pair.  For
378353a5a1b3Sopenharmony_ci   applications in which the RTP and RTCP destination port numbers are
378453a5a1b3Sopenharmony_ci   specified via explicit, separate parameters (using a signaling
378553a5a1b3Sopenharmony_ci   protocol or other means), the application MAY disregard the
378653a5a1b3Sopenharmony_ci   restrictions that the port numbers be even/odd and consecutive
378753a5a1b3Sopenharmony_ci   although the use of an even/odd port pair is still encouraged.  The
378853a5a1b3Sopenharmony_ci   RTP and RTCP port numbers MUST NOT be the same since RTP relies on
378953a5a1b3Sopenharmony_ci   the port numbers to demultiplex the RTP data and RTCP control
379053a5a1b3Sopenharmony_ci   streams.
379153a5a1b3Sopenharmony_ci
379253a5a1b3Sopenharmony_ci   In a unicast session, both participants need to identify a port pair
379353a5a1b3Sopenharmony_ci   for receiving RTP and RTCP packets.  Both participants MAY use the
379453a5a1b3Sopenharmony_ci   same port pair.  A participant MUST NOT assume that the source port
379553a5a1b3Sopenharmony_ci   of the incoming RTP or RTCP packet can be used as the destination
379653a5a1b3Sopenharmony_ci   port for outgoing RTP or RTCP packets.  When RTP data packets are
379753a5a1b3Sopenharmony_ci   being sent in both directions, each participant's RTCP SR packets
379853a5a1b3Sopenharmony_ci   MUST be sent to the port that the other participant has specified for
379953a5a1b3Sopenharmony_ci   reception of RTCP.  The RTCP SR packets combine sender information
380053a5a1b3Sopenharmony_ci   for the outgoing data plus reception report information for the
380153a5a1b3Sopenharmony_ci   incoming data.  If a side is not actively sending data (see Section
380253a5a1b3Sopenharmony_ci   6.4), an RTCP RR packet is sent instead.
380353a5a1b3Sopenharmony_ci
380453a5a1b3Sopenharmony_ci   It is RECOMMENDED that layered encoding applications (see Section
380553a5a1b3Sopenharmony_ci   2.4) use a set of contiguous port numbers.  The port numbers MUST be
380653a5a1b3Sopenharmony_ci   distinct because of a widespread deficiency in existing operating
380753a5a1b3Sopenharmony_ci
380853a5a1b3Sopenharmony_ci
380953a5a1b3Sopenharmony_ci
381053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 68]
381153a5a1b3Sopenharmony_ci
381253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
381353a5a1b3Sopenharmony_ci
381453a5a1b3Sopenharmony_ci
381553a5a1b3Sopenharmony_ci   systems that prevents use of the same port with multiple multicast
381653a5a1b3Sopenharmony_ci   addresses, and for unicast, there is only one permissible address.
381753a5a1b3Sopenharmony_ci   Thus for layer n, the data port is P + 2n, and the control port is P
381853a5a1b3Sopenharmony_ci   + 2n + 1.  When IP multicast is used, the addresses MUST also be
381953a5a1b3Sopenharmony_ci   distinct because multicast routing and group membership are managed
382053a5a1b3Sopenharmony_ci   on an address granularity.  However, allocation of contiguous IP
382153a5a1b3Sopenharmony_ci   multicast addresses cannot be assumed because some groups may require
382253a5a1b3Sopenharmony_ci   different scopes and may therefore be allocated from different
382353a5a1b3Sopenharmony_ci   address ranges.
382453a5a1b3Sopenharmony_ci
382553a5a1b3Sopenharmony_ci   The previous paragraph conflicts with the SDP specification, RFC 2327
382653a5a1b3Sopenharmony_ci   [15], which says that it is illegal for both multiple addresses and
382753a5a1b3Sopenharmony_ci   multiple ports to be specified in the same session description
382853a5a1b3Sopenharmony_ci   because the association of addresses with ports could be ambiguous.
382953a5a1b3Sopenharmony_ci   It is intended that this restriction will be relaxed in a revision of
383053a5a1b3Sopenharmony_ci   RFC 2327 to allow an equal number of addresses and ports to be
383153a5a1b3Sopenharmony_ci   specified with a one-to-one mapping implied.
383253a5a1b3Sopenharmony_ci
383353a5a1b3Sopenharmony_ci   RTP data packets contain no length field or other delineation,
383453a5a1b3Sopenharmony_ci   therefore RTP relies on the underlying protocol(s) to provide a
383553a5a1b3Sopenharmony_ci   length indication.  The maximum length of RTP packets is limited only
383653a5a1b3Sopenharmony_ci   by the underlying protocols.
383753a5a1b3Sopenharmony_ci
383853a5a1b3Sopenharmony_ci   If RTP packets are to be carried in an underlying protocol that
383953a5a1b3Sopenharmony_ci   provides the abstraction of a continuous octet stream rather than
384053a5a1b3Sopenharmony_ci   messages (packets), an encapsulation of the RTP packets MUST be
384153a5a1b3Sopenharmony_ci   defined to provide a framing mechanism.  Framing is also needed if
384253a5a1b3Sopenharmony_ci   the underlying protocol may contain padding so that the extent of the
384353a5a1b3Sopenharmony_ci   RTP payload cannot be determined.  The framing mechanism is not
384453a5a1b3Sopenharmony_ci   defined here.
384553a5a1b3Sopenharmony_ci
384653a5a1b3Sopenharmony_ci   A profile MAY specify a framing method to be used even when RTP is
384753a5a1b3Sopenharmony_ci   carried in protocols that do provide framing in order to allow
384853a5a1b3Sopenharmony_ci   carrying several RTP packets in one lower-layer protocol data unit,
384953a5a1b3Sopenharmony_ci   such as a UDP packet.  Carrying several RTP packets in one network or
385053a5a1b3Sopenharmony_ci   transport packet reduces header overhead and may simplify
385153a5a1b3Sopenharmony_ci   synchronization between different streams.
385253a5a1b3Sopenharmony_ci
385353a5a1b3Sopenharmony_ci12. Summary of Protocol Constants
385453a5a1b3Sopenharmony_ci
385553a5a1b3Sopenharmony_ci   This section contains a summary listing of the constants defined in
385653a5a1b3Sopenharmony_ci   this specification.
385753a5a1b3Sopenharmony_ci
385853a5a1b3Sopenharmony_ci   The RTP payload type (PT) constants are defined in profiles rather
385953a5a1b3Sopenharmony_ci   than this document.  However, the octet of the RTP header which
386053a5a1b3Sopenharmony_ci   contains the marker bit(s) and payload type MUST avoid the reserved
386153a5a1b3Sopenharmony_ci   values 200 and 201 (decimal) to distinguish RTP packets from the RTCP
386253a5a1b3Sopenharmony_ci   SR and RR packet types for the header validation procedure described
386353a5a1b3Sopenharmony_ci
386453a5a1b3Sopenharmony_ci
386553a5a1b3Sopenharmony_ci
386653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 69]
386753a5a1b3Sopenharmony_ci
386853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
386953a5a1b3Sopenharmony_ci
387053a5a1b3Sopenharmony_ci
387153a5a1b3Sopenharmony_ci   in Appendix A.1.  For the standard definition of one marker bit and a
387253a5a1b3Sopenharmony_ci   7-bit payload type field as shown in this specification, this
387353a5a1b3Sopenharmony_ci   restriction means that payload types 72 and 73 are reserved.
387453a5a1b3Sopenharmony_ci
387553a5a1b3Sopenharmony_ci12.1 RTCP Packet Types
387653a5a1b3Sopenharmony_ci
387753a5a1b3Sopenharmony_ci   abbrev.  name                 value
387853a5a1b3Sopenharmony_ci   SR       sender report          200
387953a5a1b3Sopenharmony_ci   RR       receiver report        201
388053a5a1b3Sopenharmony_ci   SDES     source description     202
388153a5a1b3Sopenharmony_ci   BYE      goodbye                203
388253a5a1b3Sopenharmony_ci   APP      application-defined    204
388353a5a1b3Sopenharmony_ci
388453a5a1b3Sopenharmony_ci   These type values were chosen in the range 200-204 for improved
388553a5a1b3Sopenharmony_ci   header validity checking of RTCP packets compared to RTP packets or
388653a5a1b3Sopenharmony_ci   other unrelated packets.  When the RTCP packet type field is compared
388753a5a1b3Sopenharmony_ci   to the corresponding octet of the RTP header, this range corresponds
388853a5a1b3Sopenharmony_ci   to the marker bit being 1 (which it usually is not in data packets)
388953a5a1b3Sopenharmony_ci   and to the high bit of the standard payload type field being 1 (since
389053a5a1b3Sopenharmony_ci   the static payload types are typically defined in the low half).
389153a5a1b3Sopenharmony_ci   This range was also chosen to be some distance numerically from 0 and
389253a5a1b3Sopenharmony_ci   255 since all-zeros and all-ones are common data patterns.
389353a5a1b3Sopenharmony_ci
389453a5a1b3Sopenharmony_ci   Since all compound RTCP packets MUST begin with SR or RR, these codes
389553a5a1b3Sopenharmony_ci   were chosen as an even/odd pair to allow the RTCP validity check to
389653a5a1b3Sopenharmony_ci   test the maximum number of bits with mask and value.
389753a5a1b3Sopenharmony_ci
389853a5a1b3Sopenharmony_ci   Additional RTCP packet types may be registered through IANA (see
389953a5a1b3Sopenharmony_ci   Section 15).
390053a5a1b3Sopenharmony_ci
390153a5a1b3Sopenharmony_ci12.2 SDES Types
390253a5a1b3Sopenharmony_ci
390353a5a1b3Sopenharmony_ci   abbrev.  name                            value
390453a5a1b3Sopenharmony_ci   END      end of SDES list                    0
390553a5a1b3Sopenharmony_ci   CNAME    canonical name                      1
390653a5a1b3Sopenharmony_ci   NAME     user name                           2
390753a5a1b3Sopenharmony_ci   EMAIL    user's electronic mail address      3
390853a5a1b3Sopenharmony_ci   PHONE    user's phone number                 4
390953a5a1b3Sopenharmony_ci   LOC      geographic user location            5
391053a5a1b3Sopenharmony_ci   TOOL     name of application or tool         6
391153a5a1b3Sopenharmony_ci   NOTE     notice about the source             7
391253a5a1b3Sopenharmony_ci   PRIV     private extensions                  8
391353a5a1b3Sopenharmony_ci
391453a5a1b3Sopenharmony_ci   Additional SDES types may be registered through IANA (see Section
391553a5a1b3Sopenharmony_ci   15).
391653a5a1b3Sopenharmony_ci
391753a5a1b3Sopenharmony_ci
391853a5a1b3Sopenharmony_ci
391953a5a1b3Sopenharmony_ci
392053a5a1b3Sopenharmony_ci
392153a5a1b3Sopenharmony_ci
392253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 70]
392353a5a1b3Sopenharmony_ci
392453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
392553a5a1b3Sopenharmony_ci
392653a5a1b3Sopenharmony_ci
392753a5a1b3Sopenharmony_ci13.  RTP Profiles and Payload Format Specifications
392853a5a1b3Sopenharmony_ci
392953a5a1b3Sopenharmony_ci   A complete specification of RTP for a particular application will
393053a5a1b3Sopenharmony_ci   require one or more companion documents of two types described here:
393153a5a1b3Sopenharmony_ci   profiles, and payload format specifications.
393253a5a1b3Sopenharmony_ci
393353a5a1b3Sopenharmony_ci   RTP may be used for a variety of applications with somewhat differing
393453a5a1b3Sopenharmony_ci   requirements.  The flexibility to adapt to those requirements is
393553a5a1b3Sopenharmony_ci   provided by allowing multiple choices in the main protocol
393653a5a1b3Sopenharmony_ci   specification, then selecting the appropriate choices or defining
393753a5a1b3Sopenharmony_ci   extensions for a particular environment and class of applications in
393853a5a1b3Sopenharmony_ci   a separate profile document.  Typically an application will operate
393953a5a1b3Sopenharmony_ci   under only one profile in a particular RTP session, so there is no
394053a5a1b3Sopenharmony_ci   explicit indication within the RTP protocol itself as to which
394153a5a1b3Sopenharmony_ci   profile is in use.  A profile for audio and video applications may be
394253a5a1b3Sopenharmony_ci   found in the companion RFC 3551.  Profiles are typically titled "RTP
394353a5a1b3Sopenharmony_ci   Profile for ...".
394453a5a1b3Sopenharmony_ci
394553a5a1b3Sopenharmony_ci   The second type of companion document is a payload format
394653a5a1b3Sopenharmony_ci   specification, which defines how a particular kind of payload data,
394753a5a1b3Sopenharmony_ci   such as H.261 encoded video, should be carried in RTP.  These
394853a5a1b3Sopenharmony_ci   documents are typically titled "RTP Payload Format for XYZ
394953a5a1b3Sopenharmony_ci   Audio/Video Encoding".  Payload formats may be useful under multiple
395053a5a1b3Sopenharmony_ci   profiles and may therefore be defined independently of any particular
395153a5a1b3Sopenharmony_ci   profile.  The profile documents are then responsible for assigning a
395253a5a1b3Sopenharmony_ci   default mapping of that format to a payload type value if needed.
395353a5a1b3Sopenharmony_ci
395453a5a1b3Sopenharmony_ci   Within this specification, the following items have been identified
395553a5a1b3Sopenharmony_ci   for possible definition within a profile, but this list is not meant
395653a5a1b3Sopenharmony_ci   to be exhaustive:
395753a5a1b3Sopenharmony_ci
395853a5a1b3Sopenharmony_ci   RTP data header: The octet in the RTP data header that contains
395953a5a1b3Sopenharmony_ci      the marker bit and payload type field MAY be redefined by a
396053a5a1b3Sopenharmony_ci      profile to suit different requirements, for example with more or
396153a5a1b3Sopenharmony_ci      fewer marker bits (Section 5.3, p. 18).
396253a5a1b3Sopenharmony_ci
396353a5a1b3Sopenharmony_ci   Payload types: Assuming that a payload type field is included,
396453a5a1b3Sopenharmony_ci      the profile will usually define a set of payload formats (e.g.,
396553a5a1b3Sopenharmony_ci      media encodings) and a default static mapping of those formats to
396653a5a1b3Sopenharmony_ci      payload type values.  Some of the payload formats may be defined
396753a5a1b3Sopenharmony_ci      by reference to separate payload format specifications.  For each
396853a5a1b3Sopenharmony_ci      payload type defined, the profile MUST specify the RTP timestamp
396953a5a1b3Sopenharmony_ci      clock rate to be used (Section 5.1, p. 14).
397053a5a1b3Sopenharmony_ci
397153a5a1b3Sopenharmony_ci   RTP data header additions: Additional fields MAY be appended to
397253a5a1b3Sopenharmony_ci      the fixed RTP data header if some additional functionality is
397353a5a1b3Sopenharmony_ci      required across the profile's class of applications independent of
397453a5a1b3Sopenharmony_ci      payload type (Section 5.3, p. 18).
397553a5a1b3Sopenharmony_ci
397653a5a1b3Sopenharmony_ci
397753a5a1b3Sopenharmony_ci
397853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 71]
397953a5a1b3Sopenharmony_ci
398053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
398153a5a1b3Sopenharmony_ci
398253a5a1b3Sopenharmony_ci
398353a5a1b3Sopenharmony_ci   RTP data header extensions: The contents of the first 16 bits of
398453a5a1b3Sopenharmony_ci      the RTP data header extension structure MUST be defined if use of
398553a5a1b3Sopenharmony_ci      that mechanism is to be allowed under the profile for
398653a5a1b3Sopenharmony_ci      implementation-specific extensions (Section 5.3.1, p. 18).
398753a5a1b3Sopenharmony_ci
398853a5a1b3Sopenharmony_ci   RTCP packet types: New application-class-specific RTCP packet
398953a5a1b3Sopenharmony_ci      types MAY be defined and registered with IANA.
399053a5a1b3Sopenharmony_ci
399153a5a1b3Sopenharmony_ci   RTCP report interval: A profile SHOULD specify that the values
399253a5a1b3Sopenharmony_ci      suggested in Section 6.2 for the constants employed in the
399353a5a1b3Sopenharmony_ci      calculation of the RTCP report interval will be used.  Those are
399453a5a1b3Sopenharmony_ci      the RTCP fraction of session bandwidth, the minimum report
399553a5a1b3Sopenharmony_ci      interval, and the bandwidth split between senders and receivers.
399653a5a1b3Sopenharmony_ci      A profile MAY specify alternate values if they have been
399753a5a1b3Sopenharmony_ci      demonstrated to work in a scalable manner.
399853a5a1b3Sopenharmony_ci
399953a5a1b3Sopenharmony_ci   SR/RR extension: An extension section MAY be defined for the
400053a5a1b3Sopenharmony_ci      RTCP SR and RR packets if there is additional information that
400153a5a1b3Sopenharmony_ci      should be reported regularly about the sender or receivers
400253a5a1b3Sopenharmony_ci      (Section 6.4.3, p. 42 and 43).
400353a5a1b3Sopenharmony_ci
400453a5a1b3Sopenharmony_ci   SDES use: The profile MAY specify the relative priorities for
400553a5a1b3Sopenharmony_ci      RTCP SDES items to be transmitted or excluded entirely (Section
400653a5a1b3Sopenharmony_ci      6.3.9); an alternate syntax or semantics for the CNAME item
400753a5a1b3Sopenharmony_ci      (Section 6.5.1); the format of the LOC item (Section 6.5.5); the
400853a5a1b3Sopenharmony_ci      semantics and use of the NOTE item (Section 6.5.7); or new SDES
400953a5a1b3Sopenharmony_ci      item types to be registered with IANA.
401053a5a1b3Sopenharmony_ci
401153a5a1b3Sopenharmony_ci   Security: A profile MAY specify which security services and
401253a5a1b3Sopenharmony_ci      algorithms should be offered by applications, and MAY provide
401353a5a1b3Sopenharmony_ci      guidance as to their appropriate use (Section 9, p. 65).
401453a5a1b3Sopenharmony_ci
401553a5a1b3Sopenharmony_ci   String-to-key mapping: A profile MAY specify how a user-provided
401653a5a1b3Sopenharmony_ci      password or pass phrase is mapped into an encryption key.
401753a5a1b3Sopenharmony_ci
401853a5a1b3Sopenharmony_ci   Congestion: A profile SHOULD specify the congestion control
401953a5a1b3Sopenharmony_ci      behavior appropriate for that profile.
402053a5a1b3Sopenharmony_ci
402153a5a1b3Sopenharmony_ci   Underlying protocol: Use of a particular underlying network or
402253a5a1b3Sopenharmony_ci      transport layer protocol to carry RTP packets MAY be required.
402353a5a1b3Sopenharmony_ci
402453a5a1b3Sopenharmony_ci   Transport mapping: A mapping of RTP and RTCP to transport-level
402553a5a1b3Sopenharmony_ci      addresses, e.g., UDP ports, other than the standard mapping
402653a5a1b3Sopenharmony_ci      defined in Section 11, p. 68 may be specified.
402753a5a1b3Sopenharmony_ci
402853a5a1b3Sopenharmony_ci
402953a5a1b3Sopenharmony_ci
403053a5a1b3Sopenharmony_ci
403153a5a1b3Sopenharmony_ci
403253a5a1b3Sopenharmony_ci
403353a5a1b3Sopenharmony_ci
403453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 72]
403553a5a1b3Sopenharmony_ci
403653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
403753a5a1b3Sopenharmony_ci
403853a5a1b3Sopenharmony_ci
403953a5a1b3Sopenharmony_ci   Encapsulation: An encapsulation of RTP packets may be defined to
404053a5a1b3Sopenharmony_ci      allow multiple RTP data packets to be carried in one lower-layer
404153a5a1b3Sopenharmony_ci      packet or to provide framing over underlying protocols that do not
404253a5a1b3Sopenharmony_ci      already do so (Section 11, p. 69).
404353a5a1b3Sopenharmony_ci
404453a5a1b3Sopenharmony_ci   It is not expected that a new profile will be required for every
404553a5a1b3Sopenharmony_ci   application.  Within one application class, it would be better to
404653a5a1b3Sopenharmony_ci   extend an existing profile rather than make a new one in order to
404753a5a1b3Sopenharmony_ci   facilitate interoperation among the applications since each will
404853a5a1b3Sopenharmony_ci   typically run under only one profile.  Simple extensions such as the
404953a5a1b3Sopenharmony_ci   definition of additional payload type values or RTCP packet types may
405053a5a1b3Sopenharmony_ci   be accomplished by registering them through IANA and publishing their
405153a5a1b3Sopenharmony_ci   descriptions in an addendum to the profile or in a payload format
405253a5a1b3Sopenharmony_ci   specification.
405353a5a1b3Sopenharmony_ci
405453a5a1b3Sopenharmony_ci14. Security Considerations
405553a5a1b3Sopenharmony_ci
405653a5a1b3Sopenharmony_ci   RTP suffers from the same security liabilities as the underlying
405753a5a1b3Sopenharmony_ci   protocols.  For example, an impostor can fake source or destination
405853a5a1b3Sopenharmony_ci   network addresses, or change the header or payload.  Within RTCP, the
405953a5a1b3Sopenharmony_ci   CNAME and NAME information may be used to impersonate another
406053a5a1b3Sopenharmony_ci   participant.  In addition, RTP may be sent via IP multicast, which
406153a5a1b3Sopenharmony_ci   provides no direct means for a sender to know all the receivers of
406253a5a1b3Sopenharmony_ci   the data sent and therefore no measure of privacy.  Rightly or not,
406353a5a1b3Sopenharmony_ci   users may be more sensitive to privacy concerns with audio and video
406453a5a1b3Sopenharmony_ci   communication than they have been with more traditional forms of
406553a5a1b3Sopenharmony_ci   network communication [33].  Therefore, the use of security
406653a5a1b3Sopenharmony_ci   mechanisms with RTP is important.  These mechanisms are discussed in
406753a5a1b3Sopenharmony_ci   Section 9.
406853a5a1b3Sopenharmony_ci
406953a5a1b3Sopenharmony_ci   RTP-level translators or mixers may be used to allow RTP traffic to
407053a5a1b3Sopenharmony_ci   reach hosts behind firewalls.  Appropriate firewall security
407153a5a1b3Sopenharmony_ci   principles and practices, which are beyond the scope of this
407253a5a1b3Sopenharmony_ci   document, should be followed in the design and installation of these
407353a5a1b3Sopenharmony_ci   devices and in the admission of RTP applications for use behind the
407453a5a1b3Sopenharmony_ci   firewall.
407553a5a1b3Sopenharmony_ci
407653a5a1b3Sopenharmony_ci15. IANA Considerations
407753a5a1b3Sopenharmony_ci
407853a5a1b3Sopenharmony_ci   Additional RTCP packet types and SDES item types may be registered
407953a5a1b3Sopenharmony_ci   through the Internet Assigned Numbers Authority (IANA).  Since these
408053a5a1b3Sopenharmony_ci   number spaces are small, allowing unconstrained registration of new
408153a5a1b3Sopenharmony_ci   values would not be prudent.  To facilitate review of requests and to
408253a5a1b3Sopenharmony_ci   promote shared use of new types among multiple applications, requests
408353a5a1b3Sopenharmony_ci   for registration of new values must be documented in an RFC or other
408453a5a1b3Sopenharmony_ci   permanent and readily available reference such as the product of
408553a5a1b3Sopenharmony_ci   another cooperative standards body (e.g., ITU-T).  Other requests may
408653a5a1b3Sopenharmony_ci   also be accepted, under the advice of a "designated expert."
408753a5a1b3Sopenharmony_ci
408853a5a1b3Sopenharmony_ci
408953a5a1b3Sopenharmony_ci
409053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 73]
409153a5a1b3Sopenharmony_ci
409253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
409353a5a1b3Sopenharmony_ci
409453a5a1b3Sopenharmony_ci
409553a5a1b3Sopenharmony_ci   (Contact the IANA for the contact information of the current expert.)
409653a5a1b3Sopenharmony_ci
409753a5a1b3Sopenharmony_ci   RTP profile specifications SHOULD register with IANA a name for the
409853a5a1b3Sopenharmony_ci   profile in the form "RTP/xxx", where xxx is a short abbreviation of
409953a5a1b3Sopenharmony_ci   the profile title.  These names are for use by higher-level control
410053a5a1b3Sopenharmony_ci   protocols, such as the Session Description Protocol (SDP), RFC 2327
410153a5a1b3Sopenharmony_ci   [15], to refer to transport methods.
410253a5a1b3Sopenharmony_ci
410353a5a1b3Sopenharmony_ci16. Intellectual Property Rights Statement
410453a5a1b3Sopenharmony_ci
410553a5a1b3Sopenharmony_ci   The IETF takes no position regarding the validity or scope of any
410653a5a1b3Sopenharmony_ci   intellectual property or other rights that might be claimed to
410753a5a1b3Sopenharmony_ci   pertain to the implementation or use of the technology described in
410853a5a1b3Sopenharmony_ci   this document or the extent to which any license under such rights
410953a5a1b3Sopenharmony_ci   might or might not be available; neither does it represent that it
411053a5a1b3Sopenharmony_ci   has made any effort to identify any such rights.  Information on the
411153a5a1b3Sopenharmony_ci   IETF's procedures with respect to rights in standards-track and
411253a5a1b3Sopenharmony_ci   standards-related documentation can be found in BCP-11.  Copies of
411353a5a1b3Sopenharmony_ci   claims of rights made available for publication and any assurances of
411453a5a1b3Sopenharmony_ci   licenses to be made available, or the result of an attempt made to
411553a5a1b3Sopenharmony_ci   obtain a general license or permission for the use of such
411653a5a1b3Sopenharmony_ci   proprietary rights by implementors or users of this specification can
411753a5a1b3Sopenharmony_ci   be obtained from the IETF Secretariat.
411853a5a1b3Sopenharmony_ci
411953a5a1b3Sopenharmony_ci   The IETF invites any interested party to bring to its attention any
412053a5a1b3Sopenharmony_ci   copyrights, patents or patent applications, or other proprietary
412153a5a1b3Sopenharmony_ci   rights which may cover technology that may be required to practice
412253a5a1b3Sopenharmony_ci   this standard.  Please address the information to the IETF Executive
412353a5a1b3Sopenharmony_ci   Director.
412453a5a1b3Sopenharmony_ci
412553a5a1b3Sopenharmony_ci17.  Acknowledgments
412653a5a1b3Sopenharmony_ci
412753a5a1b3Sopenharmony_ci   This memorandum is based on discussions within the IETF Audio/Video
412853a5a1b3Sopenharmony_ci   Transport working group chaired by Stephen Casner and Colin Perkins.
412953a5a1b3Sopenharmony_ci   The current protocol has its origins in the Network Voice Protocol
413053a5a1b3Sopenharmony_ci   and the Packet Video Protocol (Danny Cohen and Randy Cole) and the
413153a5a1b3Sopenharmony_ci   protocol implemented by the vat application (Van Jacobson and Steve
413253a5a1b3Sopenharmony_ci   McCanne).  Christian Huitema provided ideas for the random identifier
413353a5a1b3Sopenharmony_ci   generator.  Extensive analysis and simulation of the timer
413453a5a1b3Sopenharmony_ci   reconsideration algorithm was done by Jonathan Rosenberg.  The
413553a5a1b3Sopenharmony_ci   additions for layered encodings were specified by Michael Speer and
413653a5a1b3Sopenharmony_ci   Steve McCanne.
413753a5a1b3Sopenharmony_ci
413853a5a1b3Sopenharmony_ci
413953a5a1b3Sopenharmony_ci
414053a5a1b3Sopenharmony_ci
414153a5a1b3Sopenharmony_ci
414253a5a1b3Sopenharmony_ci
414353a5a1b3Sopenharmony_ci
414453a5a1b3Sopenharmony_ci
414553a5a1b3Sopenharmony_ci
414653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 74]
414753a5a1b3Sopenharmony_ci
414853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
414953a5a1b3Sopenharmony_ci
415053a5a1b3Sopenharmony_ci
415153a5a1b3Sopenharmony_ciAppendix A - Algorithms
415253a5a1b3Sopenharmony_ci
415353a5a1b3Sopenharmony_ci   We provide examples of C code for aspects of RTP sender and receiver
415453a5a1b3Sopenharmony_ci   algorithms.  There may be other implementation methods that are
415553a5a1b3Sopenharmony_ci   faster in particular operating environments or have other advantages.
415653a5a1b3Sopenharmony_ci   These implementation notes are for informational purposes only and
415753a5a1b3Sopenharmony_ci   are meant to clarify the RTP specification.
415853a5a1b3Sopenharmony_ci
415953a5a1b3Sopenharmony_ci   The following definitions are used for all examples; for clarity and
416053a5a1b3Sopenharmony_ci   brevity, the structure definitions are only valid for 32-bit big-
416153a5a1b3Sopenharmony_ci   endian (most significant octet first) architectures.  Bit fields are
416253a5a1b3Sopenharmony_ci   assumed to be packed tightly in big-endian bit order, with no
416353a5a1b3Sopenharmony_ci   additional padding.  Modifications would be required to construct a
416453a5a1b3Sopenharmony_ci   portable implementation.
416553a5a1b3Sopenharmony_ci
416653a5a1b3Sopenharmony_ci   /*
416753a5a1b3Sopenharmony_ci    * rtp.h  --  RTP header file
416853a5a1b3Sopenharmony_ci    */
416953a5a1b3Sopenharmony_ci   #include <sys/types.h>
417053a5a1b3Sopenharmony_ci
417153a5a1b3Sopenharmony_ci   /*
417253a5a1b3Sopenharmony_ci    * The type definitions below are valid for 32-bit architectures and
417353a5a1b3Sopenharmony_ci    * may have to be adjusted for 16- or 64-bit architectures.
417453a5a1b3Sopenharmony_ci    */
417553a5a1b3Sopenharmony_ci   typedef unsigned char  u_int8;
417653a5a1b3Sopenharmony_ci   typedef unsigned short u_int16;
417753a5a1b3Sopenharmony_ci   typedef unsigned int   u_int32;
417853a5a1b3Sopenharmony_ci   typedef          short int16;
417953a5a1b3Sopenharmony_ci
418053a5a1b3Sopenharmony_ci   /*
418153a5a1b3Sopenharmony_ci    * Current protocol version.
418253a5a1b3Sopenharmony_ci    */
418353a5a1b3Sopenharmony_ci   #define RTP_VERSION    2
418453a5a1b3Sopenharmony_ci
418553a5a1b3Sopenharmony_ci   #define RTP_SEQ_MOD (1<<16)
418653a5a1b3Sopenharmony_ci   #define RTP_MAX_SDES 255      /* maximum text length for SDES */
418753a5a1b3Sopenharmony_ci
418853a5a1b3Sopenharmony_ci   typedef enum {
418953a5a1b3Sopenharmony_ci       RTCP_SR   = 200,
419053a5a1b3Sopenharmony_ci       RTCP_RR   = 201,
419153a5a1b3Sopenharmony_ci       RTCP_SDES = 202,
419253a5a1b3Sopenharmony_ci       RTCP_BYE  = 203,
419353a5a1b3Sopenharmony_ci       RTCP_APP  = 204
419453a5a1b3Sopenharmony_ci   } rtcp_type_t;
419553a5a1b3Sopenharmony_ci
419653a5a1b3Sopenharmony_ci   typedef enum {
419753a5a1b3Sopenharmony_ci       RTCP_SDES_END   = 0,
419853a5a1b3Sopenharmony_ci       RTCP_SDES_CNAME = 1,
419953a5a1b3Sopenharmony_ci
420053a5a1b3Sopenharmony_ci
420153a5a1b3Sopenharmony_ci
420253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 75]
420353a5a1b3Sopenharmony_ci
420453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
420553a5a1b3Sopenharmony_ci
420653a5a1b3Sopenharmony_ci
420753a5a1b3Sopenharmony_ci       RTCP_SDES_NAME  = 2,
420853a5a1b3Sopenharmony_ci       RTCP_SDES_EMAIL = 3,
420953a5a1b3Sopenharmony_ci       RTCP_SDES_PHONE = 4,
421053a5a1b3Sopenharmony_ci       RTCP_SDES_LOC   = 5,
421153a5a1b3Sopenharmony_ci       RTCP_SDES_TOOL  = 6,
421253a5a1b3Sopenharmony_ci       RTCP_SDES_NOTE  = 7,
421353a5a1b3Sopenharmony_ci       RTCP_SDES_PRIV  = 8
421453a5a1b3Sopenharmony_ci   } rtcp_sdes_type_t;
421553a5a1b3Sopenharmony_ci
421653a5a1b3Sopenharmony_ci   /*
421753a5a1b3Sopenharmony_ci    * RTP data header
421853a5a1b3Sopenharmony_ci    */
421953a5a1b3Sopenharmony_ci   typedef struct {
422053a5a1b3Sopenharmony_ci       unsigned int version:2;   /* protocol version */
422153a5a1b3Sopenharmony_ci       unsigned int p:1;         /* padding flag */
422253a5a1b3Sopenharmony_ci       unsigned int x:1;         /* header extension flag */
422353a5a1b3Sopenharmony_ci       unsigned int cc:4;        /* CSRC count */
422453a5a1b3Sopenharmony_ci       unsigned int m:1;         /* marker bit */
422553a5a1b3Sopenharmony_ci       unsigned int pt:7;        /* payload type */
422653a5a1b3Sopenharmony_ci       unsigned int seq:16;      /* sequence number */
422753a5a1b3Sopenharmony_ci       u_int32 ts;               /* timestamp */
422853a5a1b3Sopenharmony_ci       u_int32 ssrc;             /* synchronization source */
422953a5a1b3Sopenharmony_ci       u_int32 csrc[1];          /* optional CSRC list */
423053a5a1b3Sopenharmony_ci   } rtp_hdr_t;
423153a5a1b3Sopenharmony_ci
423253a5a1b3Sopenharmony_ci   /*
423353a5a1b3Sopenharmony_ci    * RTCP common header word
423453a5a1b3Sopenharmony_ci    */
423553a5a1b3Sopenharmony_ci   typedef struct {
423653a5a1b3Sopenharmony_ci       unsigned int version:2;   /* protocol version */
423753a5a1b3Sopenharmony_ci       unsigned int p:1;         /* padding flag */
423853a5a1b3Sopenharmony_ci       unsigned int count:5;     /* varies by packet type */
423953a5a1b3Sopenharmony_ci       unsigned int pt:8;        /* RTCP packet type */
424053a5a1b3Sopenharmony_ci       u_int16 length;           /* pkt len in words, w/o this word */
424153a5a1b3Sopenharmony_ci   } rtcp_common_t;
424253a5a1b3Sopenharmony_ci
424353a5a1b3Sopenharmony_ci   /*
424453a5a1b3Sopenharmony_ci    * Big-endian mask for version, padding bit and packet type pair
424553a5a1b3Sopenharmony_ci    */
424653a5a1b3Sopenharmony_ci   #define RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
424753a5a1b3Sopenharmony_ci   #define RTCP_VALID_VALUE ((RTP_VERSION << 14) | RTCP_SR)
424853a5a1b3Sopenharmony_ci
424953a5a1b3Sopenharmony_ci   /*
425053a5a1b3Sopenharmony_ci    * Reception report block
425153a5a1b3Sopenharmony_ci    */
425253a5a1b3Sopenharmony_ci   typedef struct {
425353a5a1b3Sopenharmony_ci       u_int32 ssrc;             /* data source being reported */
425453a5a1b3Sopenharmony_ci       unsigned int fraction:8;  /* fraction lost since last SR/RR */
425553a5a1b3Sopenharmony_ci
425653a5a1b3Sopenharmony_ci
425753a5a1b3Sopenharmony_ci
425853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 76]
425953a5a1b3Sopenharmony_ci
426053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
426153a5a1b3Sopenharmony_ci
426253a5a1b3Sopenharmony_ci
426353a5a1b3Sopenharmony_ci       int lost:24;              /* cumul. no. pkts lost (signed!) */
426453a5a1b3Sopenharmony_ci       u_int32 last_seq;         /* extended last seq. no. received */
426553a5a1b3Sopenharmony_ci       u_int32 jitter;           /* interarrival jitter */
426653a5a1b3Sopenharmony_ci       u_int32 lsr;              /* last SR packet from this source */
426753a5a1b3Sopenharmony_ci       u_int32 dlsr;             /* delay since last SR packet */
426853a5a1b3Sopenharmony_ci   } rtcp_rr_t;
426953a5a1b3Sopenharmony_ci
427053a5a1b3Sopenharmony_ci   /*
427153a5a1b3Sopenharmony_ci    * SDES item
427253a5a1b3Sopenharmony_ci    */
427353a5a1b3Sopenharmony_ci   typedef struct {
427453a5a1b3Sopenharmony_ci       u_int8 type;              /* type of item (rtcp_sdes_type_t) */
427553a5a1b3Sopenharmony_ci       u_int8 length;            /* length of item (in octets) */
427653a5a1b3Sopenharmony_ci       char data[1];             /* text, not null-terminated */
427753a5a1b3Sopenharmony_ci   } rtcp_sdes_item_t;
427853a5a1b3Sopenharmony_ci
427953a5a1b3Sopenharmony_ci   /*
428053a5a1b3Sopenharmony_ci    * One RTCP packet
428153a5a1b3Sopenharmony_ci    */
428253a5a1b3Sopenharmony_ci   typedef struct {
428353a5a1b3Sopenharmony_ci       rtcp_common_t common;     /* common header */
428453a5a1b3Sopenharmony_ci       union {
428553a5a1b3Sopenharmony_ci           /* sender report (SR) */
428653a5a1b3Sopenharmony_ci           struct {
428753a5a1b3Sopenharmony_ci               u_int32 ssrc;     /* sender generating this report */
428853a5a1b3Sopenharmony_ci               u_int32 ntp_sec;  /* NTP timestamp */
428953a5a1b3Sopenharmony_ci               u_int32 ntp_frac;
429053a5a1b3Sopenharmony_ci               u_int32 rtp_ts;   /* RTP timestamp */
429153a5a1b3Sopenharmony_ci               u_int32 psent;    /* packets sent */
429253a5a1b3Sopenharmony_ci               u_int32 osent;    /* octets sent */
429353a5a1b3Sopenharmony_ci               rtcp_rr_t rr[1];  /* variable-length list */
429453a5a1b3Sopenharmony_ci           } sr;
429553a5a1b3Sopenharmony_ci
429653a5a1b3Sopenharmony_ci           /* reception report (RR) */
429753a5a1b3Sopenharmony_ci           struct {
429853a5a1b3Sopenharmony_ci               u_int32 ssrc;     /* receiver generating this report */
429953a5a1b3Sopenharmony_ci               rtcp_rr_t rr[1];  /* variable-length list */
430053a5a1b3Sopenharmony_ci           } rr;
430153a5a1b3Sopenharmony_ci
430253a5a1b3Sopenharmony_ci           /* source description (SDES) */
430353a5a1b3Sopenharmony_ci           struct rtcp_sdes {
430453a5a1b3Sopenharmony_ci               u_int32 src;      /* first SSRC/CSRC */
430553a5a1b3Sopenharmony_ci               rtcp_sdes_item_t item[1]; /* list of SDES items */
430653a5a1b3Sopenharmony_ci           } sdes;
430753a5a1b3Sopenharmony_ci
430853a5a1b3Sopenharmony_ci           /* BYE */
430953a5a1b3Sopenharmony_ci           struct {
431053a5a1b3Sopenharmony_ci               u_int32 src[1];   /* list of sources */
431153a5a1b3Sopenharmony_ci
431253a5a1b3Sopenharmony_ci
431353a5a1b3Sopenharmony_ci
431453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 77]
431553a5a1b3Sopenharmony_ci
431653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
431753a5a1b3Sopenharmony_ci
431853a5a1b3Sopenharmony_ci
431953a5a1b3Sopenharmony_ci               /* can't express trailing text for reason */
432053a5a1b3Sopenharmony_ci           } bye;
432153a5a1b3Sopenharmony_ci       } r;
432253a5a1b3Sopenharmony_ci   } rtcp_t;
432353a5a1b3Sopenharmony_ci
432453a5a1b3Sopenharmony_ci   typedef struct rtcp_sdes rtcp_sdes_t;
432553a5a1b3Sopenharmony_ci
432653a5a1b3Sopenharmony_ci   /*
432753a5a1b3Sopenharmony_ci    * Per-source state information
432853a5a1b3Sopenharmony_ci    */
432953a5a1b3Sopenharmony_ci   typedef struct {
433053a5a1b3Sopenharmony_ci       u_int16 max_seq;        /* highest seq. number seen */
433153a5a1b3Sopenharmony_ci       u_int32 cycles;         /* shifted count of seq. number cycles */
433253a5a1b3Sopenharmony_ci       u_int32 base_seq;       /* base seq number */
433353a5a1b3Sopenharmony_ci       u_int32 bad_seq;        /* last 'bad' seq number + 1 */
433453a5a1b3Sopenharmony_ci       u_int32 probation;      /* sequ. packets till source is valid */
433553a5a1b3Sopenharmony_ci       u_int32 received;       /* packets received */
433653a5a1b3Sopenharmony_ci       u_int32 expected_prior; /* packet expected at last interval */
433753a5a1b3Sopenharmony_ci       u_int32 received_prior; /* packet received at last interval */
433853a5a1b3Sopenharmony_ci       u_int32 transit;        /* relative trans time for prev pkt */
433953a5a1b3Sopenharmony_ci       u_int32 jitter;         /* estimated jitter */
434053a5a1b3Sopenharmony_ci       /* ... */
434153a5a1b3Sopenharmony_ci   } source;
434253a5a1b3Sopenharmony_ci
434353a5a1b3Sopenharmony_ciA.1 RTP Data Header Validity Checks
434453a5a1b3Sopenharmony_ci
434553a5a1b3Sopenharmony_ci   An RTP receiver should check the validity of the RTP header on
434653a5a1b3Sopenharmony_ci   incoming packets since they might be encrypted or might be from a
434753a5a1b3Sopenharmony_ci   different application that happens to be misaddressed.  Similarly, if
434853a5a1b3Sopenharmony_ci   encryption according to the method described in Section 9 is enabled,
434953a5a1b3Sopenharmony_ci   the header validity check is needed to verify that incoming packets
435053a5a1b3Sopenharmony_ci   have been correctly decrypted, although a failure of the header
435153a5a1b3Sopenharmony_ci   validity check (e.g., unknown payload type) may not necessarily
435253a5a1b3Sopenharmony_ci   indicate decryption failure.
435353a5a1b3Sopenharmony_ci
435453a5a1b3Sopenharmony_ci   Only weak validity checks are possible on an RTP data packet from a
435553a5a1b3Sopenharmony_ci   source that has not been heard before:
435653a5a1b3Sopenharmony_ci
435753a5a1b3Sopenharmony_ci   o  RTP version field must equal 2.
435853a5a1b3Sopenharmony_ci
435953a5a1b3Sopenharmony_ci   o  The payload type must be known, and in particular it must not be
436053a5a1b3Sopenharmony_ci      equal to SR or RR.
436153a5a1b3Sopenharmony_ci
436253a5a1b3Sopenharmony_ci   o  If the P bit is set, then the last octet of the packet must
436353a5a1b3Sopenharmony_ci      contain a valid octet count, in particular, less than the total
436453a5a1b3Sopenharmony_ci      packet length minus the header size.
436553a5a1b3Sopenharmony_ci
436653a5a1b3Sopenharmony_ci
436753a5a1b3Sopenharmony_ci
436853a5a1b3Sopenharmony_ci
436953a5a1b3Sopenharmony_ci
437053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 78]
437153a5a1b3Sopenharmony_ci
437253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
437353a5a1b3Sopenharmony_ci
437453a5a1b3Sopenharmony_ci
437553a5a1b3Sopenharmony_ci   o  The X bit must be zero if the profile does not specify that the
437653a5a1b3Sopenharmony_ci      header extension mechanism may be used.  Otherwise, the extension
437753a5a1b3Sopenharmony_ci      length field must be less than the total packet size minus the
437853a5a1b3Sopenharmony_ci      fixed header length and padding.
437953a5a1b3Sopenharmony_ci
438053a5a1b3Sopenharmony_ci   o  The length of the packet must be consistent with CC and payload
438153a5a1b3Sopenharmony_ci      type (if payloads have a known length).
438253a5a1b3Sopenharmony_ci
438353a5a1b3Sopenharmony_ci   The last three checks are somewhat complex and not always possible,
438453a5a1b3Sopenharmony_ci   leaving only the first two which total just a few bits.  If the SSRC
438553a5a1b3Sopenharmony_ci   identifier in the packet is one that has been received before, then
438653a5a1b3Sopenharmony_ci   the packet is probably valid and checking if the sequence number is
438753a5a1b3Sopenharmony_ci   in the expected range provides further validation.  If the SSRC
438853a5a1b3Sopenharmony_ci   identifier has not been seen before, then data packets carrying that
438953a5a1b3Sopenharmony_ci   identifier may be considered invalid until a small number of them
439053a5a1b3Sopenharmony_ci   arrive with consecutive sequence numbers.  Those invalid packets MAY
439153a5a1b3Sopenharmony_ci   be discarded or they MAY be stored and delivered once validation has
439253a5a1b3Sopenharmony_ci   been achieved if the resulting delay is acceptable.
439353a5a1b3Sopenharmony_ci
439453a5a1b3Sopenharmony_ci   The routine update_seq shown below ensures that a source is declared
439553a5a1b3Sopenharmony_ci   valid only after MIN_SEQUENTIAL packets have been received in
439653a5a1b3Sopenharmony_ci   sequence.  It also validates the sequence number seq of a newly
439753a5a1b3Sopenharmony_ci   received packet and updates the sequence state for the packet's
439853a5a1b3Sopenharmony_ci   source in the structure to which s points.
439953a5a1b3Sopenharmony_ci
440053a5a1b3Sopenharmony_ci   When a new source is heard for the first time, that is, its SSRC
440153a5a1b3Sopenharmony_ci   identifier is not in the table (see Section 8.2), and the per-source
440253a5a1b3Sopenharmony_ci   state is allocated for it, s->probation is set to the number of
440353a5a1b3Sopenharmony_ci   sequential packets required before declaring a source valid
440453a5a1b3Sopenharmony_ci   (parameter MIN_SEQUENTIAL) and other variables are initialized:
440553a5a1b3Sopenharmony_ci
440653a5a1b3Sopenharmony_ci      init_seq(s, seq);
440753a5a1b3Sopenharmony_ci      s->max_seq = seq - 1;
440853a5a1b3Sopenharmony_ci      s->probation = MIN_SEQUENTIAL;
440953a5a1b3Sopenharmony_ci
441053a5a1b3Sopenharmony_ci   A non-zero s->probation marks the source as not yet valid so the
441153a5a1b3Sopenharmony_ci   state may be discarded after a short timeout rather than a long one,
441253a5a1b3Sopenharmony_ci   as discussed in Section 6.2.1.
441353a5a1b3Sopenharmony_ci
441453a5a1b3Sopenharmony_ci   After a source is considered valid, the sequence number is considered
441553a5a1b3Sopenharmony_ci   valid if it is no more than MAX_DROPOUT ahead of s->max_seq nor more
441653a5a1b3Sopenharmony_ci   than MAX_MISORDER behind.  If the new sequence number is ahead of
441753a5a1b3Sopenharmony_ci   max_seq modulo the RTP sequence number range (16 bits), but is
441853a5a1b3Sopenharmony_ci   smaller than max_seq, it has wrapped around and the (shifted) count
441953a5a1b3Sopenharmony_ci   of sequence number cycles is incremented.  A value of one is returned
442053a5a1b3Sopenharmony_ci   to indicate a valid sequence number.
442153a5a1b3Sopenharmony_ci
442253a5a1b3Sopenharmony_ci
442353a5a1b3Sopenharmony_ci
442453a5a1b3Sopenharmony_ci
442553a5a1b3Sopenharmony_ci
442653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 79]
442753a5a1b3Sopenharmony_ci
442853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
442953a5a1b3Sopenharmony_ci
443053a5a1b3Sopenharmony_ci
443153a5a1b3Sopenharmony_ci   Otherwise, the value zero is returned to indicate that the validation
443253a5a1b3Sopenharmony_ci   failed, and the bad sequence number plus 1 is stored.  If the next
443353a5a1b3Sopenharmony_ci   packet received carries the next higher sequence number, it is
443453a5a1b3Sopenharmony_ci   considered the valid start of a new packet sequence presumably caused
443553a5a1b3Sopenharmony_ci   by an extended dropout or a source restart.  Since multiple complete
443653a5a1b3Sopenharmony_ci   sequence number cycles may have been missed, the packet loss
443753a5a1b3Sopenharmony_ci   statistics are reset.
443853a5a1b3Sopenharmony_ci
443953a5a1b3Sopenharmony_ci   Typical values for the parameters are shown, based on a maximum
444053a5a1b3Sopenharmony_ci   misordering time of 2 seconds at 50 packets/second and a maximum
444153a5a1b3Sopenharmony_ci   dropout of 1 minute.  The dropout parameter MAX_DROPOUT should be a
444253a5a1b3Sopenharmony_ci   small fraction of the 16-bit sequence number space to give a
444353a5a1b3Sopenharmony_ci   reasonable probability that new sequence numbers after a restart will
444453a5a1b3Sopenharmony_ci   not fall in the acceptable range for sequence numbers from before the
444553a5a1b3Sopenharmony_ci   restart.
444653a5a1b3Sopenharmony_ci
444753a5a1b3Sopenharmony_ci   void init_seq(source *s, u_int16 seq)
444853a5a1b3Sopenharmony_ci   {
444953a5a1b3Sopenharmony_ci       s->base_seq = seq;
445053a5a1b3Sopenharmony_ci       s->max_seq = seq;
445153a5a1b3Sopenharmony_ci       s->bad_seq = RTP_SEQ_MOD + 1;   /* so seq == bad_seq is false */
445253a5a1b3Sopenharmony_ci       s->cycles = 0;
445353a5a1b3Sopenharmony_ci       s->received = 0;
445453a5a1b3Sopenharmony_ci       s->received_prior = 0;
445553a5a1b3Sopenharmony_ci       s->expected_prior = 0;
445653a5a1b3Sopenharmony_ci       /* other initialization */
445753a5a1b3Sopenharmony_ci   }
445853a5a1b3Sopenharmony_ci
445953a5a1b3Sopenharmony_ci   int update_seq(source *s, u_int16 seq)
446053a5a1b3Sopenharmony_ci   {
446153a5a1b3Sopenharmony_ci       u_int16 udelta = seq - s->max_seq;
446253a5a1b3Sopenharmony_ci       const int MAX_DROPOUT = 3000;
446353a5a1b3Sopenharmony_ci       const int MAX_MISORDER = 100;
446453a5a1b3Sopenharmony_ci       const int MIN_SEQUENTIAL = 2;
446553a5a1b3Sopenharmony_ci
446653a5a1b3Sopenharmony_ci       /*
446753a5a1b3Sopenharmony_ci        * Source is not valid until MIN_SEQUENTIAL packets with
446853a5a1b3Sopenharmony_ci        * sequential sequence numbers have been received.
446953a5a1b3Sopenharmony_ci        */
447053a5a1b3Sopenharmony_ci       if (s->probation) {
447153a5a1b3Sopenharmony_ci           /* packet is in sequence */
447253a5a1b3Sopenharmony_ci           if (seq == s->max_seq + 1) {
447353a5a1b3Sopenharmony_ci               s->probation--;
447453a5a1b3Sopenharmony_ci               s->max_seq = seq;
447553a5a1b3Sopenharmony_ci               if (s->probation == 0) {
447653a5a1b3Sopenharmony_ci                   init_seq(s, seq);
447753a5a1b3Sopenharmony_ci                   s->received++;
447853a5a1b3Sopenharmony_ci                   return 1;
447953a5a1b3Sopenharmony_ci
448053a5a1b3Sopenharmony_ci
448153a5a1b3Sopenharmony_ci
448253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 80]
448353a5a1b3Sopenharmony_ci
448453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
448553a5a1b3Sopenharmony_ci
448653a5a1b3Sopenharmony_ci
448753a5a1b3Sopenharmony_ci               }
448853a5a1b3Sopenharmony_ci           } else {
448953a5a1b3Sopenharmony_ci               s->probation = MIN_SEQUENTIAL - 1;
449053a5a1b3Sopenharmony_ci               s->max_seq = seq;
449153a5a1b3Sopenharmony_ci           }
449253a5a1b3Sopenharmony_ci           return 0;
449353a5a1b3Sopenharmony_ci       } else if (udelta < MAX_DROPOUT) {
449453a5a1b3Sopenharmony_ci           /* in order, with permissible gap */
449553a5a1b3Sopenharmony_ci           if (seq < s->max_seq) {
449653a5a1b3Sopenharmony_ci               /*
449753a5a1b3Sopenharmony_ci                * Sequence number wrapped - count another 64K cycle.
449853a5a1b3Sopenharmony_ci                */
449953a5a1b3Sopenharmony_ci               s->cycles += RTP_SEQ_MOD;
450053a5a1b3Sopenharmony_ci           }
450153a5a1b3Sopenharmony_ci           s->max_seq = seq;
450253a5a1b3Sopenharmony_ci       } else if (udelta <= RTP_SEQ_MOD - MAX_MISORDER) {
450353a5a1b3Sopenharmony_ci           /* the sequence number made a very large jump */
450453a5a1b3Sopenharmony_ci           if (seq == s->bad_seq) {
450553a5a1b3Sopenharmony_ci               /*
450653a5a1b3Sopenharmony_ci                * Two sequential packets -- assume that the other side
450753a5a1b3Sopenharmony_ci                * restarted without telling us so just re-sync
450853a5a1b3Sopenharmony_ci                * (i.e., pretend this was the first packet).
450953a5a1b3Sopenharmony_ci                */
451053a5a1b3Sopenharmony_ci               init_seq(s, seq);
451153a5a1b3Sopenharmony_ci           }
451253a5a1b3Sopenharmony_ci           else {
451353a5a1b3Sopenharmony_ci               s->bad_seq = (seq + 1) & (RTP_SEQ_MOD-1);
451453a5a1b3Sopenharmony_ci               return 0;
451553a5a1b3Sopenharmony_ci           }
451653a5a1b3Sopenharmony_ci       } else {
451753a5a1b3Sopenharmony_ci           /* duplicate or reordered packet */
451853a5a1b3Sopenharmony_ci       }
451953a5a1b3Sopenharmony_ci       s->received++;
452053a5a1b3Sopenharmony_ci       return 1;
452153a5a1b3Sopenharmony_ci   }
452253a5a1b3Sopenharmony_ci
452353a5a1b3Sopenharmony_ci   The validity check can be made stronger requiring more than two
452453a5a1b3Sopenharmony_ci   packets in sequence.  The disadvantages are that a larger number of
452553a5a1b3Sopenharmony_ci   initial packets will be discarded (or delayed in a queue) and that
452653a5a1b3Sopenharmony_ci   high packet loss rates could prevent validation.  However, because
452753a5a1b3Sopenharmony_ci   the RTCP header validation is relatively strong, if an RTCP packet is
452853a5a1b3Sopenharmony_ci   received from a source before the data packets, the count could be
452953a5a1b3Sopenharmony_ci   adjusted so that only two packets are required in sequence.  If
453053a5a1b3Sopenharmony_ci   initial data loss for a few seconds can be tolerated, an application
453153a5a1b3Sopenharmony_ci   MAY choose to discard all data packets from a source until a valid
453253a5a1b3Sopenharmony_ci   RTCP packet has been received from that source.
453353a5a1b3Sopenharmony_ci
453453a5a1b3Sopenharmony_ci
453553a5a1b3Sopenharmony_ci
453653a5a1b3Sopenharmony_ci
453753a5a1b3Sopenharmony_ci
453853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 81]
453953a5a1b3Sopenharmony_ci
454053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
454153a5a1b3Sopenharmony_ci
454253a5a1b3Sopenharmony_ci
454353a5a1b3Sopenharmony_ci   Depending on the application and encoding, algorithms may exploit
454453a5a1b3Sopenharmony_ci   additional knowledge about the payload format for further validation.
454553a5a1b3Sopenharmony_ci   For payload types where the timestamp increment is the same for all
454653a5a1b3Sopenharmony_ci   packets, the timestamp values can be predicted from the previous
454753a5a1b3Sopenharmony_ci   packet received from the same source using the sequence number
454853a5a1b3Sopenharmony_ci   difference (assuming no change in payload type).
454953a5a1b3Sopenharmony_ci
455053a5a1b3Sopenharmony_ci   A strong "fast-path" check is possible since with high probability
455153a5a1b3Sopenharmony_ci   the first four octets in the header of a newly received RTP data
455253a5a1b3Sopenharmony_ci   packet will be just the same as that of the previous packet from the
455353a5a1b3Sopenharmony_ci   same SSRC except that the sequence number will have increased by one.
455453a5a1b3Sopenharmony_ci   Similarly, a single-entry cache may be used for faster SSRC lookups
455553a5a1b3Sopenharmony_ci   in applications where data is typically received from one source at a
455653a5a1b3Sopenharmony_ci   time.
455753a5a1b3Sopenharmony_ci
455853a5a1b3Sopenharmony_ciA.2 RTCP Header Validity Checks
455953a5a1b3Sopenharmony_ci
456053a5a1b3Sopenharmony_ci   The following checks should be applied to RTCP packets.
456153a5a1b3Sopenharmony_ci
456253a5a1b3Sopenharmony_ci   o  RTP version field must equal 2.
456353a5a1b3Sopenharmony_ci
456453a5a1b3Sopenharmony_ci   o  The payload type field of the first RTCP packet in a compound
456553a5a1b3Sopenharmony_ci      packet must be equal to SR or RR.
456653a5a1b3Sopenharmony_ci
456753a5a1b3Sopenharmony_ci   o  The padding bit (P) should be zero for the first packet of a
456853a5a1b3Sopenharmony_ci      compound RTCP packet because padding should only be applied, if it
456953a5a1b3Sopenharmony_ci      is needed, to the last packet.
457053a5a1b3Sopenharmony_ci
457153a5a1b3Sopenharmony_ci   o  The length fields of the individual RTCP packets must add up to
457253a5a1b3Sopenharmony_ci      the overall length of the compound RTCP packet as received.  This
457353a5a1b3Sopenharmony_ci      is a fairly strong check.
457453a5a1b3Sopenharmony_ci
457553a5a1b3Sopenharmony_ci   The code fragment below performs all of these checks.  The packet
457653a5a1b3Sopenharmony_ci   type is not checked for subsequent packets since unknown packet types
457753a5a1b3Sopenharmony_ci   may be present and should be ignored.
457853a5a1b3Sopenharmony_ci
457953a5a1b3Sopenharmony_ci      u_int32 len;        /* length of compound RTCP packet in words */
458053a5a1b3Sopenharmony_ci      rtcp_t *r;          /* RTCP header */
458153a5a1b3Sopenharmony_ci      rtcp_t *end;        /* end of compound RTCP packet */
458253a5a1b3Sopenharmony_ci
458353a5a1b3Sopenharmony_ci      if ((*(u_int16 *)r & RTCP_VALID_MASK) != RTCP_VALID_VALUE) {
458453a5a1b3Sopenharmony_ci          /* something wrong with packet format */
458553a5a1b3Sopenharmony_ci      }
458653a5a1b3Sopenharmony_ci      end = (rtcp_t *)((u_int32 *)r + len);
458753a5a1b3Sopenharmony_ci
458853a5a1b3Sopenharmony_ci      do r = (rtcp_t *)((u_int32 *)r + r->common.length + 1);
458953a5a1b3Sopenharmony_ci      while (r < end && r->common.version == 2);
459053a5a1b3Sopenharmony_ci
459153a5a1b3Sopenharmony_ci
459253a5a1b3Sopenharmony_ci
459353a5a1b3Sopenharmony_ci
459453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 82]
459553a5a1b3Sopenharmony_ci
459653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
459753a5a1b3Sopenharmony_ci
459853a5a1b3Sopenharmony_ci
459953a5a1b3Sopenharmony_ci      if (r != end) {
460053a5a1b3Sopenharmony_ci          /* something wrong with packet format */
460153a5a1b3Sopenharmony_ci      }
460253a5a1b3Sopenharmony_ci
460353a5a1b3Sopenharmony_ciA.3 Determining Number of Packets Expected and Lost
460453a5a1b3Sopenharmony_ci
460553a5a1b3Sopenharmony_ci   In order to compute packet loss rates, the number of RTP packets
460653a5a1b3Sopenharmony_ci   expected and actually received from each source needs to be known,
460753a5a1b3Sopenharmony_ci   using per-source state information defined in struct source
460853a5a1b3Sopenharmony_ci   referenced via pointer s in the code below.  The number of packets
460953a5a1b3Sopenharmony_ci   received is simply the count of packets as they arrive, including any
461053a5a1b3Sopenharmony_ci   late or duplicate packets.  The number of packets expected can be
461153a5a1b3Sopenharmony_ci   computed by the receiver as the difference between the highest
461253a5a1b3Sopenharmony_ci   sequence number received (s->max_seq) and the first sequence number
461353a5a1b3Sopenharmony_ci   received (s->base_seq).  Since the sequence number is only 16 bits
461453a5a1b3Sopenharmony_ci   and will wrap around, it is necessary to extend the highest sequence
461553a5a1b3Sopenharmony_ci   number with the (shifted) count of sequence number wraparounds
461653a5a1b3Sopenharmony_ci   (s->cycles).  Both the received packet count and the count of cycles
461753a5a1b3Sopenharmony_ci   are maintained the RTP header validity check routine in Appendix A.1.
461853a5a1b3Sopenharmony_ci
461953a5a1b3Sopenharmony_ci      extended_max = s->cycles + s->max_seq;
462053a5a1b3Sopenharmony_ci      expected = extended_max - s->base_seq + 1;
462153a5a1b3Sopenharmony_ci
462253a5a1b3Sopenharmony_ci   The number of packets lost is defined to be the number of packets
462353a5a1b3Sopenharmony_ci   expected less the number of packets actually received:
462453a5a1b3Sopenharmony_ci
462553a5a1b3Sopenharmony_ci      lost = expected - s->received;
462653a5a1b3Sopenharmony_ci
462753a5a1b3Sopenharmony_ci   Since this signed number is carried in 24 bits, it should be clamped
462853a5a1b3Sopenharmony_ci   at 0x7fffff for positive loss or 0x800000 for negative loss rather
462953a5a1b3Sopenharmony_ci   than wrapping around.
463053a5a1b3Sopenharmony_ci
463153a5a1b3Sopenharmony_ci   The fraction of packets lost during the last reporting interval
463253a5a1b3Sopenharmony_ci   (since the previous SR or RR packet was sent) is calculated from
463353a5a1b3Sopenharmony_ci   differences in the expected and received packet counts across the
463453a5a1b3Sopenharmony_ci   interval, where expected_prior and received_prior are the values
463553a5a1b3Sopenharmony_ci   saved when the previous reception report was generated:
463653a5a1b3Sopenharmony_ci
463753a5a1b3Sopenharmony_ci      expected_interval = expected - s->expected_prior;
463853a5a1b3Sopenharmony_ci      s->expected_prior = expected;
463953a5a1b3Sopenharmony_ci      received_interval = s->received - s->received_prior;
464053a5a1b3Sopenharmony_ci      s->received_prior = s->received;
464153a5a1b3Sopenharmony_ci      lost_interval = expected_interval - received_interval;
464253a5a1b3Sopenharmony_ci      if (expected_interval == 0 || lost_interval <= 0) fraction = 0;
464353a5a1b3Sopenharmony_ci      else fraction = (lost_interval << 8) / expected_interval;
464453a5a1b3Sopenharmony_ci
464553a5a1b3Sopenharmony_ci   The resulting fraction is an 8-bit fixed point number with the binary
464653a5a1b3Sopenharmony_ci   point at the left edge.
464753a5a1b3Sopenharmony_ci
464853a5a1b3Sopenharmony_ci
464953a5a1b3Sopenharmony_ci
465053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 83]
465153a5a1b3Sopenharmony_ci
465253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
465353a5a1b3Sopenharmony_ci
465453a5a1b3Sopenharmony_ci
465553a5a1b3Sopenharmony_ciA.4 Generating RTCP SDES Packets
465653a5a1b3Sopenharmony_ci
465753a5a1b3Sopenharmony_ci   This function builds one SDES chunk into buffer b composed of argc
465853a5a1b3Sopenharmony_ci   items supplied in arrays type, value and length.  It returns a
465953a5a1b3Sopenharmony_ci   pointer to the next available location within b.
466053a5a1b3Sopenharmony_ci
466153a5a1b3Sopenharmony_ci   char *rtp_write_sdes(char *b, u_int32 src, int argc,
466253a5a1b3Sopenharmony_ci                        rtcp_sdes_type_t type[], char *value[],
466353a5a1b3Sopenharmony_ci                        int length[])
466453a5a1b3Sopenharmony_ci   {
466553a5a1b3Sopenharmony_ci       rtcp_sdes_t *s = (rtcp_sdes_t *)b;
466653a5a1b3Sopenharmony_ci       rtcp_sdes_item_t *rsp;
466753a5a1b3Sopenharmony_ci       int i;
466853a5a1b3Sopenharmony_ci       int len;
466953a5a1b3Sopenharmony_ci       int pad;
467053a5a1b3Sopenharmony_ci
467153a5a1b3Sopenharmony_ci       /* SSRC header */
467253a5a1b3Sopenharmony_ci       s->src = src;
467353a5a1b3Sopenharmony_ci       rsp = &s->item[0];
467453a5a1b3Sopenharmony_ci
467553a5a1b3Sopenharmony_ci       /* SDES items */
467653a5a1b3Sopenharmony_ci       for (i = 0; i < argc; i++) {
467753a5a1b3Sopenharmony_ci           rsp->type = type[i];
467853a5a1b3Sopenharmony_ci           len = length[i];
467953a5a1b3Sopenharmony_ci           if (len > RTP_MAX_SDES) {
468053a5a1b3Sopenharmony_ci               /* invalid length, may want to take other action */
468153a5a1b3Sopenharmony_ci               len = RTP_MAX_SDES;
468253a5a1b3Sopenharmony_ci           }
468353a5a1b3Sopenharmony_ci           rsp->length = len;
468453a5a1b3Sopenharmony_ci           memcpy(rsp->data, value[i], len);
468553a5a1b3Sopenharmony_ci           rsp = (rtcp_sdes_item_t *)&rsp->data[len];
468653a5a1b3Sopenharmony_ci       }
468753a5a1b3Sopenharmony_ci
468853a5a1b3Sopenharmony_ci       /* terminate with end marker and pad to next 4-octet boundary */
468953a5a1b3Sopenharmony_ci       len = ((char *) rsp) - b;
469053a5a1b3Sopenharmony_ci       pad = 4 - (len & 0x3);
469153a5a1b3Sopenharmony_ci       b = (char *) rsp;
469253a5a1b3Sopenharmony_ci       while (pad--) *b++ = RTCP_SDES_END;
469353a5a1b3Sopenharmony_ci
469453a5a1b3Sopenharmony_ci       return b;
469553a5a1b3Sopenharmony_ci   }
469653a5a1b3Sopenharmony_ci
469753a5a1b3Sopenharmony_ci
469853a5a1b3Sopenharmony_ci
469953a5a1b3Sopenharmony_ci
470053a5a1b3Sopenharmony_ci
470153a5a1b3Sopenharmony_ci
470253a5a1b3Sopenharmony_ci
470353a5a1b3Sopenharmony_ci
470453a5a1b3Sopenharmony_ci
470553a5a1b3Sopenharmony_ci
470653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 84]
470753a5a1b3Sopenharmony_ci
470853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
470953a5a1b3Sopenharmony_ci
471053a5a1b3Sopenharmony_ci
471153a5a1b3Sopenharmony_ciA.5 Parsing RTCP SDES Packets
471253a5a1b3Sopenharmony_ci
471353a5a1b3Sopenharmony_ci   This function parses an SDES packet, calling functions find_member()
471453a5a1b3Sopenharmony_ci   to find a pointer to the information for a session member given the
471553a5a1b3Sopenharmony_ci   SSRC identifier and member_sdes() to store the new SDES information
471653a5a1b3Sopenharmony_ci   for that member.  This function expects a pointer to the header of
471753a5a1b3Sopenharmony_ci   the RTCP packet.
471853a5a1b3Sopenharmony_ci
471953a5a1b3Sopenharmony_ci   void rtp_read_sdes(rtcp_t *r)
472053a5a1b3Sopenharmony_ci   {
472153a5a1b3Sopenharmony_ci       int count = r->common.count;
472253a5a1b3Sopenharmony_ci       rtcp_sdes_t *sd = &r->r.sdes;
472353a5a1b3Sopenharmony_ci       rtcp_sdes_item_t *rsp, *rspn;
472453a5a1b3Sopenharmony_ci       rtcp_sdes_item_t *end = (rtcp_sdes_item_t *)
472553a5a1b3Sopenharmony_ci                               ((u_int32 *)r + r->common.length + 1);
472653a5a1b3Sopenharmony_ci       source *s;
472753a5a1b3Sopenharmony_ci
472853a5a1b3Sopenharmony_ci       while (--count >= 0) {
472953a5a1b3Sopenharmony_ci           rsp = &sd->item[0];
473053a5a1b3Sopenharmony_ci           if (rsp >= end) break;
473153a5a1b3Sopenharmony_ci           s = find_member(sd->src);
473253a5a1b3Sopenharmony_ci
473353a5a1b3Sopenharmony_ci           for (; rsp->type; rsp = rspn ) {
473453a5a1b3Sopenharmony_ci               rspn = (rtcp_sdes_item_t *)((char*)rsp+rsp->length+2);
473553a5a1b3Sopenharmony_ci               if (rspn >= end) {
473653a5a1b3Sopenharmony_ci                   rsp = rspn;
473753a5a1b3Sopenharmony_ci                   break;
473853a5a1b3Sopenharmony_ci               }
473953a5a1b3Sopenharmony_ci               member_sdes(s, rsp->type, rsp->data, rsp->length);
474053a5a1b3Sopenharmony_ci           }
474153a5a1b3Sopenharmony_ci           sd = (rtcp_sdes_t *)
474253a5a1b3Sopenharmony_ci                ((u_int32 *)sd + (((char *)rsp - (char *)sd) >> 2)+1);
474353a5a1b3Sopenharmony_ci       }
474453a5a1b3Sopenharmony_ci       if (count >= 0) {
474553a5a1b3Sopenharmony_ci           /* invalid packet format */
474653a5a1b3Sopenharmony_ci       }
474753a5a1b3Sopenharmony_ci   }
474853a5a1b3Sopenharmony_ci
474953a5a1b3Sopenharmony_ciA.6 Generating a Random 32-bit Identifier
475053a5a1b3Sopenharmony_ci
475153a5a1b3Sopenharmony_ci   The following subroutine generates a random 32-bit identifier using
475253a5a1b3Sopenharmony_ci   the MD5 routines published in RFC 1321 [32].  The system routines may
475353a5a1b3Sopenharmony_ci   not be present on all operating systems, but they should serve as
475453a5a1b3Sopenharmony_ci   hints as to what kinds of information may be used.  Other system
475553a5a1b3Sopenharmony_ci   calls that may be appropriate include
475653a5a1b3Sopenharmony_ci
475753a5a1b3Sopenharmony_ci
475853a5a1b3Sopenharmony_ci
475953a5a1b3Sopenharmony_ci
476053a5a1b3Sopenharmony_ci
476153a5a1b3Sopenharmony_ci
476253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 85]
476353a5a1b3Sopenharmony_ci
476453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
476553a5a1b3Sopenharmony_ci
476653a5a1b3Sopenharmony_ci
476753a5a1b3Sopenharmony_ci   o  getdomainname(),
476853a5a1b3Sopenharmony_ci
476953a5a1b3Sopenharmony_ci   o  getwd(), or
477053a5a1b3Sopenharmony_ci
477153a5a1b3Sopenharmony_ci   o  getrusage().
477253a5a1b3Sopenharmony_ci
477353a5a1b3Sopenharmony_ci   "Live" video or audio samples are also a good source of random
477453a5a1b3Sopenharmony_ci   numbers, but care must be taken to avoid using a turned-off
477553a5a1b3Sopenharmony_ci   microphone or blinded camera as a source [17].
477653a5a1b3Sopenharmony_ci
477753a5a1b3Sopenharmony_ci   Use of this or a similar routine is recommended to generate the
477853a5a1b3Sopenharmony_ci   initial seed for the random number generator producing the RTCP
477953a5a1b3Sopenharmony_ci   period (as shown in Appendix A.7), to generate the initial values for
478053a5a1b3Sopenharmony_ci   the sequence number and timestamp, and to generate SSRC values.
478153a5a1b3Sopenharmony_ci   Since this routine is likely to be CPU-intensive, its direct use to
478253a5a1b3Sopenharmony_ci   generate RTCP periods is inappropriate because predictability is not
478353a5a1b3Sopenharmony_ci   an issue.  Note that this routine produces the same result on
478453a5a1b3Sopenharmony_ci   repeated calls until the value of the system clock changes unless
478553a5a1b3Sopenharmony_ci   different values are supplied for the type argument.
478653a5a1b3Sopenharmony_ci
478753a5a1b3Sopenharmony_ci   /*
478853a5a1b3Sopenharmony_ci    * Generate a random 32-bit quantity.
478953a5a1b3Sopenharmony_ci    */
479053a5a1b3Sopenharmony_ci   #include <sys/types.h>   /* u_long */
479153a5a1b3Sopenharmony_ci   #include <sys/time.h>    /* gettimeofday() */
479253a5a1b3Sopenharmony_ci   #include <unistd.h>      /* get..() */
479353a5a1b3Sopenharmony_ci   #include <stdio.h>       /* printf() */
479453a5a1b3Sopenharmony_ci   #include <time.h>        /* clock() */
479553a5a1b3Sopenharmony_ci   #include <sys/utsname.h> /* uname() */
479653a5a1b3Sopenharmony_ci   #include "global.h"      /* from RFC 1321 */
479753a5a1b3Sopenharmony_ci   #include "md5.h"         /* from RFC 1321 */
479853a5a1b3Sopenharmony_ci
479953a5a1b3Sopenharmony_ci   #define MD_CTX MD5_CTX
480053a5a1b3Sopenharmony_ci   #define MDInit MD5Init
480153a5a1b3Sopenharmony_ci   #define MDUpdate MD5Update
480253a5a1b3Sopenharmony_ci   #define MDFinal MD5Final
480353a5a1b3Sopenharmony_ci
480453a5a1b3Sopenharmony_ci   static u_long md_32(char *string, int length)
480553a5a1b3Sopenharmony_ci   {
480653a5a1b3Sopenharmony_ci       MD_CTX context;
480753a5a1b3Sopenharmony_ci       union {
480853a5a1b3Sopenharmony_ci           char   c[16];
480953a5a1b3Sopenharmony_ci           u_long x[4];
481053a5a1b3Sopenharmony_ci       } digest;
481153a5a1b3Sopenharmony_ci       u_long r;
481253a5a1b3Sopenharmony_ci       int i;
481353a5a1b3Sopenharmony_ci
481453a5a1b3Sopenharmony_ci       MDInit (&context);
481553a5a1b3Sopenharmony_ci
481653a5a1b3Sopenharmony_ci
481753a5a1b3Sopenharmony_ci
481853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 86]
481953a5a1b3Sopenharmony_ci
482053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
482153a5a1b3Sopenharmony_ci
482253a5a1b3Sopenharmony_ci
482353a5a1b3Sopenharmony_ci       MDUpdate (&context, string, length);
482453a5a1b3Sopenharmony_ci       MDFinal ((unsigned char *)&digest, &context);
482553a5a1b3Sopenharmony_ci       r = 0;
482653a5a1b3Sopenharmony_ci       for (i = 0; i < 3; i++) {
482753a5a1b3Sopenharmony_ci           r ^= digest.x[i];
482853a5a1b3Sopenharmony_ci       }
482953a5a1b3Sopenharmony_ci       return r;
483053a5a1b3Sopenharmony_ci   }                               /* md_32 */
483153a5a1b3Sopenharmony_ci
483253a5a1b3Sopenharmony_ci   /*
483353a5a1b3Sopenharmony_ci    * Return random unsigned 32-bit quantity.  Use 'type' argument if
483453a5a1b3Sopenharmony_ci    * you need to generate several different values in close succession.
483553a5a1b3Sopenharmony_ci    */
483653a5a1b3Sopenharmony_ci   u_int32 random32(int type)
483753a5a1b3Sopenharmony_ci   {
483853a5a1b3Sopenharmony_ci       struct {
483953a5a1b3Sopenharmony_ci           int     type;
484053a5a1b3Sopenharmony_ci           struct  timeval tv;
484153a5a1b3Sopenharmony_ci           clock_t cpu;
484253a5a1b3Sopenharmony_ci           pid_t   pid;
484353a5a1b3Sopenharmony_ci           u_long  hid;
484453a5a1b3Sopenharmony_ci           uid_t   uid;
484553a5a1b3Sopenharmony_ci           gid_t   gid;
484653a5a1b3Sopenharmony_ci           struct  utsname name;
484753a5a1b3Sopenharmony_ci       } s;
484853a5a1b3Sopenharmony_ci
484953a5a1b3Sopenharmony_ci       gettimeofday(&s.tv, 0);
485053a5a1b3Sopenharmony_ci       uname(&s.name);
485153a5a1b3Sopenharmony_ci       s.type = type;
485253a5a1b3Sopenharmony_ci       s.cpu  = clock();
485353a5a1b3Sopenharmony_ci       s.pid  = getpid();
485453a5a1b3Sopenharmony_ci       s.hid  = gethostid();
485553a5a1b3Sopenharmony_ci       s.uid  = getuid();
485653a5a1b3Sopenharmony_ci       s.gid  = getgid();
485753a5a1b3Sopenharmony_ci       /* also: system uptime */
485853a5a1b3Sopenharmony_ci
485953a5a1b3Sopenharmony_ci       return md_32((char *)&s, sizeof(s));
486053a5a1b3Sopenharmony_ci   }                               /* random32 */
486153a5a1b3Sopenharmony_ci
486253a5a1b3Sopenharmony_ciA.7 Computing the RTCP Transmission Interval
486353a5a1b3Sopenharmony_ci
486453a5a1b3Sopenharmony_ci   The following functions implement the RTCP transmission and reception
486553a5a1b3Sopenharmony_ci   rules described in Section 6.2.  These rules are coded in several
486653a5a1b3Sopenharmony_ci   functions:
486753a5a1b3Sopenharmony_ci
486853a5a1b3Sopenharmony_ci   o  rtcp_interval() computes the deterministic calculated interval,
486953a5a1b3Sopenharmony_ci      measured in seconds.  The parameters are defined in Section 6.3.
487053a5a1b3Sopenharmony_ci
487153a5a1b3Sopenharmony_ci
487253a5a1b3Sopenharmony_ci
487353a5a1b3Sopenharmony_ci
487453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 87]
487553a5a1b3Sopenharmony_ci
487653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
487753a5a1b3Sopenharmony_ci
487853a5a1b3Sopenharmony_ci
487953a5a1b3Sopenharmony_ci   o  OnExpire() is called when the RTCP transmission timer expires.
488053a5a1b3Sopenharmony_ci
488153a5a1b3Sopenharmony_ci   o  OnReceive() is called whenever an RTCP packet is received.
488253a5a1b3Sopenharmony_ci
488353a5a1b3Sopenharmony_ci   Both OnExpire() and OnReceive() have event e as an argument.  This is
488453a5a1b3Sopenharmony_ci   the next scheduled event for that participant, either an RTCP report
488553a5a1b3Sopenharmony_ci   or a BYE packet.  It is assumed that the following functions are
488653a5a1b3Sopenharmony_ci   available:
488753a5a1b3Sopenharmony_ci
488853a5a1b3Sopenharmony_ci   o  Schedule(time t, event e) schedules an event e to occur at time t.
488953a5a1b3Sopenharmony_ci      When time t arrives, the function OnExpire is called with e as an
489053a5a1b3Sopenharmony_ci      argument.
489153a5a1b3Sopenharmony_ci
489253a5a1b3Sopenharmony_ci   o  Reschedule(time t, event e) reschedules a previously scheduled
489353a5a1b3Sopenharmony_ci      event e for time t.
489453a5a1b3Sopenharmony_ci
489553a5a1b3Sopenharmony_ci   o  SendRTCPReport(event e) sends an RTCP report.
489653a5a1b3Sopenharmony_ci
489753a5a1b3Sopenharmony_ci   o  SendBYEPacket(event e) sends a BYE packet.
489853a5a1b3Sopenharmony_ci
489953a5a1b3Sopenharmony_ci   o  TypeOfEvent(event e) returns EVENT_BYE if the event being
490053a5a1b3Sopenharmony_ci      processed is for a BYE packet to be sent, else it returns
490153a5a1b3Sopenharmony_ci      EVENT_REPORT.
490253a5a1b3Sopenharmony_ci
490353a5a1b3Sopenharmony_ci   o  PacketType(p) returns PACKET_RTCP_REPORT if packet p is an RTCP
490453a5a1b3Sopenharmony_ci      report (not BYE), PACKET_BYE if its a BYE RTCP packet, and
490553a5a1b3Sopenharmony_ci      PACKET_RTP if its a regular RTP data packet.
490653a5a1b3Sopenharmony_ci
490753a5a1b3Sopenharmony_ci   o  ReceivedPacketSize() and SentPacketSize() return the size of the
490853a5a1b3Sopenharmony_ci      referenced packet in octets.
490953a5a1b3Sopenharmony_ci
491053a5a1b3Sopenharmony_ci   o  NewMember(p) returns a 1 if the participant who sent packet p is
491153a5a1b3Sopenharmony_ci      not currently in the member list, 0 otherwise.  Note this function
491253a5a1b3Sopenharmony_ci      is not sufficient for a complete implementation because each CSRC
491353a5a1b3Sopenharmony_ci      identifier in an RTP packet and each SSRC in a BYE packet should
491453a5a1b3Sopenharmony_ci      be processed.
491553a5a1b3Sopenharmony_ci
491653a5a1b3Sopenharmony_ci   o  NewSender(p) returns a 1 if the participant who sent packet p is
491753a5a1b3Sopenharmony_ci      not currently in the sender sublist of the member list, 0
491853a5a1b3Sopenharmony_ci      otherwise.
491953a5a1b3Sopenharmony_ci
492053a5a1b3Sopenharmony_ci   o  AddMember() and RemoveMember() to add and remove participants from
492153a5a1b3Sopenharmony_ci      the member list.
492253a5a1b3Sopenharmony_ci
492353a5a1b3Sopenharmony_ci   o  AddSender() and RemoveSender() to add and remove participants from
492453a5a1b3Sopenharmony_ci      the sender sublist of the member list.
492553a5a1b3Sopenharmony_ci
492653a5a1b3Sopenharmony_ci
492753a5a1b3Sopenharmony_ci
492853a5a1b3Sopenharmony_ci
492953a5a1b3Sopenharmony_ci
493053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 88]
493153a5a1b3Sopenharmony_ci
493253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
493353a5a1b3Sopenharmony_ci
493453a5a1b3Sopenharmony_ci
493553a5a1b3Sopenharmony_ci   These functions would have to be extended for an implementation that
493653a5a1b3Sopenharmony_ci   allows the RTCP bandwidth fractions for senders and non-senders to be
493753a5a1b3Sopenharmony_ci   specified as explicit parameters rather than fixed values of 25% and
493853a5a1b3Sopenharmony_ci   75%.  The extended implementation of rtcp_interval() would need to
493953a5a1b3Sopenharmony_ci   avoid division by zero if one of the parameters was zero.
494053a5a1b3Sopenharmony_ci
494153a5a1b3Sopenharmony_ci   double rtcp_interval(int members,
494253a5a1b3Sopenharmony_ci                        int senders,
494353a5a1b3Sopenharmony_ci                        double rtcp_bw,
494453a5a1b3Sopenharmony_ci                        int we_sent,
494553a5a1b3Sopenharmony_ci                        double avg_rtcp_size,
494653a5a1b3Sopenharmony_ci                        int initial)
494753a5a1b3Sopenharmony_ci   {
494853a5a1b3Sopenharmony_ci       /*
494953a5a1b3Sopenharmony_ci        * Minimum average time between RTCP packets from this site (in
495053a5a1b3Sopenharmony_ci        * seconds).  This time prevents the reports from `clumping' when
495153a5a1b3Sopenharmony_ci        * sessions are small and the law of large numbers isn't helping
495253a5a1b3Sopenharmony_ci        * to smooth out the traffic.  It also keeps the report interval
495353a5a1b3Sopenharmony_ci        * from becoming ridiculously small during transient outages like
495453a5a1b3Sopenharmony_ci        * a network partition.
495553a5a1b3Sopenharmony_ci        */
495653a5a1b3Sopenharmony_ci       double const RTCP_MIN_TIME = 5.;
495753a5a1b3Sopenharmony_ci       /*
495853a5a1b3Sopenharmony_ci        * Fraction of the RTCP bandwidth to be shared among active
495953a5a1b3Sopenharmony_ci        * senders.  (This fraction was chosen so that in a typical
496053a5a1b3Sopenharmony_ci        * session with one or two active senders, the computed report
496153a5a1b3Sopenharmony_ci        * time would be roughly equal to the minimum report time so that
496253a5a1b3Sopenharmony_ci        * we don't unnecessarily slow down receiver reports.)  The
496353a5a1b3Sopenharmony_ci        * receiver fraction must be 1 - the sender fraction.
496453a5a1b3Sopenharmony_ci        */
496553a5a1b3Sopenharmony_ci       double const RTCP_SENDER_BW_FRACTION = 0.25;
496653a5a1b3Sopenharmony_ci       double const RTCP_RCVR_BW_FRACTION = (1-RTCP_SENDER_BW_FRACTION);
496753a5a1b3Sopenharmony_ci       /*
496853a5a1b3Sopenharmony_ci       /* To compensate for "timer reconsideration" converging to a
496953a5a1b3Sopenharmony_ci        * value below the intended average.
497053a5a1b3Sopenharmony_ci        */
497153a5a1b3Sopenharmony_ci       double const COMPENSATION = 2.71828 - 1.5;
497253a5a1b3Sopenharmony_ci
497353a5a1b3Sopenharmony_ci       double t;                   /* interval */
497453a5a1b3Sopenharmony_ci       double rtcp_min_time = RTCP_MIN_TIME;
497553a5a1b3Sopenharmony_ci       int n;                      /* no. of members for computation */
497653a5a1b3Sopenharmony_ci
497753a5a1b3Sopenharmony_ci       /*
497853a5a1b3Sopenharmony_ci        * Very first call at application start-up uses half the min
497953a5a1b3Sopenharmony_ci        * delay for quicker notification while still allowing some time
498053a5a1b3Sopenharmony_ci        * before reporting for randomization and to learn about other
498153a5a1b3Sopenharmony_ci        * sources so the report interval will converge to the correct
498253a5a1b3Sopenharmony_ci        * interval more quickly.
498353a5a1b3Sopenharmony_ci
498453a5a1b3Sopenharmony_ci
498553a5a1b3Sopenharmony_ci
498653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 89]
498753a5a1b3Sopenharmony_ci
498853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
498953a5a1b3Sopenharmony_ci
499053a5a1b3Sopenharmony_ci
499153a5a1b3Sopenharmony_ci        */
499253a5a1b3Sopenharmony_ci       if (initial) {
499353a5a1b3Sopenharmony_ci           rtcp_min_time /= 2;
499453a5a1b3Sopenharmony_ci       }
499553a5a1b3Sopenharmony_ci       /*
499653a5a1b3Sopenharmony_ci        * Dedicate a fraction of the RTCP bandwidth to senders unless
499753a5a1b3Sopenharmony_ci        * the number of senders is large enough that their share is
499853a5a1b3Sopenharmony_ci        * more than that fraction.
499953a5a1b3Sopenharmony_ci        */
500053a5a1b3Sopenharmony_ci       n = members;
500153a5a1b3Sopenharmony_ci       if (senders <= members * RTCP_SENDER_BW_FRACTION) {
500253a5a1b3Sopenharmony_ci           if (we_sent) {
500353a5a1b3Sopenharmony_ci               rtcp_bw *= RTCP_SENDER_BW_FRACTION;
500453a5a1b3Sopenharmony_ci               n = senders;
500553a5a1b3Sopenharmony_ci           } else {
500653a5a1b3Sopenharmony_ci               rtcp_bw *= RTCP_RCVR_BW_FRACTION;
500753a5a1b3Sopenharmony_ci               n -= senders;
500853a5a1b3Sopenharmony_ci           }
500953a5a1b3Sopenharmony_ci       }
501053a5a1b3Sopenharmony_ci
501153a5a1b3Sopenharmony_ci       /*
501253a5a1b3Sopenharmony_ci        * The effective number of sites times the average packet size is
501353a5a1b3Sopenharmony_ci        * the total number of octets sent when each site sends a report.
501453a5a1b3Sopenharmony_ci        * Dividing this by the effective bandwidth gives the time
501553a5a1b3Sopenharmony_ci        * interval over which those packets must be sent in order to
501653a5a1b3Sopenharmony_ci        * meet the bandwidth target, with a minimum enforced.  In that
501753a5a1b3Sopenharmony_ci        * time interval we send one report so this time is also our
501853a5a1b3Sopenharmony_ci        * average time between reports.
501953a5a1b3Sopenharmony_ci        */
502053a5a1b3Sopenharmony_ci       t = avg_rtcp_size * n / rtcp_bw;
502153a5a1b3Sopenharmony_ci       if (t < rtcp_min_time) t = rtcp_min_time;
502253a5a1b3Sopenharmony_ci
502353a5a1b3Sopenharmony_ci       /*
502453a5a1b3Sopenharmony_ci        * To avoid traffic bursts from unintended synchronization with
502553a5a1b3Sopenharmony_ci        * other sites, we then pick our actual next report interval as a
502653a5a1b3Sopenharmony_ci        * random number uniformly distributed between 0.5*t and 1.5*t.
502753a5a1b3Sopenharmony_ci        */
502853a5a1b3Sopenharmony_ci       t = t * (drand48() + 0.5);
502953a5a1b3Sopenharmony_ci       t = t / COMPENSATION;
503053a5a1b3Sopenharmony_ci       return t;
503153a5a1b3Sopenharmony_ci   }
503253a5a1b3Sopenharmony_ci
503353a5a1b3Sopenharmony_ci   void OnExpire(event e,
503453a5a1b3Sopenharmony_ci                 int    members,
503553a5a1b3Sopenharmony_ci                 int    senders,
503653a5a1b3Sopenharmony_ci                 double rtcp_bw,
503753a5a1b3Sopenharmony_ci                 int    we_sent,
503853a5a1b3Sopenharmony_ci                 double *avg_rtcp_size,
503953a5a1b3Sopenharmony_ci
504053a5a1b3Sopenharmony_ci
504153a5a1b3Sopenharmony_ci
504253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 90]
504353a5a1b3Sopenharmony_ci
504453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
504553a5a1b3Sopenharmony_ci
504653a5a1b3Sopenharmony_ci
504753a5a1b3Sopenharmony_ci                 int    *initial,
504853a5a1b3Sopenharmony_ci                 time_tp   tc,
504953a5a1b3Sopenharmony_ci                 time_tp   *tp,
505053a5a1b3Sopenharmony_ci                 int    *pmembers)
505153a5a1b3Sopenharmony_ci   {
505253a5a1b3Sopenharmony_ci       /* This function is responsible for deciding whether to send an
505353a5a1b3Sopenharmony_ci        * RTCP report or BYE packet now, or to reschedule transmission.
505453a5a1b3Sopenharmony_ci        * It is also responsible for updating the pmembers, initial, tp,
505553a5a1b3Sopenharmony_ci        * and avg_rtcp_size state variables.  This function should be
505653a5a1b3Sopenharmony_ci        * called upon expiration of the event timer used by Schedule().
505753a5a1b3Sopenharmony_ci        */
505853a5a1b3Sopenharmony_ci
505953a5a1b3Sopenharmony_ci       double t;     /* Interval */
506053a5a1b3Sopenharmony_ci       double tn;    /* Next transmit time */
506153a5a1b3Sopenharmony_ci
506253a5a1b3Sopenharmony_ci       /* In the case of a BYE, we use "timer reconsideration" to
506353a5a1b3Sopenharmony_ci        * reschedule the transmission of the BYE if necessary */
506453a5a1b3Sopenharmony_ci
506553a5a1b3Sopenharmony_ci       if (TypeOfEvent(e) == EVENT_BYE) {
506653a5a1b3Sopenharmony_ci           t = rtcp_interval(members,
506753a5a1b3Sopenharmony_ci                             senders,
506853a5a1b3Sopenharmony_ci                             rtcp_bw,
506953a5a1b3Sopenharmony_ci                             we_sent,
507053a5a1b3Sopenharmony_ci                             *avg_rtcp_size,
507153a5a1b3Sopenharmony_ci                             *initial);
507253a5a1b3Sopenharmony_ci           tn = *tp + t;
507353a5a1b3Sopenharmony_ci           if (tn <= tc) {
507453a5a1b3Sopenharmony_ci               SendBYEPacket(e);
507553a5a1b3Sopenharmony_ci               exit(1);
507653a5a1b3Sopenharmony_ci           } else {
507753a5a1b3Sopenharmony_ci               Schedule(tn, e);
507853a5a1b3Sopenharmony_ci           }
507953a5a1b3Sopenharmony_ci
508053a5a1b3Sopenharmony_ci       } else if (TypeOfEvent(e) == EVENT_REPORT) {
508153a5a1b3Sopenharmony_ci           t = rtcp_interval(members,
508253a5a1b3Sopenharmony_ci                             senders,
508353a5a1b3Sopenharmony_ci                             rtcp_bw,
508453a5a1b3Sopenharmony_ci                             we_sent,
508553a5a1b3Sopenharmony_ci                             *avg_rtcp_size,
508653a5a1b3Sopenharmony_ci                             *initial);
508753a5a1b3Sopenharmony_ci           tn = *tp + t;
508853a5a1b3Sopenharmony_ci           if (tn <= tc) {
508953a5a1b3Sopenharmony_ci               SendRTCPReport(e);
509053a5a1b3Sopenharmony_ci               *avg_rtcp_size = (1./16.)*SentPacketSize(e) +
509153a5a1b3Sopenharmony_ci                   (15./16.)*(*avg_rtcp_size);
509253a5a1b3Sopenharmony_ci               *tp = tc;
509353a5a1b3Sopenharmony_ci
509453a5a1b3Sopenharmony_ci               /* We must redraw the interval.  Don't reuse the
509553a5a1b3Sopenharmony_ci
509653a5a1b3Sopenharmony_ci
509753a5a1b3Sopenharmony_ci
509853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 91]
509953a5a1b3Sopenharmony_ci
510053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
510153a5a1b3Sopenharmony_ci
510253a5a1b3Sopenharmony_ci
510353a5a1b3Sopenharmony_ci                  one computed above, since its not actually
510453a5a1b3Sopenharmony_ci                  distributed the same, as we are conditioned
510553a5a1b3Sopenharmony_ci                  on it being small enough to cause a packet to
510653a5a1b3Sopenharmony_ci                  be sent */
510753a5a1b3Sopenharmony_ci
510853a5a1b3Sopenharmony_ci               t = rtcp_interval(members,
510953a5a1b3Sopenharmony_ci                                 senders,
511053a5a1b3Sopenharmony_ci                                 rtcp_bw,
511153a5a1b3Sopenharmony_ci                                 we_sent,
511253a5a1b3Sopenharmony_ci                                 *avg_rtcp_size,
511353a5a1b3Sopenharmony_ci                                 *initial);
511453a5a1b3Sopenharmony_ci
511553a5a1b3Sopenharmony_ci               Schedule(t+tc,e);
511653a5a1b3Sopenharmony_ci               *initial = 0;
511753a5a1b3Sopenharmony_ci           } else {
511853a5a1b3Sopenharmony_ci               Schedule(tn, e);
511953a5a1b3Sopenharmony_ci           }
512053a5a1b3Sopenharmony_ci           *pmembers = members;
512153a5a1b3Sopenharmony_ci       }
512253a5a1b3Sopenharmony_ci   }
512353a5a1b3Sopenharmony_ci
512453a5a1b3Sopenharmony_ci   void OnReceive(packet p,
512553a5a1b3Sopenharmony_ci                  event e,
512653a5a1b3Sopenharmony_ci                  int *members,
512753a5a1b3Sopenharmony_ci                  int *pmembers,
512853a5a1b3Sopenharmony_ci                  int *senders,
512953a5a1b3Sopenharmony_ci                  double *avg_rtcp_size,
513053a5a1b3Sopenharmony_ci                  double *tp,
513153a5a1b3Sopenharmony_ci                  double tc,
513253a5a1b3Sopenharmony_ci                  double tn)
513353a5a1b3Sopenharmony_ci   {
513453a5a1b3Sopenharmony_ci       /* What we do depends on whether we have left the group, and are
513553a5a1b3Sopenharmony_ci        * waiting to send a BYE (TypeOfEvent(e) == EVENT_BYE) or an RTCP
513653a5a1b3Sopenharmony_ci        * report.  p represents the packet that was just received.  */
513753a5a1b3Sopenharmony_ci
513853a5a1b3Sopenharmony_ci       if (PacketType(p) == PACKET_RTCP_REPORT) {
513953a5a1b3Sopenharmony_ci           if (NewMember(p) && (TypeOfEvent(e) == EVENT_REPORT)) {
514053a5a1b3Sopenharmony_ci               AddMember(p);
514153a5a1b3Sopenharmony_ci               *members += 1;
514253a5a1b3Sopenharmony_ci           }
514353a5a1b3Sopenharmony_ci           *avg_rtcp_size = (1./16.)*ReceivedPacketSize(p) +
514453a5a1b3Sopenharmony_ci               (15./16.)*(*avg_rtcp_size);
514553a5a1b3Sopenharmony_ci       } else if (PacketType(p) == PACKET_RTP) {
514653a5a1b3Sopenharmony_ci           if (NewMember(p) && (TypeOfEvent(e) == EVENT_REPORT)) {
514753a5a1b3Sopenharmony_ci               AddMember(p);
514853a5a1b3Sopenharmony_ci               *members += 1;
514953a5a1b3Sopenharmony_ci           }
515053a5a1b3Sopenharmony_ci           if (NewSender(p) && (TypeOfEvent(e) == EVENT_REPORT)) {
515153a5a1b3Sopenharmony_ci
515253a5a1b3Sopenharmony_ci
515353a5a1b3Sopenharmony_ci
515453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 92]
515553a5a1b3Sopenharmony_ci
515653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
515753a5a1b3Sopenharmony_ci
515853a5a1b3Sopenharmony_ci
515953a5a1b3Sopenharmony_ci               AddSender(p);
516053a5a1b3Sopenharmony_ci               *senders += 1;
516153a5a1b3Sopenharmony_ci           }
516253a5a1b3Sopenharmony_ci       } else if (PacketType(p) == PACKET_BYE) {
516353a5a1b3Sopenharmony_ci           *avg_rtcp_size = (1./16.)*ReceivedPacketSize(p) +
516453a5a1b3Sopenharmony_ci               (15./16.)*(*avg_rtcp_size);
516553a5a1b3Sopenharmony_ci
516653a5a1b3Sopenharmony_ci           if (TypeOfEvent(e) == EVENT_REPORT) {
516753a5a1b3Sopenharmony_ci               if (NewSender(p) == FALSE) {
516853a5a1b3Sopenharmony_ci                   RemoveSender(p);
516953a5a1b3Sopenharmony_ci                   *senders -= 1;
517053a5a1b3Sopenharmony_ci               }
517153a5a1b3Sopenharmony_ci
517253a5a1b3Sopenharmony_ci               if (NewMember(p) == FALSE) {
517353a5a1b3Sopenharmony_ci                   RemoveMember(p);
517453a5a1b3Sopenharmony_ci                   *members -= 1;
517553a5a1b3Sopenharmony_ci               }
517653a5a1b3Sopenharmony_ci
517753a5a1b3Sopenharmony_ci               if (*members < *pmembers) {
517853a5a1b3Sopenharmony_ci                   tn = tc +
517953a5a1b3Sopenharmony_ci                       (((double) *members)/(*pmembers))*(tn - tc);
518053a5a1b3Sopenharmony_ci                   *tp = tc -
518153a5a1b3Sopenharmony_ci                       (((double) *members)/(*pmembers))*(tc - *tp);
518253a5a1b3Sopenharmony_ci
518353a5a1b3Sopenharmony_ci                   /* Reschedule the next report for time tn */
518453a5a1b3Sopenharmony_ci
518553a5a1b3Sopenharmony_ci                   Reschedule(tn, e);
518653a5a1b3Sopenharmony_ci                   *pmembers = *members;
518753a5a1b3Sopenharmony_ci               }
518853a5a1b3Sopenharmony_ci
518953a5a1b3Sopenharmony_ci           } else if (TypeOfEvent(e) == EVENT_BYE) {
519053a5a1b3Sopenharmony_ci               *members += 1;
519153a5a1b3Sopenharmony_ci           }
519253a5a1b3Sopenharmony_ci       }
519353a5a1b3Sopenharmony_ci   }
519453a5a1b3Sopenharmony_ci
519553a5a1b3Sopenharmony_ci
519653a5a1b3Sopenharmony_ci
519753a5a1b3Sopenharmony_ci
519853a5a1b3Sopenharmony_ci
519953a5a1b3Sopenharmony_ci
520053a5a1b3Sopenharmony_ci
520153a5a1b3Sopenharmony_ci
520253a5a1b3Sopenharmony_ci
520353a5a1b3Sopenharmony_ci
520453a5a1b3Sopenharmony_ci
520553a5a1b3Sopenharmony_ci
520653a5a1b3Sopenharmony_ci
520753a5a1b3Sopenharmony_ci
520853a5a1b3Sopenharmony_ci
520953a5a1b3Sopenharmony_ci
521053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 93]
521153a5a1b3Sopenharmony_ci
521253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
521353a5a1b3Sopenharmony_ci
521453a5a1b3Sopenharmony_ci
521553a5a1b3Sopenharmony_ciA.8 Estimating the Interarrival Jitter
521653a5a1b3Sopenharmony_ci
521753a5a1b3Sopenharmony_ci   The code fragments below implement the algorithm given in Section
521853a5a1b3Sopenharmony_ci   6.4.1 for calculating an estimate of the statistical variance of the
521953a5a1b3Sopenharmony_ci   RTP data interarrival time to be inserted in the interarrival jitter
522053a5a1b3Sopenharmony_ci   field of reception reports.  The inputs are r->ts, the timestamp from
522153a5a1b3Sopenharmony_ci   the incoming packet, and arrival, the current time in the same units.
522253a5a1b3Sopenharmony_ci   Here s points to state for the source; s->transit holds the relative
522353a5a1b3Sopenharmony_ci   transit time for the previous packet, and s->jitter holds the
522453a5a1b3Sopenharmony_ci   estimated jitter.  The jitter field of the reception report is
522553a5a1b3Sopenharmony_ci   measured in timestamp units and expressed as an unsigned integer, but
522653a5a1b3Sopenharmony_ci   the jitter estimate is kept in a floating point.  As each data packet
522753a5a1b3Sopenharmony_ci   arrives, the jitter estimate is updated:
522853a5a1b3Sopenharmony_ci
522953a5a1b3Sopenharmony_ci      int transit = arrival - r->ts;
523053a5a1b3Sopenharmony_ci      int d = transit - s->transit;
523153a5a1b3Sopenharmony_ci      s->transit = transit;
523253a5a1b3Sopenharmony_ci      if (d < 0) d = -d;
523353a5a1b3Sopenharmony_ci      s->jitter += (1./16.) * ((double)d - s->jitter);
523453a5a1b3Sopenharmony_ci
523553a5a1b3Sopenharmony_ci   When a reception report block (to which rr points) is generated for
523653a5a1b3Sopenharmony_ci   this member, the current jitter estimate is returned:
523753a5a1b3Sopenharmony_ci
523853a5a1b3Sopenharmony_ci      rr->jitter = (u_int32) s->jitter;
523953a5a1b3Sopenharmony_ci
524053a5a1b3Sopenharmony_ci   Alternatively, the jitter estimate can be kept as an integer, but
524153a5a1b3Sopenharmony_ci   scaled to reduce round-off error.  The calculation is the same except
524253a5a1b3Sopenharmony_ci   for the last line:
524353a5a1b3Sopenharmony_ci
524453a5a1b3Sopenharmony_ci      s->jitter += d - ((s->jitter + 8) >> 4);
524553a5a1b3Sopenharmony_ci
524653a5a1b3Sopenharmony_ci   In this case, the estimate is sampled for the reception report as:
524753a5a1b3Sopenharmony_ci
524853a5a1b3Sopenharmony_ci      rr->jitter = s->jitter >> 4;
524953a5a1b3Sopenharmony_ci
525053a5a1b3Sopenharmony_ci
525153a5a1b3Sopenharmony_ci
525253a5a1b3Sopenharmony_ci
525353a5a1b3Sopenharmony_ci
525453a5a1b3Sopenharmony_ci
525553a5a1b3Sopenharmony_ci
525653a5a1b3Sopenharmony_ci
525753a5a1b3Sopenharmony_ci
525853a5a1b3Sopenharmony_ci
525953a5a1b3Sopenharmony_ci
526053a5a1b3Sopenharmony_ci
526153a5a1b3Sopenharmony_ci
526253a5a1b3Sopenharmony_ci
526353a5a1b3Sopenharmony_ci
526453a5a1b3Sopenharmony_ci
526553a5a1b3Sopenharmony_ci
526653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 94]
526753a5a1b3Sopenharmony_ci
526853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
526953a5a1b3Sopenharmony_ci
527053a5a1b3Sopenharmony_ci
527153a5a1b3Sopenharmony_ciAppendix B - Changes from RFC 1889
527253a5a1b3Sopenharmony_ci
527353a5a1b3Sopenharmony_ci   Most of this RFC is identical to RFC 1889.  There are no changes in
527453a5a1b3Sopenharmony_ci   the packet formats on the wire, only changes to the rules and
527553a5a1b3Sopenharmony_ci   algorithms governing how the protocol is used.  The biggest change is
527653a5a1b3Sopenharmony_ci   an enhancement to the scalable timer algorithm for calculating when
527753a5a1b3Sopenharmony_ci   to send RTCP packets:
527853a5a1b3Sopenharmony_ci
527953a5a1b3Sopenharmony_ci   o  The algorithm for calculating the RTCP transmission interval
528053a5a1b3Sopenharmony_ci      specified in Sections 6.2 and 6.3 and illustrated in Appendix A.7
528153a5a1b3Sopenharmony_ci      is augmented to include "reconsideration" to minimize transmission
528253a5a1b3Sopenharmony_ci      in excess of the intended rate when many participants join a
528353a5a1b3Sopenharmony_ci      session simultaneously, and "reverse reconsideration" to reduce
528453a5a1b3Sopenharmony_ci      the incidence and duration of false participant timeouts when the
528553a5a1b3Sopenharmony_ci      number of participants drops rapidly.  Reverse reconsideration is
528653a5a1b3Sopenharmony_ci      also used to possibly shorten the delay before sending RTCP SR
528753a5a1b3Sopenharmony_ci      when transitioning from passive receiver to active sender mode.
528853a5a1b3Sopenharmony_ci
528953a5a1b3Sopenharmony_ci   o  Section 6.3.7 specifies new rules controlling when an RTCP BYE
529053a5a1b3Sopenharmony_ci      packet should be sent in order to avoid a flood of packets when
529153a5a1b3Sopenharmony_ci      many participants leave a session simultaneously.
529253a5a1b3Sopenharmony_ci
529353a5a1b3Sopenharmony_ci   o  The requirement to retain state for inactive participants for a
529453a5a1b3Sopenharmony_ci      period long enough to span typical network partitions was removed
529553a5a1b3Sopenharmony_ci      from Section 6.2.1.  In a session where many participants join for
529653a5a1b3Sopenharmony_ci      a brief time and fail to send BYE, this requirement would cause a
529753a5a1b3Sopenharmony_ci      significant overestimate of the number of participants.  The
529853a5a1b3Sopenharmony_ci      reconsideration algorithm added in this revision compensates for
529953a5a1b3Sopenharmony_ci      the large number of new participants joining simultaneously when a
530053a5a1b3Sopenharmony_ci      partition heals.
530153a5a1b3Sopenharmony_ci
530253a5a1b3Sopenharmony_ci   It should be noted that these enhancements only have a significant
530353a5a1b3Sopenharmony_ci   effect when the number of session participants is large (thousands)
530453a5a1b3Sopenharmony_ci   and most of the participants join or leave at the same time.  This
530553a5a1b3Sopenharmony_ci   makes testing in a live network difficult.  However, the algorithm
530653a5a1b3Sopenharmony_ci   was subjected to a thorough analysis and simulation to verify its
530753a5a1b3Sopenharmony_ci   performance.  Furthermore, the enhanced algorithm was designed to
530853a5a1b3Sopenharmony_ci   interoperate with the algorithm in RFC 1889 such that the degree of
530953a5a1b3Sopenharmony_ci   reduction in excess RTCP bandwidth during a step join is proportional
531053a5a1b3Sopenharmony_ci   to the fraction of participants that implement the enhanced
531153a5a1b3Sopenharmony_ci   algorithm.  Interoperation of the two algorithms has been verified
531253a5a1b3Sopenharmony_ci   experimentally on live networks.
531353a5a1b3Sopenharmony_ci
531453a5a1b3Sopenharmony_ci   Other functional changes were:
531553a5a1b3Sopenharmony_ci
531653a5a1b3Sopenharmony_ci   o  Section 6.2.1 specifies that implementations may store only a
531753a5a1b3Sopenharmony_ci      sampling of the participants' SSRC identifiers to allow scaling to
531853a5a1b3Sopenharmony_ci      very large sessions.  Algorithms are specified in RFC 2762 [21].
531953a5a1b3Sopenharmony_ci
532053a5a1b3Sopenharmony_ci
532153a5a1b3Sopenharmony_ci
532253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 95]
532353a5a1b3Sopenharmony_ci
532453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
532553a5a1b3Sopenharmony_ci
532653a5a1b3Sopenharmony_ci
532753a5a1b3Sopenharmony_ci   o  In Section 6.2 it is specified that RTCP sender and non-sender
532853a5a1b3Sopenharmony_ci      bandwidths may be set as separate parameters of the session rather
532953a5a1b3Sopenharmony_ci      than a strict percentage of the session bandwidth, and may be set
533053a5a1b3Sopenharmony_ci      to zero.  The requirement that RTCP was mandatory for RTP sessions
533153a5a1b3Sopenharmony_ci      using IP multicast was relaxed.  However, a clarification was also
533253a5a1b3Sopenharmony_ci      added that turning off RTCP is NOT RECOMMENDED.
533353a5a1b3Sopenharmony_ci
533453a5a1b3Sopenharmony_ci   o  In Sections 6.2, 6.3.1 and Appendix A.7, it is specified that the
533553a5a1b3Sopenharmony_ci      fraction of participants below which senders get dedicated RTCP
533653a5a1b3Sopenharmony_ci      bandwidth changes from the fixed 1/4 to a ratio based on the RTCP
533753a5a1b3Sopenharmony_ci      sender and non-sender bandwidth parameters when those are given.
533853a5a1b3Sopenharmony_ci      The condition that no bandwidth is dedicated to senders when there
533953a5a1b3Sopenharmony_ci      are no senders was removed since that is expected to be a
534053a5a1b3Sopenharmony_ci      transitory state.  It also keeps non-senders from using sender
534153a5a1b3Sopenharmony_ci      RTCP bandwidth when that is not intended.
534253a5a1b3Sopenharmony_ci
534353a5a1b3Sopenharmony_ci   o  Also in Section 6.2 it is specified that the minimum RTCP interval
534453a5a1b3Sopenharmony_ci      may be scaled to smaller values for high bandwidth sessions, and
534553a5a1b3Sopenharmony_ci      that the initial RTCP delay may be set to zero for unicast
534653a5a1b3Sopenharmony_ci      sessions.
534753a5a1b3Sopenharmony_ci
534853a5a1b3Sopenharmony_ci   o  Timing out a participant is to be based on inactivity for a number
534953a5a1b3Sopenharmony_ci      of RTCP report intervals calculated using the receiver RTCP
535053a5a1b3Sopenharmony_ci      bandwidth fraction even for active senders.
535153a5a1b3Sopenharmony_ci
535253a5a1b3Sopenharmony_ci   o  Sections 7.2 and 7.3 specify that translators and mixers should
535353a5a1b3Sopenharmony_ci      send BYE packets for the sources they are no longer forwarding.
535453a5a1b3Sopenharmony_ci
535553a5a1b3Sopenharmony_ci   o  Rule changes for layered encodings are defined in Sections 2.4,
535653a5a1b3Sopenharmony_ci      6.3.9, 8.3 and 11.  In the last of these, it is noted that the
535753a5a1b3Sopenharmony_ci      address and port assignment rule conflicts with the SDP
535853a5a1b3Sopenharmony_ci      specification, RFC 2327 [15], but it is intended that this
535953a5a1b3Sopenharmony_ci      restriction will be relaxed in a revision of RFC 2327.
536053a5a1b3Sopenharmony_ci
536153a5a1b3Sopenharmony_ci   o  The convention for using even/odd port pairs for RTP and RTCP in
536253a5a1b3Sopenharmony_ci      Section 11 was clarified to refer to destination ports.  The
536353a5a1b3Sopenharmony_ci      requirement to use an even/odd port pair was removed if the two
536453a5a1b3Sopenharmony_ci      ports are specified explicitly.  For unicast RTP sessions,
536553a5a1b3Sopenharmony_ci      distinct port pairs may be used for the two ends (Sections 3, 7.1
536653a5a1b3Sopenharmony_ci      and 11).
536753a5a1b3Sopenharmony_ci
536853a5a1b3Sopenharmony_ci   o  A new Section 10 was added to explain the requirement for
536953a5a1b3Sopenharmony_ci      congestion control in applications using RTP.
537053a5a1b3Sopenharmony_ci
537153a5a1b3Sopenharmony_ci   o  In Section 8.2, the requirement that a new SSRC identifier MUST be
537253a5a1b3Sopenharmony_ci      chosen whenever the source transport address is changed has been
537353a5a1b3Sopenharmony_ci      relaxed to say that a new SSRC identifier MAY be chosen.
537453a5a1b3Sopenharmony_ci      Correspondingly, it was clarified that an implementation MAY
537553a5a1b3Sopenharmony_ci
537653a5a1b3Sopenharmony_ci
537753a5a1b3Sopenharmony_ci
537853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 96]
537953a5a1b3Sopenharmony_ci
538053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
538153a5a1b3Sopenharmony_ci
538253a5a1b3Sopenharmony_ci
538353a5a1b3Sopenharmony_ci      choose to keep packets from the new source address rather than the
538453a5a1b3Sopenharmony_ci      existing source address when an SSRC collision occurs between two
538553a5a1b3Sopenharmony_ci      other participants, and SHOULD do so for applications such as
538653a5a1b3Sopenharmony_ci      telephony in which some sources such as mobile entities may change
538753a5a1b3Sopenharmony_ci      addresses during the course of an RTP session.
538853a5a1b3Sopenharmony_ci
538953a5a1b3Sopenharmony_ci   o  An indentation bug in the RFC 1889 printing of the pseudo-code for
539053a5a1b3Sopenharmony_ci      the collision detection and resolution algorithm in Section 8.2
539153a5a1b3Sopenharmony_ci      has been corrected by translating the syntax to pseudo C language,
539253a5a1b3Sopenharmony_ci      and the algorithm has been modified to remove the restriction that
539353a5a1b3Sopenharmony_ci      both RTP and RTCP must be sent from the same source port number.
539453a5a1b3Sopenharmony_ci
539553a5a1b3Sopenharmony_ci   o  The description of the padding mechanism for RTCP packets was
539653a5a1b3Sopenharmony_ci      clarified and it is specified that padding MUST only be applied to
539753a5a1b3Sopenharmony_ci      the last packet of a compound RTCP packet.
539853a5a1b3Sopenharmony_ci
539953a5a1b3Sopenharmony_ci   o  In Section A.1, initialization of base_seq was corrected to be seq
540053a5a1b3Sopenharmony_ci      rather than seq - 1, and the text was corrected to say the bad
540153a5a1b3Sopenharmony_ci      sequence number plus 1 is stored.  The initialization of max_seq
540253a5a1b3Sopenharmony_ci      and other variables for the algorithm was separated from the text
540353a5a1b3Sopenharmony_ci      to make clear that this initialization must be done in addition to
540453a5a1b3Sopenharmony_ci      calling the init_seq() function (and a few words lost in RFC 1889
540553a5a1b3Sopenharmony_ci      when processing the document from source to output form were
540653a5a1b3Sopenharmony_ci      restored).
540753a5a1b3Sopenharmony_ci
540853a5a1b3Sopenharmony_ci   o  Clamping of number of packets lost in Section A.3 was corrected to
540953a5a1b3Sopenharmony_ci      use both positive and negative limits.
541053a5a1b3Sopenharmony_ci
541153a5a1b3Sopenharmony_ci   o  The specification of "relative" NTP timestamp in the RTCP SR
541253a5a1b3Sopenharmony_ci      section now defines these timestamps to be based on the most
541353a5a1b3Sopenharmony_ci      common system-specific clock, such as system uptime, rather than
541453a5a1b3Sopenharmony_ci      on session elapsed time which would not be the same for multiple
541553a5a1b3Sopenharmony_ci      applications started on the same machine at different times.
541653a5a1b3Sopenharmony_ci
541753a5a1b3Sopenharmony_ci   Non-functional changes:
541853a5a1b3Sopenharmony_ci
541953a5a1b3Sopenharmony_ci   o  It is specified that a receiver MUST ignore packets with payload
542053a5a1b3Sopenharmony_ci      types it does not understand.
542153a5a1b3Sopenharmony_ci
542253a5a1b3Sopenharmony_ci   o  In Fig. 2, the floating point NTP timestamp value was corrected,
542353a5a1b3Sopenharmony_ci      some missing leading zeros were added in a hex number, and the UTC
542453a5a1b3Sopenharmony_ci      timezone was specified.
542553a5a1b3Sopenharmony_ci
542653a5a1b3Sopenharmony_ci   o  The inconsequence of NTP timestamps wrapping around in the year
542753a5a1b3Sopenharmony_ci      2036 is explained.
542853a5a1b3Sopenharmony_ci
542953a5a1b3Sopenharmony_ci
543053a5a1b3Sopenharmony_ci
543153a5a1b3Sopenharmony_ci
543253a5a1b3Sopenharmony_ci
543353a5a1b3Sopenharmony_ci
543453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 97]
543553a5a1b3Sopenharmony_ci
543653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
543753a5a1b3Sopenharmony_ci
543853a5a1b3Sopenharmony_ci
543953a5a1b3Sopenharmony_ci   o  The policy for registration of RTCP packet types and SDES types
544053a5a1b3Sopenharmony_ci      was clarified in a new Section 15, IANA Considerations.  The
544153a5a1b3Sopenharmony_ci      suggestion that experimenters register the numbers they need and
544253a5a1b3Sopenharmony_ci      then unregister those which prove to be unneeded has been removed
544353a5a1b3Sopenharmony_ci      in favor of using APP and PRIV.  Registration of profile names was
544453a5a1b3Sopenharmony_ci      also specified.
544553a5a1b3Sopenharmony_ci
544653a5a1b3Sopenharmony_ci   o  The reference for the UTF-8 character set was changed from an
544753a5a1b3Sopenharmony_ci      X/Open Preliminary Specification to be RFC 2279.
544853a5a1b3Sopenharmony_ci
544953a5a1b3Sopenharmony_ci   o  The reference for RFC 1597 was updated to RFC 1918 and the
545053a5a1b3Sopenharmony_ci      reference for RFC 2543 was updated to RFC 3261.
545153a5a1b3Sopenharmony_ci
545253a5a1b3Sopenharmony_ci   o  The last paragraph of the introduction in RFC 1889, which
545353a5a1b3Sopenharmony_ci      cautioned implementors to limit deployment in the Internet, was
545453a5a1b3Sopenharmony_ci      removed because it was deemed no longer relevant.
545553a5a1b3Sopenharmony_ci
545653a5a1b3Sopenharmony_ci   o  A non-normative note regarding the use of RTP with Source-Specific
545753a5a1b3Sopenharmony_ci      Multicast (SSM) was added in Section 6.
545853a5a1b3Sopenharmony_ci
545953a5a1b3Sopenharmony_ci   o  The definition of "RTP session" in Section 3 was expanded to
546053a5a1b3Sopenharmony_ci      acknowledge that a single session may use multiple destination
546153a5a1b3Sopenharmony_ci      transport addresses (as was always the case for a translator or
546253a5a1b3Sopenharmony_ci      mixer) and to explain that the distinguishing feature of an RTP
546353a5a1b3Sopenharmony_ci      session is that each corresponds to a separate SSRC identifier
546453a5a1b3Sopenharmony_ci      space.  A new definition of "multimedia session" was added to
546553a5a1b3Sopenharmony_ci      reduce confusion about the word "session".
546653a5a1b3Sopenharmony_ci
546753a5a1b3Sopenharmony_ci   o  The meaning of "sampling instant" was explained in more detail as
546853a5a1b3Sopenharmony_ci      part of the definition of the timestamp field of the RTP header in
546953a5a1b3Sopenharmony_ci      Section 5.1.
547053a5a1b3Sopenharmony_ci
547153a5a1b3Sopenharmony_ci   o  Small clarifications of the text have been made in several places,
547253a5a1b3Sopenharmony_ci      some in response to questions from readers.  In particular:
547353a5a1b3Sopenharmony_ci
547453a5a1b3Sopenharmony_ci      -  In RFC 1889, the first five words of the second sentence of
547553a5a1b3Sopenharmony_ci         Section 2.2 were lost in processing the document from source to
547653a5a1b3Sopenharmony_ci         output form, but are now restored.
547753a5a1b3Sopenharmony_ci
547853a5a1b3Sopenharmony_ci      -  A definition for "RTP media type" was added in Section 3 to
547953a5a1b3Sopenharmony_ci         allow the explanation of multiplexing RTP sessions in Section
548053a5a1b3Sopenharmony_ci         5.2 to be more clear regarding the multiplexing of multiple
548153a5a1b3Sopenharmony_ci         media.  That section also now explains that multiplexing
548253a5a1b3Sopenharmony_ci         multiple sources of the same medium based on SSRC identifiers
548353a5a1b3Sopenharmony_ci         may be appropriate and is the norm for multicast sessions.
548453a5a1b3Sopenharmony_ci
548553a5a1b3Sopenharmony_ci      -  The definition for "non-RTP means" was expanded to include
548653a5a1b3Sopenharmony_ci         examples of other protocols constituting non-RTP means.
548753a5a1b3Sopenharmony_ci
548853a5a1b3Sopenharmony_ci
548953a5a1b3Sopenharmony_ci
549053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 98]
549153a5a1b3Sopenharmony_ci
549253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
549353a5a1b3Sopenharmony_ci
549453a5a1b3Sopenharmony_ci
549553a5a1b3Sopenharmony_ci      -  The description of the session bandwidth parameter is expanded
549653a5a1b3Sopenharmony_ci         in Section 6.2, including a clarification that the control
549753a5a1b3Sopenharmony_ci         traffic bandwidth is in addition to the session bandwidth for
549853a5a1b3Sopenharmony_ci         the data traffic.
549953a5a1b3Sopenharmony_ci
550053a5a1b3Sopenharmony_ci      -  The effect of varying packet duration on the jitter calculation
550153a5a1b3Sopenharmony_ci         was explained in Section 6.4.4.
550253a5a1b3Sopenharmony_ci
550353a5a1b3Sopenharmony_ci      -  The method for terminating and padding a sequence of SDES items
550453a5a1b3Sopenharmony_ci         was clarified in Section 6.5.
550553a5a1b3Sopenharmony_ci
550653a5a1b3Sopenharmony_ci      -  IPv6 address examples were added in the description of SDES
550753a5a1b3Sopenharmony_ci         CNAME in Section 6.5.1, and "example.com" was used in place of
550853a5a1b3Sopenharmony_ci         other example domain names.
550953a5a1b3Sopenharmony_ci
551053a5a1b3Sopenharmony_ci      -  The Security section added a formal reference to IPSEC now that
551153a5a1b3Sopenharmony_ci         it is available, and says that the confidentiality method
551253a5a1b3Sopenharmony_ci         defined in this specification is primarily to codify existing
551353a5a1b3Sopenharmony_ci         practice.  It is RECOMMENDED that stronger encryption
551453a5a1b3Sopenharmony_ci         algorithms such as Triple-DES be used in place of the default
551553a5a1b3Sopenharmony_ci         algorithm, and noted that the SRTP profile based on AES will be
551653a5a1b3Sopenharmony_ci         the correct choice in the future.  A caution about the weakness
551753a5a1b3Sopenharmony_ci         of the RTP header as an initialization vector was added.  It
551853a5a1b3Sopenharmony_ci         was also noted that payload-only encryption is necessary to
551953a5a1b3Sopenharmony_ci         allow for header compression.
552053a5a1b3Sopenharmony_ci
552153a5a1b3Sopenharmony_ci      -  The method for partial encryption of RTCP was clarified; in
552253a5a1b3Sopenharmony_ci         particular, SDES CNAME is carried in only one part when the
552353a5a1b3Sopenharmony_ci         compound RTCP packet is split.
552453a5a1b3Sopenharmony_ci
552553a5a1b3Sopenharmony_ci      -  It is clarified that only one compound RTCP packet should be
552653a5a1b3Sopenharmony_ci         sent per reporting interval and that if there are too many
552753a5a1b3Sopenharmony_ci         active sources for the reports to fit in the MTU, then a subset
552853a5a1b3Sopenharmony_ci         of the sources should be selected round-robin over multiple
552953a5a1b3Sopenharmony_ci         intervals.
553053a5a1b3Sopenharmony_ci
553153a5a1b3Sopenharmony_ci      -  A note was added in Appendix A.1 that packets may be saved
553253a5a1b3Sopenharmony_ci         during RTP header validation and delivered upon success.
553353a5a1b3Sopenharmony_ci
553453a5a1b3Sopenharmony_ci      -  Section 7.3 now explains that a mixer aggregating SDES packets
553553a5a1b3Sopenharmony_ci         uses more RTCP bandwidth due to longer packets, and a mixer
553653a5a1b3Sopenharmony_ci         passing through RTCP naturally sends packets at higher than the
553753a5a1b3Sopenharmony_ci         single source rate, but both behaviors are valid.
553853a5a1b3Sopenharmony_ci
553953a5a1b3Sopenharmony_ci      -  Section 13 clarifies that an RTP application may use multiple
554053a5a1b3Sopenharmony_ci         profiles but typically only one in a given session.
554153a5a1b3Sopenharmony_ci
554253a5a1b3Sopenharmony_ci
554353a5a1b3Sopenharmony_ci
554453a5a1b3Sopenharmony_ci
554553a5a1b3Sopenharmony_ci
554653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                    [Page 99]
554753a5a1b3Sopenharmony_ci
554853a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
554953a5a1b3Sopenharmony_ci
555053a5a1b3Sopenharmony_ci
555153a5a1b3Sopenharmony_ci      -  The terms MUST, SHOULD, MAY, etc. are used as defined in RFC
555253a5a1b3Sopenharmony_ci         2119.
555353a5a1b3Sopenharmony_ci
555453a5a1b3Sopenharmony_ci      -  The bibliography was divided into normative and informative
555553a5a1b3Sopenharmony_ci         references.
555653a5a1b3Sopenharmony_ci
555753a5a1b3Sopenharmony_ciReferences
555853a5a1b3Sopenharmony_ci
555953a5a1b3Sopenharmony_ciNormative References
556053a5a1b3Sopenharmony_ci
556153a5a1b3Sopenharmony_ci   [1]  Schulzrinne, H. and S. Casner, "RTP Profile for Audio and Video
556253a5a1b3Sopenharmony_ci        Conferences with Minimal Control", RFC 3551, July 2003.
556353a5a1b3Sopenharmony_ci
556453a5a1b3Sopenharmony_ci   [2]  Bradner, S., "Key Words for Use in RFCs to Indicate Requirement
556553a5a1b3Sopenharmony_ci        Levels", BCP 14, RFC 2119, March 1997.
556653a5a1b3Sopenharmony_ci
556753a5a1b3Sopenharmony_ci   [3]  Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981.
556853a5a1b3Sopenharmony_ci
556953a5a1b3Sopenharmony_ci   [4]  Mills, D., "Network Time Protocol (Version 3) Specification,
557053a5a1b3Sopenharmony_ci        Implementation and Analysis", RFC 1305, March 1992.
557153a5a1b3Sopenharmony_ci
557253a5a1b3Sopenharmony_ci   [5]  Yergeau, F., "UTF-8, a Transformation Format of ISO 10646", RFC
557353a5a1b3Sopenharmony_ci        2279, January 1998.
557453a5a1b3Sopenharmony_ci
557553a5a1b3Sopenharmony_ci   [6]  Mockapetris, P., "Domain Names - Concepts and Facilities", STD
557653a5a1b3Sopenharmony_ci        13, RFC 1034, November 1987.
557753a5a1b3Sopenharmony_ci
557853a5a1b3Sopenharmony_ci   [7]  Mockapetris, P., "Domain Names - Implementation and
557953a5a1b3Sopenharmony_ci        Specification", STD 13, RFC 1035, November 1987.
558053a5a1b3Sopenharmony_ci
558153a5a1b3Sopenharmony_ci   [8]  Braden, R., "Requirements for Internet Hosts - Application and
558253a5a1b3Sopenharmony_ci        Support", STD 3, RFC 1123, October 1989.
558353a5a1b3Sopenharmony_ci
558453a5a1b3Sopenharmony_ci   [9]  Resnick, P., "Internet Message Format", RFC 2822, April 2001.
558553a5a1b3Sopenharmony_ci
558653a5a1b3Sopenharmony_ciInformative References
558753a5a1b3Sopenharmony_ci
558853a5a1b3Sopenharmony_ci   [10] Clark, D. and D. Tennenhouse, "Architectural Considerations for
558953a5a1b3Sopenharmony_ci        a New Generation of Protocols," in SIGCOMM Symposium on
559053a5a1b3Sopenharmony_ci        Communications Architectures and Protocols , (Philadelphia,
559153a5a1b3Sopenharmony_ci        Pennsylvania), pp. 200--208, IEEE Computer Communications
559253a5a1b3Sopenharmony_ci        Review, Vol. 20(4), September 1990.
559353a5a1b3Sopenharmony_ci
559453a5a1b3Sopenharmony_ci   [11] Schulzrinne, H., "Issues in designing a transport protocol for
559553a5a1b3Sopenharmony_ci        audio and video conferences and other multiparticipant real-time
559653a5a1b3Sopenharmony_ci        applications." expired Internet Draft, October 1993.
559753a5a1b3Sopenharmony_ci
559853a5a1b3Sopenharmony_ci
559953a5a1b3Sopenharmony_ci
560053a5a1b3Sopenharmony_ci
560153a5a1b3Sopenharmony_ci
560253a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                   [Page 100]
560353a5a1b3Sopenharmony_ci
560453a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
560553a5a1b3Sopenharmony_ci
560653a5a1b3Sopenharmony_ci
560753a5a1b3Sopenharmony_ci   [12] Comer, D., Internetworking with TCP/IP , vol. 1.  Englewood
560853a5a1b3Sopenharmony_ci        Cliffs, New Jersey: Prentice Hall, 1991.
560953a5a1b3Sopenharmony_ci
561053a5a1b3Sopenharmony_ci   [13] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A.,
561153a5a1b3Sopenharmony_ci        Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP:
561253a5a1b3Sopenharmony_ci        Session Initiation Protocol", RFC 3261, June 2002.
561353a5a1b3Sopenharmony_ci
561453a5a1b3Sopenharmony_ci   [14] International Telecommunication Union, "Visual telephone systems
561553a5a1b3Sopenharmony_ci        and equipment for local area networks which provide a non-
561653a5a1b3Sopenharmony_ci        guaranteed quality of service", Recommendation H.323,
561753a5a1b3Sopenharmony_ci        Telecommunication Standardization Sector of ITU, Geneva,
561853a5a1b3Sopenharmony_ci        Switzerland, July 2003.
561953a5a1b3Sopenharmony_ci
562053a5a1b3Sopenharmony_ci   [15] Handley, M. and V. Jacobson, "SDP: Session Description
562153a5a1b3Sopenharmony_ci        Protocol", RFC 2327, April 1998.
562253a5a1b3Sopenharmony_ci
562353a5a1b3Sopenharmony_ci   [16] Schulzrinne, H., Rao, A. and R. Lanphier, "Real Time Streaming
562453a5a1b3Sopenharmony_ci        Protocol (RTSP)", RFC 2326, April 1998.
562553a5a1b3Sopenharmony_ci
562653a5a1b3Sopenharmony_ci   [17] Eastlake 3rd, D., Crocker, S. and J. Schiller, "Randomness
562753a5a1b3Sopenharmony_ci        Recommendations for Security", RFC 1750, December 1994.
562853a5a1b3Sopenharmony_ci
562953a5a1b3Sopenharmony_ci   [18] Bolot, J.-C., Turletti, T. and I. Wakeman, "Scalable Feedback
563053a5a1b3Sopenharmony_ci        Control for Multicast Video Distribution in the Internet", in
563153a5a1b3Sopenharmony_ci        SIGCOMM Symposium on Communications Architectures and Protocols,
563253a5a1b3Sopenharmony_ci        (London, England), pp. 58--67, ACM, August 1994.
563353a5a1b3Sopenharmony_ci
563453a5a1b3Sopenharmony_ci   [19] Busse, I., Deffner, B. and H. Schulzrinne, "Dynamic QoS Control
563553a5a1b3Sopenharmony_ci        of Multimedia Applications Based on RTP", Computer
563653a5a1b3Sopenharmony_ci        Communications , vol. 19, pp. 49--58, January 1996.
563753a5a1b3Sopenharmony_ci
563853a5a1b3Sopenharmony_ci   [20] Floyd, S. and V. Jacobson, "The Synchronization of Periodic
563953a5a1b3Sopenharmony_ci        Routing Messages", in SIGCOMM Symposium on Communications
564053a5a1b3Sopenharmony_ci        Architectures and Protocols (D. P. Sidhu, ed.), (San Francisco,
564153a5a1b3Sopenharmony_ci        California), pp. 33--44, ACM, September 1993.  Also in [34].
564253a5a1b3Sopenharmony_ci
564353a5a1b3Sopenharmony_ci   [21] Rosenberg, J. and H. Schulzrinne, "Sampling of the Group
564453a5a1b3Sopenharmony_ci        Membership in RTP", RFC 2762, February 2000.
564553a5a1b3Sopenharmony_ci
564653a5a1b3Sopenharmony_ci   [22] Cadzow, J., Foundations of Digital Signal Processing and Data
564753a5a1b3Sopenharmony_ci        Analysis New York, New York: Macmillan, 1987.
564853a5a1b3Sopenharmony_ci
564953a5a1b3Sopenharmony_ci   [23] Hinden, R. and S. Deering, "Internet Protocol Version 6 (IPv6)
565053a5a1b3Sopenharmony_ci        Addressing Architecture", RFC 3513, April 2003.
565153a5a1b3Sopenharmony_ci
565253a5a1b3Sopenharmony_ci   [24] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. and E.
565353a5a1b3Sopenharmony_ci        Lear, "Address Allocation for Private Internets", RFC 1918,
565453a5a1b3Sopenharmony_ci        February 1996.
565553a5a1b3Sopenharmony_ci
565653a5a1b3Sopenharmony_ci
565753a5a1b3Sopenharmony_ci
565853a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                   [Page 101]
565953a5a1b3Sopenharmony_ci
566053a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
566153a5a1b3Sopenharmony_ci
566253a5a1b3Sopenharmony_ci
566353a5a1b3Sopenharmony_ci   [25] Lear, E., Fair, E., Crocker, D. and T. Kessler, "Network 10
566453a5a1b3Sopenharmony_ci        Considered Harmful (Some Practices Shouldn't be Codified)", RFC
566553a5a1b3Sopenharmony_ci        1627, July 1994.
566653a5a1b3Sopenharmony_ci
566753a5a1b3Sopenharmony_ci   [26] Feller, W., An Introduction to Probability Theory and its
566853a5a1b3Sopenharmony_ci        Applications, vol. 1.  New York, New York: John Wiley and Sons,
566953a5a1b3Sopenharmony_ci        third ed., 1968.
567053a5a1b3Sopenharmony_ci
567153a5a1b3Sopenharmony_ci   [27] Kent, S. and R. Atkinson, "Security Architecture for the
567253a5a1b3Sopenharmony_ci        Internet Protocol", RFC 2401, November 1998.
567353a5a1b3Sopenharmony_ci
567453a5a1b3Sopenharmony_ci   [28] Baugher, M., Blom, R., Carrara, E., McGrew, D., Naslund, M.,
567553a5a1b3Sopenharmony_ci        Norrman, K. and D. Oran, "Secure Real-time Transport Protocol",
567653a5a1b3Sopenharmony_ci        Work in Progress, April 2003.
567753a5a1b3Sopenharmony_ci
567853a5a1b3Sopenharmony_ci   [29] Balenson, D., "Privacy Enhancement for Internet Electronic Mail:
567953a5a1b3Sopenharmony_ci        Part III", RFC 1423, February 1993.
568053a5a1b3Sopenharmony_ci
568153a5a1b3Sopenharmony_ci   [30] Voydock, V. and S. Kent, "Security Mechanisms in High-Level
568253a5a1b3Sopenharmony_ci        Network Protocols", ACM Computing Surveys, vol. 15, pp. 135-171,
568353a5a1b3Sopenharmony_ci        June 1983.
568453a5a1b3Sopenharmony_ci
568553a5a1b3Sopenharmony_ci   [31] Floyd, S., "Congestion Control Principles", BCP 41, RFC 2914,
568653a5a1b3Sopenharmony_ci        September 2000.
568753a5a1b3Sopenharmony_ci
568853a5a1b3Sopenharmony_ci   [32] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April
568953a5a1b3Sopenharmony_ci        1992.
569053a5a1b3Sopenharmony_ci
569153a5a1b3Sopenharmony_ci   [33] Stubblebine, S., "Security Services for Multimedia
569253a5a1b3Sopenharmony_ci        Conferencing", in 16th National Computer Security Conference,
569353a5a1b3Sopenharmony_ci        (Baltimore, Maryland), pp. 391--395, September 1993.
569453a5a1b3Sopenharmony_ci
569553a5a1b3Sopenharmony_ci   [34] Floyd, S. and V. Jacobson, "The Synchronization of Periodic
569653a5a1b3Sopenharmony_ci        Routing Messages", IEEE/ACM Transactions on Networking, vol. 2,
569753a5a1b3Sopenharmony_ci        pp. 122--136, April 1994.
569853a5a1b3Sopenharmony_ci
569953a5a1b3Sopenharmony_ci
570053a5a1b3Sopenharmony_ci
570153a5a1b3Sopenharmony_ci
570253a5a1b3Sopenharmony_ci
570353a5a1b3Sopenharmony_ci
570453a5a1b3Sopenharmony_ci
570553a5a1b3Sopenharmony_ci
570653a5a1b3Sopenharmony_ci
570753a5a1b3Sopenharmony_ci
570853a5a1b3Sopenharmony_ci
570953a5a1b3Sopenharmony_ci
571053a5a1b3Sopenharmony_ci
571153a5a1b3Sopenharmony_ci
571253a5a1b3Sopenharmony_ci
571353a5a1b3Sopenharmony_ci
571453a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                   [Page 102]
571553a5a1b3Sopenharmony_ci
571653a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
571753a5a1b3Sopenharmony_ci
571853a5a1b3Sopenharmony_ci
571953a5a1b3Sopenharmony_ciAuthors' Addresses
572053a5a1b3Sopenharmony_ci
572153a5a1b3Sopenharmony_ci   Henning Schulzrinne
572253a5a1b3Sopenharmony_ci   Department of Computer Science
572353a5a1b3Sopenharmony_ci   Columbia University
572453a5a1b3Sopenharmony_ci   1214 Amsterdam Avenue
572553a5a1b3Sopenharmony_ci   New York, NY 10027
572653a5a1b3Sopenharmony_ci   United States
572753a5a1b3Sopenharmony_ci
572853a5a1b3Sopenharmony_ci   EMail: schulzrinne@cs.columbia.edu
572953a5a1b3Sopenharmony_ci
573053a5a1b3Sopenharmony_ci
573153a5a1b3Sopenharmony_ci   Stephen L. Casner
573253a5a1b3Sopenharmony_ci   Packet Design
573353a5a1b3Sopenharmony_ci   3400 Hillview Avenue, Building 3
573453a5a1b3Sopenharmony_ci   Palo Alto, CA 94304
573553a5a1b3Sopenharmony_ci   United States
573653a5a1b3Sopenharmony_ci
573753a5a1b3Sopenharmony_ci   EMail: casner@acm.org
573853a5a1b3Sopenharmony_ci
573953a5a1b3Sopenharmony_ci
574053a5a1b3Sopenharmony_ci   Ron Frederick
574153a5a1b3Sopenharmony_ci   Blue Coat Systems Inc.
574253a5a1b3Sopenharmony_ci   650 Almanor Avenue
574353a5a1b3Sopenharmony_ci   Sunnyvale, CA 94085
574453a5a1b3Sopenharmony_ci   United States
574553a5a1b3Sopenharmony_ci
574653a5a1b3Sopenharmony_ci   EMail: ronf@bluecoat.com
574753a5a1b3Sopenharmony_ci
574853a5a1b3Sopenharmony_ci
574953a5a1b3Sopenharmony_ci   Van Jacobson
575053a5a1b3Sopenharmony_ci   Packet Design
575153a5a1b3Sopenharmony_ci   3400 Hillview Avenue, Building 3
575253a5a1b3Sopenharmony_ci   Palo Alto, CA 94304
575353a5a1b3Sopenharmony_ci   United States
575453a5a1b3Sopenharmony_ci
575553a5a1b3Sopenharmony_ci   EMail: van@packetdesign.com
575653a5a1b3Sopenharmony_ci
575753a5a1b3Sopenharmony_ci
575853a5a1b3Sopenharmony_ci
575953a5a1b3Sopenharmony_ci
576053a5a1b3Sopenharmony_ci
576153a5a1b3Sopenharmony_ci
576253a5a1b3Sopenharmony_ci
576353a5a1b3Sopenharmony_ci
576453a5a1b3Sopenharmony_ci
576553a5a1b3Sopenharmony_ci
576653a5a1b3Sopenharmony_ci
576753a5a1b3Sopenharmony_ci
576853a5a1b3Sopenharmony_ci
576953a5a1b3Sopenharmony_ci
577053a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                   [Page 103]
577153a5a1b3Sopenharmony_ci
577253a5a1b3Sopenharmony_ciRFC 3550                          RTP                          July 2003
577353a5a1b3Sopenharmony_ci
577453a5a1b3Sopenharmony_ci
577553a5a1b3Sopenharmony_ciFull Copyright Statement
577653a5a1b3Sopenharmony_ci
577753a5a1b3Sopenharmony_ci   Copyright (C) The Internet Society (2003).  All Rights Reserved.
577853a5a1b3Sopenharmony_ci
577953a5a1b3Sopenharmony_ci   This document and translations of it may be copied and furnished to
578053a5a1b3Sopenharmony_ci   others, and derivative works that comment on or otherwise explain it
578153a5a1b3Sopenharmony_ci   or assist in its implementation may be prepared, copied, published
578253a5a1b3Sopenharmony_ci   and distributed, in whole or in part, without restriction of any
578353a5a1b3Sopenharmony_ci   kind, provided that the above copyright notice and this paragraph are
578453a5a1b3Sopenharmony_ci   included on all such copies and derivative works.  However, this
578553a5a1b3Sopenharmony_ci   document itself may not be modified in any way, such as by removing
578653a5a1b3Sopenharmony_ci   the copyright notice or references to the Internet Society or other
578753a5a1b3Sopenharmony_ci   Internet organizations, except as needed for the purpose of
578853a5a1b3Sopenharmony_ci   developing Internet standards in which case the procedures for
578953a5a1b3Sopenharmony_ci   copyrights defined in the Internet Standards process must be
579053a5a1b3Sopenharmony_ci   followed, or as required to translate it into languages other than
579153a5a1b3Sopenharmony_ci   English.
579253a5a1b3Sopenharmony_ci
579353a5a1b3Sopenharmony_ci   The limited permissions granted above are perpetual and will not be
579453a5a1b3Sopenharmony_ci   revoked by the Internet Society or its successors or assigns.
579553a5a1b3Sopenharmony_ci
579653a5a1b3Sopenharmony_ci   This document and the information contained herein is provided on an
579753a5a1b3Sopenharmony_ci   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
579853a5a1b3Sopenharmony_ci   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
579953a5a1b3Sopenharmony_ci   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
580053a5a1b3Sopenharmony_ci   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
580153a5a1b3Sopenharmony_ci   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
580253a5a1b3Sopenharmony_ci
580353a5a1b3Sopenharmony_ciAcknowledgement
580453a5a1b3Sopenharmony_ci
580553a5a1b3Sopenharmony_ci   Funding for the RFC Editor function is currently provided by the
580653a5a1b3Sopenharmony_ci   Internet Society.
580753a5a1b3Sopenharmony_ci
580853a5a1b3Sopenharmony_ci
580953a5a1b3Sopenharmony_ci
581053a5a1b3Sopenharmony_ci
581153a5a1b3Sopenharmony_ci
581253a5a1b3Sopenharmony_ci
581353a5a1b3Sopenharmony_ci
581453a5a1b3Sopenharmony_ci
581553a5a1b3Sopenharmony_ci
581653a5a1b3Sopenharmony_ci
581753a5a1b3Sopenharmony_ci
581853a5a1b3Sopenharmony_ci
581953a5a1b3Sopenharmony_ci
582053a5a1b3Sopenharmony_ci
582153a5a1b3Sopenharmony_ci
582253a5a1b3Sopenharmony_ci
582353a5a1b3Sopenharmony_ci
582453a5a1b3Sopenharmony_ci
582553a5a1b3Sopenharmony_ci
582653a5a1b3Sopenharmony_ciSchulzrinne, et al.         Standards Track                   [Page 104]
582753a5a1b3Sopenharmony_ci
5828