Internet Engineering Task Force                                 M. Mauve
Internet Draft                                                   V. Hilt
draft-mauve-rtpi-00.txt                                     C. Kuhmuench
March 1, 2000                                                   J. Vogel
Expires: August 31, 2000                                        W. Geyer
                                                           W. Effelsberg

                                                  University of Mannheim



          RTP/I: An Application Level Real-Time Protocol for
                     Distributed Interactive Media


STATUS OF THIS MEMO

   This document is an Internet-Draft and is in full conformance with
   all provisions of Section 10 of RFC2026.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups. Note that other
   groups may also distribute working documents as Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time. It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

                                 ABSTRACT

     This document specifies RTP/I, an application level real-time
     protocol for distributed interactive media. Typical examples of
     distributed interactive media are shared whiteboards, networked
     computer games and distributed virtual environments. RTP/I defines
     a standardized framing for the transmission of data and provides
     mechanisms that are universally needed for this media class.
     Thereby RTP/I enables the development of reusable functionality and
     generic services that can be employed for multiple distributed
     interactive media. Examples for this kind of functionality are the
     ability to record sessions, to support late coming participants,
     and to provide security services. RTP/I is a protocol that follows
     the ideas of application level framing and integrated layer
     processing. It has been designed to be independent of the
     underlying network and transport layers. To a large extend RTP/I



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 1]


RTP/I                                                      December 1999

     has been inspired by the real-time transport protocol (RTP), which
     is used for continuous non-interactive media.

     This document is intended to stimulate the discussion on how to
     transport distributed interactive media over the Internet. There
     exists an RTP/I mailing list. Instructions on how to subscribe to
     this list can be found at the RTP/I homepage
     (http://www.informatik.uni-mannheim.de/informatik/pi4/projects/
     RTPI/index.html). Feedback on this document should be addressed to
     the RTP/I mailing list or directly to the authors.

                           Table of Contents
1. Terminology ....................................................    3
2. Introduction ...................................................    3
3. RTP/I Scope ....................................................    6
4. Model for Distributed Interactive Media ........................    6
   4.1. States and Events .........................................    6
   4.2. Partitioning the Medium - Sub-Components ..................    7
   4.3. Environment ...............................................    8
5. Byte Order, Alignment, and Time Format .........................    8
6. RTP/I Data Transfer Protocol ...................................    9
   6.1. RTP/I Event Packet Type ...................................    9
   6.2. RTP/I State Packet Type ...................................   12
   6.3. RTP/I Delta State Packet Type .............................   13
   6.4. RTP/I State Query Packet Type .............................   13
   6.5. Multiplexing RTP/I Sessions ...............................   14
   6.6. RTP/I and ALF/ILP Oriented Reliability Mechanisms .........   15
   6.7. Profile-Specific Modifications to the RTP/I header ........   15
7. RTP/I Control Protocol -- RTCP/I ...............................   16
   7.1. RTCP/I Packet Composition .................................   16
   7.2. RTCP/I Transmission Interval ..............................   17
        7.2.1. Maintaining the number of session members ..........   19
   7.3. RTCP/I Packet Send and Receive Rules ......................   19
        7.3.1. Computing the RTCP/I transmission interval .........   20
        7.3.2. Initialization .....................................   21
        7.3.3. Receiving an RTP/I or non-BYE RTCP/I packet ........   21
        7.3.4. Receiving an RTCP/I BYE packet .....................   21
        7.3.5. Timing Out a PID ...................................   22
        7.3.6. Expiration of Transmission Timer ...................   22
        7.3.7. Transmitting a BYE Packet ..........................   23
   7.4. RTCP/I Packet Formats .....................................   23
        7.4.1. RTPC/I Sub-Component Report Packet .................   23
        7.4.2. RTCP/I Source Description Packet ...................   26
        7.4.3. BYE: Goodbye RTCP/I packet .........................   32
        7.4.4. APP: Application-defined RTCP/I packet .............   32
   7.5. Allocation of RTCP/I bandwidth ............................   33
8. Security .......................................................   34
9. RTP/I over Network and Transport Protocols .....................   34
10. Summary of Protocol Constants .................................   35
11. IANA Considerations ...........................................   36
12. Full Copyright Statement ......................................   36
13. Addresses of Authors ..........................................   37
Acknowledgements ..................................................   37
Bibliography ......................................................   38

Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 2]


RTP/I                                                      December 1999


1. Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [BRA97] and
   indicate requirement levels for compliant RTP/I implementations.

2. Introduction

   Distributed interactive media, i.e. media involving user interac-
   tions, have received increasing interest over the past decade. Typi-
   cal representatives of this media class are shared whiteboards,
   networked computer games, and distributed virtual environments. The
   application level real-time protocol for distributed interactive
   media (RTP/I) captures and supports the common aspects of this media
   class. RTP/I thereby allows the development of services and func-
   tionality that are reusable for different distributed interactive
   media.

   There have been suggestions to use the real-time transport protocol
   (RTP) [Sch99] as an application level protocol for this media class.
   However, RTP has been developed to fit the media model of continuous
   non-interactive media, e.g. audio and video. These media have an
   ephemeral state which is frequently and redundantly transmitted. In
   addition the state of the medium is influenced only by a single
   entity - the sender of the stream. In contrast distributed interac-
   tive media require managing the shared state of a medium. All parti-
   cipants are potentially able to change this state. The key problem of
   this media class is to keep the shared state reasonably similar for
   all participants of a session, i.e. to maintain consistency. These
   fundamental differences in the media models prevent RTP from being an
   optimal fit for distributed interactive media. For a more detailled
   discussion on why RTP is not appropriate as an application level pro-
   tocol for distributed interactive media see [Per99].

   RTP/I has been designed to reuse aspects of RTP when appropriate
   while it is thoroughly adapted to meet the demands of the new media
   class. Throughout this memorandum original and slightly modified pas-
   sages from Internet Draft ietf-avt-rtp-new-03.txt [Sch99] are fre-
   quently used.

   RTP/I consists of two main parts, both reside on the application
   level and are independent of the underlying network and transport
   layers:

   o the framing protocol (RTP/I). RTP/I is used to frame the data
     transmitted for distributed interactive media. This framing
     contains the information that is common to media of that class. It
     makes it possible to understand the semantics of the transmitted
     data to a large extent without any medium specific knowledge. This
     allows the development of meaningful functionality and services



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 3]


RTP/I                                                      December 1999


     that are independent of the media specific data encapsulated by the
     framing information.

   o the RTP/I control protocol (RTCP/I). RTCP/I is used to convey meta
     information about the medium and information about the participants
     of a session.

   RTP/I supports the principles of Application Level Framing (ALF) and
   Integrated Layer Processing (ILP) as proposed by Clark and
   Tennenhouse [Cla90]. To this end the RTP/I framing provides all the
   information required to identify Application Data Units (ADUs) and to
   process them independently.

   Even though RTP/I provides the application level framing of ADUs it
   does not define any specific way to realize reliability. This would
   not be appropriate since the reliability requirements of different
   distributed interactive media vary widely. For this reason RTP/I
   allows different reliability mechanisms to cooexist and cooperate
   with the framing specified by this memorandum.

   Specifically, RTP/I may also be used by applications that do not
   follow the principle of ILP and that realize reliability by means of
   a reliable transport protocol (e.g. TCP). Up to today this approach
   is used by the vast majority of applications in this area. The
   applications following this approach trade efficiency for simplicity
   and a clean application architecture. This may be appropriate for
   some applications. For those applications RTP/I simply provides a
   standardized application level protocol, so that generic
   functionality and services can be used.

   Nevertheless we consider approaches that do not rely on a reliable
   transport service as more efficient for distributed interactive
   media. For those approaches RTP/I can be regarded as a specialization
   of the ADU framing, as it is used by ALF/ILP oriented reliability
   mechanisms, such as SRM [Flo97]. RTP/I extends the framing of these
   mechanisms to the specific needs of distributed interactive media. In
   order to allow for additional information required by reliability
   mechanisms RTP/I lets these mechanisms link into the RTP/I header. It
   specifically grants the reliability mechanisms the right to place
   additional flags and fields into the RTP/I framing information. This
   leads to the typical benefits of ILP, namely the avoidance of
   redundant header information as well as a reduction of copy
   operations. Furthermore RTP/I also allows reliability mechanisms to
   transmit additional messages that might be required, e.g. to detect
   tail loss. With this approach RTP/I provides support for applications
   following the ALF/ILP principles in addition to enabling the
   development of generic services and functionality.

   An ALF/ILP oriented reliability mechanism that is used together with
   RTP/I is specified in an RTP/I reliability mapping document. This
   document completely defines the employed mechanism and its



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 4]


