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