Internet DRAFT - draft-ietf-avt-rtp-h263-video

draft-ietf-avt-rtp-h263-video



HTTP/1.1 200 OK
Date: Tue, 09 Apr 2002 01:08:50 GMT
Server: Apache/1.3.20 (Unix)
Last-Modified: Tue, 07 Apr 1998 05:43:50 GMT
ETag: "2e7a21-8093-3529bd16"
Accept-Ranges: bytes
Content-Length: 32915
Connection: close
Content-Type: text/plain


Internet Engineering Task Force                 Audio-Video Transport WG
INTERNET-DRAFT                                 C. Bormann / Univ. Bremen
                                                        L. Cline / Intel
                                                      G. Deisher / Intel
                                                       T. Gardos / Intel
                                                     C. Maciocco / Intel
                                                       D. Newell / Intel
                                                   J. Ott / Univ. Bremen
                                                G. Sullivan / PictureTel
                                                   S. Wenger / TU Berlin
                                                          C. Zhu / Intel

                                            Date Generated: 14 Jan. 1998

               RTP Payload Format for the 1998 Version of
                    ITU-T Rec. H.263 Video (H.263+)
                 <draft-ietf-avt-rtp-h263-video-01.txt>


Status of This Memo

This document is an Internet-Draft.  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 made obsolete 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."

To learn the current status of any Internet-Draft, please check the
"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), 
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or 
ftp.isi.edu (US West Coast).

Distribution of this document is unlimited.


1. Introduction

This document specifies an RTP payload header format applicable to the 
transmission of video streams generated based on the 1998 version of
ITU-T Recommendation H.263 [4].  Because the 1998 version of H.263 is a 
superset of the 1996 syntax, this format can also be used with the 1996 
version of H.263.

The 1998 version of ITU-T Recommendation H.263 added numerous coding 
options to improve codec performance over the 1996 version.  The 1998 
version is referred to as H.263+ in this document.  Among the new 
options, the ones with the biggest impact on the RTP payload 
specification and the error resilience of the video content are the 
slice structured mode, the independent segment decoding mode (ISD), the 
reference picture selection mode, and the scalability mode.  This 
section summarizes the impact of these new coding options on 
packetization.  Refer to [4] for more information on coding options.

The slice structured mode was added to H.263+ for three purposes: to 
provide enhanced error resilience capability, to make the bitstream more 
amenable to use with an underlying packet transport such as RTP, and to 
minimize video delay.  The slice structured mode supports fragmentation 
at macroblock boundaries.

With the independent segment decoding option, a video picture frame is 
broken into segments and encoded in such a way that each segment is 
independently decodable.  Utilizing ISD in a lossy network environment 
helps to prevent the propagation of errors from one segment of the 
picture to others.

The reference picture selection mode allows the use of an older 
reference picture rather than the one immediately preceding the current 
picture.  Usually, the last transmitted frame is implicitly used as the 
reference picture for inter-frame prediction.  If the reference picture 
selection mode is used, the data stream carries information on what 
reference frame should be used, indicated by the temporal reference as 
an ID for that reference frame.  The reference picture selection mode 
can be used with or without a back channel, which provides information 
to the encoder about the internal status of the decoder.  However, no 
special provision is made herein for carrying back channel information.

H.263+ also includes bitstream scalability as an optional coding mode.
Three kinds of scalability are defined: temporal, signal-to-noise ratio
(SNR), and spatial scalability.  Temporal scalability is achieved via 
the disposable nature of bi-directionally predicted frames, or B-frames.  
SNR scalability permits refinement of encoded video frames, thereby 
improving the quality (or SNR).  Spatial scalability is similar to SNR 
scalability except the refinement layer is twice the size of the base 
layer in the horizontal dimension, vertical dimension, or both.


2. Usage of RTP

When transmitting H.263+ video streams over the Internet, the output of 
the encoder can be packetized directly.  All the bits resulting from the 
bitstream including the fixed length codes and variable length codes 
will be included in the packet, with the only exception being that when 
the payload of a packet begins with a Picture, GOB, Slice, EOS, or EOSBS 
start code, the first two (all-zero) bytes of the start code are removed 
and replaced by setting an indicator bit in the payload header.

For H.263+ bitstreams coded with temporal, spatial, or SNR scalability, 
each layer may be transported to a different network address.  More 
specifically, each layer may use a unique IP address and port number 
combination.  The temporal relations between layers shall be expressed 
using the RTP timestamp so that they can be synchronized at the 
receiving ends in multicast or unicast applications.