RTP/I                                                      December 1999


   cooperation with RTP/I. It MAY do so by referencing an existing
   specification of the reliability mechanism and by providing
   information on how it cooperates with RTP/I. This includes the
   mapping of the information provided by RTP/I to the information
   required by the reliability mechanism, the specification of any
   additional information that is to be stored in the RTP/I framing, and
   the definition of any additional packet types that may be required.
   Each RTP/I reliability mapping MUST be assigned a unique number in
   the range of 2-63 by IANA. There exist two special reliability
   mechanisms that can be used with RTP/I. The first one is no
   reliability (e.g. for battlefield simulations or telepointers) and
   the second one is the usage of a reliable transport protocol which is
   transparent to the application. These mechanisms are assigned the
   numbers 0 and 1, respectively.

   RTP/I is not a complete protocol. It needs to be adapted to the
   requirements of a specific medium or a group of media. This is done
   using two additional types of documents besides the reliability
   mapping:

   o a payload type definition is a specification document that defines
     how a particular medium is transported using the framework provided
     by RTP/I. Essentially a payload type definition describes how the
     medium specific data is encoded. It MAY also define how consistency
     is ensured if this is not done by a profile under which the payload
     type operates.

   o a profile adapts RTP/I to the needs of a group of distributed
     interactive media. It MAY provide additional fields for the framing
     of the data as well as new control packet types. A profile is
     usually defined for media that share a common way to achieve
     consistency. Examples of media that may belong to the same class
     are military battlefield simulations and networked action games.
     Another profile could be defined for a sub-class of shared
     workspace applications.

   With this flexibility, generic services and functionality can be
   developed on three levels. They can be fully generic services usable
   for all RTP/I based applications, they can be services that are
   useful for certain RTP/I profiles or they may be defined for a number
   of RTP/I payloads.

   The remainder of this document is structured as follows. Section
   Three defines the scope of this document by identifying the
   distributed media class for which it should be used. Section Four
   contains a definition of the media model upon which RTP/I is based.
   Here the main concepts of distributed interactive media are
   discussed. The byte order and timestamp format is given in Section
   Five. In Section Six the RTP/I data protocol is specified. The RTP/I
   data protocol is used to transport the information that is required
   to distribute the medium itself. The RTP/I control protocol (RTCP/I)



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 5]


RTP/I                                                      December 1999


   is defined in Section Seven. It is used to transport meta information
   about the medium and the participants of a session. Section Eight
   deals with security for RTP/I. How to transport RTP/I over transport
   services is described in Section Nine. Sections Ten to Thirteen
   contain an overview over the protocol constants, IANA considerations,
   the copyright statement, and the authors addresses.


3. RTP/I Scope

   In order to define the scope of RTP/I, we separate distributed media
   types by means of two criteria. The first criterion distinguishes
   whether the medium is discrete or continuous. The characteristic of a
   discrete medium is that its state is independent of the passage of
   time. Examples of discrete media are still images or digital
   whiteboard presentations. While discrete media may change their
   state, they do so only in response to external events, such as a user
   drawing on a digital whiteboard.

   The state of a continuous medium, however, depends on the passage of
   time and can change without the occurrence of external events. Video
   and animations belong to the class of continuous media.

   The second criterion distinguishes between interactive and non-
   interactive media. Non-interactive media change their state only in
   response to the passage of time and do not accept external events.
   Typical representations of non-interactive media are video, audio and
   images.

   Interactive media are characterized by the fact that their state can
   be changed by external events such as user interactions. Whiteboard
   presentations and distributed virtual environments represent
   interactive media.

   While the real time protocol RTP is a suitable protocol for the
   transportation of continuous non-interactive media, it is not
   appropriate to support distribute interactive media [Per99]. RTP/I is
   therefore defined as an application level protocol for distributed
   interactive media, both continuous and discrete. RTP/I reuses aspects
   of RTP whenever possible, however, it is specifically tailored to the
   needs of distributed interactive media.

4. Model for Distributed Interactive Media

4.1. States and Events

   A distributed interactive medium has a state. For example, at any
   given point in time the state of a shared whiteboard is defined by
   the content of all pages present in the shared whiteboard. In order
   to perceive the state of a distributed interactive medium a user
   needs an application, e.g. a shared whiteboard application is



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 6]


RTP/I                                                      December 1999


   required to see the pages of a shared whiteboard presentation. This
   application generally maintains a local copy of (parts of) the
   medium's state. For all applications participating in a session the
   local state of the medium should be at least reasonably similar. It
   is therefore necessary to synchronize the local copies of the
   distributed interactive medium's state among all participants, so
   that the overall state of the medium is consistent.

   The state of a distributed interactive medium can change for two
   reasons, either by passage of time or by events. The state of the
   medium between two successive events is fully deterministic and
   depends only on the passage of time. Generally, a state change caused
   by the passage of time does not require the exchange of information
   between applications, since the application of each user can
   calculate the required state changes independently. An example of a
   state change caused by the passage of time is the animation of an
   object moving across the screen.

   Any state change that is not a fully deterministic function of time
   is caused by an event. Events can be separated into external events
   and internal events. External events are (user) interactions with the
   medium, e.g. the user makes an annotation on a shared whiteboard
   page. Internal events are non-deterministic state changes of the
   medium, such as generating a random number. Whenever events occur,
   the state of the medium is in danger of becoming inconsistent because
   the local copies of the state could run out of synchronization with
   the remote copies. Therefore, an event usually requires that the
   applications exchange information - either about the event itself or
   about the updated state after the event has taken place.

4.2. Partitioning the Medium - Sub-Components

   In order to provide for a flexible and scalable handling of state
   information, it is often desirable to partition an interactive medium
   into several sub-components. In addition to breaking down the
   complete state of an interactive medium into more manageable parts,
   such partitioning allows participants of a session to track only the
   states of those sub-components they are actually interested in.
   Examples of sub-components are 3D objects (e.g. a house, a car, a
   room) in a distributed virtual environment or the pages of a shared
   whiteboard. Events, external as well as internal, have a target sub-
   component which they affect. Other sub-components than the target are
   not affected by an event.

   It is important to notice that sub-components must be independent of
   each other, since some applications might track only the state of a
   subset of all available sub-components. Sub-component A is said to be
   independent of sub-component B if the state of B does influence the
   state of A only by means of events. While the independence of sub-
   components is usually guaranteed for a medium like a shared
   whiteboard, other media require the generation of pseudo events in



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 7]


RTP/I                                                      December 1999


   order to ensure that sub-components are independent of each other.
   For example, in a distributed car race where the cars are the sub-
   components of the medium, pseudo events would occur if cars bump into
   each other. As for internal and external events, pseudo events
   generally require that the applications exchange either information
   about the event itself, or about the updated state after the event
   has taken place. Otherwise the consistency of the overall medium
   might be damaged.

4.3. Environment

   While it would be conceivable to declare all information which is
   required by the application to display the distributed interactive
   medium, to be part of the medium's state, this is generally not
   desirable. Usually a substantial part of this information remains
   constant over the course of a session. We call this part of the
   information the environment of a distributed interactive medium.
   Examples for environments are the base world descriptions of
   distributed virtual environments, or the postscript slides of shared
   whiteboard presentations. Since the environment stays constant, there
   are no mechanisms required to synchronize it among the participants
   of a session - the environment information just needs to be received
   once by each participant. It is therefore a good idea to make the
   environment part of the medium data as large as possible and to
   minimize the amount of state information. The distinction between
   state and environment information is situation dependent - a
   participant might choose to introduce a new postscript slide into an
   ongoing shared whiteboard presentation, which makes this page part of
   the medium's state. It is therefore the task of the application
   designer to distinguish between state and environment information.
   Since the environment is a discrete non-interactive medium we do not
   further investigate how the environment is shared between
   participants. For the remainder of this memorandum we merely assume
   that the environment is present for all participant's applications
   (e.g. by using multi-destination file transfer or by means of an
   off-line distribution on CD or DVD).

