Aux Stream

Overview

The Auxilliary Stream service allows small amounts of data to be transmitted on a regular basis with best effort reliability and minimal overhead. In the current Macintosh implementation it is used to track cursor movements in the slide window. It could be used whenever frequent transmission (e.g., several times per second) of small amounts of data is required, without demand for reliability.

Each Aux Stream is limited to 32-bytes per transmission and is distinguished from other Aux Streams by a 32-bit Type field. The Type field has the same function as the Type field used by standard Aux Data , and it is drawn from the same space. In general, data selection/pruning is intended to work identically for Aux Stream as it does for Aux Data. I.e., data sources advertise what Types they have available and what bit-field they will use to represent each Type. Participants who wish to receive a particular Type from a particular source set the appropriate bit in their (source-specific) data selection bit-mask. If an Aux Data item and an Aux Stream are identified with identical Type fields, then they must both be selected or both be pruned together.

The above describes how the Aux Stream selection/pruning is intended to work, once reflectors have the ability to dissassemble and reassemble packets. In the current implementation, Aux Stream data is carried in video packets whenever video packets are being transmitted at a sufficiently high rate, and reflectors have no ability to extract Aux Stream data from video packets. Hence, whenever an Aux Stream source is transmitting video, an Aux Stream recipient must be receiving its video in order to receive its Aux Stream. When an Aux Stream source is not transmitting video, or when video is not being transmitted frequently enough, Aux Stream data is carried in a separate packet that is distributed to all who request it, as described in the preceding paragraph.

When video is outgoing, Aux Stream data is transmitted at the same frequency as the frame rate, and also whenever 1 half second has elapsed without an Aux Stream transmission. When video is not outgoing, the frequency is once every half second.

The original video packet format design did not anticipate the need to carry additional, non-video, payload in the same packet. Hence, the Aux Stream data is appended to the video data as if it were another square of video, but using a square ID that is outside the valid range (0-1199) for the largest size (320 x 240 pixel) video. The detection of an invalid square ID terminates video decompression, at which point the Aux Stream data can be extracted.

Aux Stream Payload


The following payload format is appended to the end of a video packet, or directly after the CU-SeeMe packet header when sent in its own Aux Stream packet. Aux Stream packets are identified by Data Type = kAuxStreamType = 107
    0              8              16             24            31
    +--------------+--------------+--------------+--------------+
    |     Square ID = 1201        |          Byte Count         |
    +--------------+--------------+--------------+--------------+
04h |                         Prune Bits                        |
    +--------------+--------------+--------------+--------------+
08h |                          Type[1]                          |
    +--------------+--------------+--------------+--------------+
0Ch |                     Data[1] (32 bytes)                    |
    |                                                           |
                                 ...
    |                                                           |
    +--------------+--------------+--------------+--------------+

                                 ...

    +--------------+--------------+--------------+--------------+
    |                          Type[n]                          |
    +--------------+--------------+--------------+--------------+
    |                     Data[n] (32 bytes)                    |
 
                                 ...
    |                                                           |
    +--------------+--------------+--------------+--------------+

00h - Square ID (2 bytes - unsigned integer)
The value 1201 is outside the range of any valid Square ID that would occur for actual video data. It triggers the video decompression routine to terminate processing.

02h - Byte Count (2 bytes - unsigned integer)
The total length of Aux Stream data, including this header. For a packet containing n Aux Stream types, it will be 8 + 36 * n.

04h - Prune Bits (4 bytes - unsigned integer)
The bit field which controls Aux Stream selection/pruning (ignored when Aux Stream data is appended to a video packet).


08h - Type[1] (4 bytes - unsigned char array)
The unique 32-bit identifier for the first Aux Stream payload.

0Ch - Data[1] (32 bytes - char)
32 bytes of arbitrary Aux Stream data for the first Type.

Above format to repeat for Type[i],Data[i], i = 1 to n, where n is the number of distinct Aux Stream Types in this packet.