diff options
Diffstat (limited to 'doc/rfc/rfc1889.txt')
-rw-r--r-- | doc/rfc/rfc1889.txt | 4203 |
1 files changed, 4203 insertions, 0 deletions
diff --git a/doc/rfc/rfc1889.txt b/doc/rfc/rfc1889.txt new file mode 100644 index 0000000..d3f6cd5 --- /dev/null +++ b/doc/rfc/rfc1889.txt @@ -0,0 +1,4203 @@ + + + + + + +Network Working Group Audio-Video Transport Working Group +Request for Comments: 1889 H. Schulzrinne +Category: Standards Track GMD Fokus + S. Casner + Precept Software, Inc. + R. Frederick + Xerox Palo Alto Research Center + V. Jacobson + Lawrence Berkeley National Laboratory + January 1996 + + + RTP: A Transport Protocol for Real-Time Applications + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Abstract + + This memorandum describes RTP, the real-time transport protocol. RTP + provides end-to-end network transport functions suitable for + applications transmitting real-time data, such as audio, video or + simulation data, over multicast or unicast network services. RTP does + not address resource reservation and does not guarantee quality-of- + service for real-time services. The data transport is augmented by a + control protocol (RTCP) to allow monitoring of the data delivery in a + manner scalable to large multicast networks, and to provide minimal + control and identification functionality. RTP and RTCP are designed + to be independent of the underlying transport and network layers. The + protocol supports the use of RTP-level translators and mixers. + +Table of Contents + + 1. Introduction ........................................ 3 + 2. RTP Use Scenarios ................................... 5 + 2.1 Simple Multicast Audio Conference ................... 5 + 2.2 Audio and Video Conference .......................... 6 + 2.3 Mixers and Translators .............................. 6 + 3. Definitions ......................................... 7 + 4. Byte Order, Alignment, and Time Format .............. 9 + 5. RTP Data Transfer Protocol .......................... 10 + 5.1 RTP Fixed Header Fields ............................. 10 + 5.2 Multiplexing RTP Sessions ........................... 13 + + + +Schulzrinne, et al Standards Track [Page 1] + +RFC 1889 RTP January 1996 + + + 5.3 Profile-Specific Modifications to the RTP Header..... 14 + 5.3.1 RTP Header Extension ................................ 14 + 6. RTP Control Protocol -- RTCP ........................ 15 + 6.1 RTCP Packet Format .................................. 17 + 6.2 RTCP Transmission Interval .......................... 19 + 6.2.1 Maintaining the number of session members ........... 21 + 6.2.2 Allocation of source description bandwidth .......... 21 + 6.3 Sender and Receiver Reports ......................... 22 + 6.3.1 SR: Sender report RTCP packet ....................... 23 + 6.3.2 RR: Receiver report RTCP packet ..................... 28 + 6.3.3 Extending the sender and receiver reports ........... 29 + 6.3.4 Analyzing sender and receiver reports ............... 29 + 6.4 SDES: Source description RTCP packet ................ 31 + 6.4.1 CNAME: Canonical end-point identifier SDES item ..... 32 + 6.4.2 NAME: User name SDES item ........................... 34 + 6.4.3 EMAIL: Electronic mail address SDES item ............ 34 + 6.4.4 PHONE: Phone number SDES item ....................... 34 + 6.4.5 LOC: Geographic user location SDES item ............. 35 + 6.4.6 TOOL: Application or tool name SDES item ............ 35 + 6.4.7 NOTE: Notice/status SDES item ....................... 35 + 6.4.8 PRIV: Private extensions SDES item .................. 36 + 6.5 BYE: Goodbye RTCP packet ............................ 37 + 6.6 APP: Application-defined RTCP packet ................ 38 + 7. RTP Translators and Mixers .......................... 39 + 7.1 General Description ................................. 39 + 7.2 RTCP Processing in Translators ...................... 41 + 7.3 RTCP Processing in Mixers ........................... 43 + 7.4 Cascaded Mixers ..................................... 44 + 8. SSRC Identifier Allocation and Use .................. 44 + 8.1 Probability of Collision ............................ 44 + 8.2 Collision Resolution and Loop Detection ............. 45 + 9. Security ............................................ 49 + 9.1 Confidentiality ..................................... 49 + 9.2 Authentication and Message Integrity ................ 50 + 10. RTP over Network and Transport Protocols ............ 51 + 11. Summary of Protocol Constants ....................... 51 + 11.1 RTCP packet types ................................... 52 + 11.2 SDES types .......................................... 52 + 12. RTP Profiles and Payload Format Specifications ...... 53 + A. Algorithms .......................................... 56 + A.1 RTP Data Header Validity Checks ..................... 59 + A.2 RTCP Header Validity Checks ......................... 63 + A.3 Determining the Number of RTP Packets Expected and + Lost ................................................ 63 + A.4 Generating SDES RTCP Packets ........................ 64 + A.5 Parsing RTCP SDES Packets ........................... 65 + A.6 Generating a Random 32-bit Identifier ............... 66 + A.7 Computing the RTCP Transmission Interval ............ 68 + + + +Schulzrinne, et al Standards Track [Page 2] + +RFC 1889 RTP January 1996 + + + A.8 Estimating the Interarrival Jitter .................. 71 + B. Security Considerations ............................. 72 + C. Addresses of Authors ................................ 72 + D. Bibliography ........................................ 73 + +1. Introduction + + This memorandum specifies the real-time transport protocol (RTP), + which provides end-to-end delivery services for data with real-time + characteristics, such as interactive audio and video. Those services + include payload type identification, sequence numbering, timestamping + and delivery monitoring. Applications typically run RTP on top of UDP + to make use of its multiplexing and checksum services; both protocols + contribute parts of the transport protocol functionality. However, + RTP may be used with other suitable underlying network or transport + protocols (see Section 10). RTP supports data transfer to multiple + destinations using multicast distribution if provided by the + underlying network. + + Note that RTP itself does not provide any mechanism to ensure timely + delivery or provide other quality-of-service guarantees, but relies + on lower-layer services to do so. It does not guarantee delivery or + prevent out-of-order delivery, nor does it assume that the underlying + network is reliable and delivers packets in sequence. The sequence + numbers included in RTP allow the receiver to reconstruct the + sender's packet sequence, but sequence numbers might also be used to + determine the proper location of a packet, for example in video + decoding, without necessarily decoding packets in sequence. + + While RTP is primarily designed to satisfy the needs of multi- + participant multimedia conferences, it is not limited to that + particular application. Storage of continuous data, interactive + distributed simulation, active badge, and control and measurement + applications may also find RTP applicable. + + This document defines RTP, consisting of two closely-linked parts: + + o the real-time transport protocol (RTP), to carry data that has + real-time properties. + + o the RTP control protocol (RTCP), to monitor the quality of + service and to convey information about the participants in an + on-going session. The latter aspect of RTCP may be sufficient + for "loosely controlled" sessions, i.e., where there is no + explicit membership control and set-up, but it is not + necessarily intended to support all of an application's control + communication requirements. This functionality may be fully or + partially subsumed by a separate session control protocol, + + + +Schulzrinne, et al Standards Track [Page 3] + +RFC 1889 RTP January 1996 + + + which is beyond the scope of this document. + + RTP represents a new style of protocol following the principles of + application level framing and integrated layer processing proposed by + Clark and Tennenhouse [1]. That is, RTP is intended to be malleable + to provide the information required by a particular application and + will often be integrated into the application processing rather than + being implemented as a separate layer. RTP is a protocol framework + that is deliberately not complete. This document specifies those + functions expected to be common across all the applications for which + RTP would be appropriate. Unlike conventional protocols in which + additional functions might be accommodated by making the protocol + more general or by adding an option mechanism that would require + parsing, RTP is intended to be tailored through modifications and/or + additions to the headers as needed. Examples are given in Sections + 5.3 and 6.3.3. + + Therefore, in addition to this document, a complete specification of + RTP for a particular application will require one or more companion + documents (see Section 12): + + o a profile specification document, which defines a set of + payload type codes and their mapping to payload formats (e.g., + media encodings). A profile may also define extensions or + modifications to RTP that are specific to a particular class of + applications. Typically an application will operate under only + one profile. A profile for audio and video data may be found in + the companion RFC TBD. + + o payload format specification documents, which define how a + particular payload, such as an audio or video encoding, is to + be carried in RTP. + + A discussion of real-time services and algorithms for their + implementation as well as background discussion on some of the RTP + design decisions can be found in [2]. + + Several RTP applications, both experimental and commercial, have + already been implemented from draft specifications. These + applications include audio and video tools along with diagnostic + tools such as traffic monitors. Users of these tools number in the + thousands. However, the current Internet cannot yet support the full + potential demand for real-time services. High-bandwidth services + using RTP, such as video, can potentially seriously degrade the + quality of service of other network services. Thus, implementors + should take appropriate precautions to limit accidental bandwidth + usage. Application documentation should clearly outline the + limitations and possible operational impact of high-bandwidth real- + + + +Schulzrinne, et al Standards Track [Page 4] + +RFC 1889 RTP January 1996 + + + time services on the Internet and other network services. + +2. RTP Use Scenarios + + The following sections describe some aspects of the use of RTP. The + examples were chosen to illustrate the basic operation of + applications using RTP, not to limit what RTP may be used for. In + these examples, RTP is carried on top of IP and UDP, and follows the + conventions established by the profile for audio and video specified + in the companion Internet-Draft draft-ietf-avt-profile + +2.1 Simple Multicast Audio Conference + + A working group of the IETF meets to discuss the latest protocol + draft, using the IP multicast services of the Internet for voice + communications. Through some allocation mechanism the working group + chair obtains a multicast group address and pair of ports. One port + is used for audio data, and the other is used for control (RTCP) + packets. This address and port information is distributed to the + intended participants. If privacy is desired, the data and control + packets may be encrypted as specified in Section 9.1, in which case + an encryption key must also be generated and distributed. The exact + details of these allocation and distribution mechanisms are beyond + the scope of RTP. + + The audio conferencing application used by each conference + participant sends audio data in small chunks of, say, 20 ms duration. + Each chunk of audio data is preceded by an RTP header; RTP header and + data are in turn contained in a UDP packet. The RTP header indicates + what type of audio encoding (such as PCM, ADPCM or LPC) is contained + in each packet so that senders can change the encoding during a + conference, for example, to accommodate a new participant that is + connected through a low-bandwidth link or react to indications of + network congestion. + + The Internet, like other packet networks, occasionally loses and + reorders packets and delays them by variable amounts of time. To cope + with these impairments, the RTP header contains timing information + and a sequence number that allow the receivers to reconstruct the + timing produced by the source, so that in this example, chunks of + audio are contiguously played out the speaker every 20 ms. This + timing reconstruction is performed separately for each source of RTP + packets in the conference. The sequence number can also be used by + the receiver to estimate how many packets are being lost. + + Since members of the working group join and leave during the + conference, it is useful to know who is participating at any moment + and how well they are receiving the audio data. For that purpose, + + + +Schulzrinne, et al Standards Track [Page 5] + +RFC 1889 RTP January 1996 + + + each instance of the audio application in the conference periodically + multicasts a reception report plus the name of its user on the RTCP + (control) port. The reception report indicates how well the current + speaker is being received and may be used to control adaptive + encodings. In addition to the user name, other identifying + information may also be included subject to control bandwidth limits. + A site sends the RTCP BYE packet (Section 6.5) when it leaves the + conference. + +2.2 Audio and Video Conference + + If both audio and video media are used in a conference, they are + transmitted as separate RTP sessions RTCP packets are transmitted for + each medium using two different UDP port pairs and/or multicast + addresses. There is no direct coupling at the RTP level between the + audio and video sessions, except that a user participating in both + sessions should use the same distinguished (canonical) name in the + RTCP packets for both so that the sessions can be associated. + + One motivation for this separation is to allow some participants in + the conference to receive only one medium if they choose. Further + explanation is given in Section 5.2. Despite the separation, + synchronized playback of a source's audio and video can be achieved + using timing information carried in the RTCP packets for both + sessions. + +2.3 Mixers and Translators + + So far, we have assumed that all sites want to receive media data in + the same format. However, this may not always be appropriate. + Consider the case where participants in one area are connected + through a low-speed link to the majority of the conference + participants who enjoy high-speed network access. Instead of forcing + everyone to use a lower-bandwidth, reduced-quality audio encoding, an + RTP-level relay called a mixer may be placed near the low-bandwidth + area. This mixer resynchronizes incoming audio packets to reconstruct + the constant 20 ms spacing generated by the sender, mixes these + reconstructed audio streams into a single stream, translates the + audio encoding to a lower-bandwidth one and forwards the lower- + bandwidth packet stream across the low-speed link. These packets + might be unicast to a single recipient or multicast on a different + address to multiple recipients. The RTP header includes a means for + mixers to identify the sources that contributed to a mixed packet so + that correct talker indication can be provided at the receivers. + + Some of the intended participants in the audio conference may be + connected with high bandwidth links but might not be directly + reachable via IP multicast. For example, they might be behind an + + + +Schulzrinne, et al Standards Track [Page 6] + +RFC 1889 RTP January 1996 + + + application-level firewall that will not let any IP packets pass. For + these sites, mixing may not be necessary, in which case another type + of RTP-level relay called a translator may be used. Two translators + are installed, one on either side of the firewall, with the outside + one funneling all multicast packets received through a secure + connection to the translator inside the firewall. The translator + inside the firewall sends them again as multicast packets to a + multicast group restricted to the site's internal network. + + Mixers and translators may be designed for a variety of purposes. An + example is a video mixer that scales the images of individual people + in separate video streams and composites them into one video stream + to simulate a group scene. Other examples of translation include the + connection of a group of hosts speaking only IP/UDP to a group of + hosts that understand only ST-II, or the packet-by-packet encoding + translation of video streams from individual sources without + resynchronization or mixing. Details of the operation of mixers and + translators are given in Section 7. + +3. Definitions + + RTP payload: The data transported by RTP in a packet, for example + audio samples or compressed video data. The payload format and + interpretation are beyond the scope of this document. + + RTP packet: A data packet consisting of the fixed RTP header, a + possibly empty list of contributing sources (see below), and the + payload data. Some underlying protocols may require an + encapsulation of the RTP packet to be defined. Typically one + packet of the underlying protocol contains a single RTP packet, + but several RTP packets may be contained if permitted by the + encapsulation method (see Section 10). + + RTCP packet: A control packet consisting of a fixed header part + similar to that of RTP data packets, followed by structured + elements that vary depending upon the RTCP packet type. The + formats are defined in Section 6. Typically, multiple RTCP + packets are sent together as a compound RTCP packet in a single + packet of the underlying protocol; this is enabled by the length + field in the fixed header of each RTCP packet. + + Port: The "abstraction that transport protocols use to distinguish + among multiple destinations within a given host computer. TCP/IP + protocols identify ports using small positive integers." [3] The + transport selectors (TSEL) used by the OSI transport layer are + equivalent to ports. RTP depends upon the lower-layer protocol + to provide some mechanism such as ports to multiplex the RTP and + RTCP packets of a session. + + + +Schulzrinne, et al Standards Track [Page 7] + +RFC 1889 RTP January 1996 + + + Transport address: The combination of a network address and port that + identifies a transport-level endpoint, for example an IP address + and a UDP port. Packets are transmitted from a source transport + address to a destination transport address. + + RTP session: The association among a set of participants + communicating with RTP. For each participant, the session is + defined by a particular pair of destination transport addresses + (one network address plus a port pair for RTP and RTCP). The + destination transport address pair may be common for all + participants, as in the case of IP multicast, or may be + different for each, as in the case of individual unicast network + addresses plus a common port pair. In a multimedia session, + each medium is carried in a separate RTP session with its own + RTCP packets. The multiple RTP sessions are distinguished by + different port number pairs and/or different multicast + addresses. + + Synchronization source (SSRC): The source of a stream of RTP packets, + identified by a 32-bit numeric SSRC identifier carried in the + RTP header so as not to be dependent upon the network address. + All packets from a synchronization source form part of the same + timing and sequence number space, so a receiver groups packets + by synchronization source for playback. Examples of + synchronization sources include the sender of a stream of + packets derived from a signal source such as a microphone or a + camera, or an RTP mixer (see below). A synchronization source + may change its data format, e.g., audio encoding, over time. The + SSRC identifier is a randomly chosen value meant to be globally + unique within a particular RTP session (see Section 8). A + participant need not use the same SSRC identifier for all the + RTP sessions in a multimedia session; the binding of the SSRC + identifiers is provided through RTCP (see Section 6.4.1). If a + participant generates multiple streams in one RTP session, for + example from separate video cameras, each must be identified as + a different SSRC. + + Contributing source (CSRC): A source of a stream of RTP packets that + has contributed to the combined stream produced by an RTP mixer + (see below). The mixer inserts a list of the SSRC identifiers of + the sources that contributed to the generation of a particular + packet into the RTP header of that packet. This list is called + the CSRC list. An example application is audio conferencing + where a mixer indicates all the talkers whose speech was + combined to produce the outgoing packet, allowing the receiver + to indicate the current talker, even though all the audio + packets contain the same SSRC identifier (that of the mixer). + + + + +Schulzrinne, et al Standards Track [Page 8] + +RFC 1889 RTP January 1996 + + + End system: An application that generates the content to be sent in + RTP packets and/or consumes the content of received RTP packets. + An end system can act as one or more synchronization sources in + a particular RTP session, but typically only one. + + Mixer: An intermediate system that receives RTP packets from one or + more sources, possibly changes the data format, combines the + packets in some manner and then forwards a new RTP packet. Since + the timing among multiple input sources will not generally be + synchronized, the mixer will make timing adjustments among the + streams and generate its own timing for the combined stream. + Thus, all data packets originating from a mixer will be + identified as having the mixer as their synchronization source. + + Translator: An intermediate system that forwards RTP packets with + their synchronization source identifier intact. Examples of + translators include devices that convert encodings without + mixing, replicators from multicast to unicast, and application- + level filters in firewalls. + + Monitor: An application that receives RTCP packets sent by + participants in an RTP session, in particular the reception + reports, and estimates the current quality of service for + distribution monitoring, fault diagnosis and long-term + statistics. The monitor function is likely to be built into the + application(s) participating in the session, but may also be a + separate application that does not otherwise participate and + does not send or receive the RTP data packets. These are called + third party monitors. + + Non-RTP means: Protocols and mechanisms that may be needed in + addition to RTP to provide a usable service. In particular, for + multimedia conferences, a conference control application may + distribute multicast addresses and keys for encryption, + negotiate the encryption algorithm to be used, and define + dynamic mappings between RTP payload type values and the payload + formats they represent for formats that do not have a predefined + payload type value. For simple applications, electronic mail or + a conference database may also be used. The specification of + such protocols and mechanisms is outside the scope of this + document. + +4. Byte Order, Alignment, and Time Format + + All integer fields are carried in network byte order, that is, most + significant byte (octet) first. This byte order is commonly known as + big-endian. The transmission order is described in detail in [4]. + Unless otherwise noted, numeric constants are in decimal (base 10). + + + +Schulzrinne, et al Standards Track [Page 9] + +RFC 1889 RTP January 1996 + + + All header data is aligned to its natural length, i.e., 16-bit fields + are aligned on even offsets, 32-bit fields are aligned at offsets + divisible by four, etc. Octets designated as padding have the value + zero. + + Wallclock time (absolute time) is represented using the timestamp + format of the Network Time Protocol (NTP), which is in seconds + relative to 0h UTC on 1 January 1900 [5]. The full resolution NTP + timestamp is a 64-bit unsigned fixed-point number with the integer + part in the first 32 bits and the fractional part in the last 32 + bits. In some fields where a more compact representation is + appropriate, only the middle 32 bits are used; that is, the low 16 + bits of the integer part and the high 16 bits of the fractional part. + The high 16 bits of the integer part must be determined + independently. + +5. RTP Data Transfer Protocol + +5.1 RTP Fixed Header Fields + + The RTP header has the following format: + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |V=2|P|X| CC |M| PT | sequence number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | timestamp | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | synchronization source (SSRC) identifier | + +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + | contributing source (CSRC) identifiers | + | .... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The first twelve octets are present in every RTP packet, while the + list of CSRC identifiers is present only when inserted by a mixer. + The fields have the following meaning: + + version (V): 2 bits + This field identifies the version of RTP. The version defined by + this specification is two (2). (The value 1 is used by the first + draft version of RTP and the value 0 is used by the protocol + initially implemented in the "vat" audio tool.) + + padding (P): 1 bit + If the padding bit is set, the packet contains one or more + additional padding octets at the end which are not part of the + + + +Schulzrinne, et al Standards Track [Page 10] + +RFC 1889 RTP January 1996 + + + payload. The last octet of the padding contains a count of how + many padding octets should be ignored. Padding may be needed by + some encryption algorithms with fixed block sizes or for + carrying several RTP packets in a lower-layer protocol data + unit. + + extension (X): 1 bit + If the extension bit is set, the fixed header is followed by + exactly one header extension, with a format defined in Section + 5.3.1. + + CSRC count (CC): 4 bits + The CSRC count contains the number of CSRC identifiers that + follow the fixed header. + + marker (M): 1 bit + The interpretation of the marker is defined by a profile. It is + intended to allow significant events such as frame boundaries to + be marked in the packet stream. A profile may define additional + marker bits or specify that there is no marker bit by changing + the number of bits in the payload type field (see Section 5.3). + + payload type (PT): 7 bits + This field identifies the format of the RTP payload and + determines its interpretation by the application. A profile + specifies a default static mapping of payload type codes to + payload formats. Additional payload type codes may be defined + dynamically through non-RTP means (see Section 3). An initial + set of default mappings for audio and video is specified in the + companion profile Internet-Draft draft-ietf-avt-profile, and + may be extended in future editions of the Assigned Numbers RFC + [6]. An RTP sender emits a single RTP payload type at any given + time; this field is not intended for multiplexing separate media + streams (see Section 5.2). + + sequence number: 16 bits + The sequence number increments by one for each RTP data packet + sent, and may be used by the receiver to detect packet loss and + to restore packet sequence. The initial value of the sequence + number is random (unpredictable) to make known-plaintext attacks + on encryption more difficult, even if the source itself does not + encrypt, because the packets may flow through a translator that + does. Techniques for choosing unpredictable numbers are + discussed in [7]. + + timestamp: 32 bits + The timestamp reflects the sampling instant of the first octet + in the RTP data packet. The sampling instant must be derived + + + +Schulzrinne, et al Standards Track [Page 11] + +RFC 1889 RTP January 1996 + + + from a clock that increments monotonically and linearly in time + to allow synchronization and jitter calculations (see Section + 6.3.1). The resolution of the clock must be sufficient for the + desired synchronization accuracy and for measuring packet + arrival jitter (one tick per video frame is typically not + sufficient). The clock frequency is dependent on the format of + data carried as payload and is specified statically in the + profile or payload format specification that defines the format, + or may be specified dynamically for payload formats defined + through non-RTP means. If RTP packets are generated + periodically, the nominal sampling instant as determined from + the sampling clock is to be used, not a reading of the system + clock. As an example, for fixed-rate audio the timestamp clock + would likely increment by one for each sampling period. If an + audio application reads blocks covering 160 sampling periods + from the input device, the timestamp would be increased by 160 + for each such block, regardless of whether the block is + transmitted in a packet or dropped as silent. + + The initial value of the timestamp is random, as for the sequence + number. Several consecutive RTP packets may have equal timestamps if + they are (logically) generated at once, e.g., belong to the same + video frame. Consecutive RTP packets may contain timestamps that are + not monotonic if the data is not transmitted in the order it was + sampled, as in the case of MPEG interpolated video frames. (The + sequence numbers of the packets as transmitted will still be + monotonic.) + + SSRC: 32 bits + The SSRC field identifies the synchronization source. This + identifier is chosen randomly, with the intent that no two + synchronization sources within the same RTP session will have + the same SSRC identifier. An example algorithm for generating a + random identifier is presented in Appendix A.6. Although the + probability of multiple sources choosing the same identifier is + low, all RTP implementations must be prepared to detect and + resolve collisions. Section 8 describes the probability of + collision along with a mechanism for resolving collisions and + detecting RTP-level forwarding loops based on the uniqueness of + the SSRC identifier. If a source changes its source transport + address, it must also choose a new SSRC identifier to avoid + being interpreted as a looped source. + + CSRC list: 0 to 15 items, 32 bits each + The CSRC list identifies the contributing sources for the + payload contained in this packet. The number of identifiers is + given by the CC field. If there are more than 15 contributing + sources, only 15 may be identified. CSRC identifiers are + + + +Schulzrinne, et al Standards Track [Page 12] + +RFC 1889 RTP January 1996 + + + inserted by mixers, using the SSRC identifiers of contributing + sources. For example, for audio packets the SSRC identifiers of + all sources that were mixed together to create a packet are + listed, allowing correct talker indication at the receiver. + +5.2 Multiplexing RTP Sessions + + For efficient protocol processing, the number of multiplexing points + should be minimized, as described in the integrated layer processing + design principle [1]. In RTP, multiplexing is provided by the + destination transport address (network address and port number) which + define an RTP session. For example, in a teleconference composed of + audio and video media encoded separately, each medium should be + carried in a separate RTP session with its own destination transport + address. It is not intended that the audio and video be carried in a + single RTP session and demultiplexed based on the payload type or + SSRC fields. Interleaving packets with different payload types but + using the same SSRC would introduce several problems: + + 1. If one payload type were switched during a session, there + would be no general means to identify which of the old + values the new one replaced. + + 2. An SSRC is defined to identify a single timing and sequence + number space. Interleaving multiple payload types would + require different timing spaces if the media clock rates + differ and would require different sequence number spaces + to tell which payload type suffered packet loss. + + 3. The RTCP sender and receiver reports (see Section 6.3) can + only describe one timing and sequence number space per SSRC + and do not carry a payload type field. + + 4. An RTP mixer would not be able to combine interleaved + streams of incompatible media into one stream. + + 5. Carrying multiple media in one RTP session precludes: the + use of different network paths or network resource + allocations if appropriate; reception of a subset of the + media if desired, for example just audio if video would + exceed the available bandwidth; and receiver + implementations that use separate processes for the + different media, whereas using separate RTP sessions + permits either single- or multiple-process implementations. + + Using a different SSRC for each medium but sending them in the same + RTP session would avoid the first three problems but not the last + two. + + + +Schulzrinne, et al Standards Track [Page 13] + +RFC 1889 RTP January 1996 + + +5.3 Profile-Specific Modifications to the RTP Header + + The existing RTP data packet header is believed to be complete for + the set of functions required in common across all the application + classes that RTP might support. However, in keeping with the ALF + design principle, the header may be tailored through modifications or + additions defined in a profile specification while still allowing + profile-independent monitoring and recording tools to function. + + o The marker bit and payload type field carry profile-specific + information, but they are allocated in the fixed header since + many applications are expected to need them and might otherwise + have to add another 32-bit word just to hold them. The octet + containing these fields may be redefined by a profile to suit + different requirements, for example with a more or fewer marker + bits. If there are any marker bits, one should be located in + the most significant bit of the octet since profile-independent + monitors may be able to observe a correlation between packet + loss patterns and the marker bit. + + o Additional information that is required for a particular + payload format, such as a video encoding, should be carried in + the payload section of the packet. This might be in a header + that is always present at the start of the payload section, or + might be indicated by a reserved value in the data pattern. + + o If a particular class of applications needs additional + functionality independent of payload format, the profile under + which those applications operate should define additional fixed + fields to follow immediately after the SSRC field of the + existing fixed header. Those applications will be able to + quickly and directly access the additional fields while + profile-independent monitors or recorders can still process the + RTP packets by interpreting only the first twelve octets. + + If it turns out that additional functionality is needed in common + across all profiles, then a new version of RTP should be defined to + make a permanent change to the fixed header. + +5.3.1 RTP Header Extension + + An extension mechanism is provided to allow individual + implementations to experiment with new payload-format-independent + functions that require additional information to be carried in the + RTP data packet header. This mechanism is designed so that the header + extension may be ignored by other interoperating implementations that + have not been extended. + + + + +Schulzrinne, et al Standards Track [Page 14] + +RFC 1889 RTP January 1996 + + + Note that this header extension is intended only for limited use. + Most potential uses of this mechanism would be better done another + way, using the methods described in the previous section. For + example, a profile-specific extension to the fixed header is less + expensive to process because it is not conditional nor in a variable + location. Additional information required for a particular payload + format should not use this header extension, but should be carried in + the payload section of the packet. + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | defined by profile | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | header extension | + | .... | + + + If the X bit in the RTP header is one, a variable-length header + extension is appended to the RTP header, following the CSRC list if + present. The header extension contains a 16-bit length field that + counts the number of 32-bit words in the extension, excluding the + four-octet extension header (therefore zero is a valid length). Only + a single extension may be appended to the RTP data header. To allow + multiple interoperating implementations to each experiment + independently with different header extensions, or to allow a + particular implementation to experiment with more than one type of + header extension, the first 16 bits of the header extension are left + open for distinguishing identifiers or parameters. The format of + these 16 bits is to be defined by the profile specification under + which the implementations are operating. This RTP specification does + not define any header extensions itself. + +6. RTP Control Protocol -- RTCP + + The RTP control protocol (RTCP) is based on the periodic transmission + of control packets to all participants in the session, using the same + distribution mechanism as the data packets. The underlying protocol + must provide multiplexing of the data and control packets, for + example using separate port numbers with UDP. RTCP performs four + functions: + + 1. The primary function is to provide feedback on the quality + of the data distribution. This is an integral part of the + RTP's role as a transport protocol and is related to the + flow and congestion control functions of other transport + protocols. The feedback may be directly useful for control + of adaptive encodings [8,9], but experiments with IP + + + +Schulzrinne, et al Standards Track [Page 15] + +RFC 1889 RTP January 1996 + + + multicasting have shown that it is also critical to get + feedback from the receivers to diagnose faults in the + distribution. Sending reception feedback reports to all + participants allows one who is observing problems to + evaluate whether those problems are local or global. With a + distribution mechanism like IP multicast, it is also + possible for an entity such as a network service provider + who is not otherwise involved in the session to receive the + feedback information and act as a third-party monitor to + diagnose network problems. This feedback function is + performed by the RTCP sender and receiver reports, + described below in Section 6.3. + + 2. RTCP carries a persistent transport-level identifier for an + RTP source called the canonical name or CNAME, Section + 6.4.1. Since the SSRC identifier may change if a conflict + is discovered or a program is restarted, receivers require + the CNAME to keep track of each participant. Receivers also + require the CNAME to associate multiple data streams from a + given participant in a set of related RTP sessions, for + example to synchronize audio and video. + + 3. The first two functions require that all participants send + RTCP packets, therefore the rate must be controlled in + order for RTP to scale up to a large number of + participants. By having each participant send its control + packets to all the others, each can independently observe + the number of participants. This number is used to + calculate the rate at which the packets are sent, as + explained in Section 6.2. + + 4. A fourth, optional function is to convey minimal session + control information, for example participant identification + to be displayed in the user interface. This is most likely + to be useful in "loosely controlled" sessions where + participants enter and leave without membership control or + parameter negotiation. RTCP serves as a convenient channel + to reach all the participants, but it is not necessarily + expected to support all the control communication + requirements of an application. A higher-level session + control protocol, which is beyond the scope of this + document, may be needed. + + Functions 1-3 are mandatory when RTP is used in the IP multicast + environment, and are recommended for all environments. RTP + application designers are advised to avoid mechanisms that can only + work in unicast mode and will not scale to larger numbers. + + + + +Schulzrinne, et al Standards Track [Page 16] + +RFC 1889 RTP January 1996 + + +6.1 RTCP Packet Format + + This specification defines several RTCP packet types to carry a + variety of control information: + + SR: Sender report, for transmission and reception statistics from + participants that are active senders + + RR: Receiver report, for reception statistics from participants that + are not active senders + + SDES: Source description items, including CNAME + + BYE: Indicates end of participation + + APP: Application specific functions + + Each RTCP packet begins with a fixed part similar to that of RTP data + packets, followed by structured elements that may be of variable + length according to the packet type but always end on a 32-bit + boundary. The alignment requirement and a length field in the fixed + part are included to make RTCP packets "stackable". Multiple RTCP + packets may be concatenated without any intervening separators to + form a compound RTCP packet that is sent in a single packet of the + lower layer protocol, for example UDP. There is no explicit count of + individual RTCP packets in the compound packet since the lower layer + protocols are expected to provide an overall length to determine the + end of the compound packet. + + Each individual RTCP packet in the compound packet may be processed + independently with no requirements upon the order or combination of + packets. However, in order to perform the functions of the protocol, + the following constraints are imposed: + + o Reception statistics (in SR or RR) should be sent as often as + bandwidth constraints will allow to maximize the resolution of + the statistics, therefore each periodically transmitted + compound RTCP packet should include a report packet. + + o New receivers need to receive the CNAME for a source as soon + as possible to identify the source and to begin associating + media for purposes such as lip-sync, so each compound RTCP + packet should also include the SDES CNAME. + + o The number of packet types that may appear first in the + compound packet should be limited to increase the number of + constant bits in the first word and the probability of + successfully validating RTCP packets against misaddressed RTP + + + +Schulzrinne, et al Standards Track [Page 17] + +RFC 1889 RTP January 1996 + + + data packets or other unrelated packets. + + Thus, all RTCP packets must be sent in a compound packet of at least + two individual packets, with the following format recommended: + + Encryption prefix: If and only if the compound packet is to be + encrypted, it is prefixed by a random 32-bit quantity redrawn + for every compound packet transmitted. + + SR or RR: The first RTCP packet in the compound packet must always + be a report packet to facilitate header validation as described + in Appendix A.2. This is true even if no data has been sent nor + received, in which case an empty RR is sent, and even if the + only other RTCP packet in the compound packet is a BYE. + + Additional RRs: If the number of sources for which reception + statistics are being reported exceeds 31, the number that will + fit into one SR or RR packet, then additional RR packets should + follow the initial report packet. + + SDES: An SDES packet containing a CNAME item must be included in + each compound RTCP packet. Other source description items may + optionally be included if required by a particular application, + subject to bandwidth constraints (see Section 6.2.2). + + BYE or APP: Other RTCP packet types, including those yet to be + defined, may follow in any order, except that BYE should be the + last packet sent with a given SSRC/CSRC. Packet types may appear + more than once. + + It is advisable for translators and mixers to combine individual RTCP + packets from the multiple sources they are forwarding into one + compound packet whenever feasible in order to amortize the packet + overhead (see Section 7). An example RTCP compound packet as might be + produced by a mixer is shown in Fig. 1. If the overall length of a + compound packet would exceed the maximum transmission unit (MTU) of + the network path, it may be segmented into multiple shorter compound + packets to be transmitted in separate packets of the underlying + protocol. Note that each of the compound packets must begin with an + SR or RR packet. + + An implementation may ignore incoming RTCP packets with types unknown + to it. Additional RTCP packet types may be registered with the + Internet Assigned Numbers Authority (IANA). + + + + + + + +Schulzrinne, et al Standards Track [Page 18] + +RFC 1889 RTP January 1996 + + +6.2 RTCP Transmission Interval + + if encrypted: random 32-bit integer + | + |[------- packet -------][----------- packet -----------][-packet-] + | + | receiver reports chunk chunk + V item item item item + -------------------------------------------------------------------- + |R[SR|# sender #site#site][SDES|# CNAME PHONE |#CNAME LOC][BYE##why] + |R[ |# report # 1 # 2 ][ |# |# ][ ## ] + |R[ |# # # ][ |# |# ][ ## ] + |R[ |# # # ][ |# |# ][ ## ] + -------------------------------------------------------------------- + |<------------------ UDP packet (compound packet) --------------->| + + #: SSRC/CSRC + + Figure 1: Example of an RTCP compound packet + + RTP is designed to allow an application to scale automatically over + session sizes ranging from a few participants to thousands. For + example, in an audio conference the data traffic is inherently self- + limiting because only one or two people will speak at a time, so with + multicast distribution the data rate on any given link remains + relatively constant independent of the number of participants. + However, the control traffic is not self-limiting. If the reception + reports from each participant were sent at a constant rate, the + control traffic would grow linearly with the number of participants. + Therefore, the rate must be scaled down. + + For each session, it is assumed that the data traffic is subject to + an aggregate limit called the "session bandwidth" to be divided among + the participants. This bandwidth might be reserved and the limit + enforced by the network, or it might just be a reasonable share. The + session bandwidth may be chosen based or some cost or a priori + knowledge of the available network bandwidth for the session. It is + somewhat independent of the media encoding, but the encoding choice + may be limited by the session bandwidth. The session bandwidth + parameter is expected to be supplied by a session management + application when it invokes a media application, but media + applications may also set a default based on the single-sender data + bandwidth for the encoding selected for the session. The application + may also enforce bandwidth limits based on multicast scope rules or + other criteria. + + + + + + +Schulzrinne, et al Standards Track [Page 19] + +RFC 1889 RTP January 1996 + + + Bandwidth calculations for control and data traffic include lower- + layer transport and network protocols (e.g., UDP and IP) since that + is what the resource reservation system would need to know. The + application can also be expected to know which of these protocols are + in use. Link level headers are not included in the calculation since + the packet will be encapsulated with different link level headers as + it travels. + + The control traffic should be limited to a small and known fraction + of the session bandwidth: small so that the primary function of the + transport protocol to carry data is not impaired; known so that the + control traffic can be included in the bandwidth specification given + to a resource reservation protocol, and so that each participant can + independently calculate its share. It is suggested that the fraction + of the session bandwidth allocated to RTCP be fixed at 5%. While the + value of this and other constants in the interval calculation is not + critical, all participants in the session must use the same values so + the same interval will be calculated. Therefore, these constants + should be fixed for a particular profile. + + The algorithm described in Appendix A.7 was designed to meet the + goals outlined above. It calculates the interval between sending + compound RTCP packets to divide the allowed control traffic bandwidth + among the participants. This allows an application to provide fast + response for small sessions where, for example, identification of all + participants is important, yet automatically adapt to large sessions. + The algorithm incorporates the following characteristics: + + o Senders are collectively allocated at least 1/4 of the control + traffic bandwidth so that in sessions with a large number of + receivers but a small number of senders, newly joining + participants will more quickly receive the CNAME for the + sending sites. + + o The calculated interval between RTCP packets is required to be + greater than a minimum of 5 seconds to avoid having bursts of + RTCP packets exceed the allowed bandwidth when the number of + participants is small and the traffic isn't smoothed according + to the law of large numbers. + + o The interval between RTCP packets is varied randomly over the + range [0.5,1.5] times the calculated interval to avoid + unintended synchronization of all participants [10]. The first + RTCP packet sent after joining a session is also delayed by a + random variation of half the minimum RTCP interval in case the + application is started at multiple sites simultaneously, for + example as initiated by a session announcement. + + + + +Schulzrinne, et al Standards Track [Page 20] + +RFC 1889 RTP January 1996 + + + o A dynamic estimate of the average compound RTCP packet size is + calculated, including all those received and sent, to + automatically adapt to changes in the amount of control + information carried. + + This algorithm may be used for sessions in which all participants are + allowed to send. In that case, the session bandwidth parameter is the + product of the individual sender's bandwidth times the number of + participants, and the RTCP bandwidth is 5% of that. + +6.2.1 Maintaining the number of session members + + Calculation of the RTCP packet interval depends upon an estimate of + the number of sites participating in the session. New sites are added + to the count when they are heard, and an entry for each is created in + a table indexed by the SSRC or CSRC identifier (see Section 8.2) to + keep track of them. New entries may not be considered valid until + multiple packets carrying the new SSRC have been received (see + Appendix A.1). Entries may be deleted from the table when an RTCP BYE + packet with the corresponding SSRC identifier is received. + + A participant may mark another site inactive, or delete it if not yet + valid, if no RTP or RTCP packet has been received for a small number + of RTCP report intervals (5 is suggested). This provides some + robustness against packet loss. All sites must calculate roughly the + same value for the RTCP report interval in order for this timeout to + work properly. + + Once a site has been validated, then if it is later marked inactive + the state for that site should still be retained and the site should + continue to be counted in the total number of sites sharing RTCP + bandwidth for a period long enough to span typical network + partitions. This is to avoid excessive traffic, when the partition + heals, due to an RTCP report interval that is too small. A timeout of + 30 minutes is suggested. Note that this is still larger than 5 times + the largest value to which the RTCP report interval is expected to + usefully scale, about 2 to 5 minutes. + +6.2.2 Allocation of source description bandwidth + + This specification defines several source description (SDES) items in + addition to the mandatory CNAME item, such as NAME (personal name) + and EMAIL (email address). It also provides a means to define new + application-specific RTCP packet types. Applications should exercise + caution in allocating control bandwidth to this additional + information because it will slow down the rate at which reception + reports and CNAME are sent, thus impairing the performance of the + protocol. It is recommended that no more than 20% of the RTCP + + + +Schulzrinne, et al Standards Track [Page 21] + +RFC 1889 RTP January 1996 + + + bandwidth allocated to a single participant be used to carry the + additional information. Furthermore, it is not intended that all + SDES items should be included in every application. Those that are + included should be assigned a fraction of the bandwidth according to + their utility. Rather than estimate these fractions dynamically, it + is recommended that the percentages be translated statically into + report interval counts based on the typical length of an item. + + For example, an application may be designed to send only CNAME, NAME + and EMAIL and not any others. NAME might be given much higher + priority than EMAIL because the NAME would be displayed continuously + in the application's user interface, whereas EMAIL would be displayed + only when requested. At every RTCP interval, an RR packet and an SDES + packet with the CNAME item would be sent. For a small session + operating at the minimum interval, that would be every 5 seconds on + the average. Every third interval (15 seconds), one extra item would + be included in the SDES packet. Seven out of eight times this would + be the NAME item, and every eighth time (2 minutes) it would be the + EMAIL item. + + When multiple applications operate in concert using cross-application + binding through a common CNAME for each participant, for example in a + multimedia conference composed of an RTP session for each medium, the + additional SDES information might be sent in only one RTP session. + The other sessions would carry only the CNAME item. + +6.3 Sender and Receiver Reports + + RTP receivers provide reception quality feedback using RTCP report + packets which may take one of two forms depending upon whether or not + the receiver is also a sender. The only difference between the sender + report (SR) and receiver report (RR) forms, besides the packet type + code, is that the sender report includes a 20-byte sender information + section for use by active senders. The SR is issued if a site has + sent any data packets during the interval since issuing the last + report or the previous one, otherwise the RR is issued. + + Both the SR and RR forms include zero or more reception report + blocks, one for each of the synchronization sources from which this + receiver has received RTP data packets since the last report. Reports + are not issued for contributing sources listed in the CSRC list. Each + reception report block provides statistics about the data received + from the particular source indicated in that block. Since a maximum + of 31 reception report blocks will fit in an SR or RR packet, + additional RR packets may be stacked after the initial SR or RR + packet as needed to contain the reception reports for all sources + heard during the interval since the last report. + + + + +Schulzrinne, et al Standards Track [Page 22] + +RFC 1889 RTP January 1996 + + + The next sections define the formats of the two reports, how they may + be extended in a profile-specific manner if an application requires + additional feedback information, and how the reports may be used. + Details of reception reporting by translators and mixers is given in + Section 7. + +6.3.1 SR: Sender report RTCP packet + + 0 1 2 3 + 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 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +|V=2|P| RC | PT=SR=200 | length | header ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| SSRC of sender | ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| NTP timestamp, most significant word | sender ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ info +| NTP timestamp, least significant word | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| RTP timestamp | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| sender's packet count | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| sender's octet count | ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| SSRC_1 (SSRC of first source) | report ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block +| fraction lost | cumulative number of packets lost | 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| extended highest sequence number received | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| interarrival jitter | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| last SR (LSR) | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| delay since last SR (DLSR) | ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| SSRC_2 (SSRC of second source) | report ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block +: ... : 2 ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| profile-specific extensions | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The sender report packet consists of three sections, possibly + followed by a fourth profile-specific extension section if defined. + The first section, the header, is 8 octets long. The fields have the + following meaning: + + + +Schulzrinne, et al Standards Track [Page 23] + +RFC 1889 RTP January 1996 + + + version (V): 2 bits + Identifies the version of RTP, which is the same in RTCP packets + as in RTP data packets. The version defined by this + specification is two (2). + + padding (P): 1 bit + If the padding bit is set, this RTCP packet contains some + additional padding octets at the end which are not part of the + control information. The last octet of the padding is a count of + how many padding octets should be ignored. Padding may be needed + by some encryption algorithms with fixed block sizes. In a + compound RTCP packet, padding should only be required on the + last individual packet because the compound packet is encrypted + as a whole. + + reception report count (RC): 5 bits + The number of reception report blocks contained in this packet. + A value of zero is valid. + + packet type (PT): 8 bits + Contains the constant 200 to identify this as an RTCP SR packet. + + length: 16 bits + The length of this RTCP packet in 32-bit words minus one, + including the header and any padding. (The offset of one makes + zero a valid length and avoids a possible infinite loop in + scanning a compound RTCP packet, while counting 32-bit words + avoids a validity check for a multiple of 4.) + + SSRC: 32 bits + The synchronization source identifier for the originator of this + SR packet. + + The second section, the sender information, is 20 octets long and is + present in every sender report packet. It summarizes the data + transmissions from this sender. The fields have the following + meaning: + + NTP timestamp: 64 bits + Indicates the wallclock time when this report was sent so that + it may be used in combination with timestamps returned in + reception reports from other receivers to measure round-trip + propagation to those receivers. Receivers should expect that the + measurement accuracy of the timestamp may be limited to far less + than the resolution of the NTP timestamp. The measurement + uncertainty of the timestamp is not indicated as it may not be + known. A sender that can keep track of elapsed time but has no + notion of wallclock time may use the elapsed time since joining + + + +Schulzrinne, et al Standards Track [Page 24] + +RFC 1889 RTP January 1996 + + + the session instead. This is assumed to be less than 68 years, + so the high bit will be zero. It is permissible to use the + sampling clock to estimate elapsed wallclock time. A sender that + has no notion of wallclock or elapsed time may set the NTP + timestamp to zero. + + RTP timestamp: 32 bits + Corresponds to the same time as the NTP timestamp (above), but + in the same units and with the same random offset as the RTP + timestamps in data packets. This correspondence may be used for + intra- and inter-media synchronization for sources whose NTP + timestamps are synchronized, and may be used by media- + independent receivers to estimate the nominal RTP clock + frequency. Note that in most cases this timestamp will not be + equal to the RTP timestamp in any adjacent data packet. Rather, + it is calculated from the corresponding NTP timestamp using the + relationship between the RTP timestamp counter and real time as + maintained by periodically checking the wallclock time at a + sampling instant. + + sender's packet count: 32 bits + The total number of RTP data packets transmitted by the sender + since starting transmission up until the time this SR packet was + generated. The count is reset if the sender changes its SSRC + identifier. + + sender's octet count: 32 bits + The total number of payload octets (i.e., not including header + or padding) transmitted in RTP data packets by the sender since + starting transmission up until the time this SR packet was + generated. The count is reset if the sender changes its SSRC + identifier. This field can be used to estimate the average + payload data rate. + + The third section contains zero or more reception report blocks + depending on the number of other sources heard by this sender since + the last report. Each reception report block conveys statistics on + the reception of RTP packets from a single synchronization source. + Receivers do not carry over statistics when a source changes its SSRC + identifier due to a collision. These statistics are: + + SSRC_n (source identifier): 32 bits + The SSRC identifier of the source to which the information in + this reception report block pertains. + + fraction lost: 8 bits + The fraction of RTP data packets from source SSRC_n lost since + the previous SR or RR packet was sent, expressed as a fixed + + + +Schulzrinne, et al Standards Track [Page 25] + +RFC 1889 RTP January 1996 + + + point number with the binary point at the left edge of the + field. (That is equivalent to taking the integer part after + multiplying the loss fraction by 256.) This fraction is defined + to be the number of packets lost divided by the number of + packets expected, as defined in the next paragraph. An + implementation is shown in Appendix A.3. If the loss is negative + due to duplicates, the fraction lost is set to zero. Note that a + receiver cannot tell whether any packets were lost after the + last one received, and that there will be no reception report + block issued for a source if all packets from that source sent + during the last reporting interval have been lost. + + cumulative number of packets lost: 24 bits + The total number of RTP data packets from source SSRC_n that + have been lost since the beginning of reception. This number is + defined to be the number of packets expected less the number of + packets actually received, where the number of packets received + includes any which are late or duplicates. Thus packets that + arrive late are not counted as lost, and the loss may be + negative if there are duplicates. The number of packets + expected is defined to be the extended last sequence number + received, as defined next, less the initial sequence number + received. This may be calculated as shown in Appendix A.3. + + extended highest sequence number received: 32 bits + The low 16 bits contain the highest sequence number received in + an RTP data packet from source SSRC_n, and the most significant + 16 bits extend that sequence number with the corresponding count + of sequence number cycles, which may be maintained according to + the algorithm in Appendix A.1. Note that different receivers + within the same session will generate different extensions to + the sequence number if their start times differ significantly. + + interarrival jitter: 32 bits + An estimate of the statistical variance of the RTP data packet + interarrival time, measured in timestamp units and expressed as + an unsigned integer. The interarrival jitter J is defined to be + the mean deviation (smoothed absolute value) of the difference D + in packet spacing at the receiver compared to the sender for a + pair of packets. As shown in the equation below, this is + equivalent to the difference in the "relative transit time" for + the two packets; the relative transit time is the difference + between a packet's RTP timestamp and the receiver's clock at the + time of arrival, measured in the same units. + + + + + + + +Schulzrinne, et al Standards Track [Page 26] + +RFC 1889 RTP January 1996 + + + If Si is the RTP timestamp from packet i, and Ri is the time of + arrival in RTP timestamp units for packet i, then for two packets i + and j, D may be expressed as + + D(i,j)=(Rj-Ri)-(Sj-Si)=(Rj-Sj)-(Ri-Si) + + The interarrival jitter is calculated continuously as each data + packet i is received from source SSRC_n, using this difference D for + that packet and the previous packet i-1 in order of arrival (not + necessarily in sequence), according to the formula + + J=J+(|D(i-1,i)|-J)/16 + + Whenever a reception report is issued, the current value of J is + sampled. + + The jitter calculation is prescribed here to allow profile- + independent monitors to make valid interpretations of reports coming + from different implementations. This algorithm is the optimal first- + order estimator and the gain parameter 1/16 gives a good noise + reduction ratio while maintaining a reasonable rate of convergence + [11]. A sample implementation is shown in Appendix A.8. + + last SR timestamp (LSR): 32 bits + The middle 32 bits out of 64 in the NTP timestamp (as explained + in Section 4) received as part of the most recent RTCP sender + report (SR) packet from source SSRC_n. If no SR has been + received yet, the field is set to zero. + + delay since last SR (DLSR): 32 bits + The delay, expressed in units of 1/65536 seconds, between + receiving the last SR packet from source SSRC_n and sending this + reception report block. If no SR packet has been received yet + from SSRC_n, the DLSR field is set to zero. + + Let SSRC_r denote the receiver issuing this receiver report. Source + SSRC_n can compute the round propagation delay to SSRC_r by recording + the time A when this reception report block is received. It + calculates the total round-trip time A-LSR using the last SR + timestamp (LSR) field, and then subtracting this field to leave the + round-trip propagation delay as (A- LSR - DLSR). This is illustrated + in Fig. 2. + + This may be used as an approximate measure of distance to cluster + receivers, although some links have very asymmetric delays. + + + + + + +Schulzrinne, et al Standards Track [Page 27] + +RFC 1889 RTP January 1996 + + +6.3.2 RR: Receiver report RTCP packet + + [10 Nov 1995 11:33:25.125] [10 Nov 1995 11:33:36.5] + n SR(n) A=b710:8000 (46864.500 s) + ----------------------------------------------------------------> + v ^ + ntp_sec =0xb44db705 v ^ dlsr=0x0005.4000 ( 5.250s) + ntp_frac=0x20000000 v ^ lsr =0xb705:2000 (46853.125s) + (3024992016.125 s) v ^ + r v ^ RR(n) + ----------------------------------------------------------------> + |<-DLSR->| + (5.250 s) + + A 0xb710:8000 (46864.500 s) + DLSR -0x0005:4000 ( 5.250 s) + LSR -0xb705:2000 (46853.125 s) + ------------------------------- + delay 0x 6:2000 ( 6.125 s) + + Figure 2: Example for round-trip time computation + + 0 1 2 3 + 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 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +|V=2|P| RC | PT=RR=201 | length | header ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| SSRC of packet sender | ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| SSRC_1 (SSRC of first source) | report ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block +| fraction lost | cumulative number of packets lost | 1 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| extended highest sequence number received | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| interarrival jitter | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| last SR (LSR) | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| delay since last SR (DLSR) | ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| SSRC_2 (SSRC of second source) | report ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block +: ... : 2 ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| profile-specific extensions | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + +Schulzrinne, et al Standards Track [Page 28] + +RFC 1889 RTP January 1996 + + + The format of the receiver report (RR) packet is the same as that of + the SR packet except that the packet type field contains the constant + 201 and the five words of sender information are omitted (these are + the NTP and RTP timestamps and sender's packet and octet counts). The + remaining fields have the same meaning as for the SR packet. + + An empty RR packet (RC = 0) is put at the head of a compound RTCP + packet when there is no data transmission or reception to report. + +6.3.3 Extending the sender and receiver reports + + A profile should define profile- or application-specific extensions + to the sender report and receiver if there is additional information + that should be reported regularly about the sender or receivers. This + method should be used in preference to defining another RTCP packet + type because it requires less overhead: + + o fewer octets in the packet (no RTCP header or SSRC field); + + o simpler and faster parsing because applications running under + that profile would be programmed to always expect the extension + fields in the directly accessible location after the reception + reports. + + If additional sender information is required, it should be included + first in the extension for sender reports, but would not be present + in receiver reports. If information about receivers is to be + included, that data may be structured as an array of blocks parallel + to the existing array of reception report blocks; that is, the number + of blocks would be indicated by the RC field. + +6.3.4 Analyzing sender and receiver reports + + It is expected that reception quality feedback will be useful not + only for the sender but also for other receivers and third-party + monitors. The sender may modify its transmissions based on the + feedback; receivers can determine whether problems are local, + regional or global; network managers may use profile-independent + monitors that receive only the RTCP packets and not the corresponding + RTP data packets to evaluate the performance of their networks for + multicast distribution. + + Cumulative counts are used in both the sender information and + receiver report blocks so that differences may be calculated between + any two reports to make measurements over both short and long time + periods, and to provide resilience against the loss of a report. The + difference between the last two reports received can be used to + estimate the recent quality of the distribution. The NTP timestamp is + + + +Schulzrinne, et al Standards Track [Page 29] + +RFC 1889 RTP January 1996 + + + included so that rates may be calculated from these differences over + the interval between two reports. Since that timestamp is independent + of the clock rate for the data encoding, it is possible to implement + encoding- and profile-independent quality monitors. + + An example calculation is the packet loss rate over the interval + between two reception reports. The difference in the cumulative + number of packets lost gives the number lost during that interval. + The difference in the extended last sequence numbers received gives + the number of packets expected during the interval. The ratio of + these two is the packet loss fraction over the interval. This ratio + should equal the fraction lost field if the two reports are + consecutive, but otherwise not. The loss rate per second can be + obtained by dividing the loss fraction by the difference in NTP + timestamps, expressed in seconds. The number of packets received is + the number of packets expected minus the number lost. The number of + packets expected may also be used to judge the statistical validity + of any loss estimates. For example, 1 out of 5 packets lost has a + lower significance than 200 out of 1000. + + From the sender information, a third-party monitor can calculate the + average payload data rate and the average packet rate over an + interval without receiving the data. Taking the ratio of the two + gives the average payload size. If it can be assumed that packet loss + is independent of packet size, then the number of packets received by + a particular receiver times the average payload size (or the + corresponding packet size) gives the apparent throughput available to + that receiver. + + In addition to the cumulative counts which allow long-term packet + loss measurements using differences between reports, the fraction + lost field provides a short-term measurement from a single report. + This becomes more important as the size of a session scales up enough + that reception state information might not be kept for all receivers + or the interval between reports becomes long enough that only one + report might have been received from a particular receiver. + + The interarrival jitter field provides a second short-term measure of + network congestion. Packet loss tracks persistent congestion while + the jitter measure tracks transient congestion. The jitter measure + may indicate congestion before it leads to packet loss. Since the + interarrival jitter field is only a snapshot of the jitter at the + time of a report, it may be necessary to analyze a number of reports + from one receiver over time or from multiple receivers, e.g., within + a single network. + + + + + + +Schulzrinne, et al Standards Track [Page 30] + +RFC 1889 RTP January 1996 + + +6.4 SDES: Source description RTCP packet + + 0 1 2 3 + 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 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +|V=2|P| SC | PT=SDES=202 | length | header ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| SSRC/CSRC_1 | chunk ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 +| SDES items | +| ... | ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +| SSRC/CSRC_2 | chunk ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2 +| SDES items | +| ... | ++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + + The SDES packet is a three-level structure composed of a header and + zero or more chunks, each of of which is composed of items describing + the source identified in that chunk. The items are described + individually in subsequent sections. + + version (V), padding (P), length: + As described for the SR packet (see Section 6.3.1). + + packet type (PT): 8 bits + Contains the constant 202 to identify this as an RTCP SDES + packet. + + source count (SC): 5 bits + The number of SSRC/CSRC chunks contained in this SDES packet. A + value of zero is valid but useless. + + Each chunk consists of an SSRC/CSRC identifier followed by a list of + zero or more items, which carry information about the SSRC/CSRC. Each + chunk starts on a 32-bit boundary. Each item consists of an 8-bit + type field, an 8-bit octet count describing the length of the text + (thus, not including this two-octet header), and the text itself. + Note that the text can be no longer than 255 octets, but this is + consistent with the need to limit RTCP bandwidth consumption. + + The text is encoded according to the UTF-2 encoding specified in + Annex F of ISO standard 10646 [12,13]. This encoding is also known as + UTF-8 or UTF-FSS. It is described in "File System Safe UCS + Transformation Format (FSS_UTF)", X/Open Preliminary Specification, + Document Number P316 and Unicode Technical Report #4. US-ASCII is a + subset of this encoding and requires no additional encoding. The + + + +Schulzrinne, et al Standards Track [Page 31] + +RFC 1889 RTP January 1996 + + + presence of multi-octet encodings is indicated by setting the most + significant bit of a character to a value of one. + + Items are contiguous, i.e., items are not individually padded to a + 32-bit boundary. Text is not null terminated because some multi-octet + encodings include null octets. The list of items in each chunk is + terminated by one or more null octets, the first of which is + interpreted as an item type of zero to denote the end of the list, + and the remainder as needed to pad until the next 32-bit boundary. A + chunk with zero items (four null octets) is valid but useless. + + End systems send one SDES packet containing their own source + identifier (the same as the SSRC in the fixed RTP header). A mixer + sends one SDES packet containing a chunk for each contributing source + from which it is receiving SDES information, or multiple complete + SDES packets in the format above if there are more than 31 such + sources (see Section 7). + + The SDES items currently defined are described in the next sections. + Only the CNAME item is mandatory. Some items shown here may be useful + only for particular profiles, but the item types are all assigned + from one common space to promote shared use and to simplify profile- + independent applications. Additional items may be defined in a + profile by registering the type numbers with IANA. + +6.4.1 CNAME: Canonical end-point identifier SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | CNAME=1 | length | user and domain name ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The CNAME identifier has the following properties: + + o Because the randomly allocated SSRC identifier may change if a + conflict is discovered or if a program is restarted, the CNAME + item is required to provide the binding from the SSRC + identifier to an identifier for the source that remains + constant. + + o Like the SSRC identifier, the CNAME identifier should also be + unique among all participants within one RTP session. + + o To provide a binding across multiple media tools used by one + participant in a set of related RTP sessions, the CNAME should + be fixed for that participant. + + + + +Schulzrinne, et al Standards Track [Page 32] + +RFC 1889 RTP January 1996 + + + o To facilitate third-party monitoring, the CNAME should be + suitable for either a program or a person to locate the source. + + Therefore, the CNAME should be derived algorithmically and not + entered manually, when possible. To meet these requirements, the + following format should be used unless a profile specifies an + alternate syntax or semantics. The CNAME item should have the format + "user@host", or "host" if a user name is not available as on single- + user systems. For both formats, "host" is either the fully qualified + domain name of the host from which the real-time data originates, + formatted according to the rules specified in RFC 1034 [14], RFC 1035 + [15] and Section 2.1 of RFC 1123 [16]; or the standard ASCII + representation of the host's numeric address on the interface used + for the RTP communication. For example, the standard ASCII + representation of an IP Version 4 address is "dotted decimal", also + known as dotted quad. Other address types are expected to have ASCII + representations that are mutually unique. The fully qualified domain + name is more convenient for a human observer and may avoid the need + to send a NAME item in addition, but it may be difficult or + impossible to obtain reliably in some operating environments. + Applications that may be run in such environments should use the + ASCII representation of the address instead. + + Examples are "doe@sleepy.megacorp.com" or "doe@192.0.2.89" for a + multi-user system. On a system with no user name, examples would be + "sleepy.megacorp.com" or "192.0.2.89". + + The user name should be in a form that a program such as "finger" or + "talk" could use, i.e., it typically is the login name rather than + the personal name. The host name is not necessarily identical to the + one in the participant's electronic mail address. + + This syntax will not provide unique identifiers for each source if an + application permits a user to generate multiple sources from one + host. Such an application would have to rely on the SSRC to further + identify the source, or the profile for that application would have + to specify additional syntax for the CNAME identifier. + + If each application creates its CNAME independently, the resulting + CNAMEs may not be identical as would be required to provide a binding + across multiple media tools belonging to one participant in a set of + related RTP sessions. If cross-media binding is required, it may be + necessary for the CNAME of each tool to be externally configured with + the same value by a coordination tool. + + Application writers should be aware that private network address + assignments such as the Net-10 assignment proposed in RFC 1597 [17] + may create network addresses that are not globally unique. This would + + + +Schulzrinne, et al Standards Track [Page 33] + +RFC 1889 RTP January 1996 + + + lead to non-unique CNAMEs if hosts with private addresses and no + direct IP connectivity to the public Internet have their RTP packets + forwarded to the public Internet through an RTP-level translator. + (See also RFC 1627 [18].) To handle this case, applications may + provide a means to configure a unique CNAME, but the burden is on the + translator to translate CNAMEs from private addresses to public + addresses if necessary to keep private addresses from being exposed. + +6.4.2 NAME: User name SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | NAME=2 | length | common name of source ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + This is the real name used to describe the source, e.g., "John Doe, + Bit Recycler, Megacorp". It may be in any form desired by the user. + For applications such as conferencing, this form of name may be the + most desirable for display in participant lists, and therefore might + be sent most frequently of those items other than CNAME. Profiles may + establish such priorities. The NAME value is expected to remain + constant at least for the duration of a session. It should not be + relied upon to be unique among all participants in the session. + +6.4.3 EMAIL: Electronic mail address SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | EMAIL=3 | length | email address of source ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The email address is formatted according to RFC 822 [19], for + example, "John.Doe@megacorp.com". The EMAIL value is expected to + remain constant for the duration of a session. + +6.4.4 PHONE: Phone number SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PHONE=4 | length | phone number of source ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The phone number should be formatted with the plus sign replacing the + international access code. For example, "+1 908 555 1212" for a + number in the United States. + + + +Schulzrinne, et al Standards Track [Page 34] + +RFC 1889 RTP January 1996 + + +6.4.5 LOC: Geographic user location SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LOC=5 | length | geographic location of site ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Depending on the application, different degrees of detail are + appropriate for this item. For conference applications, a string like + "Murray Hill, New Jersey" may be sufficient, while, for an active + badge system, strings like "Room 2A244, AT&T BL MH" might be + appropriate. The degree of detail is left to the implementation + and/or user, but format and content may be prescribed by a profile. + The LOC value is expected to remain constant for the duration of a + session, except for mobile hosts. + +6.4.6 TOOL: Application or tool name SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TOOL=6 | length | name/version of source appl. ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + A string giving the name and possibly version of the application + generating the stream, e.g., "videotool 1.2". This information may be + useful for debugging purposes and is similar to the Mailer or Mail- + System-Version SMTP headers. The TOOL value is expected to remain + constant for the duration of the session. + +6.4.7 NOTE: Notice/status SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | NOTE=7 | length | note about the source ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The following semantics are suggested for this item, but these or + other semantics may be explicitly defined by a profile. The NOTE item + is intended for transient messages describing the current state of + the source, e.g., "on the phone, can't talk". Or, during a seminar, + this item might be used to convey the title of the talk. It should be + used only to carry exceptional information and should not be included + routinely by all participants because this would slow down the rate + at which reception reports and CNAME are sent, thus impairing the + performance of the protocol. In particular, it should not be included + + + +Schulzrinne, et al Standards Track [Page 35] + +RFC 1889 RTP January 1996 + + + as an item in a user's configuration file nor automatically generated + as in a quote-of-the-day. + + Since the NOTE item may be important to display while it is active, + the rate at which other non-CNAME items such as NAME are transmitted + might be reduced so that the NOTE item can take that part of the RTCP + bandwidth. When the transient message becomes inactive, the NOTE item + should continue to be transmitted a few times at the same repetition + rate but with a string of length zero to signal the receivers. + However, receivers should also consider the NOTE item inactive if it + is not received for a small multiple of the repetition rate, or + perhaps 20-30 RTCP intervals. + +6.4.8 PRIV: Private extensions SDES item + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PRIV=8 | length | prefix length | prefix string... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... | value string ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + This item is used to define experimental or application-specific SDES + extensions. The item contains a prefix consisting of a length-string + pair, followed by the value string filling the remainder of the item + and carrying the desired information. The prefix length field is 8 + bits long. The prefix string is a name chosen by the person defining + the PRIV item to be unique with respect to other PRIV items this + application might receive. The application creator might choose to + use the application name plus an additional subtype identification if + needed. Alternatively, it is recommended that others choose a name + based on the entity they represent, then coordinate the use of the + name within that entity. + + Note that the prefix consumes some space within the item's total + length of 255 octets, so the prefix should be kept as short as + possible. This facility and the constrained RTCP bandwidth should not + be overloaded; it is not intended to satisfy all the control + communication requirements of all applications. + + SDES PRIV prefixes will not be registered by IANA. If some form of + the PRIV item proves to be of general utility, it should instead be + assigned a regular SDES item type registered with IANA so that no + prefix is required. This simplifies use and increases transmission + efficiency. + + + + + +Schulzrinne, et al Standards Track [Page 36] + +RFC 1889 RTP January 1996 + + +6.5 BYE: Goodbye RTCP packet + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |V=2|P| SC | PT=BYE=203 | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | SSRC/CSRC | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + : ... : + +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + | length | reason for leaving ... (opt) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The BYE packet indicates that one or more sources are no longer + active. + + version (V), padding (P), length: + As described for the SR packet (see Section 6.3.1). + + packet type (PT): 8 bits + Contains the constant 203 to identify this as an RTCP BYE + packet. + + source count (SC): 5 bits + The number of SSRC/CSRC identifiers included in this BYE packet. + A count value of zero is valid, but useless. + + If a BYE packet is received by a mixer, the mixer forwards the BYE + packet with the SSRC/CSRC identifier(s) unchanged. If a mixer shuts + down, it should send a BYE packet listing all contributing sources it + handles, as well as its own SSRC identifier. Optionally, the BYE + packet may include an 8-bit octet count followed by that many octets + of text indicating the reason for leaving, e.g., "camera malfunction" + or "RTP loop detected". The string has the same encoding as that + described for SDES. If the string fills the packet to the next 32-bit + boundary, the string is not null terminated. If not, the BYE packet + is padded with null octets. + + + + + + + + + + + + + +Schulzrinne, et al Standards Track [Page 37] + +RFC 1889 RTP January 1996 + + +6.6 APP: Application-defined RTCP packet + + 0 1 2 3 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |V=2|P| subtype | PT=APP=204 | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | SSRC/CSRC | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | name (ASCII) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | application-dependent data ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The APP packet is intended for experimental use as new applications + and new features are developed, without requiring packet type value + registration. APP packets with unrecognized names should be ignored. + After testing and if wider use is justified, it is recommended that + each APP packet be redefined without the subtype and name fields and + registered with the Internet Assigned Numbers Authority using an RTCP + packet type. + + version (V), padding (P), length: + As described for the SR packet (see Section 6.3.1). + + subtype: 5 bits + May be used as a subtype to allow a set of APP packets to be + defined under one unique name, or for any application-dependent + data. + + packet type (PT): 8 bits + Contains the constant 204 to identify this as an RTCP APP + packet. + + name: 4 octets + A name chosen by the person defining the set of APP packets to + be unique with respect to other APP packets this application + might receive. The application creator might choose to use the + application name, and then coordinate the allocation of subtype + values to others who want to define new packet types for the + application. Alternatively, it is recommended that others + choose a name based on the entity they represent, then + coordinate the use of the name within that entity. The name is + interpreted as a sequence of four ASCII characters, with + uppercase and lowercase characters treated as distinct. + + + + + + +Schulzrinne, et al Standards Track [Page 38] + +RFC 1889 RTP January 1996 + + + application-dependent data: variable length + Application-dependent data may or may not appear in an APP + packet. It is interpreted by the application and not RTP itself. + It must be a multiple of 32 bits long. + +7. RTP Translators and Mixers + + In addition to end systems, RTP supports the notion of "translators" + and "mixers", which could be considered as "intermediate systems" at + the RTP level. Although this support adds some complexity to the + protocol, the need for these functions has been clearly established + by experiments with multicast audio and video applications in the + Internet. Example uses of translators and mixers given in Section 2.3 + stem from the presence of firewalls and low bandwidth connections, + both of which are likely to remain. + +7.1 General Description + + An RTP translator/mixer connects two or more transport-level + "clouds". Typically, each cloud is defined by a common network and + transport protocol (e.g., IP/UDP), multicast address or pair of + unicast addresses, and transport level destination port. (Network- + level protocol translators, such as IP version 4 to IP version 6, may + be present within a cloud invisibly to RTP.) One system may serve as + a translator or mixer for a number of RTP sessions, but each is + considered a logically separate entity. + + In order to avoid creating a loop when a translator or mixer is + installed, the following rules must be observed: + + o Each of the clouds connected by translators and mixers + participating in one RTP session either must be distinct from + all the others in at least one of these parameters (protocol, + address, port), or must be isolated at the network level from + the others. + + o A derivative of the first rule is that there must not be + multiple translators or mixers connected in parallel unless by + some arrangement they partition the set of sources to be + forwarded. + + Similarly, all RTP end systems that can communicate through one or + more RTP translators or mixers share the same SSRC space, that is, + the SSRC identifiers must be unique among all these end systems. + Section 8.2 describes the collision resolution algorithm by which + SSRC identifiers are kept unique and loops are detected. + + + + + +Schulzrinne, et al Standards Track [Page 39] + +RFC 1889 RTP January 1996 + + + There may be many varieties of translators and mixers designed for + different purposes and applications. Some examples are to add or + remove encryption, change the encoding of the data or the underlying + protocols, or replicate between a multicast address and one or more + unicast addresses. The distinction between translators and mixers is + that a translator passes through the data streams from different + sources separately, whereas a mixer combines them to form one new + stream: + + Translator: Forwards RTP packets with their SSRC identifier intact; + this makes it possible for receivers to identify individual + sources even though packets from all the sources pass through + the same translator and carry the translator's network source + address. Some kinds of translators will pass through the data + untouched, but others may change the encoding of the data and + thus the RTP data payload type and timestamp. If multiple data + packets are re-encoded into one, or vice versa, a translator + must assign new sequence numbers to the outgoing packets. Losses + in the incoming packet stream may induce corresponding gaps in + the outgoing sequence numbers. Receivers cannot detect the + presence of a translator unless they know by some other means + what payload type or transport address was used by the original + source. + + Mixer: Receives streams of RTP data packets from one or more sources, + possibly changes the data format, combines the streams in some + manner and then forwards the combined stream. Since the timing + among multiple input sources will not generally be synchronized, + the mixer will make timing adjustments among the streams and + generate its own timing for the combined stream, so it is the + synchronization source. Thus, all data packets forwarded by a + mixer will be marked with the mixer's own SSRC identifier. In + order to preserve the identity of the original sources + contributing to the mixed packet, the mixer should insert their + SSRC identifiers into the CSRC identifier list following the + fixed RTP header of the packet. A mixer that is also itself a + contributing source for some packet should explicitly include + its own SSRC identifier in the CSRC list for that packet. + + For some applications, it may be acceptable for a mixer not to + identify sources in the CSRC list. However, this introduces the + danger that loops involving those sources could not be detected. + + The advantage of a mixer over a translator for applications like + audio is that the output bandwidth is limited to that of one source + even when multiple sources are active on the input side. This may be + important for low-bandwidth links. The disadvantage is that receivers + on the output side don't have any control over which sources are + + + +Schulzrinne, et al Standards Track [Page 40] + +RFC 1889 RTP January 1996 + + + passed through or muted, unless some mechanism is implemented for + remote control of the mixer. The regeneration of synchronization + information by mixers also means that receivers can't do inter-media + synchronization of the original streams. A multi-media mixer could do + it. + + + [E1] [E6] + | | + E1:17 | E6:15 | + | | E6:15 + V M1:48 (1,17) M1:48 (1,17) V M1:48 (1,17) + (M1)-------------><T1>-----------------><T2>-------------->[E7] + ^ ^ E4:47 ^ E4:47 + E2:1 | E4:47 | | M3:89 (64,45) + | | | + [E2] [E4] M3:89 (64,45) | + | legend: + [E3] --------->(M2)----------->(M3)------------| [End system] + E3:64 M2:12 (64) ^ (Mixer) + | E5:45 <Translator> + | + [E5] source: SSRC (CSRCs) + -------------------> + + Figure 3: Sample RTP network with end systems, mixers and translators + + A collection of mixers and translators is shown in Figure 3 to + illustrate their effect on SSRC and CSRC identifiers. In the figure, + end systems are shown as rectangles (named E), translators as + triangles (named T) and mixers as ovals (named M). The notation "M1: + 48(1,17)" designates a packet originating a mixer M1, identified with + M1's (random) SSRC value of 48 and two CSRC identifiers, 1 and 17, + copied from the SSRC identifiers of packets from E1 and E2. + +7.2 RTCP Processing in Translators + + In addition to forwarding data packets, perhaps modified, translators + and mixers must also process RTCP packets. In many cases, they will + take apart the compound RTCP packets received from end systems to + aggregate SDES information and to modify the SR or RR packets. + Retransmission of this information may be triggered by the packet + arrival or by the RTCP interval timer of the translator or mixer + itself. + + A translator that does not modify the data packets, for example one + that just replicates between a multicast address and a unicast + address, may simply forward RTCP packets unmodified as well. A + + + +Schulzrinne, et al Standards Track [Page 41] + +RFC 1889 RTP January 1996 + + + translator that transforms the payload in some way must make + corresponding transformations in the SR and RR information so that it + still reflects the characteristics of the data and the reception + quality. These translators must not simply forward RTCP packets. In + general, a translator should not aggregate SR and RR packets from + different sources into one packet since that would reduce the + accuracy of the propagation delay measurements based on the LSR and + DLSR fields. + + SR sender information: A translator does not generate its own sender + information, but forwards the SR packets received from one cloud + to the others. The SSRC is left intact but the sender + information must be modified if required by the translation. If + a translator changes the data encoding, it must change the + "sender's byte count" field. If it also combines several data + packets into one output packet, it must change the "sender's + packet count" field. If it changes the timestamp frequency, it + must change the "RTP timestamp" field in the SR packet. + + SR/RR reception report blocks: A translator forwards reception + reports received from one cloud to the others. Note that these + flow in the direction opposite to the data. The SSRC is left + intact. If a translator combines several data packets into one + output packet, and therefore changes the sequence numbers, it + must make the inverse manipulation for the packet loss fields + and the "extended last sequence number" field. This may be + complex. In the extreme case, there may be no meaningful way to + translate the reception reports, so the translator may pass on + no reception report at all or a synthetic report based on its + own reception. The general rule is to do what makes sense for a + particular translation. + + A translator does not require an SSRC identifier of its own, but may + choose to allocate one for the purpose of sending reports about what + it has received. These would be sent to all the connected clouds, + each corresponding to the translation of the data stream as sent to + that cloud, since reception reports are normally multicast to all + participants. + + SDES: Translators typically forward without change the SDES + information they receive from one cloud to the others, but may, + for example, decide to filter non-CNAME SDES information if + bandwidth is limited. The CNAMEs must be forwarded to allow SSRC + identifier collision detection to work. A translator that + generates its own RR packets must send SDES CNAME information + about itself to the same clouds that it sends those RR packets. + + + + + +Schulzrinne, et al Standards Track [Page 42] + +RFC 1889 RTP January 1996 + + + BYE: Translators forward BYE packets unchanged. Translators with + their own SSRC should generate BYE packets with that SSRC + identifier if they are about to cease forwarding packets. + + APP: Translators forward APP packets unchanged. + +7.3 RTCP Processing in Mixers + + Since a mixer generates a new data stream of its own, it does not + pass through SR or RR packets at all and instead generates new + information for both sides. + + SR sender information: A mixer does not pass through sender + information from the sources it mixes because the + characteristics of the source streams are lost in the mix. As a + synchronization source, the mixer generates its own SR packets + with sender information about the mixed data stream and sends + them in the same direction as the mixed stream. + + SR/RR reception report blocks: A mixer generates its own reception + reports for sources in each cloud and sends them out only to the + same cloud. It does not send these reception reports to the + other clouds and does not forward reception reports from one + cloud to the others because the sources would not be SSRCs there + (only CSRCs). + + SDES: Mixers typically forward without change the SDES information + they receive from one cloud to the others, but may, for example, + decide to filter non-CNAME SDES information if bandwidth is + limited. The CNAMEs must be forwarded to allow SSRC identifier + collision detection to work. (An identifier in a CSRC list + generated by a mixer might collide with an SSRC identifier + generated by an end system.) A mixer must send SDES CNAME + information about itself to the same clouds that it sends SR or + RR packets. + + Since mixers do not forward SR or RR packets, they will typically be + extracting SDES packets from a compound RTCP packet. To minimize + overhead, chunks from the SDES packets may be aggregated into a + single SDES packet which is then stacked on an SR or RR packet + originating from the mixer. The RTCP packet rate may be different on + each side of the mixer. + + A mixer that does not insert CSRC identifiers may also refrain from + forwarding SDES CNAMEs. In this case, the SSRC identifier spaces in + the two clouds are independent. As mentioned earlier, this mode of + operation creates a danger that loops can't be detected. + + + + +Schulzrinne, et al Standards Track [Page 43] + +RFC 1889 RTP January 1996 + + + BYE: Mixers need to forward BYE packets. They should generate BYE + packets with their own SSRC identifiers if they are about to + cease forwarding packets. + + APP: The treatment of APP packets by mixers is application-specific. + +7.4 Cascaded Mixers + + An RTP session may involve a collection of mixers and translators as + shown in Figure 3. If two mixers are cascaded, such as M2 and M3 in + the figure, packets received by a mixer may already have been mixed + and may include a CSRC list with multiple identifiers. The second + mixer should build the CSRC list for the outgoing packet using the + CSRC identifiers from already-mixed input packets and the SSRC + identifiers from unmixed input packets. This is shown in the output + arc from mixer M3 labeled M3:89(64,45) in the figure. As in the case + of mixers that are not cascaded, if the resulting CSRC list has more + than 15 identifiers, the remainder cannot be included. + +8. SSRC Identifier Allocation and Use + + The SSRC identifier carried in the RTP header and in various fields + of RTCP packets is a random 32-bit number that is required to be + globally unique within an RTP session. It is crucial that the number + be chosen with care in order that participants on the same network or + starting at the same time are not likely to choose the same number. + + It is not sufficient to use the local network address (such as an + IPv4 address) for the identifier because the address may not be + unique. Since RTP translators and mixers enable interoperation among + multiple networks with different address spaces, the allocation + patterns for addresses within two spaces might result in a much + higher rate of collision than would occur with random allocation. + + Multiple sources running on one host would also conflict. + + It is also not sufficient to obtain an SSRC identifier simply by + calling random() without carefully initializing the state. An example + of how to generate a random identifier is presented in Appendix A.6. + +8.1 Probability of Collision + + Since the identifiers are chosen randomly, it is possible that two or + more sources will choose the same number. Collision occurs with the + highest probability when all sources are started simultaneously, for + example when triggered automatically by some session management + event. If N is the number of sources and L the length of the + identifier (here, 32 bits), the probability that two sources + + + +Schulzrinne, et al Standards Track [Page 44] + +RFC 1889 RTP January 1996 + + + independently pick the same value can be approximated for large N + [20] as 1 - exp(-N**2 / 2**(L+1)). For N=1000, the probability is + roughly 10**-4. + + The typical collision probability is much lower than the worst-case + above. When one new source joins an RTP session in which all the + other sources already have unique identifiers, the probability of + collision is just the fraction of numbers used out of the space. + Again, if N is the number of sources and L the length of the + identifier, the probability of collision is N / 2**L. For N=1000, the + probability is roughly 2*10**-7. + + The probability of collision is further reduced by the opportunity + for a new source to receive packets from other participants before + sending its first packet (either data or control). If the new source + keeps track of the other participants (by SSRC identifier), then + before transmitting its first packet the new source can verify that + its identifier does not conflict with any that have been received, or + else choose again. + +8.2 Collision Resolution and Loop Detection + + Although the probability of SSRC identifier collision is low, all RTP + implementations must be prepared to detect collisions and take the + appropriate actions to resolve them. If a source discovers at any + time that another source is using the same SSRC identifier as its + own, it must send an RTCP BYE packet for the old identifier and + choose another random one. If a receiver discovers that two other + sources are colliding, it may keep the packets from one and discard + the packets from the other when this can be detected by different + source transport addresses or CNAMEs. The two sources are expected to + resolve the collision so that the situation doesn't last. + + Because the random identifiers are kept globally unique for each RTP + session, they can also be used to detect loops that may be introduced + by mixers or translators. A loop causes duplication of data and + control information, either unmodified or possibly mixed, as in the + following examples: + + o A translator may incorrectly forward a packet to the same + multicast group from which it has received the packet, either + directly or through a chain of translators. In that case, the + same packet appears several times, originating from different + network sources. + + o Two translators incorrectly set up in parallel, i.e., with the + same multicast groups on both sides, would both forward packets + from one multicast group to the other. Unidirectional + + + +Schulzrinne, et al Standards Track [Page 45] + +RFC 1889 RTP January 1996 + + + translators would produce two copies; bidirectional translators + would form a loop. + + o A mixer can close a loop by sending to the same transport + destination upon which it receives packets, either directly or + through another mixer or translator. In this case a source + might show up both as an SSRC on a data packet and a CSRC in a + mixed data packet. + + A source may discover that its own packets are being looped, or that + packets from another source are being looped (a third-party loop). + + Both loops and collisions in the random selection of a source + identifier result in packets arriving with the same SSRC identifier + but a different source transport address, which may be that of the + end system originating the packet or an intermediate system. + Consequently, if a source changes its source transport address, it + must also choose a new SSRC identifier to avoid being interpreted as + a looped source. Loops or collisions occurring on the far side of a + translator or mixer cannot be detected using the source transport + address if all copies of the packets go through the translator or + mixer, however collisions may still be detected when chunks from two + RTCP SDES packets contain the same SSRC identifier but different + CNAMEs. + + To detect and resolve these conflicts, an RTP implementation must + include an algorithm similar to the one described below. It ignores + packets from a new source or loop that collide with an established + source. It resolves collisions with the participant's own SSRC + identifier by sending an RTCP BYE for the old identifier and choosing + a new one. However, when the collision was induced by a loop of the + participant's own packets, the algorithm will choose a new identifier + only once and thereafter ignore packets from the looping source + transport address. This is required to avoid a flood of BYE packets. + + This algorithm depends upon the source transport address being the + same for both RTP and RTCP packets from a source. The algorithm would + require modifications to support applications that don't meet this + constraint. + + This algorithm requires keeping a table indexed by source identifiers + and containing the source transport address from which the identifier + was (first) received, along with other state for that source. Each + SSRC or CSRC identifier received in a data or control packet is + looked up in this table in order to process that data or control + information. For control packets, each element with its own SSRC, + for example an SDES chunk, requires a separate lookup. (The SSRC in a + reception report block is an exception.) If the SSRC or CSRC is not + + + +Schulzrinne, et al Standards Track [Page 46] + +RFC 1889 RTP January 1996 + + + found, a new entry is created. These table entries are removed when + an RTCP BYE packet is received with the corresponding SSRC, or after + no packets have arrived for a relatively long time (see Section + 6.2.1). + + In order to track loops of the participant's own data packets, it is + also necessary to keep a separate list of source transport addresses + (not identifiers) that have been found to be conflicting. Note that + this should be a short list, usually empty. Each element in this list + stores the source address plus the time when the most recent + conflicting packet was received. An element may be removed from the + list when no conflicting packet has arrived from that source for a + time on the order of 10 RTCP report intervals (see Section 6.2). + + For the algorithm as shown, it is assumed that the participant's own + source identifier and state are included in the source identifier + table. The algorithm could be restructured to first make a separate + comparison against the participant's own source identifier. + + IF the SSRC or CSRC identifier is not found in the source + identifier table: + THEN create a new entry storing the source transport address + and the SSRC or CSRC along with other state. + CONTINUE with normal processing. + + (identifier is found in the table) + + IF the source transport address from the packet matches + the one saved in the table entry for this identifier: + THEN CONTINUE with normal processing. + + (an identifier collision or a loop is indicated) + + IF the source identifier is not the participant's own: + THEN IF the source identifier is from an RTCP SDES chunk + containing a CNAME item that differs from the CNAME + in the table entry: + THEN (optionally) count a third-party collision. + ELSE (optionally) count a third-party loop. + ABORT processing of data packet or control element. + + (a collision or loop of the participant's own data) + + IF the source transport address is found in the list of + conflicting addresses: + THEN IF the source identifier is not from an RTCP SDES chunk + containing a CNAME item OR if that CNAME is the + participant's own: + + + +Schulzrinne, et al Standards Track [Page 47] + +RFC 1889 RTP January 1996 + + + THEN (optionally) count occurrence of own traffic looped. + mark current time in conflicting address list entry. + ABORT processing of data packet or control element. + log occurrence of a collision. + create a new entry in the conflicting address list and + mark current time. + send an RTCP BYE packet with the old SSRC identifier. + choose a new identifier. + create a new entry in the source identifier table with the + old SSRC plus the source transport address from the packet + being processed. + CONTINUE with normal processing. + + In this algorithm, packets from a newly conflicting source address + will be ignored and packets from the original source will be kept. + (If the original source was through a mixer and later the same source + is received directly, the receiver may be well advised to switch + unless other sources in the mix would be lost.) If no packets arrive + from the original source for an extended period, the table entry will + be timed out and the new source will be able to take over. This might + occur if the original source detects the collision and moves to a new + source identifier, but in the usual case an RTCP BYE packet will be + received from the original source to delete the state without having + to wait for a timeout. + + When a new SSRC identifier is chosen due to a collision, the + candidate identifier should first be looked up in the source + identifier table to see if it was already in use by some other + source. If so, another candidate should be generated and the process + repeated. + + A loop of data packets to a multicast destination can cause severe + network flooding. All mixers and translators are required to + implement a loop detection algorithm like the one here so that they + can break loops. This should limit the excess traffic to no more than + one duplicate copy of the original traffic, which may allow the + session to continue so that the cause of the loop can be found and + fixed. However, in extreme cases where a mixer or translator does not + properly break the loop and high traffic levels result, it may be + necessary for end systems to cease transmitting data or control + packets entirely. This decision may depend upon the application. An + error condition should be indicated as appropriate. Transmission + might be attempted again periodically after a long, random time (on + the order of minutes). + + + + + + + +Schulzrinne, et al Standards Track [Page 48] + +RFC 1889 RTP January 1996 + + +9. Security + + Lower layer protocols may eventually provide all the security + services that may be desired for applications of RTP, including + authentication, integrity, and confidentiality. These services have + recently been specified for IP. Since the need for a confidentiality + service is well established in the initial audio and video + applications that are expected to use RTP, a confidentiality service + is defined in the next section for use with RTP and RTCP until lower + layer services are available. The overhead on the protocol for this + service is low, so the penalty will be minimal if this service is + obsoleted by lower layer services in the future. + + Alternatively, other services, other implementations of services and + other algorithms may be defined for RTP in the future if warranted. + The selection presented here is meant to simplify implementation of + interoperable, secure applications and provide guidance to + implementors. No claim is made that the methods presented here are + appropriate for a particular security need. A profile may specify + which services and algorithms should be offered by applications, and + may provide guidance as to their appropriate use. + + Key distribution and certificates are outside the scope of this + document. + +9.1 Confidentiality + + Confidentiality means that only the intended receiver(s) can decode + the received packets; for others, the packet contains no useful + information. Confidentiality of the content is achieved by + encryption. + + When encryption of RTP or RTCP is desired, all the octets that will + be encapsulated for transmission in a single lower-layer packet are + encrypted as a unit. For RTCP, a 32-bit random number is prepended to + the unit before encryption to deter known plaintext attacks. For RTP, + no prefix is required because the sequence number and timestamp + fields are initialized with random offsets. + + For RTCP, it is allowed to split a compound RTCP packet into two + lower-layer packets, one to be encrypted and one to be sent in the + clear. For example, SDES information might be encrypted while + reception reports were sent in the clear to accommodate third-party + monitors that are not privy to the encryption key. In this example, + depicted in Fig. 4, the SDES information must be appended to an RR + packet with no reports (and the encrypted) to satisfy the requirement + that all compound RTCP packets begin with an SR or RR packet. + + + + +Schulzrinne, et al Standards Track [Page 49] + +RFC 1889 RTP January 1996 + + + UDP packet UDP packet + ------------------------------------- ------------------------- + [32-bit ][ ][ # ] [ # sender # receiver] + [random ][ RR ][SDES # CNAME, ...] [ SR # report # report ] + [integer][(empty)][ # ] [ # # ] + ------------------------------------- ------------------------- + encrypted not encrypted + + #: SSRC + + Figure 4: Encrypted and non-encrypted RTCP packets + + The presence of encryption and the use of the correct key are + confirmed by the receiver through header or payload validity checks. + Examples of such validity checks for RTP and RTCP headers are given + in Appendices A.1 and A.2. + + The default encryption algorithm is the Data Encryption Standard + (DES) algorithm in cipher block chaining (CBC) mode, as described in + Section 1.1 of RFC 1423 [21], except that padding to a multiple of 8 + octets is indicated as described for the P bit in Section 5.1. The + initialization vector is zero because random values are supplied in + the RTP header or by the random prefix for compound RTCP packets. For + details on the use of CBC initialization vectors, see [22]. + Implementations that support encryption should always support the DES + algorithm in CBC mode as the default to maximize interoperability. + This method is chosen because it has been demonstrated to be easy and + practical to use in experimental audio and video tools in operation + on the Internet. Other encryption algorithms may be specified + dynamically for a session by non-RTP means. + + As an alternative to encryption at the RTP level as described above, + profiles may define additional payload types for encrypted encodings. + Those encodings must specify how padding and other aspects of the + encryption should be handled. This method allows encrypting only the + data while leaving the headers in the clear for applications where + that is desired. It may be particularly useful for hardware devices + that will handle both decryption and decoding. + +9.2 Authentication and Message Integrity + + Authentication and message integrity are not defined in the current + specification of RTP since these services would not be directly + feasible without a key management infrastructure. It is expected that + authentication and integrity services will be provided by lower layer + protocols in the future. + + + + + +Schulzrinne, et al Standards Track [Page 50] + +RFC 1889 RTP January 1996 + + +10. RTP over Network and Transport Protocols + + This section describes issues specific to carrying RTP packets within + particular network and transport protocols. The following rules apply + unless superseded by protocol-specific definitions outside this + specification. + + RTP relies on the underlying protocol(s) to provide demultiplexing of + RTP data and RTCP control streams. For UDP and similar protocols, RTP + uses an even port number and the corresponding RTCP stream uses the + next higher (odd) port number. If an application is supplied with an + odd number for use as the RTP port, it should replace this number + with the next lower (even) number. + + RTP data packets contain no length field or other delineation, + therefore RTP relies on the underlying protocol(s) to provide a + length indication. The maximum length of RTP packets is limited only + by the underlying protocols. + + If RTP packets are to be carried in an underlying protocol that + provides the abstraction of a continuous octet stream rather than + messages (packets), an encapsulation of the RTP packets must be + defined to provide a framing mechanism. Framing is also needed if the + underlying protocol may contain padding so that the extent of the RTP + payload cannot be determined. The framing mechanism is not defined + here. + + A profile may specify a framing method to be used even when RTP is + carried in protocols that do provide framing in order to allow + carrying several RTP packets in one lower-layer protocol data unit, + such as a UDP packet. Carrying several RTP packets in one network or + transport packet reduces header overhead and may simplify + synchronization between different streams. + +11. Summary of Protocol Constants + + This section contains a summary listing of the constants defined in + this specification. + + The RTP payload type (PT) constants are defined in profiles rather + than this document. However, the octet of the RTP header which + contains the marker bit(s) and payload type must avoid the reserved + values 200 and 201 (decimal) to distinguish RTP packets from the RTCP + SR and RR packet types for the header validation procedure described + in Appendix A.1. For the standard definition of one marker bit and a + 7-bit payload type field as shown in this specification, this + restriction means that payload types 72 and 73 are reserved. + + + + +Schulzrinne, et al Standards Track [Page 51] + +RFC 1889 RTP January 1996 + + +11.1 RTCP packet types + + abbrev. name value + SR sender report 200 + RR receiver report 201 + SDES source description 202 + BYE goodbye 203 + APP application-defined 204 + + These type values were chosen in the range 200-204 for improved + header validity checking of RTCP packets compared to RTP packets or + other unrelated packets. When the RTCP packet type field is compared + to the corresponding octet of the RTP header, this range corresponds + to the marker bit being 1 (which it usually is not in data packets) + and to the high bit of the standard payload type field being 1 (since + the static payload types are typically defined in the low half). This + range was also chosen to be some distance numerically from 0 and 255 + since all-zeros and all-ones are common data patterns. + + Since all compound RTCP packets must begin with SR or RR, these codes + were chosen as an even/odd pair to allow the RTCP validity check to + test the maximum number of bits with mask and value. + + Other constants are assigned by IANA. Experimenters are encouraged to + register the numbers they need for experiments, and then unregister + those which prove to be unneeded. + +11.2 SDES types + + abbrev. name value + END end of SDES list 0 + CNAME canonical name 1 + NAME user name 2 + EMAIL user's electronic mail address 3 + PHONE user's phone number 4 + LOC geographic user location 5 + TOOL name of application or tool 6 + NOTE notice about the source 7 + PRIV private extensions 8 + + Other constants are assigned by IANA. Experimenters are encouraged to + register the numbers they need for experiments, and then unregister + those which prove to be unneeded. + + + + + + + + +Schulzrinne, et al Standards Track [Page 52] + +RFC 1889 RTP January 1996 + + +12. RTP Profiles and Payload Format Specifications + + A complete specification of RTP for a particular application will + require one or more companion documents of two types described here: + profiles, and payload format specifications. + + RTP may be used for a variety of applications with somewhat differing + requirements. The flexibility to adapt to those requirements is + provided by allowing multiple choices in the main protocol + specification, then selecting the appropriate choices or defining + extensions for a particular environment and class of applications in + a separate profile document. Typically an application will operate + under only one profile so there is no explicit indication of which + profile is in use. A profile for audio and video applications may be + found in the companion Internet-Draft draft-ietf-avt-profile for + + The second type of companion document is a payload format + specification, which defines how a particular kind of payload data, + such as H.261 encoded video, should be carried in RTP. These + documents are typically titled "RTP Payload Format for XYZ + Audio/Video Encoding". Payload formats may be useful under multiple + profiles and may therefore be defined independently of any particular + profile. The profile documents are then responsible for assigning a + default mapping of that format to a payload type value if needed. + + Within this specification, the following items have been identified + for possible definition within a profile, but this list is not meant + to be exhaustive: + + RTP data header: The octet in the RTP data header that contains the + marker bit and payload type field may be redefined by a profile + to suit different requirements, for example with more or fewer + marker bits (Section 5.3). + + Payload types: Assuming that a payload type field is included, the + profile will usually define a set of payload formats (e.g., + media encodings) and a default static mapping of those formats + to payload type values. Some of the payload formats may be + defined by reference to separate payload format specifications. + For each payload type defined, the profile must specify the RTP + timestamp clock rate to be used (Section 5.1). + + RTP data header additions: Additional fields may be appended to the + fixed RTP data header if some additional functionality is + required across the profile's class of applications independent + of payload type (Section 5.3). + + + + + +Schulzrinne, et al Standards Track [Page 53] + +RFC 1889 RTP January 1996 + + + RTP data header extensions: The contents of the first 16 bits of the + RTP data header extension structure must be defined if use of + that mechanism is to be allowed under the profile for + implementation-specific extensions (Section 5.3.1). + + RTCP packet types: New application-class-specific RTCP packet types + may be defined and registered with IANA. + + RTCP report interval: A profile should specify that the values + suggested in Section 6.2 for the constants employed in the + calculation of the RTCP report interval will be used. Those are + the RTCP fraction of session bandwidth, the minimum report + interval, and the bandwidth split between senders and receivers. + A profile may specify alternate values if they have been + demonstrated to work in a scalable manner. + + SR/RR extension: An extension section may be defined for the RTCP SR + and RR packets if there is additional information that should be + reported regularly about the sender or receivers (Section 6.3.3). + + SDES use: The profile may specify the relative priorities for RTCP + SDES items to be transmitted or excluded entirely (Section + 6.2.2); an alternate syntax or semantics for the CNAME item + (Section 6.4.1); the format of the LOC item (Section 6.4.5); the + semantics and use of the NOTE item (Section 6.4.7); or new SDES + item types to be registered with IANA. + + Security: A profile may specify which security services and + algorithms should be offered by applications, and may provide + guidance as to their appropriate use (Section 9). + + String-to-key mapping: A profile may specify how a user-provided + password or pass phrase is mapped into an encryption key. + + Underlying protocol: Use of a particular underlying network or + transport layer protocol to carry RTP packets may be required. + + Transport mapping: A mapping of RTP and RTCP to transport-level + addresses, e.g., UDP ports, other than the standard mapping + defined in Section 10 may be specified. + + Encapsulation: An encapsulation of RTP packets may be defined to + allow multiple RTP data packets to be carried in one lower-layer + packet or to provide framing over underlying protocols that do + not already do so (Section 10). + + + + + + +Schulzrinne, et al Standards Track [Page 54] + +RFC 1889 RTP January 1996 + + + It is not expected that a new profile will be required for every + application. Within one application class, it would be better to + extend an existing profile rather than make a new one in order to + facilitate interoperation among the applications since each will + typically run under only one profile. Simple extensions such as the + definition of additional payload type values or RTCP packet types may + be accomplished by registering them through the Internet Assigned + Numbers Authority and publishing their descriptions in an addendum to + the profile or in a payload format specification. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Schulzrinne, et al Standards Track [Page 55] + +RFC 1889 RTP January 1996 + + +A. Algorithms + + We provide examples of C code for aspects of RTP sender and receiver + algorithms. There may be other implementation methods that are faster + in particular operating environments or have other advantages. These + implementation notes are for informational purposes only and are + meant to clarify the RTP specification. + + The following definitions are used for all examples; for clarity and + brevity, the structure definitions are only valid for 32-bit big- + endian (most significant octet first) architectures. Bit fields are + assumed to be packed tightly in big-endian bit order, with no + additional padding. Modifications would be required to construct a + portable implementation. + + /* + * rtp.h -- RTP header file (RFC XXXX) + */ + #include <sys/types.h> + + /* + * The type definitions below are valid for 32-bit architectures and + * may have to be adjusted for 16- or 64-bit architectures. + */ + typedef unsigned char u_int8; + typedef unsigned short u_int16; + typedef unsigned int u_int32; + typedef short int16; + + /* + * Current protocol version. + */ + #define RTP_VERSION 2 + + #define RTP_SEQ_MOD (1<<16) + #define RTP_MAX_SDES 255 /* maximum text length for SDES */ + + typedef enum { + RTCP_SR = 200, + RTCP_RR = 201, + RTCP_SDES = 202, + RTCP_BYE = 203, + RTCP_APP = 204 + } rtcp_type_t; + + typedef enum { + RTCP_SDES_END = 0, + RTCP_SDES_CNAME = 1, + + + +Schulzrinne, et al Standards Track [Page 56] + +RFC 1889 RTP January 1996 + + + RTCP_SDES_NAME = 2, + RTCP_SDES_EMAIL = 3, + RTCP_SDES_PHONE = 4, + RTCP_SDES_LOC = 5, + RTCP_SDES_TOOL = 6, + RTCP_SDES_NOTE = 7, + RTCP_SDES_PRIV = 8 + } rtcp_sdes_type_t; + + /* + * RTP data header + */ + typedef struct { + unsigned int version:2; /* protocol version */ + unsigned int p:1; /* padding flag */ + unsigned int x:1; /* header extension flag */ + unsigned int cc:4; /* CSRC count */ + unsigned int m:1; /* marker bit */ + unsigned int pt:7; /* payload type */ + u_int16 seq; /* sequence number */ + u_int32 ts; /* timestamp */ + u_int32 ssrc; /* synchronization source */ + u_int32 csrc[1]; /* optional CSRC list */ + } rtp_hdr_t; + + /* + * RTCP common header word + */ + typedef struct { + unsigned int version:2; /* protocol version */ + unsigned int p:1; /* padding flag */ + unsigned int count:5; /* varies by packet type */ + unsigned int pt:8; /* RTCP packet type */ + u_int16 length; /* pkt len in words, w/o this word */ + } rtcp_common_t; + + /* + * Big-endian mask for version, padding bit and packet type pair + */ + #define RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe) + #define RTCP_VALID_VALUE ((RTP_VERSION << 14) | RTCP_SR) + + /* + * Reception report block + */ + typedef struct { + u_int32 ssrc; /* data source being reported */ + unsigned int fraction:8; /* fraction lost since last SR/RR */ + + + +Schulzrinne, et al Standards Track [Page 57] + +RFC 1889 RTP January 1996 + + + int lost:24; /* cumul. no. pkts lost (signed!) */ + u_int32 last_seq; /* extended last seq. no. received */ + u_int32 jitter; /* interarrival jitter */ + u_int32 lsr; /* last SR packet from this source */ + u_int32 dlsr; /* delay since last SR packet */ + } rtcp_rr_t; + + /* + * SDES item + */ + typedef struct { + u_int8 type; /* type of item (rtcp_sdes_type_t) */ + u_int8 length; /* length of item (in octets) */ + char data[1]; /* text, not null-terminated */ + } rtcp_sdes_item_t; + + /* + * One RTCP packet + */ + typedef struct { + rtcp_common_t common; /* common header */ + union { + /* sender report (SR) */ + struct { + u_int32 ssrc; /* sender generating this report */ + u_int32 ntp_sec; /* NTP timestamp */ + u_int32 ntp_frac; + u_int32 rtp_ts; /* RTP timestamp */ + u_int32 psent; /* packets sent */ + u_int32 osent; /* octets sent */ + rtcp_rr_t rr[1]; /* variable-length list */ + } sr; + + /* reception report (RR) */ + struct { + u_int32 ssrc; /* receiver generating this report */ + rtcp_rr_t rr[1]; /* variable-length list */ + } rr; + + /* source description (SDES) */ + struct rtcp_sdes { + u_int32 src; /* first SSRC/CSRC */ + rtcp_sdes_item_t item[1]; /* list of SDES items */ + } sdes; + + /* BYE */ + struct { + u_int32 src[1]; /* list of sources */ + + + +Schulzrinne, et al Standards Track [Page 58] + +RFC 1889 RTP January 1996 + + + /* can't express trailing text for reason */ + } bye; + } r; + } rtcp_t; + + typedef struct rtcp_sdes rtcp_sdes_t; + + /* + * Per-source state information + */ + typedef struct { + u_int16 max_seq; /* highest seq. number seen */ + u_int32 cycles; /* shifted count of seq. number cycles */ + u_int32 base_seq; /* base seq number */ + u_int32 bad_seq; /* last 'bad' seq number + 1 */ + u_int32 probation; /* sequ. packets till source is valid */ + u_int32 received; /* packets received */ + u_int32 expected_prior; /* packet expected at last interval */ + u_int32 received_prior; /* packet received at last interval */ + u_int32 transit; /* relative trans time for prev pkt */ + u_int32 jitter; /* estimated jitter */ + /* ... */ + } source; + +A.1 RTP Data Header Validity Checks + + An RTP receiver should check the validity of the RTP header on + incoming packets since they might be encrypted or might be from a + different application that happens to be misaddressed. Similarly, if + encryption is enabled, the header validity check is needed to verify + that incoming packets have been correctly decrypted, although a + failure of the header validity check (e.g., unknown payload type) may + not necessarily indicate decryption failure. + + Only weak validity checks are possible on an RTP data packet from a + source that has not been heard before: + + o RTP version field must equal 2. + + o The payload type must be known, in particular it must not be + equal to SR or RR. + + o If the P bit is set, then the last octet of the packet must + contain a valid octet count, in particular, less than the total + packet length minus the header size. + + o The X bit must be zero if the profile does not specify that + the header extension mechanism may be used. Otherwise, the + + + +Schulzrinne, et al Standards Track [Page 59] + +RFC 1889 RTP January 1996 + + + extension length field must be less than the total packet size + minus the fixed header length and padding. + + o The length of the packet must be consistent with CC and + payload type (if payloads have a known length). + + The last three checks are somewhat complex and not always possible, + leaving only the first two which total just a few bits. If the SSRC + identifier in the packet is one that has been received before, then + the packet is probably valid and checking if the sequence number is + in the expected range provides further validation. If the SSRC + identifier has not been seen before, then data packets carrying that + identifier may be considered invalid until a small number of them + arrive with consecutive sequence numbers. + + The routine update_seq shown below ensures that a source is declared + valid only after MIN_SEQUENTIAL packets have been received in + sequence. It also validates the sequence number seq of a newly + received packet and updates the sequence state for the packet's + source in the structure to which s points. + + When a new source is heard for the first time, that is, its SSRC + identifier is not in the table (see Section 8.2), and the per-source + state is allocated for it, s->probation should be set to the number + of sequential packets required before declaring a source valid + (parameter MIN_SEQUENTIAL ) and s->max_seq initialized to seq-1 s- + >probation marks the source as not yet valid so the state may be + discarded after a short timeout rather than a long one, as discussed + in Section 6.2.1. + + After a source is considered valid, the sequence number is considered + valid if it is no more than MAX_DROPOUT ahead of s->max_seq nor more + than MAX_MISORDER behind. If the new sequence number is ahead of + max_seq modulo the RTP sequence number range (16 bits), but is + smaller than max_seq , it has wrapped around and the (shifted) count + of sequence number cycles is incremented. A value of one is returned + to indicate a valid sequence number. + + Otherwise, the value zero is returned to indicate that the validation + failed, and the bad sequence number is stored. If the next packet + received carries the next higher sequence number, it is considered + the valid start of a new packet sequence presumably caused by an + extended dropout or a source restart. Since multiple complete + sequence number cycles may have been missed, the packet loss + statistics are reset. + + Typical values for the parameters are shown, based on a maximum + misordering time of 2 seconds at 50 packets/second and a maximum + + + +Schulzrinne, et al Standards Track [Page 60] + +RFC 1889 RTP January 1996 + + + dropout of 1 minute. The dropout parameter MAX_DROPOUT should be a + small fraction of the 16-bit sequence number space to give a + reasonable probability that new sequence numbers after a restart will + not fall in the acceptable range for sequence numbers from before the + restart. + + void init_seq(source *s, u_int16 seq) + { + s->base_seq = seq - 1; + s->max_seq = seq; + s->bad_seq = RTP_SEQ_MOD + 1; + s->cycles = 0; + s->received = 0; + s->received_prior = 0; + s->expected_prior = 0; + /* other initialization */ + } + + int update_seq(source *s, u_int16 seq) + { + u_int16 udelta = seq - s->max_seq; + const int MAX_DROPOUT = 3000; + const int MAX_MISORDER = 100; + const int MIN_SEQUENTIAL = 2; + + /* + * Source is not valid until MIN_SEQUENTIAL packets with + * sequential sequence numbers have been received. + */ + if (s->probation) { + /* packet is in sequence */ + if (seq == s->max_seq + 1) { + s->probation--; + s->max_seq = seq; + if (s->probation == 0) { + init_seq(s, seq); + s->received++; + return 1; + } + } else { + s->probation = MIN_SEQUENTIAL - 1; + s->max_seq = seq; + } + return 0; + } else if (udelta < MAX_DROPOUT) { + /* in order, with permissible gap */ + if (seq < s->max_seq) { + /* + + + +Schulzrinne, et al Standards Track [Page 61] + +RFC 1889 RTP January 1996 + + + * Sequence number wrapped - count another 64K cycle. + */ + s->cycles += RTP_SEQ_MOD; + } + s->max_seq = seq; + } else if (udelta <= RTP_SEQ_MOD - MAX_MISORDER) { + /* the sequence number made a very large jump */ + if (seq == s->bad_seq) { + /* + * Two sequential packets -- assume that the other side + * restarted without telling us so just re-sync + * (i.e., pretend this was the first packet). + */ + init_seq(s, seq); + } + else { + s->bad_seq = (seq + 1) & (RTP_SEQ_MOD-1); + return 0; + } + } else { + /* duplicate or reordered packet */ + } + s->received++; + return 1; + } + + The validity check can be made stronger requiring more than two + packets in sequence. The disadvantages are that a larger number of + initial packets will be discarded and that high packet loss rates + could prevent validation. However, because the RTCP header validation + is relatively strong, if an RTCP packet is received from a source + before the data packets, the count could be adjusted so that only two + packets are required in sequence. If initial data loss for a few + seconds can be tolerated, an application could choose to discard all + data packets from a source until a valid RTCP packet has been + received from that source. + + Depending on the application and encoding, algorithms may exploit + additional knowledge about the payload format for further validation. + For payload types where the timestamp increment is the same for all + packets, the timestamp values can be predicted from the previous + packet received from the same source using the sequence number + difference (assuming no change in payload type). + + A strong "fast-path" check is possible since with high probability + the first four octets in the header of a newly received RTP data + packet will be just the same as that of the previous packet from the + same SSRC except that the sequence number will have increased by one. + + + +Schulzrinne, et al Standards Track [Page 62] + +RFC 1889 RTP January 1996 + + + Similarly, a single-entry cache may be used for faster SSRC lookups + in applications where data is typically received from one source at a + time. + +A.2 RTCP Header Validity Checks + + The following checks can be applied to RTCP packets. + + o RTP version field must equal 2. + + o The payload type field of the first RTCP packet in a compound + packet must be equal to SR or RR. + + o The padding bit (P) should be zero for the first packet of a + compound RTCP packet because only the last should possibly need + padding. + + o The length fields of the individual RTCP packets must total to + the overall length of the compound RTCP packet as received. + This is a fairly strong check. + + The code fragment below performs all of these checks. The packet type + is not checked for subsequent packets since unknown packet types may + be present and should be ignored. + + u_int32 len; /* length of compound RTCP packet in words */ + rtcp_t *r; /* RTCP header */ + rtcp_t *end; /* end of compound RTCP packet */ + + if ((*(u_int16 *)r & RTCP_VALID_MASK) != RTCP_VALID_VALUE) { + /* something wrong with packet format */ + } + end = (rtcp_t *)((u_int32 *)r + len); + + do r = (rtcp_t *)((u_int32 *)r + r->common.length + 1); + while (r < end && r->common.version == 2); + + if (r != end) { + /* something wrong with packet format */ + } + +A.3 Determining the Number of RTP Packets Expected and Lost + + In order to compute packet loss rates, the number of packets expected + and actually received from each source needs to be known, using per- + source state information defined in struct source referenced via + pointer s in the code below. The number of packets received is simply + the count of packets as they arrive, including any late or duplicate + + + +Schulzrinne, et al Standards Track [Page 63] + +RFC 1889 RTP January 1996 + + + packets. The number of packets expected can be computed by the + receiver as the difference between the highest sequence number + received ( s->max_seq ) and the first sequence number received ( s- + >base_seq ). Since the sequence number is only 16 bits and will wrap + around, it is necessary to extend the highest sequence number with + the (shifted) count of sequence number wraparounds ( s->cycles ). + Both the received packet count and the count of cycles are maintained + the RTP header validity check routine in Appendix A.1. + + extended_max = s->cycles + s->max_seq; + expected = extended_max - s->base_seq + 1; + + The number of packets lost is defined to be the number of packets + expected less the number of packets actually received: + + lost = expected - s->received; + + Since this number is carried in 24 bits, it should be clamped at + 0xffffff rather than wrap around to zero. + + The fraction of packets lost during the last reporting interval + (since the previous SR or RR packet was sent) is calculated from + differences in the expected and received packet counts across the + interval, where expected_prior and received_prior are the values + saved when the previous reception report was generated: + + expected_interval = expected - s->expected_prior; + s->expected_prior = expected; + received_interval = s->received - s->received_prior; + s->received_prior = s->received; + lost_interval = expected_interval - received_interval; + if (expected_interval == 0 || lost_interval <= 0) fraction = 0; + else fraction = (lost_interval << 8) / expected_interval; + + The resulting fraction is an 8-bit fixed point number with the binary + point at the left edge. + +A.4 Generating SDES RTCP Packets + + This function builds one SDES chunk into buffer b composed of argc + items supplied in arrays type , value and length b + + char *rtp_write_sdes(char *b, u_int32 src, int argc, + rtcp_sdes_type_t type[], char *value[], + int length[]) + { + rtcp_sdes_t *s = (rtcp_sdes_t *)b; + rtcp_sdes_item_t *rsp; + + + +Schulzrinne, et al Standards Track [Page 64] + +RFC 1889 RTP January 1996 + + + int i; + int len; + int pad; + + /* SSRC header */ + s->src = src; + rsp = &s->item[0]; + + /* SDES items */ + for (i = 0; i < argc; i++) { + rsp->type = type[i]; + len = length[i]; + if (len > RTP_MAX_SDES) { + /* invalid length, may want to take other action */ + len = RTP_MAX_SDES; + } + rsp->length = len; + memcpy(rsp->data, value[i], len); + rsp = (rtcp_sdes_item_t *)&rsp->data[len]; + } + + /* terminate with end marker and pad to next 4-octet boundary */ + len = ((char *) rsp) - b; + pad = 4 - (len & 0x3); + b = (char *) rsp; + while (pad--) *b++ = RTCP_SDES_END; + + return b; + } + +A.5 Parsing RTCP SDES Packets + + This function parses an SDES packet, calling functions find_member() + to find a pointer to the information for a session member given the + SSRC identifier and member_sdes() to store the new SDES information + for that member. This function expects a pointer to the header of the + RTCP packet. + + void rtp_read_sdes(rtcp_t *r) + { + int count = r->common.count; + rtcp_sdes_t *sd = &r->r.sdes; + rtcp_sdes_item_t *rsp, *rspn; + rtcp_sdes_item_t *end = (rtcp_sdes_item_t *) + ((u_int32 *)r + r->common.length + 1); + source *s; + + while (--count >= 0) { + + + +Schulzrinne, et al Standards Track [Page 65] + +RFC 1889 RTP January 1996 + + + rsp = &sd->item[0]; + if (rsp >= end) break; + s = find_member(sd->src); + + for (; rsp->type; rsp = rspn ) { + rspn = (rtcp_sdes_item_t *)((char*)rsp+rsp->length+2); + if (rspn >= end) { + rsp = rspn; + break; + } + member_sdes(s, rsp->type, rsp->data, rsp->length); + } + sd = (rtcp_sdes_t *) + ((u_int32 *)sd + (((char *)rsp - (char *)sd) >> 2)+1); + } + if (count >= 0) { + /* invalid packet format */ + } + } + +A.6 Generating a Random 32-bit Identifier + + The following subroutine generates a random 32-bit identifier using + the MD5 routines published in RFC 1321 [23]. The system routines may + not be present on all operating systems, but they should serve as + hints as to what kinds of information may be used. Other system calls + that may be appropriate include + + o getdomainname() , + + o getwd() , or + + o getrusage() + + "Live" video or audio samples are also a good source of random + numbers, but care must be taken to avoid using a turned-off + microphone or blinded camera as a source [7]. + + Use of this or similar routine is suggested to generate the initial + seed for the random number generator producing the RTCP period (as + shown in Appendix A.7), to generate the initial values for the + sequence number and timestamp, and to generate SSRC values. Since + this routine is likely to be CPU-intensive, its direct use to + generate RTCP periods is inappropriate because predictability is not + an issue. Note that this routine produces the same result on repeated + calls until the value of the system clock changes unless different + values are supplied for the type argument. + + + + +Schulzrinne, et al Standards Track [Page 66] + +RFC 1889 RTP January 1996 + + + /* + * Generate a random 32-bit quantity. + */ + #include <sys/types.h> /* u_long */ + #include <sys/time.h> /* gettimeofday() */ + #include <unistd.h> /* get..() */ + #include <stdio.h> /* printf() */ + #include <time.h> /* clock() */ + #include <sys/utsname.h> /* uname() */ + #include "global.h" /* from RFC 1321 */ + #include "md5.h" /* from RFC 1321 */ + + #define MD_CTX MD5_CTX + #define MDInit MD5Init + #define MDUpdate MD5Update + #define MDFinal MD5Final + + static u_long md_32(char *string, int length) + { + MD_CTX context; + union { + char c[16]; + u_long x[4]; + } digest; + u_long r; + int i; + + MDInit (&context); + MDUpdate (&context, string, length); + MDFinal ((unsigned char *)&digest, &context); + r = 0; + for (i = 0; i < 3; i++) { + r ^= digest.x[i]; + } + return r; + } /* md_32 */ + + + /* + * Return random unsigned 32-bit quantity. Use 'type' argument if you + * need to generate several different values in close succession. + */ + u_int32 random32(int type) + { + struct { + int type; + struct timeval tv; + clock_t cpu; + + + +Schulzrinne, et al Standards Track [Page 67] + +RFC 1889 RTP January 1996 + + + pid_t pid; + u_long hid; + uid_t uid; + gid_t gid; + struct utsname name; + } s; + + gettimeofday(&s.tv, 0); + uname(&s.name); + s.type = type; + s.cpu = clock(); + s.pid = getpid(); + s.hid = gethostid(); + s.uid = getuid(); + s.gid = getgid(); + + return md_32((char *)&s, sizeof(s)); + } /* random32 */ + +A.7 Computing the RTCP Transmission Interval + + The following function returns the time between transmissions of RTCP + packets, measured in seconds. It should be called after sending one + compound RTCP packet to calculate the delay until the next should be + sent. This function should also be called to calculate the delay + before sending the first RTCP packet upon startup rather than send + the packet immediately. This avoids any burst of RTCP packets if an + application is started at many sites simultaneously, for example as a + result of a session announcement. + + The parameters have the following meaning: + + rtcp_bw: The target RTCP bandwidth, i.e., the total bandwidth that + will be used for RTCP packets by all members of this session, in + octets per second. This should be 5% of the "session bandwidth" + parameter supplied to the application at startup. + + senders: Number of active senders since sending last report, known + from construction of receiver reports for this RTCP packet. + Includes ourselves, if we also sent during this interval. + + members: The estimated number of session members, including + ourselves. Incremented as we discover new session members from + the receipt of RTP or RTCP packets, and decremented as session + members leave (via RTCP BYE) or their state is timed out (30 + minutes is recommended). On the first call, this parameter + should have the value 1. + + + + +Schulzrinne, et al Standards Track [Page 68] + +RFC 1889 RTP January 1996 + + + we_sent: Flag that is true if we have sent data during the last two + RTCP intervals. If the flag is true, the compound RTCP packet + just sent contained an SR packet. + + packet_size: The size of the compound RTCP packet just sent, in + octets, including the network encapsulation (e.g., 28 octets for + UDP over IP). + + avg_rtcp_size: Pointer to estimator for compound RTCP packet size; + initialized and updated by this function for the packet just + sent, and also updated by an identical line of code in the RTCP + receive routine for every RTCP packet received from other + participants in the session. + + initial: Flag that is true for the first call upon startup to + calculate the time until the first report should be sent. + + #include <math.h> + + double rtcp_interval(int members, + int senders, + double rtcp_bw, + int we_sent, + int packet_size, + int *avg_rtcp_size, + int initial) + { + /* + * Minimum time between RTCP packets from this site (in seconds). + * This time prevents the reports from `clumping' when sessions + * are small and the law of large numbers isn't helping to smooth + * out the traffic. It also keeps the report interval from + * becoming ridiculously small during transient outages like a + * network partition. + */ + double const RTCP_MIN_TIME = 5.; + /* + * Fraction of the RTCP bandwidth to be shared among active + * senders. (This fraction was chosen so that in a typical + * session with one or two active senders, the computed report + * time would be roughly equal to the minimum report time so that + * we don't unnecessarily slow down receiver reports.) The + * receiver fraction must be 1 - the sender fraction. + */ + double const RTCP_SENDER_BW_FRACTION = 0.25; + double const RTCP_RCVR_BW_FRACTION = (1-RTCP_SENDER_BW_FRACTION); + /* + * Gain (smoothing constant) for the low-pass filter that + + + +Schulzrinne, et al Standards Track [Page 69] + +RFC 1889 RTP January 1996 + + + * estimates the average RTCP packet size (see Cadzow reference). + */ + double const RTCP_SIZE_GAIN = (1./16.); + + double t; /* interval */ + double rtcp_min_time = RTCP_MIN_TIME; + int n; /* no. of members for computation */ + + /* + * Very first call at application start-up uses half the min + * delay for quicker notification while still allowing some time + * before reporting for randomization and to learn about other + * sources so the report interval will converge to the correct + * interval more quickly. The average RTCP size is initialized + * to 128 octets which is conservative (it assumes everyone else + * is generating SRs instead of RRs: 20 IP + 8 UDP + 52 SR + 48 + * SDES CNAME). + */ + if (initial) { + rtcp_min_time /= 2; + *avg_rtcp_size = 128; + } + + /* + * If there were active senders, give them at least a minimum + * share of the RTCP bandwidth. Otherwise all participants share + * the RTCP bandwidth equally. + */ + n = members; + if (senders > 0 && senders < members * RTCP_SENDER_BW_FRACTION) { + if (we_sent) { + rtcp_bw *= RTCP_SENDER_BW_FRACTION; + n = senders; + } else { + rtcp_bw *= RTCP_RCVR_BW_FRACTION; + n -= senders; + } + } + + /* + * Update the average size estimate by the size of the report + * packet we just sent. + */ + *avg_rtcp_size += (packet_size - *avg_rtcp_size)*RTCP_SIZE_GAIN; + + /* + * The effective number of sites times the average packet size is + * the total number of octets sent when each site sends a report. + + + +Schulzrinne, et al Standards Track [Page 70] + +RFC 1889 RTP January 1996 + + + * Dividing this by the effective bandwidth gives the time + * interval over which those packets must be sent in order to + * meet the bandwidth target, with a minimum enforced. In that + * time interval we send one report so this time is also our + * average time between reports. + */ + t = (*avg_rtcp_size) * n / rtcp_bw; + if (t < rtcp_min_time) t = rtcp_min_time; + + /* + * To avoid traffic bursts from unintended synchronization with + * other sites, we then pick our actual next report interval as a + * random number uniformly distributed between 0.5*t and 1.5*t. + */ + return t * (drand48() + 0.5); + } + +A.8 Estimating the Interarrival Jitter + + The code fragments below implement the algorithm given in Section + 6.3.1 for calculating an estimate of the statistical variance of the + RTP data interarrival time to be inserted in the interarrival jitter + field of reception reports. The inputs are r->ts , the timestamp from + the incoming packet, and arrival , the current time in the same + units. Here s points to state for the source; s->transit holds the + relative transit time for the previous packet, and s->jitter holds + the estimated jitter. The jitter field of the reception report is + measured in timestamp units and expressed as an unsigned integer, but + the jitter estimate is kept in a floating point. As each data packet + arrives, the jitter estimate is updated: + + int transit = arrival - r->ts; + int d = transit - s->transit; + s->transit = transit; + if (d < 0) d = -d; + s->jitter += (1./16.) * ((double)d - s->jitter); + + When a reception report block (to which rr points) is generated for + this member, the current jitter estimate is returned: + + rr->jitter = (u_int32) s->jitter; + + Alternatively, the jitter estimate can be kept as an integer, but + scaled to reduce round-off error. The calculation is the same except + for the last line: + + s->jitter += d - ((s->jitter + 8) >> 4); + + + + +Schulzrinne, et al Standards Track [Page 71] + +RFC 1889 RTP January 1996 + + + In this case, the estimate is sampled for the reception report as: + + rr->jitter = s->jitter >> 4; + + +B. Security Considerations + + RTP suffers from the same security liabilities as the underlying + protocols. For example, an impostor can fake source or destination + network addresses, or change the header or payload. Within RTCP, the + CNAME and NAME information may be used to impersonate another + participant. In addition, RTP may be sent via IP multicast, which + provides no direct means for a sender to know all the receivers of + the data sent and therefore no measure of privacy. Rightly or not, + users may be more sensitive to privacy concerns with audio and video + communication than they have been with more traditional forms of + network communication [24]. Therefore, the use of security mechanisms + with RTP is important. These mechanisms are discussed in Section 9. + + RTP-level translators or mixers may be used to allow RTP traffic to + reach hosts behind firewalls. Appropriate firewall security + principles and practices, which are beyond the scope of this + document, should be followed in the design and installation of these + devices and in the admission of RTP applications for use behind the + firewall. + +C. Authors' Addresses + + Henning Schulzrinne + GMD Fokus + Hardenbergplatz 2 + D-10623 Berlin + Germany + + EMail: schulzrinne@fokus.gmd.de + + + Stephen L. Casner + Precept Software, Inc. + 21580 Stevens Creek Boulevard, Suite 207 + Cupertino, CA 95014 + United States + + EMail: casner@precept.com + + + + + + + +Schulzrinne, et al Standards Track [Page 72] + +RFC 1889 RTP January 1996 + + + Ron Frederick + Xerox Palo Alto Research Center + 3333 Coyote Hill Road + Palo Alto, CA 94304 + United States + + EMail: frederic@parc.xerox.com + + + Van Jacobson + MS 46a-1121 + Lawrence Berkeley National Laboratory + Berkeley, CA 94720 + United States + + EMail: van@ee.lbl.gov + +Acknowledgments + + This memorandum is based on discussions within the IETF Audio/Video + Transport working group chaired by Stephen Casner. The current + protocol has its origins in the Network Voice Protocol and the Packet + Video Protocol (Danny Cohen and Randy Cole) and the protocol + implemented by the vat application (Van Jacobson and Steve McCanne). + Christian Huitema provided ideas for the random identifier generator. + +D. Bibliography + + [1] D. D. Clark and D. L. Tennenhouse, "Architectural considerations + for a new generation of protocols," in SIGCOMM Symposium on + Communications Architectures and Protocols , (Philadelphia, + Pennsylvania), pp. 200--208, IEEE, Sept. 1990. Computer + Communications Review, Vol. 20(4), Sept. 1990. + + [2] H. Schulzrinne, "Issues in designing a transport protocol for + audio and video conferences and other multiparticipant real-time + applications", Work in Progress. + + [3] D. E. Comer, Internetworking with TCP/IP , vol. 1. Englewood + Cliffs, New Jersey: Prentice Hall, 1991. + + [4] Postel, J., "Internet Protocol", STD 5, RFC 791, USC/Information + Sciences Institute, September 1981. + + [5] Mills, D., "Network Time Protocol Version 3", RFC 1305, UDEL, + March 1992. + + + + + +Schulzrinne, et al Standards Track [Page 73] + +RFC 1889 RTP January 1996 + + + [6] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, + USC/Information Sciences Institute, October 1994. + + [7] Eastlake, D., Crocker, S., and J. Schiller, "Randomness + Recommendations for Security", RFC 1750, DEC, Cybercash, MIT, + December 1994. + + [8] J.-C. Bolot, T. Turletti, and I. Wakeman, "Scalable feedback + control for multicast video distribution in the internet," in + SIGCOMM Symposium on Communications Architectures and Protocols , + (London, England), pp. 58--67, ACM, Aug. 1994. + + [9] I. Busse, B. Deffner, and H. Schulzrinne, "Dynamic QoS control of + multimedia applications based on RTP," Computer Communications , + Jan. 1996. + + [10] S. Floyd and V. Jacobson, "The synchronization of periodic + routing messages," in SIGCOMM Symposium on Communications + Architectures and Protocols (D. P. Sidhu, ed.), (San Francisco, + California), pp. 33--44, ACM, Sept. 1993. also in [25]. + + [11] J. A. Cadzow, Foundations of digital signal processing and data + analysis New York, New York: Macmillan, 1987. + + [12] International Standards Organization, "ISO/IEC DIS 10646-1:1993 + information technology -- universal multiple-octet coded + character set (UCS) -- part I: Architecture and basic + multilingual plane," 1993. + + [13] The Unicode Consortium, The Unicode Standard New York, New York: + Addison-Wesley, 1991. + + [14] Mockapetris, P., "Domain Names - Concepts and Facilities", STD + 13, RFC 1034, USC/Information Sciences Institute, November 1987. + + [15] Mockapetris, P., "Domain Names - Implementation and + Specification", STD 13, RFC 1035, USC/Information Sciences + Institute, November 1987. + + [16] Braden, R., "Requirements for Internet Hosts - Application and + Support", STD 3, RFC 1123, Internet Engineering Task Force, + October 1989. + + [17] Rekhter, Y., Moskowitz, R., Karrenberg, D., and G. de Groot, + "Address Allocation for Private Internets", RFC 1597, T.J. Watson + Research Center, IBM Corp., Chrysler Corp., RIPE NCC, March 1994. + + + + + +Schulzrinne, et al Standards Track [Page 74] + +RFC 1889 RTP January 1996 + + + [18] Lear, E., Fair, E., Crocker, D., and T. Kessler, "Network 10 + Considered Harmful (Some Practices Shouldn't be Codified)", RFC + 1627, Silicon Graphics, Inc., Apple Computer, Inc., Silicon + Graphics, Inc., July 1994. + + [19] Crocker, D., "Standard for the Format of ARPA Internet Text + Messages", STD 11, RFC 822, UDEL, August 1982. + + [20] W. Feller, An Introduction to Probability Theory and its + Applications, Volume 1 , vol. 1. New York, New York: John Wiley + and Sons, third ed., 1968. + + [21] Balenson, D., "Privacy Enhancement for Internet Electronic Mail: + Part III: Algorithms, Modes, and Identifiers", RFC 1423, TIS, IAB + IRTF PSRG, IETF PEM WG, February 1993. + + [22] V. L. Voydock and S. T. Kent, "Security mechanisms in high-level + network protocols," ACM Computing Surveys , vol. 15, pp. 135-- + 171, June 1983. + + [23] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, MIT + Laboratory for Computer Science and RSA Data Security, Inc., + April 1992. + + [24] S. Stubblebine, "Security services for multimedia conferencing," + in 16th National Computer Security Conference , (Baltimore, + Maryland), pp. 391--395, Sept. 1993. + + [25] S. Floyd and V. Jacobson, "The synchronization of periodic + routing messages," IEEE/ACM Transactions on Networking , vol. 2, + pp. 122-136, April 1994. + + + + + + + + + + + + + + + + + + + + +Schulzrinne, et al Standards Track [Page 75] + |