5. 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 [Pos81].
   Numeric constants are given in decimal representation.  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.  The timestamps of RTP/I are 32 bit fields. They represent the
   milliseconds passed since 0h UTC on 1 January 1900. Timestamp values
   may wrap. Participants of an RTP/I session SHOULD have a sufficiently
   synchronized clock, so that they can identify the current timestamp
   cycle. Further constraints on the synchronization of the



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 8]


RTP/I                                                      December 1999


   participants' clocks may be made in a profile or a payload type
   specification.

6. RTP/I Data Transfer Protocol

   The bulk of data for a distributed interactive medium - states,
   events and requests for state information - are carried in RTP/I data
   packets. Essentially RTP/I data packets contain medium specific
   information which is framed by common header fields. In RTP/I there
   are four distinct data packet types: event, state, delta state, and
   state query. All four share the same packet header. A particular
   RTP/I payload or an RTP/I profile may specify that only a subset of
   these data packet types is to be used for a given medium or a group
   of media.

6.1. RTP/I Event Packet Type

   The event packet type is used by an application to transmit events to
   peer applications. The RTP/I event packet type has the following
   fixed header:

    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=0|E|X| TYPE  |       PT      |            length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    RT     |PRI|      PI       |              RI               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  participant identifier (PID)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     subcomponent identifier (SUBID) most significant word     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    subcomponent identifier (SUBID) least significant word     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       sequence number         |        fragment count         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          timestamp                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   version (V): 2 bits
        This field holds the version number. The version defined by this
        specification is version 0.

   end (E): 1 bit
        This bit is set, if and only if the packet is the last packet of
        an ADU.

   reliability header extension (X): 1 bit
        If this bit is set, the fixed RTP/I header, as shown above, MUST
        be followed by exactly one header extension that is used for
        reliability purposes. The format of this extension is specified



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg                [Page 9]


RTP/I                                                      December 1999


        in Section 6.5. The extension mechanism MUST NOT be used for
        other purposes than to convey reliability information. If
        additional information is required for a subclass of distributed
        interactive media, then a profile SHOULD be used to extend the
        framing information. If the additional information is relevant
        to all distributed interactive media, then a new RTP/I version
        SHOULD be specified which includes this information.

   type (TYPE): 4 bits
        This field identifies the type of the ADU the packet belongs to.
        RTP/I specifies four packet type values: 0 for event packets, 1
        for state packets, 2 for delta state packets, and 3 for state
        query packets. Future versions of RTP/I MAY define additional
        types for the values 4, 5, 6, and 7. The values 8 - 15 MAY be
        used by ALF/ILP oriented reliability approaches to identify
        additional packets. They MUST NOT be used for the transmission
        of media related packets. The type field MUST carry the same
        value for all packets belonging to one ADU.

   payload type (PT): 8 bits
        This field identifies the format of the RTP/I payload and
        determines its interpretation by the application. A profile MAY
        specify a default static mapping of payload type codes to
        payload formats. Additional payload type codes MAY be defined
        dynamically through non-RTP/I means. The payload type of a
        medium MAY change during a session. The payload type field
        SHOULD NOT be used for multiplexing the streams of separate
        media. A receiver MUST ignore packets with payload types that it
        does not understand. The payload type field MUST carry the same
        value for all packets belonging to one ADU.

   length: 16 bits
        The length field specifies the length of this packet in octets,
        excluding the 28 octet fixed RTP/I header, including any
        reliability or profile specific header extensions. It can be
        used to stack multiple RTP/I data packets in one transport
        packet. If the length is no multiple of 4, then a minimal amount
        of padding octets MUST be appended to the packet so that the
        total length of the packet including the padding octets is a
        multiple of 4. These padding octets MUST NOT be included in the
        size of the packets as expressed in the length field. The last
        RTP/I packet contained in a transport packet MAY choose not to
        use padding octets, even if it does not have a size which is a
        multiple of 4 octets.

   reliability type (RT): 6 bits
        This field identifies how reliability is established for the
        packet. Reliability type 0 is used when the data transmission is
        unreliable. Reliability type 1 is used when the packet is
        transmitted over a reliable transport protocol. The meaning of
        other RT values is defined in RTP/I reliability mapping



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 10]


RTP/I                                                      December 1999


        documents. RT values are assinged by IANA. A profile
        specification SHOULD specify which reliability types are usable
        with the profile. The reliability type MAY change during a
        session. The reliability type field MUST carry the same value
        for all packets belonging to one ADU.

   priority (PRI): 2 bits
        This field is not used for events.

   reserved for profile information (PI): 8 bits
        This field MAY be used to transport profile specific
        information. The usage of this field is specified in profile
        specification documents. It MUST NOT be used by reliability
        mechanisms.

   reserved for reliability information (RI): 16 bits
        This field MAY be used by reliability mechanisms to hold
        additional information. The use of this field is specified in
        RTP/I reliability mapping documents. This field MUST NOT be used
        for other purposes.

   participant identifier (PID): 32 bits
        The participant identifier MUST uniquely identify a participant.
        This participant is the original sender of the packet. How to
        choose PIDs is outside the scope of RTP/I. A PID MUST be
        persistent for the lifetime of a session. In particular, the
        restart of an application MUST NOT change the PID of the
        participant. If an application requires multiple RTP/I sessions
        (e.g. because multiple distributed interactive media are
        involved, or because a single medium is distributed across
        multiple sessions) then the PID SHOULD be the same for the
        participant in all these RTP/I sessions.

   sub-component identifier (SUBID): 64 bits
        The sub-component identifier MUST uniquely identify a sub-
        component. In event packets the SUBID identifies the target
        sub-component of the event. How to choose SUBIDs is outside the
        scope of RTP/I. A SUBID MUST be persistent for the lifetime of a
        session. If an application requires multiple RTP/I sessions
        (e.g. because a single medium is distributed across multiple
        sessions) then the SUBID SHOULD be the same for the same sub-
        component in all these RTP/I sessions.

   sequence number: 16 bits
        There are independent sequence numbers for each sub-component
        and packet type (i.e. events, state, delta states and state
        queries). For each transmitted full ADU the appropriate sequence
        number is incremented by one. The sequence number field MUST
        carry the same value for all packets belonging to one ADU.

   fragment count: 16 bits



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 11]


RTP/I                                                      December 1999


        In the case that an ADU does not fit into a single network layer
        packet, the application SHOULD fragment the data, in order to
        avoid inefficient network-level fragmentation. A single ADU may
        therefore consist of more than one packet. The fragment count
        for each ADU starts with 0 and is incremented by one for each
        packet sent for this ADU by a participant. A receiver knows that
        it has received all parts of a fragmented ADU when it has
        received a packet with the fragment count 0, a packet with the E
        bit set and all fragments in between the fragment count of both
        packets. A single ADU MUST NOT consist of more than (2^16-1)
        fragments.

   timestamp: 32 bits
        The timestamp value is expressed as milliseconds that have
        passed since 0h UTC on 1 January 1900 modulo 2^32. For an event
        the timestamp specifies the time at which an event is applied to
        the target sub-component. The timestamp MUST be based on a
        physical clock. The physical clocks of all participants SHOULD
        be synchronized via external means such as NTP [Mil92] or GPS. A
        profile or payload type specification MAY limit the maximal
        allowed time offset between any two participants in a session
        and the resolution of the clock. The timestamp MAY be used to
        establish a global ordering on the ADUs transmitted by all
        participants of a session. For each medium transported over
        RTP/I a profile or the payload type definition SHOULD therefore
        specify the interpretation of ADUs that bear the same timestamp.
        The timestamp field MUST carry the same value for all packets
        belonging to one ADU.

   The RTP/I header (including reliability header extension and profile
   specific extensions) is followed by the payload type specific data
   describing the event.

6.2. RTP/I State Packet Type
   The state packet type is used by an application to transmit the full
   state of a sub-component. The RTP/I state packet type header has the
   same structure as the event packet type header. The following fields
   are interpreted in a different way than for the event packet type:

   priority (PRI): 2 bits
        This field identifies the priority of the state transmission. A
        state transmitted with priority 3 MUST be adopted by the
        recipients. A state transmitted with priority 0 MAY be adopted
        by the recipients. The meaning of the values 1 and 2 MAY be
        specified in a profile or a payload type definition. This field
        is required because setting the state of a sub-component can be
        costly and might not always be reasonable for all participants.
        Situations where priority 3 is recommended are re-
        synchronization after errors or packet loss. A state
        transmission with priority 3 forces every participant to discard
        its information about the sub-component and requires the



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 12]