The H.263+ video stream will be carried as payload data within RTP 
packets.  A new H.263+ payload header is defined in section 4.  This 
section defines the usage of the RTP fixed header and H.263+ video 
packet structure.


2.1 RTP Header Usage

Each RTP packet starts with a fixed RTP header.  The following fields of 
the RTP fixed header are used for H.263+ video streams:

Marker bit (M bit): The Marker bit of the RTP header is set to 1 when 
the current packet carries the end of current frame, and is 0 otherwise.

Payload Type (PT): The Payload Type shall specify the H.263+ video 
payload format.

Timestamp: The RTP Timestamp encodes the sampling instance of the first 
video frame data contained in the RTP data packet.  The RTP timestamp 
shall be the same on successive packets if a video frame occupies more 
than one packet.  In a multilayer scenario, all pictures corresponding 
to the same temporal reference should use the same timestamp.  If 
temporal scalability is used (if B-frames are present), the timestamp 
may not be monotonically increasing in the RTP stream.  If B-frames are 
transmitted on a separate layer and address, they must be synchronized 
properly with the reference frames.  Refer to the 1998 ITU-T 
Recommendation H.263 [4] for information on required transmission order 
to a decoder.  For an H.263+ video stream, the RTP timestamp is based on 
a 90 kHz clock, the same as that of the RTP payload for H.261 stream 
[5].  Since both the H.263+ data and the RTP header contain time 
information, it is required that those timing information run 
synchronously.  That is, both the RTP timestamp and the temporal 
reference (TR in the picture header of H.263) should carry the same 
relative timing information.  If necessary, mathematical rounding should 
be applied to the information of the H.263+ data stream to generate the 
RTP timestamp (this is especially true for the standard picture clock 
frequency of 30000/1001 Hz, and may also be true if custom picture clock 
frequencies are to be used; see [4] for details).


2.2 Video Packet Structure

A section of an H.263+ compressed bitstream is carried as a payload 
within each RTP packet.  For each RTP packet, the RTP header is followed 
by an H.263+ payload header, which is followed by a number of bytes of a 
standard H.263+ compressed bitstream.  The size of the H.263+ payload 
header is variable depending on the payload involved as detailed in the 
section 4.  The layout of the RTP H.263+ video packet is shown as:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    RTP Header                                               ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    H.263+ Payload Header                                    ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    H.263+ Compressed Data Stream                            ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Any H.263+ start codes can be byte aligned by an encoder by using the 
stuffing mechanisms of H.263+.  As specified in H.263+, picture, slice, 
and EOSBS start codes shall always be byte aligned, and GOB and EOS 
start codes may be byte aligned.  For packetization purposes, GOB start 
codes should be byte aligned, although this is not absolutely required 
herein since it is not required in H.263+.

All H.263+ start codes (Picture, GOB, Slice, EOS, and EOSBS) begin with 
16 zero-valued bits.  If a start code is byte aligned and it occurs at 
the beginning of a packet, these two bytes shall be removed from the 
H.263+ compressed data stream in the packetization process and shall 
instead be represented by setting a bit (the P bit) in the payload 
header.


3. Design Considerations

The goals of this payload format are to specify an efficient way of 
encapsulating an H.263+ standard compliant bitstream and to enhance the 
resiliency towards packet losses.  Due to the large number of different 
possible coding schemes in H.263+, a copy of the picture header with 
configuration information is inserted into the payload header when 
appropriate.  The use of that copy of the picture header along with the 
payload data can allow decoding of a received packet even in such cases 
in which another packet containing the original picture header becomes 
lost.

There are a few assumptions and constraints associated with this H.263+ 
payload header design.  The purpose of this section is to point out 
various design issues and also to discuss several coding options 
provided by H.263+ that may impact the performance of network-based 
H.263+ video.


o The optional slice structured mode described in annex K of H.263+ [4]
  enables more flexibility for packetization.  Similar to a picture
  segment that begins with a GOB header, the motion vector predictors in
  a slice are restricted to reside within its boundaries.  However,
  slices provide much greater freedom in the selection of the size and
  shape of the area which is represented as a distinct decodable region.  
  In particular, slices can have a size which is dynamically selected to 
  allow the data for each slice to fit into a chosen packet size.  
  Slices can also be chosen to have a rectangular shape which is
  conducive for minimizing the impact of errors and packet losses on 
  motion compensated prediction.  For these reasons, the use of the 
  slice structured mode is strongly recommended for any applications 
  used in environments where significant packet loss occurs.