RTP/I                                                      December 1999


        adoption of the new state. A state transmitted with priority 0
        can be ignored at will by any participant. This is useful if
        only a subset of communication partners is interested in the
        state. An example of this case are late joins where only
        applications joining the session might be interested in certain
        state transmission. All state packets belonging to the same ADU
        MUST carry the same priority.

   sub-component identifier (SUBID): 64 bits
        The SUBID identifies the sub-component to which the state
        contained in the packet belongs.

   timestamp: 32 bits
        For a STATE packet the timestamp specifies the time at which the
        state was extracted from the sub-component. All STATE packets
        belonging to the same ADU MUST carry the same timestamp.

6.3. RTP/I Delta State Packet Type

   In cases where a complex sub-component state of an interactive medium
   is transmitted frequently by an application, it may be desirable to
   be able to send only those parts of a state that have changed since
   the last state transmission. This is similar to the concept of P
   frames in an MPEG encoded video stream. RTP/I supports this by
   providing a delta state packet type. A delta state ADU (possibly
   consisting of more than one packet) can only be interpreted if the
   preceding state ADU is also available. The main advantages of delta
   state ADUs are their smaller size and that they can be calculated
   faster than state ADUs.  The RTP/I delta state packet type header is
   the same as the state packet type header. The only difference is the
   value of the TYPE field which is 2 for delta state packets.

6.4. RTP/I State Query Packet Type

   In a number of situations an application or a generic service might
   need to get the current state of a certain sub-component. Examples
   for these situations are: as means of resynchronization if an event
   has been lost or received late, as access point for random-access in
   a distributed interactive media recorder, or as an initial state for
   a late-comer joining an ongoing session. Since this functionality is
   universally needed for many distributed interactive media it is
   supported directly by a state query packet type.

   A state query packet is used by a participant to indicate that it
   desires the transmission of a certain sub-component's state. The
   structure of the state query packet type is the same as for all RTP/I
   data packets. However, it does not contain any medium specific data.

   Instead of being a regular request - as found in other protocols - a
   state query packet is only an indication to the receivers that a
   participant would like to get the state of the concerned sub-



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 13]


RTP/I                                                      December 1999


   component. A regular request/reply mechanism would be inappropriate
   for a protocol that should scale well in a multicast environment. The
   decision whether any given receiver of a state query packet does
   reply is made locally by the receiver. This decision is influenced by
   the value contained in the priority field and SHOULD be made in a way
   that prevents a reply implosion if multicast is used. In addition,
   state query packets SHOULD be issued in a way that avoids state query
   implosions in a multicast environment.

   The fields in a state query packet type are interpreted as for event
   packets with the following exceptions:

   end (E): 1 bit
        This bit is always set for state query packets.

   length: 16 bits
        The length of a state query packet is always 28 + any
        reliability and profile specific header extension bytes.

   priority (PRI): 2 bits
        The meaning of the priority contained in a state query packet is
        as follows:

        o Priority 3 is used when the request needs to be satisfied
          immediately, e.g for resynchronization after errors.

        o Priority 2 is used when a response is required, but a short
          delay is acceptable, e.g. for a late join service.

        o Priority 1 is used when a response is desirable but not
          required, e.g. pre-fetching of sub-component state, which
          might be needed later.

        o Priority 0 is used when the state request is issued
          periodically, e.g. for a recording service.

   sub-component identifier (SUBID): 64 bits
        The SUBID identifies the sub-component that the sender wants to
        receive a state of.

   timestamp: 32 bits
        The timestamp of a STATE_QUERY packet specifies the time at
        which the application generated the query.

6.5. Multiplexing RTP/I Sessions

   As with RTP [Sch99] the multiplexing of multiple RTP/I streams is
   provided by the transport destination address of the stream (network
   address and port number). A session involving more than one
   distributed interactive medium SHOULD transmit the data for the
   different media to separate transport addresses. Separate media



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 14]


RTP/I                                                      December 1999


   streams SHOULD NOT be carried in a single RTP/I session.

6.6. RTP/I and ALF/ILP Oriented Reliability Mechanisms

   Many fields of the RTP/I data packet header are directly useful for
   ALF/ILP oriented reliability mechanisms. The information contained in
   the RTP/I header fields SHOULD NOT be duplicated for reliability
   purposes. Instead the reliability mechanism SHOULD link into the
   RTP/I header and directly reuse the information of the RTP/I header
   fields. However the reliability mechanisms MUST NOT modify any of the
   fields besides the X flag, the RT field, the 16 bits field reserved
   for reliability purposes, and the reliability header extension (if
   present).

   The X flag SHOULD only be set if the reliability mechanism specified
   by the RT field requires more information than can be fit into the 16
   bits reserved for reliability purposes. If the X flag is set, the
   timestamp in the RTP/I header MUST be followed by a header extension:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    length     |         additional information ...            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   The length field specifies the length of the header extension in
   multiples of 4 octets, excluding the first 4 octets. Therefore a
   length value of 0 is valid.  The additional information for
   reliability purposes follows the length field of the header
   extension.

6.7. Profile-Specific Modifications to the RTP/I header

   The existing RTP/I data packet header is believed to be complete for
   the set of functions required in common across all the applications
   that RTP/I might use. However, in keeping with the ALF design
   principle, the header MAY be tailored to the needs of a specific
   distributed interactive media sub-class. This tailoring MUST be done
   in a way that allows generic services and functionality to work for
   the new profile. Specifically a profile MUST preserve the semantics
   of the four packet types and it MUST NOT define new RTP/I data packet
   types.

   Additional information that is required for a particular payload
   format 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.

   If a particular sub-class of distributed interactive media needs
   additional information that do not fit into the 8 bits reserved for



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 15]


RTP/I                                                      December 1999


   this purpose and which are independent of the payload format, then
   the profile for this sub-class SHOULD define additional RTP/I data
   packet header fields. These fields SHOULD follow the reliability
   extension header, if it is present. If no reliability extension
   header is present, the additional fields SHOULD follow the timestamp
   field of the RTP/I data packet header. This allows profile
   independent services to work properly in the presence of profile
   specific additional header fields.

   If it turns out that additional information is needed in common
   across all profiles, then a new version of RTP/I SHOULD be defined to
   make a permanent change to the RTP/I data packet header.

7. RTP/I Control Protocol -- RTCP/I

   The RTP/I control protocol (RTCP/I) is based on the periodic
   transmission of control packets to all participants in a session,
   using the same distribution mechanism as the data packets. Because of
   the redundancy included in this approach, RTCP/I does not require any
   additional reliability mechanisms. The underlying protocol MUST
   provide multiplexing of the data and control packets, for example
   using separate port numbers with UDP. RTCP/I provides three main
   functions:

   1. It provides meta information about the sub-components, e.g.
      application level names for sub-components and whether a sub-
      component is currently needed to display the medium to the users.

   2. It conveys information about the participants of a session. This
      information includes a human-readable unique participant
      identifier (the CNAME). The CNAME can be used to let RTP/I
      cooperate with RTP.

   3. The first two functions require that all participants send RTCP/I
      packets, therefore the rate must be controlled in order for RTP/I
      to scale up to a large number of participants. By monitoring the
      control packets of the other participants, it is possible to
      estimate the overall number of participants and the average size
      of RTCP/I packets. These numbers are used to calculate the rate at
      which RTCP/I packets are sent by individual applications.

7.1. RTCP/I Packet Composition

   This specification defines four packet types for the RTP/I control
   protocol:

   SUBREP (subcomponent report): used to report on the sub-components
   present in a session. This includes information on the sub-component
   status and application level names for sub-components.

   SDES (source description): used to convey participant description



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 16]


RTP/I                                                      December 1999


   items, such as participant name, email, location, etc. Of particular
   interest is the CNAME, a human readable, unique identifier which can
   be used to identify participants across RTP and RTP/I sessions.

   BYE: indicates the end of participation.

   APP (application): used to carry application specific information.

   In RTCP/I there are no packets that report on the reception quality
   of individual participants. The reason for this is that RTP/I may be
   used over, or in combination with, reliability mechanisms that do
   packet retransmissions. It would therefore not be appropriate to
   convey information about packet loss rates, latency and jitter in
   RTCP/I packets. Instead the reliability mechanisms are expected to
   provide this information. In the case that a given sub-class of
   distributed interactive media does not use retransmission oriented
   reliability (e.g battlefield simulations) an RTP/I profile MAY
   specify reception quality reports as a profile specific extension to
   RTCP/I.

   RTCP/I packets are transmitted in compound packets. Each compound
   packet MUST contain a SDES packet as the first RTCP/I packet. It MAY
   also contain other RTCP/I packets. This structure allows to verify
   that a correct RTCP/I packet has been received and not a mis-
   addressed non-RTCP/I packet.

   An implementation SHOULD ignore incoming RTCP/I packets with types
   unknown to it. Additional RTCP/I packet types may be registered with
   the Internet Assigned Numbers Authority (IANA) as described in
   Section 11.

7.2. RTCP/I Transmission Interval

   RTCP/I is designed to scale over session sizes ranging from only a
   few participants to large groups of participants. As with the control
   protocol of RTP [Sch99] this requires that the rate at which RTCP/I
   compound packets are sent by individual applications decreases with
   the number of participants and the average size of the RTCP/I
   compound packets.

   For each session we assume that the bandwidth available for RTCP/I
   usage is set to a fixed maximum amount. This amount includes network
   and transport headers, since this is the value that resource
   reservation systems need to know. The available bandwidth for RTCP/I
   usage MAY be a small and known fraction of the total bandwidth
   available for the session, or it MAY be specified explicitly via
   external means, such as a session announcement facility.

   In multicast environments the transmission of RTCP/I packets MUST be
   scheduled in a way so that the overall average RTCP/I data-rate of
   the whole session is unlikely to exceed the amount of bandwidth



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 17]


RTP/I                                                      December 1999


   available for RTCP/I. Typically such a scheduling algorithm
   calculates the transmission interval between two RTCP/I packets from
   the same participant based on the maximum available bandwidth for
   RTCP/I usage, the number of participants, and the average size of
   RTCP/I packets. In addition there SHOULD be a minimum value set for
   the transmission interval. This avoids bursty traffic when the
   traffic generated by a small group is not smoothed according to the
   law of large numbers. The RECOMMENDED value for this minimal
   transmission interval is 5 seconds. Profiles MAY specify a different
   minimal value. In unicast sessions involving only two participants
   the applications MAY choose to transmit RTCP/I packets at a fixed
   rate.

   The algorithm described in Section 7.3 demonstrates how the
   transmission of RTCP/I packet can be scheduled so that RTCP/I remains
   scalable. It is an adaptation of the algorithm used for RTCP [Sch99]
   and exhibits the same characteristics:

   o The calculated interval between RTCP/I packets scales linearly with
     the number of members in the group. It is this linear factor which
     allows for a constant amount of control traffic when summed across
     all members.

   o The interval between RTCP/I packets is varied randomly over the
     range [0.5,1.5] times the calculated interval to avoid unintended
     synchronization of all participants [Flo93,Flo94]. The first RTCP/I
     packet sent after joining a session is also delayed by a random
     variation of half the minimum RTCP/I interval.

   o A dynamic estimate of the average compound RTCP/I packet size is
     calculated, including all those received and sent, to automatically
     adapt to changes in the amount of control information carried.

   o Since the calculated interval depends on the number of observed
     group members, there may be undesirable start-up effects when a new
     user joins an existing session, or many users simultaneously join a
     new session. These new users will initially have incorrect
     estimates of the group membership, and thus their RTCP/I
     transmission interval will be too short. This problem can be
     significant if many users join the session simultaneously. To deal
     with this, an algorithm called "timer reconsideration" is employed.
     This algorithm implements a simple back-off mechanism which causes
     users to hold back RTCP/I packet transmission if the group sizes
     are increasing.

   o When users leave a session, either with a BYE or by timeout, the
     group membership decreases, and thus the calculated interval should
     decrease. A "reverse reconsideration" algorithm is used to allow
     members to more quickly reduce their intervals in response to group
     membership decreases.




Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 18]


RTP/I                                                      December 1999


   o BYE packets are given different treatment than other RTCP/I
     packets. When a user leaves a group, and wishes to send a BYE
     packet, it may do so before its next scheduled RTCP/I packet.
     However, transmission of BYE's follows a back-off algorithm which
     avoids floods of BYE packets should a large number of members
     simultaneously leave the session.

7.2.1. Maintaining the number of session members

   Calculation of the RTCP/I 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 SHOULD be
   created in a table indexed by the PID to keep track of them. Entries
   MAY be deleted from the table when an RTCP/I BYE packet with the
   corresponding PID is received, except that some straggler data
   packets might arrive after the BYE and cause the entry to be
   recreated. Instead, the entry SHOULD be marked as having received a
   BYE and then deleted after an appropriate delay.

   A participant MAY mark another site inactive if no RTP/I or RTCP/I
   packet has been received for a small number of RTCP/I report
   intervals (5 is RECOMMENDED). This provides some robustness against
   packet loss. All sites MUST have the same value for this multiplier
   and must calculate roughly the same value for the RTCP/I report
   interval in order for this timeout to work properly. Therefore, this
   multiplier SHOULD be fixed for a particular profile.

   For sessions with a very large number of participants, it may be
   impractical to maintain a table to store the PID and state
   information for all of them. An implementation MAY use a sampling
   approach, as described for RTP in [Ros98], to reduce the storage
   requirements. An implementation MAY use any other algorithm with
   similar performance. A key requirement is that any algorithm
   considered SHOULD NOT substantially underestimate the group size,
   although it MAY overestimate.

7.3. RTCP/I Packet Send and Receive Rules

   This section is an adaptation of Section 6.3 from Internet Draft
   ietf-avt-rtp-new-03.txt. The main difference is that there is no
   notion of active senders for distributed interactive media. The
   distinction between active senders and other participants is not
   required because in RTCP/I the PID is unique (and therefore the CNAME
   of active senders is not required as urgently as for RTP).

   The rules for how to send, and what to do when receiving an RTCP/I
   packet are outlined here. An implementation that allows operation in
   a multicast environment or a multi-point unicast environment MUST
   meet the scalability goals described in Section 7.2. Such an
   implementation MAY use an algorithm other than the one defined here
   so long as it provides equivalent or better performance. As mentioned



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 19]


RTP/I                                                      December 1999


   above an implementation that is constrained to two-party unicast
   operation MAY omit this algorithm.

   To execute these rules, a session participant must maintain several
   elements of state information:

      tp: the last time an RTCP/I packet was transmitted;

      tc: the current time;

      tn: the next scheduled transmission time of an RTCP/I packet;

      pmembers: the estimated number of session members at the time tn
      was last recomputed;

      members: the most current estimate for the number of session
      members;

      bw: The target RTCP/I bandwidth, i.e., the total bandwidth that
      will be used for RTCP/I packets by all members of this session, in
      bytes per second.

      avg_rtcpi_size: The average compound RTCP/I packet size, in
      octets, over all RTCP/I packets sent and received by this
      participant.

      initial: Flag that is true if the application has not yet sent an
      RTCP/I packet.

   Many of these rules make use of the "calculated interval" between
   packet transmissions. This interval is described in the following
   section.

7.3.1. Computing the RTCP/I transmission interval

   To maintain scalability, the average interval between packets from a
   session participant should scale with the group size. This interval
   is called the deterministic calculated interval. It is obtained by
   combining a number of the pieces of state described above. The (non-
   deterministic) calculated interval T is then determined as follows:

    1. If the participant has not yet sent an RTCP/I packet (the
       variable initial is true), the constant Tmin is set to one half
       of the minimal report interval seconds (2.5 unless stated
       otherwise in the RTP/I profile), else it is set to the minimal
       report interval (5 unless stated otherwise in an RTP/I profile).

    2. The deterministic calculated interval Td is set to max(Tmin,
       members*avg_rtcpi_size/bw).

    3. The calculated interval T is set to a number uniformly



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 20]


RTP/I                                                      December 1999


       distributed between 0.5 and 1.5 times the deterministic
       calculated interval.

    4. The resulting value of T is divided by e-3/2=1.21828 to
       compensate for the fact that the unconditional reconsideration
       algorithm converges to an RTCP/I bandwidth value below the
       intended average.