o In non-rectangular slice structured mode, only complete slices should
  be included in a packet.  In other words, slices should not be
  fragmented across packet boundaries.  The only reasonable need for a 
  slice to be fragmented across packet boundaries is when the encoder 
  which generated the H.263+ data stream could not be influenced by an 
  awareness of the packetization process (such as when sending H.263+ 
  data through a network other than the one to which the encoder is 
  attached, as in network gateway implementations).  Optimally, each 
  packet will contain only one slice.

o The independent segment decoding (ISD) described in annex R of [4]
  prevents any data dependency across slice or GOB boundaries in the
  reference picture.  It can be utilized to further improve resiliency
  in high loss conditions.

o If ISD is used in conjunction with the slice structure, the 
  rectangular slice submode shall be enabled and the dimensions and 
  quantity of the slices present in a frame shall remain the same 
  between each two intra-coded frames (I-frames), as required in H.263+.  
  The individual ISD segments may also be entirely intra coded from time 
  to time to realize quick error recovery without adding the latency 
  time associated with sending complete INTRA-pictures.

o When the slice structure is not applied, the insertion of a 
  (preferably byte-aligned) GOB header can be used to provide resync 
  boundaries in the bitstream, as the presence of a GOB header 
  eliminates the dependency of motion vector prediction across GOB 
  boundaries.  These resync boundaries provide natural locations for 
  packet payload boundaries.

o H.263+ allows picture headers to be sent in an abbreviated form in 
  order to prevent repetition of overhead information that does not 
  change from picture to picture.  For resiliency, sending a complete 
  picture header for every frame is often advisable.  This means, that 
  especially in cases with high packet loss probability in which picture 
  header contents are not expected to be highly predictable, the sender 
  may always set the subfield UFEP in PLUSPTYPE to '001' in the H.263+ 
  video bitstream.

o In a multi-layer scenario, each layer may be transmitted to a 
  different network address.  The configuration of each layer such as 
  the enhancement layer number (ELNUM), reference layer number (RLNUM), 
  and scalability type should be determined at the start of the session 
  and should not change during the course of the session.

o All start codes can be byte aligned, and picture, slice, and EOSBS 
  start codes are always byte aligned.  The boundaries of these
  syntactical elements provide ideal locations for placing packet 
  boundaries.

o We assume that a maximum Picture Header size of 504 bits is
  sufficient.  The syntax of H.263+ does not explicitly prohibit larger 
  picture header sizes, but the use of such extremely large picture 
  headers is not expected.


4. H.263+ Payload Header

For H.263+ video streams, each RTP packet carries only one H.263+ video 
packet.  The H.263+ payload header is always present for each H.263+ 
video packet.  The payload header is of variable length.  A 16 bit field 
of the basic payload header may be followed by an 8 bit field for Video 
Redundancy Coding information, and/or by a variable length picture 
header as indicated by PLEN. These optional fields appear in the order 
given above when present.

If a picture header is included in the payload header, the length of the 
picture header in number of bytes is specified by PLEN.  The minimum 
length of the payload header is 16 bits, corresponding to PLEN equal to 
0 and no VRC information present.

The remainder of this section defines the various components of the RTP 
payload header.  Section five defines the various packet types that are 
used to carry different types of H.263+ coded data, and section six 
summarizes how to distinguish between the various packet types.


4.1 General H.263+ payload header

The H.263+ payload header is structured as follows:

 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  RR     |P|V|  PLEN     |PEBIT|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RR: 5 bits
  Reserved bits.  Shall be zero.

P: 1 bit
  Indicates the picture start or a picture segment (GOB/Slice) start or 
  a video sequence end (EOS or EOSBS).  Two bytes of zero bits then have 
  to be prefixed to the payload of such a packet to compose a complete
  picture/GOB/slice/EOS/EOSBS start code.  This bit allows the omission 
  of the two first bytes of the start codes, thus improving the 
  compression ratio.

V: 1 bit
  Indicates the presence of an 8 bit field containing information for 
  Video Redundancy Coding (VRC), which follows immediately after the 
  initial 16 bits of the payload header if present.  For syntax and 
  semantics of that 8 bit VRC field see section 4.2.

PLEN: 6 bits
  Picture header length in number of bytes.  If no additional picture 
  header is attached, PLEN is 0.  If PLEN>0, the additional picture 
  header is attached immediately following the rest of the payload 
  header.

PEBIT: 3 bits
  Indicates the number of bits that shall be ignored in the last byte of 
  the picture header.  If PLEN is zero, then PEBIT shall also be zero.