7.3.2. Initialization

   Upon joining the session, the participant initializes tp to the
   current time, pmembers to 1, members to 1, bw to the total amount of
   bandwidth available for RTCP/I, initial to true, and avg_rtcpi_size
   to the size of the RTCP/I compound packet that would be constructed
   if one where to be sent immediately. The calculated interval T is
   then computed, and the first packet is scheduled for time tn = T.
   This means that a transmission timer is set which expires at time T.
   Note that an application MAY use any desired approach for
   implementing this timer.

   The participant adds its own PID to the member table.

7.3.3. Receiving an RTP/I or non-BYE RTCP/I packet

   When an RTP/I or RTCP/I packet is received from a participant whose
   PID is not in the member table, the PID is added to the table, and
   the value for members is updated.

   For each compound RTCP/I packet received, the value of avg_rtcpi_size
   is updated: avg_rtcpi_size = (1/16)*packet_size + (15/16)*
   avg_rtcpi_size, where packet_size is the size of the RTCP/I packet
   just received.

7.3.4. Receiving an RTCP/I BYE packet

   Except as described in Section 7.3.7 for the case when an RTCP/I BYE
   is to be transmitted, if the received packet is an RTCP/I BYE packet,
   the PID is checked against the member table. If present, the entry is
   removed from the table, and the value for members is updated.
   Furthermore, to make the transmission rate of RTCP/I packets more
   adaptive to changes in group membership, the following "reverse
   reconsideration" algorithm SHOULD be executed when a BYE packet is
   received that reduces members to a value less than pmembers:

   o The value for tn is updated according to the following formula:
     tn = tc + (members/pmembers)(tn - tc).

   o The value for tp is updated according the following formula:
     tp = tc - (members/pmembers)(tc - tp).

   o The next RTCP/I packet is rescheduled for transmission at time tn,



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 21]


RTP/I                                                      December 1999


     which is now earlier.

   o The value of pmembers is set equal to members.

   This algorithm does not prevent the group size estimate from
   incorrectly dropping to zero for a short time due to premature time-
   outs when most participants of a large session leave at once but some
   remain. The algorithm does make the estimate return to the correct
   value more rapidly. This situation is unusual enough and the
   consequences are sufficiently harmless that this problem is deemed
   only a secondary concern.

7.3.5. Timing Out a PID

   At occasional intervals, the participant MUST check to see if any of
   the other participants time out. To do this, the participant computes
   the deterministic calculated interval (without the randomization
   factor) Td. Any other session member who has not sent a packet since
   time tc - MTd (M is the timeout multiplier, and defaults to 5) is
   timed out. This means that its PID is removed from the member list,
   and members is updated.

   If any members time out, the reverse reconsideration algorithm
   described in Section 7.3.4 SHOULD be performed.

   The participant MUST perform this check at least once per RTCP/I
   transmission interval.

7.3.6. Expiration of Transmission Timer

   When the packet transmission timer expires, the participant performs
   the following operations:

   o The transmission interval T is computed as described in Section
     7.3.1, including the randomization factor.

   o If tp + T is less than or equal to tc, an RTCP/I packet is
     constructed and transmitted. tp is set to tc, then another value
     for T is calculated as in the previous step and tn is set to tc +
     T. The transmission timer is set to expire again at time tn. If tp
     + T is greater than tc, tn is set to tp + T. No RTCP/I packet is
     constructed or transmitted. The transmission timer is set to expire
     at time tn.

   o pmembers is set to members.

   If an RTCP/I packet is transmitted, the value of initial is set to
   FALSE. Furthermore, the value of avg_rtcpi_size is updated:
   avg_rtcpi_size = (1/16)*packet_size + (15/16)* avg_rtcpi_size, where
   packet_size is the size of the RTCP/I packet just transmitted.




Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 22]


RTP/I                                                      December 1999


7.3.7. Transmitting a BYE Packet

   When a participant wishes to leave a session, a BYE packet is
   transmitted to inform the other participants of the event. In order
   to avoid a flood of BYE packets when many participants leave the
   session, a participant MUST execute the following algorithm if the
   number of members is more than 50 when the participant chooses to
   leave. This algorithm usurps the normal role of the members variable
   to count Bye packets instead:

   o When the participant decides to leave the session, tp is reset to
     tc, the current time, members and pmembers are initialized to 1,
     initial is set to true, and avg_rtcpi_size is set to the size of
     the BYE packet. The calculated interval T is computed. The BYE
     packet is then scheduled for time tn = tc + T.

   o Every time a BYE packet from another participant is received,
     members is incremented by 1 regardless of whether that participant
     exists in the member table or not, and when sampling is in use,
     regardless of whether or not the BYE would be included in the
     sample. members is NOT incremented when other RTCP/I packets or
     RTP/I packets are received, but only for BYE packets.

   o Transmission of the BYE packet then follows the rules for
     transmitting a regular RTCP/I packet, as above.

   This allows BYE packets to be sent right away, yet controls their
   total bandwidth usage. In the worst case, this could cause RTCP/I
   control packets to use twice the bandwidth as normal (10%) -- 5% for
   non-BYE RTCP/I packets and 5% for BYE packets.

   A participant that does not want to wait for the above mechanism to
   allow transmission of a BYE packet MAY leave the group without
   sending a BYE at all. That participant will eventually be timed out
   by the other group members.

   If the group size estimate members is less than 50 when the
   participant decides to leave, the participant MAY send a BYE packet
   immediately. Alternatively, the participant MAY choose to execute the
   above BYE backoff algorithm.

   In either case, a participant which never sent an RTP/I or RTCP/I
   packet MUST NOT send a BYE packet when they leave the group.

7.4. RTCP/I Packet Formats

7.4.1. RTPC/I Sub-Component Report Packet

   The RTCP/I sub-component report (SUBREP) packet is used to announce
   the sub-components present in a session, to indicate which sub-
   components are actively used to display the medium to the users, and



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 23]


RTP/I                                                      December 1999


   to provide information for the mapping from sub-component IDs to
   application level names.

   A report for a sub-component includes its current status: active or
   passive. The active sub-components of an application at any point in
   time are those sub-components which are required by the application
   to present the interactive medium at that specific time. A sub-
   component which is active for at least one participant should be
   reported as active for the session.

   An application level name allows an application to identify the sub-
   component. An application MAY use the application level name to
   decide whether it is interested in the sub-component without having
   received a state for that sub-component. A given payload type or
   profile MAY choose not to use the mapping for sub-component IDs to
   application level names. In this case the SUBREPS do not contain
   application level names. This can be reasonable if the state of sub-
   components is transmitted frequently or if the required information
   can be encoded in the sub-component ID. If a payload type or profile
   does not use the mapping as presented here it SHOULD NOT use a
   different algorithm for performing the mapping between application
   level names and sub-component IDs. This would prevent generic RTP/I
   based services from working properly.

   When a sub-component has not been reported by any participant for a
   certain number of report intervals, the sub-component is regarded as
   no longer present in the session (i.e. it timed out). This
   information MAY be used by generic services and applications to
   determine the set of sub-components present in a session. The
   RECOMMENDED value for the number of report intervals until a sub-
   component is timed out is 6.

   SUBREP packets SHOULD be transmitted so that each sub-component
   present in the session is, on average, reported once per report
   interval. This allows applications and generic services to get a
   quick overview of the sub-components, while it does not flood the
   network with duplicates of sub-component reports. The following
   algorithm is given as an example, other algorithms for sending SUBREP
   packets MAY be used.

   Every time when an RTPC/I packet is to be transmitted the participant
   checks whether any sub-components for which it tracks the state have
   not been reported by any other participant since tc-2*Td. All these
   unreported sub-components are then reported using a SUBREP packet. If
   a sub-component has been reported as passive by a remote application
   and that same sub-component is active for the local application, the
   local application reports that sub-component as active. This could
   result in two reports being sent for a single sub-component in a
   single report interval. However, this situation will not last, since
   the next time the remote application checks for sub-component
   reports, it will see the active report and will count that sub-



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 24]