4.2 Video Redundancy Coding Header Extension

Video Redundancy Coding (VRC) is an optional mechanism intended to 
improve error resilience over packet networks.  Implementing VRC in 
H.263+ will require the Reference Picture Selection option described in 
Annex N.  By having multiple "threads" of independently inter-frame 
predicted pictures, damage of individual frame will cause distortions 
only within its own thread but leave the other threads unaffected.  From 
time to time, all threads converge to a so-called sync frame (an INTRA 
picture or a non-INTRA picture which is redundantly represented within 
multiple threads); from this sync frame, the independent threads are 
started again.  For a more complete description of VRC see [7].

While a VRC data stream is - like all H.263+ data - totally self-
contained, it may be useful for the transport hierarchy implementation 
to have knowledge about the current damage status of each thread.  On 
the Internet, this status can easily be determined by observing the 
marker bit, the sequence number of the RTP header, and the thread-id and 
a circling "packet per thread" number.  The latter two numbers are coded 
in the VRC header extension.

The format of the VRC header extension is as follows:

 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| TID | Trun  |S|
+-+-+-+-+-+-+-+-+

TID: 3 bits
  Thread ID.  Up to 7 threads are allowed. Each frame of H.263+ VRC data 
  will use as reference information only sync frames or frames within 
  the same thread.  By convention, thread 0 is expected to be the 
  "canonical" thread, which is the thread from which the sync frame 
  should ideally be used.  In the case of corruption or loss of the 
  thread 0 representation, a representation of the sync frame with a 
  higher thread number can be used by the decoder.  Lower thread numbers 
  are expected to contain equal or better representations of the sync 
  frames than higher thread numbers in the absence of data corruption or 
  loss.  See [7] for details.

Trun: 4 bits
  Monotonically increasing (modulo 16) 4 bit number counting the packet
  number within each thread.

S: 1 bit
  A bit that indicates that the packet content is for a sync frame.  An
  encoder using VRC may send several representations of the same "sync"
  picture, in order to ensure that regardless of which thread of 
  pictures is corrupted by errors or packet losses, the reception of at 
  least one representation of a particular picture is ensured (within at 
  least one thread).  The sync picture can then be used for the 
  prediction of any thread.  If packet losses have not occurred, then 
  the sync frame contents of thread 0 can be used and those of other 
  threads can be discarded (and similarly for other threads).  Thread 0 
  is considered the "canonical" thread, the use of which is preferable 
  to all others.  The contents of packets having lower thread numbers 
  shall be considered as generally preferred over those with higher 
  thread numbers.


5. Packetization schemes

5.1 Picture Segment Packets and Sequence Ending Packets (P=1)

A picture segment packet is defined as a packet that starts at the 
location of a Picture, GOB, or slice start code in the H.263+ data 
stream.  This corresponds to the definition of the start of a video 
picture segment as defined in H.263+.  For such packets, P=1 always.

An extra picture header can sometimes be attached in the payload header 
of such packets.  Whenever an extra picture header is attached as 
signified by PLEN>0, only the last six bits of its picture start code, 
'100000', are included in the payload header.  A complete H.263+ picture 
header with byte aligned picture start code can be conveniently 
assembled on the receiving end by prepending the sixteen leading '0' 
bits.

When PLEN>0, the end bit position corresponding to the last byte of the 
picture header data is indicated by PEBIT.  The actual bitstream data 
shall begin on an 8-bit byte boundary following the payload header.

A sequence ending packet is defined as a packet that starts at the 
location of an EOS or EOSBS code in the H.263+ data stream.  This 
delineates the end of a sequence of H.263+ video data (more H.263+ video 
data may still follow later, however, as specified in ITU-T 
Recommendation H.263).  For such packets, P=1 and PLEN=0 always.

The optional header extension for VRC may or may not be present as 
indicated by the V bit flag.


5.1.1 Packets that begin with a Picture Start Code

Any packet that contains the whole or the start of a coded picture shall 
start at the location of the picture start code (PSC), and should 
normally be encapsulated with no extra copy of the picture header. In 
other words, normally PLEN=0 in such a case.   However, if the coded 
picture contains an incomplete picture header (UFEP = "000"), then a 
representation of the complete (UFEP = "001") picture header may be 
attached during packetization in order to provide greater error 
resilience.  Thus, for packets that start at the location of a picture 
start code, PLEN shall be zero unless both of the following conditions 
apply:
1) The picture header in the H.263+ bitstream payload is incomplete
   (PLUSPTYPE present and UFEP="000"), and
2) The additional picture header which is attached is not incomplete
   (UFEP="001").

A packet which begins at the location of a Picture, GOB, slice, EOS, or 
EOSBS start code shall omit the first two (all zero) bytes from the 
H.263+ bitstream, and signify their presence by setting P=1 in the 
payload header.

Here is an example of encapsulating the first packet in a frame (without 
an attached redundant complete picture 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  RR     |1|V|0|0|0|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------------------------+
| bitstream data without the first two 0 bytes of the PSC       |
+---------------------------------------------------------------+


5.1.2 Packets that begin with GBSC or SSC

For a packet that begins at the location of a GOB or slice start code, 
PLEN may be zero or may be nonzero, depending on whether a redundant 
picture header is attached to the packet.  In environments with very low 
packet loss rates, or when picture header contents are very seldom 
likely to change (except as can be detected from the GFID syntax of 
H.263+), a redundant copy of the picture header is not required.  
However, in less ideal circumstances a redundant picture header should 
be attached for enhanced error resilience, and its presence is indicated 
by PLEN>0.

Assuming a PLEN of 9, below is an example of a packet that begins with a
GBSC or a SSC:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  RR     |1|V|0 0 1 0 0 1|PEBIT|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1 0 0 0 0 0| picture header starting with TR, PTYPE, ...       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ...                                                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ...           | bitstream data begins with GBSC/SCC ...       .
+-+-+-+-+-+-+-+-+-----------------------------------------------+

Notice that only the last six bits of the picture start code, '100000', 
are included in the payload header.  A complete H.263+ picture header 
with byte aligned picture start code can be conveniently assembled if 
needed on the receiving end by prepending the sixteen leading '0' bits.


5.1.3 Packets that Begin with an EOS or EOSBS Code

For a packet that begins with an EOS or EOSBS code, PLEN shall be zero, 
and no Picture, GOB, or Slice start codes shall be included within the 
same packet.  As with other packets beginning with start codes, the two 
all-zero bytes that begin the EOS or EOSBS code at the beginning of the 
packet shall be omitted, and their presence shall be indicated by 
setting the P bit to 1 in the payload header.

System designers should be aware that some decoders may interpret the 
loss of a packet containing only EOS or EOSBS information as the loss of 
essential video data and may thus respond by not displaying some 
subsequent video information.  Since EOS and EOSBS codes do not actually 
affect the decoding of video pictures, they are somewhat unnecessary to 
send at all.  Because of the danger of misinterpretation of the loss of 
such a packet, encoders are generally to be discouraged from sending EOS 
and EOSBS.

Below is an example of a packet containing an EOS code:

 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  RR     |1|V|0|0|0|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1|1|1|1|1|1|0|0|
+-+-+-+-+-+-+-+-+


5.2 Encapsulating Follow-On Packet (P=0)

A Follow-on packet contains a number of bytes of coded H.263+ data which 
does not start at a synchronization point.  That is, a Follow-On packet 
does not start with a Picture, GOB, Slice, EOS, or EOSBS header, and it 
may or may not start at a macroblock boundary.  Since Follow-on packets 
do not start at synchronization points, the data at the beginning of a 
follow-on packet is not independently decodable.  For such packets, P=0 
always.  If the preceding packet of a Follow-on packet got lost, the 
receiver may discard that Follow-on packet as well as all other 
following Follow-on packets.  Better behavior, of course, would be for 
the receiver to scan the interior of the packet payload content to 
determine whether any start codes are found in the interior of the 
packet which can be used as resync points.  The use of an attached copy 
of a picture header for a follow-on packet is useful only if the 
interior of the packet or some subsequent follow-on packet contains a 
resync code such as a GOB or slice start code.  PLEN>0 is allowed, since 
it may allow resync in the interior of the packet.  The decoder may also 
be resynchronized at the next segment or picture packet.

Here is an example of a follow-on packet (with PLEN=0):

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  RR     |0|V|0|0|0|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------------------------+
| bitstream data                                                |
+---------------------------------------------------------------+


6. Use of this payload specification

There is no syntactical difference between a picture segment packet and 
a Follow-on packet, other than the indication P=1 for picture segment or 
sequence ending packets and P=0 for Follow-on packets.  See the 
following for a summary of the entire packet types and ways to 
distinguish between them.

For a more detailed discussion on how to use the payload specification, 
the reader should refer to [8].

It is possible to distinguish between the different packet types by 
checking the P bit and the first 6 bits of the payload along with the 
header information.  The following table shows the packet type for 
permutations of this information (see also the picture/GOB/Slice header 
descriptions in H.263+ for details):

--------------+--------------+----------------------+-------------------
 First 6 bits | P-Bit | PLEN |  Packet              |  Remarks
 of Payload   |(payload hdr.)|                      |
--------------+--------------+----------------------+-------------------
 100000       |   1   |  0   |  Picture             |  Typical Picture
 100000       |   1   | > 0  |  Picture             |  Note UFEP
 1xxxxx       |   1   |  0   |  GOB/Slice/EOS/EOSBS |  See possible GNs
 1xxxxx       |   1   | > 0  |  GOB/Slice           |  See possible GNs
 Xxxxxx       |   0   |  0   |  Follow-on           |
 Xxxxxx       |   0   | > 0  |  Follow-on           |  Interior Resync
--------------+--------------+----------------------+-------------------

See [4] for details regarding the possible values of the six bits (a "1" 
bit followed by a five bit GN field explicit or emulated) of GOB, Slice, 
EOS, and EOSBS codes.

As defined in this specification, every start of a coded frame (as 
indicated by the presence of a PSC) has to be encapsulated as a picture 
segment packet.  If the whole coded picture fits into one packet of 
reasonable size (which is dependent on the connection characteristics), 
this is the only type of packet that needs to be observed.  Due to the 
high compression ratio achieved by H.263+ it is often possible to use 
this mechanism, especially for small spatial picture formats such as 
QCIF and typical Internet packet sizes around 1500 bytes.

If the complete coded frame does not fit into a single packet, two 
different ways for the packetization may be chosen.  In case of very low 
or zero packet loss probability, one or more Follow-on packets may be 
used for coding the rest of the picture.  Doing so leads to minimal 
coding and packetization overhead as well as to an optimal use of the 
maximal packet size, but does not provide any added error resilience.

The alternative is to break the picture into reasonably small partitions 
- called Segments - (by using the Slice or GOB mechanism), that do offer 
synchronization points.  By doing so and using the Picture Segment 
payload with PLEN>0, decoding of the transmitted packets is possible 
even in such cases in which the Picture packet containing the picture 
header was lost (provided any necessary reference picture is available). 
Picture Segment packets can also be used in conjunction with Follow-on 
packets for large segment sizes.


7. Security Considerations

RTP packets using the payload format defined in this specification are 
subject to the security considerations discussed in the RTP 
specification [1], and any appropriate RTP profile (for example [3]).
This implies that confidentiality of the media streams is achieved by 
encryption.  Because the data compression used with this payload format 
is applied end-to-end, encryption may be performed after compression so 
there is no conflict between the two operations.

A potential denial-of-service threat exists for data encodings using 
compression techniques that have non-uniform receiver-end computational 
load.  The attacker can inject pathological datagrams into the stream 
which are complex to decode and cause the receiver to be overloaded.
However, this encoding does not exhibit any significant non-uniformity.

As with any IP-based protocol, in some circumstances a receiver may be 
overloaded simply by the receipt of too many packets, either desired or 
undesired.  Network-layer authentication may be used to discard packets 
from undesired sources, but the processing cost of the authentication 
itself may be too high.  In a multicast environment, pruning of specific 
sources may be implemented in future versions of IGMP [5] and in 
multicast routing protocols to allow a receiver to select which sources 
are allowed to reach it.

A security review of this payload format found no additional 
considerations beyond those in the RTP specification.


8. References

[1] H. Schulzrinne, S. Casner, R. Frederick, V. Jacobson, "RTP : A
    Transport Protocol for Real-Time Applications", RFC 1889.

[2] "Video Codec for Audiovisual Services at px64 kbits/s", ITU-T
    Recommendation H.261, 1993.

[3] "RTP Profile for Audio and Video Conference with Minimal Control",
    RFC 1890.

[4] "Video Coding for Low Bitrate Communication", Draft ITU-T
    Recommendation H.263, Draft 20, September 1997.

[5] T. Turletti, C. Huitema, "RTP Payload Format for H.261 Video
    Streams", RFC 2032.

[6] C. Zhu, "RTP Payload Format for H.263 Video Streams", RFC 2190.

[7] S. Wenger, "Video Redundancy Coding in H.263+", Proc. AVSPN97, 
    Aberdeen, U.K..

[8] S. Wenger, G. Knorr, J. Ott: "Error resilience support in H.263 
    V.2", submitted for publication to IEEE T-CSVT, 1997.