RTP/I                                                      December 1999


   component as reported for the report interval. This algorithm is
   simple, robust, and scalable - in most cases each sub-component is
   reported only once per report interval, independent of the number of
   participants.

   The following brief calculation shows that the data-rate consumed by
   the announce/listen approach is acceptable, even with sessions that
   involve multiple hundrets of sub-components. Let us assume a rather
   large session with 1000 sub-components and with long application
   level names (20 bytes on average). Further we assume that at least
   every 60 seconds all mapping information should be available.
   Neglecting header information this would result in 1000*(20+8)=28000
   bytes that are transmitted for subcomomponent ID to application level
   name mapping. This is equivalent to a datarate of 28000*8/60=3.7
   kBit/s if this information is transmitted every 60 seconds. This
   seems reasonable for a large session.

   The format of the RTCP/I SUBREP packet is as follows:

    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=0|N|    SC   |     TYPE      |            length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  participant identifier (PID)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |A|A|  ...  |                    padding                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    subcomponent identifier 1 (SUBID) most significant word    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   subcomponent identifier 1 (SUBID) least significant word    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | name length 1 |     application level name for SUBID 1 ...    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    subcomponent identifier 2 (SUBID) most significant word    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   subcomponent identifier 2 (SUBID) least significant word    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | name length 2 |     application level name for SUBID 2 ...    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             ...                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   version (V): 2 bits
        These bits hold the RTCP/I version under which this packet was
        constructed. This memorandum specifies version 0 of RTCP/I.

   name (N): 1 bit
        This bit is set if and only if the sub-component IDs contained
        in this packet are followed by an application level name.




Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 25]


RTP/I                                                      December 1999


   sub-component count (SC): 5 bits
        This field contains the number of reported sub-components in
        this packet.

   type: 8 bits
        This field identifies the type of the RTCP/I packet. For SUBREP
        packets the type is 70. RTCP/I type values of 80 and below are
        reserved for usage by future versions of RTCP/I. Profiles MAY
        specify additional RTCP/I packet types between 80 and 255. An
        example for such an additional RTCP/I packet could be reception
        quality reports for distributed interactive media which do not
        employ retransmissions in order to establish reliability.

   length: 16 bits
        The length field specifies the length of this packet in units of
        32 bits. It excludes the first two 32 bit words of the packet.

   participant identifier (PID): 32 bits
        This field contains the PID of the original sender of this
        packet.

   active (A): 1 bit per reported sub-component
        One active bit is present for each reported sub-component. The
        bit for a sub-component is set if and only if the sub-component
        is active. Following these bits are padding bits that pad the
        active bits to a 32 bit boundary. If the number of active bits
        is 32 then there are no padding bits.

   subcomponent identifier (SUBID): 64 bits per reported sub-component
        These are the subcomponent identifiers of the reported sub-
        components. They MUST occur in the same order as the active
        bits.

   name length: 8 bits
        This field is present for every reported sub-component if and
        only if the N bit is set. It contains the length of the
        application level name in octets. This length does not include
        any padding.

   application level name: size as indicated by name length
        This field is present for every reported sub-component if and
        only if the N bit is set. It contains the application level
        name. If the name does not end at a 32 bit boundary, then a
        minimal amount of padding octets are appended to the name so
        that a full 32 bit boundary is reached.

7.4.2. RTCP/I Source Description Packet

   The RTCP/I source description packet (SDES) and the participant
   description items contained in this packet are almost identical to
   those used for RTCP.



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 26]


RTP/I                                                      December 1999



    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=0|R|   IC    |     type      |             length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  participant identifier (PID)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   source description items                    |
   |                              ...                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   The SDES packet is a two-level structure composed of a header and
   items describing the source. The items are described individually in
   subsequent sections.

   version (V), length, and PID:
        As described for the SUBREP packet (see above).

   reserved (R): 1 bit
        This bit is reserved for use with future versions of RTP/I.

   item count (IC): 5 bits
        The number of participant description items contained in this
        packet. A SDES packet MUST contain at least one CNAME item.

   type: 8 bits
        Contains the constant 72 to identify this as an RTCP/I SDES
        packet.

   Each source description 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/I bandwidth consumption.

   The text of a source description is encoded according to the UTF-8
   encoding specified in RFC 2279 [Yer98]. US-ASCII is a subset of this
   encoding and requires no additional encoding. The 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. Following the last item a minimal
   amount of padding octets MUST be appended to pad to the next 32-bit
   boundary.

   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



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 27]


RTP/I                                                      December 1999


   from one common space to promote shared use and to simplify profile-
   independent applications. Additional items may be registered with the
   IANA.

6.4.2.1 CNAME: Canonical end-point identifier participant description
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 MUST be included in each source description
   item, in order to ensure cooperation with distributed continuous
   non-interactive media that use RTP. It has the following properties:

   o Like the PID identifier, the CNAME identifier SHOULD be unique
     among all participants within one RTP/I session. It SHOULD be the
     same for a single participant that participates in multiple RTP and
     RTP/I sessions.

   o To provide a binding across multiple media tools used by one
     participant in a set of related RTP and RTP/I sessions, the CNAME
     SHOULD be fixed for that participant.

   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 [Moc87a], RFC
   1035 [Moc87b] and Section 2.1 of RFC 1123 [Bra89]; or the standard
   ASCII representation of the host's numeric address on the interface
   used for the RTP/I 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



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 28]


RTP/I                                                      December 1999


   "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 PID 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/I and 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.

6.4.2.2 NAME: User name participant description 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.2.3 EMAIL: Electronic mail address participant description 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 [21], for
   example, "John.Doe@megacorp.com". The EMAIL value is expected to
   remain constant for the duration of a session.

6.4.2.4 PHONE: Phone number participant description item




Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 29]


RTP/I                                                      December 1999



    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.

6.4.2.5 LOC: Geographic user location participant description 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.2.6 TOOL: Application or tool name participant description 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 app. ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   A string giving the name and possibly version of the application
   generating the stream, e.g., "whiteboard 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.2.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



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 30]


RTP/I                                                      December 1999


   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 SUBREPs are sent, thus impairing the performance of the
   protocol. In particular, it SHOULD NOT be included 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/I 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/I report intervals.

6.4.2.8 PRIV: Private extensions participant description 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 ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   This item is used to define experimental or application-specific
   participant description 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/I 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



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 31]


RTP/I                                                      December 1999


   assigned a regular SDES item type registered with IANA so that no
   prefix is required. This simplifies use and increases transmission
   efficiency.

7.4.3. BYE: Goodbye RTCP/I 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=0| reserved  |     type      |             length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  participant identifier (PID)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | reason length |               reason for leaving    ...       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   The BYE packet indicates that a participant is leaving a session.

   version (V), reserved, length, PID:
        As described for the source description packet (see above).

   type: 8 bits
        Contains the constant 71 to identify this as an RTCP/I BYE
        packet.

   reason length: 8 bits
        The reason length is optional and only present if a reason for
        leaving is included in the packet. It defines the length of the
        reason excluding any padding octets.

   reason for leaving: length as specified in reason length
        The reason field may contain an application specific description
        for the reason why a participant has left the session. It is
        followed by a minimal amount of padding octets that are
        necessary to pad the packet to a full 32 bit boundary.

7.4.4. APP: Application-defined RTCP/I 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=0|R| subtype |     type      |             length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  participant identifier (PID)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          name (ASCII)                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   application-dependent data                 ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+




Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 32]


RTP/I                                                      December 1999


   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 IANA using an RTCP/I packet type.

   version (V), reserved (R), length, participant identifier PID:
        As described for the source description packet (see above).

   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 73 to identify this as an RTCP/I 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.

   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/I
        itself. It MUST be a multiple of 32 bits long.

7.5. Allocation of RTCP/I bandwidth

   As explained above, this specification defines several source
   description items in addition to the mandatory CNAME item. It also
   provides a means to define new application-specific RTCP/I packet
   types. Applications should exercise caution in allocating control
   bandwidth to this additional information because it will slow down
   the rate at which sub-component reports are sent, thus impairing the
   performance of the protocol. It is RECOMMENDED that no more than 20%
   of the RTCP/I bandwidth allocated to a single participant be used to
   carry the additional information. Furthermore, it is not intended
   that all source description items will 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



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 33]


RTP/I                                                      December 1999


   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/I interval, 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
   ParticipantDescription 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 PID for each participant, for example in a
   multimedia conference composed of multiple RTP and RTP/I sessions for
   more than one medium, the additional participant description
   information MAY be sent in only one RTP or RTP/I session. The other
   sessions would carry only the CNAME item. In particular, this
   approach SHOULD be applied when a single distributed interactive
   medium is transmitted over multiple RTP/I sessions (e.g. a
   distributed virtual environment which is partitioned into several
   regions).

8. Security

   Lower layer protocols may eventually provide all the security
   services that may be desired for applications of RTP/I, including
   authentication, integrity, and confidentiality. These services have
   been specified for IP in [Ken98]. An application MAY rely on these
   lower layer protocols to provide the required security.

   Alternatively, other services, other implementations of services and
   other algorithms MAY be defined for RTP/I in the future if warranted.
   Specifically, a profile MAY specify which services and algorithms
   should be offered by applications, and MAY provide guidance as to
   their appropriate use.

9. RTP/I over Network and Transport Protocols

   This section describes issues specific to carrying RTP/I packets
   within particular network and transport protocols. The following
   rules apply unless superseded by protocol-specific definitions
   outside this specification.

   RTP/I relies on the underlying protocol(s) to provide demultiplexing
   of RTP/I data and RTCP/I control streams. For UDP and similar
   protocols, RTP/I SHOULD use an even port number and the corresponding
   RTCP/I stream SHOULD use the next higher (odd) port number. If an



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 34]


RTP/I                                                      December 1999


   application is supplied with an odd number for use as the RTP/I port,
   it SHOULD replace this number with the next lower (even) number.

   In a unicast session, applications SHOULD be prepared to receive
   RTP/I data and control on one port pair and send to another.

   It is RECOMMENDED that distributed interactive media that require
   more than one RTP/I session (e.g. for spatial partitioning in
   military battlefield simulations) use a set of contiguous port
   numbers. The port numbers MUST be distinct because of a widespread
   deficiency in existing operating systems that prevents use of the
   same port with multiple multicast addresses, and for unicast, there
   is only one permissible address.  Thus for layer n, the data port is
   P + 2n, and the control port is P + 2n + 1. When IP multicast is
   used, the addresses MUST also be distinct because multicast routing
   and group membership are managed on an address granularity. However,
   allocation of contiguous IP multicast addresses cannot be assumed
   because some groups may require different scopes and may therefore be
   allocated from different address ranges.

10. Summary of Protocol Constants

   This section contains a summary listing of the constants defined in
   this specification.

   The RTP/I payload type (PT) constants are defined in profiles rather
   than this document. However, the octet of the RTP/I header which
   contains the last bit of the type field and the payload type MUST
   avoid the reserved value 72 to distinguish RTP/I packets from the
   RTCP/I SDES packet type. This restriction means that payload type 72
   is reserved.

   RTP/I packet types

   abbrev.      name               value
   EVENT        event                  0
   STATE        state                  1
   DELTA_STATE  delta state            2
   STATE_QUERY  state query            3

   Additional RTP/I packet types MAY be specified in future versions of
   RTP/I.

   RTCP/I packet types

   abbrev.    name                   value
   SUBREP     sub-component report     70
   BYE        goodbye                  71
   SDES       source description       72
   APP        application-defined      73




Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 35]


RTP/I                                                      December 1999


   Additional RTCP/I packet types may be registered through IANA (see
   Section 11).

   SDES types

   abbrev.    name                              value
   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

   Additional RTCP/I packet types may be registered through IANA (see
   Section 11).

   RTP/I reliability types (RT)

   no reliability                   0
   reliable transport               1

   Additional RT values may be registered through IANA (see Section 11).

11. IANA Considerations

   Additional RTCP/I packet types, SDES types and RT values may be
   registered through the Internet Assigned Numbers Authority (IANA).
   Since these number spaces are small, allowing unconstrained
   registration of new values would not be prudent. To facilitate review
   of requests and to promote shared use of new types among multiple
   applications, requests for registration of new values must be
   documented in an RFC or other permanent and readily available
   reference such as the product of another cooperative standards body
   (e.g., ITU-T). Other requests may also be accepted, under the advice
   of a "designated expert." (Contact the IANA for the contact
   information of the current expert.)

12. Full Copyright Statement

   Copyright (C) The Internet Society (1999). All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works. However, this
   document itself may not be modified in any way, such as by removing
   the copyright notice or references to the Internet Society or other



Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 36]


RTP/I                                                      December 1999


   Internet organizations, except as needed for the purpose of
   developing Internet standards in which case the procedures for
   copyrights defined in the Internet Standards process must be
   followed, or as required to translate it into languages other than
   English.

   The limited permissions granted above are perpetual and will not be
   revoked by the Internet Society or its successors or assigns.

   This document and the information contained herein is provided on an
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

13. Addresses of Authors

   Martin Mauve
   Volker Hilt
   Christoph Kuhmuench
   Juergen Vogel
   Werner Geyer
   Wolfgang Effelsberg


   Praktische Informatik IV
   University of Mannheim
   L15, 16
   68131 Mannheim
   Germany


   e-mail:
   {mauve,hilt,cjk,jvogel,geyer,effelsberg}@pi4.informatik.uni-mannheim.de



Acknowledgements

   We are especially greatful to Colin Perkins for very important
   discussions about all aspects of RTP/I and for his effort to review
   this draft.

   This work is supported by the European MECCANO Telematics for Research
   Project 4007 and by the German BMBF (Bundesministerium fuer Forschung
   und Technologie) with the "V3D2 Digital Library Initiative".






Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 37]


RTP/I                                                      December 1999


Bibliography

   [Bra89] R. Braden, "Requirements for internet hosts - application
           and support," STD 3, RFC 1123, Internet Engineering Task
           Force, Oct. 1989.


   [Bra97] S. Bradner, "Key words for use in RFCs to indicate requirement
           levels," Request for Comments (Best Current Practice) 2119, Internet
           Engineering Task Force, Mar.  1997.


   [Cla90] D. D. Clark and D. L. Tennenhouse, "Architectural
           considerations for a new generation of protocols," in Proc.
           of the ACM Symposium on Communications Architectures and
           Protocols, Philadelphia, Pennsylvania, Sept. 1990,
           pp 200-208.


   [Flo93] S. Floyd and V. Jacobson, "The synchronization of periodic
           routing messages," in Proc. of the ACM Symposium on
           Communications Architectures and Protocols, San Francisco,
           California, USA, Sept. 1993, pp. 33-44.


   [Flo94] S. Floyd and V. Jacobson, "The synchronization of periodic
           routing messages," IEEE/ACM Transactions on Networking,
           Vol. 2, No. 2, Apr. 1994, pp. 122-136.


   [Flo97] S. Floyd, V. Jacobson, C. Liu, S. McCanne, L. Zhang,
           "A reliable multicast framework for leight-weight sessions
           and application level framing," in: IEEE/ACM Transactions
           on Networking, Vol. 5, No. 6, Dec. 1997, pp. 784-803.


   [Ken98] S. Kent and R. Atkinson, "Security Architecture for the
           Internet Protocol," Internet Draft, Internet Engineering
           Task Force, July 1998.  Work in progress.


   [Mil92] D. L. Mills, "Network Time Protocol (Version 3)
           specification, implementation and analysis," DARPA
           Network Working Group Report RFC-1305, University of
           Delaware, 1992.


   [Moc87a] P. Mockapetris, "Domain names - concepts and facilities,"
            STD 13, RFC 1034, Internet Engineering Task Force,
            Nov. 1987.




Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 38]


RTP/I                                                      December 1999



   [Moc87b] P. Mockapetris, "Domain names - implementation and
            specification,"  STD 13, RFC 1035, Internet Engineering
            Task Force, Nov. 1987.


   [Per99] C. Perkins and J. Crowcroft, "On the use of RTP for shared
           workspace applications," UCL-CS research note RN/99/108,
           University College London, Dec. 1999.


   [Pos81] J. Postel, "Internet protocol,"  RFC 791, Internet
           Engineering Task Force, Sept. 1981.


   [Ros98] J. Rosenberg and H. Schulzrinne, "Sampling of the Group
           Membership in RTP," Internet Draft, Internet Engineering
           Task Force, November 1998.  Work in progress.


   [Sch99] H. Schulzrinne, S. Casner, R. Frederick, V. Jacoson, "RTP:
           A Transport Protocol for Real-Time Applications," Internet
           Draft, Internet Engineering Task Force, Aug. 1999, Work in
           progress, revision of RFC 1889.


   [Yer98] F. Yergeau, "UTF-8, a transformation format of ISO 10646,"
           RFC 2279, Internet Engineering Task Force, Jan. 1998.


























Mauve, Hilt, Kuhmuench, Vogel, Geyer, Effelsberg               [Page 39]