Internet Engineering Task Force Audio-Video Transport Working Group
INTERNET-DRAFT W. Fenner
draft-ietf-avt-jpeg-00.txt Kaman Sciences
L. Berc
Digital Equipment Corporation
R. Frederick
Xerox PARC
S. McCanne
Lawrence Berkeley Labs
November 22, 1994
Expires: 5/1/95
RTP Encapsulation of JPEG-compressed video.
Status of this Memo
This document is an Internet Draft. Internet Drafts are working docu-
ments 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. Internet Drafts may be updated, replaced, or obsoleted by
other documents at any time. It is not appropriate to use Internet
Drafts as reference material or to cite them other than as a
"working draft" or "work in progress."
Please check the I-D abstract listing contained in each Internet
Draft directory to learn the current status of this or any other Inter-
net Draft.
Distribution of this document is unlimited.
Abstract
This draft describes a packetization scheme for JPEG video over
RTP. It is optimized for real-time video streams using constant
JPEG parameters, as opposed to individual JPEG images coming from
different sources.
This document is a product of the Audio-Video Transport working group
within the Internet Engineering Task Force. Comments are solicited and
should be addressed to the working group's mailing list at rem-
conf@es.net and/or the author(s).
Expires March 1995 [Page 1]
Internet Draft draft-ietf-avt-jpeg-00.txt November 1994
1. Introduction
This document describes the transport of JPEG-compressed video over RTP.
JPEG-compressed video has several unique features:
+ Each frame is large, requiring fragmentation and reassembly
+ There is no easy way to recover from a lost segment - a lost seg-
ment means the whole frame is lost. The JPEG spec specifies a
method to recover, but not all hardware decoders can handle it.
2. RTP Usage
The RTP timestamp is in units of 65536Hz. The same timestamp value is
used for all fragments of a single frame. The RTP sequence number
sequentially increases for each packet. The RTP marker bit marks the
end of a frame.
3. JPEG header
A special header is added to each 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MBZ | Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Q | Width | Height |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.1. MBZ: 8 bits
This space is reserved for future use.
3.2. Fragment Offset: 24 bits
The Fragment Offset is the data offset in bytes of the current
packet in the full JPEG frame.
3.3. Type: 8 bits
The type field describes the format of the JPEG data. It encodes
all of the JFIF options. Types 0-127 are pre-determined by pro-
files, and types 128-255 are free to be redefined by the session
protocol.
Expires March 1995 [Page 2]
Internet Draft draft-ietf-avt-jpeg-00.txt November 1994
3.4. Q Factor (Q): 8 bits
The Q Factor describes the current JPEG quantization table. If 1
<= Q <= 99, the algorithm devised by the Independent JPEG Group is
used to calculate the JPEG quantization table. If Q > 100, a cus-
tom quantization table is being used. It is expected that the
standard quantization tables will handle almost every possible
case, and custom tables will be used rarely.
3.5. Width: 8 bits
Width encodes the number of pixels in multiples of 8 (i.e. a width
of 40 denotes an image 320 pixels wide).
3.6. Height: 8 bits
Height encodes the number of pixels in multiples of 8 (i.e. a
height of 30 denotes an image 240 pixels tall).
3.7. Data
The data following the header is an entropy coded JPEG stream as
defined in the JPEG standard. JPEG markers are 0xFF bytes in the
data stream. A "stuffed" 0x00 byte follows any 0xFF byte generated
by the entropy coder (as per section B.1.1.5 of the JPEG standard).
4. Discussion
4.1. The Type Field
The Type field encodes all of the JFIF parameters that are expected to
stay constant over the lifetime of a session in a single byte. Two type
fields are currently defined:
Type 0: YUV 4:2:2 square pixels, 16x8 MCU, standard Huffman table
Type 1: YUV 4:1:1 square pixels, 16x16 MCU, standard Huffman table
A type may be dynamically defined during a session using the session
protocol.
4.2. Fragmentation and Reassembly
Since JPEG frames are large, they must be fragmented. Frames should be
fragmented into packets in a manner avoiding fragmentation at a lower
level. When using restart markers, packets should be fragmented such
that each packet contains one restart interval (see below).
Expires March 1995 [Page 3]
Internet Draft draft-ietf-avt-jpeg-00.txt November 1994
4.3. Restart Markers
Restart markers indicate a point in the JPEG stream at which the Huffman
coder is reset, allowing partial decoding starting at that point. The
use of restart markers allows for robustness in the face of packet loss.
However, not all hardware decoders support restart markers, meaning that
such hardware will only be able to decode the first portion of a frame,
up to a restart marker, and then fail. Thus, for maximum interoperabil-
ity, we do not include restart markers in the JPEG data.
If we include restart markers, each packet should contain a single res-
tart interval. Since there is no way to tell a priori how much data
will occur between restart markers, a restart interval might span multi-
ple packets. If a restart interval must be fragmented, it is preferable
to create a short packet so that the next restart interval can occur at
the beginning of a packet once again.
5. Security Considerations
Security issues are not discussed in this memo.
6. Authors' Addresses
William C. Fenner
Kaman Sciences Corporation
2560 Huntington Ave.
Alexandria, VA 22303
Phone: +1 202-404-7030
Email: fenner@cmf.nrl.navy.mil
Lance Berc
Digital Equipment Corporation
Email: berc@src.dec.com
Ron Frederick
Xerox PARC
Email: frederick@parc.xerox.com
Stephen McCanne
Lawrence Berkeley Labs
Email: mccanne@ee.lbl.gov
Expires March 1995 [Page 4]
Internet Draft draft-ietf-avt-jpeg-00.txt November 1994
Appendix A
The following code can be used to create a quantization table from a Q
factor:
/*
* Table K.1 from JPEG spec.
*/
static const int jpeg_luma_quantizer[64] = {
16, 11, 10, 16, 24, 40, 51, 61,
12, 12, 14, 19, 26, 58, 60, 55,
14, 13, 16, 24, 40, 57, 69, 56,
14, 17, 22, 29, 51, 87, 80, 62,
18, 22, 37, 56, 68, 109, 103, 77,
24, 35, 55, 64, 81, 104, 113, 92,
49, 64, 78, 87, 103, 121, 120, 101,
72, 92, 95, 98, 112, 100, 103, 99
};
/*
* Table K.2 from JPEG spec.
*/
static const int jpeg_chroma_quantizer[64] = {
17, 18, 24, 47, 99, 99, 99, 99,
18, 21, 26, 66, 99, 99, 99, 99,
24, 26, 56, 99, 99, 99, 99, 99,
47, 66, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99
};
/*
* Call MakeTables with the Q factor and two int[64] return arrays
*/
void
MakeTables(int q, int *lum_q, int *chr_q)
{
int i;
if (q < 1) factor = 1;
if (q > 99) factor = 99;
if (q < 50)
q = 5000 / factor;
else
q = 200 - factor*2;
Expires March 1995 [Page 5]
Internet Draft draft-ietf-avt-jpeg-00.txt November 1994
for (i=0; i < 64; i++) {
lum_q[i] = ( jpeg_luma_quantizer[i] * q + 50) / 100;
chr_q[i] = ( jpeg_chroma_quantizer[i] * q + 50) / 100;
/* Limit the quantizers to 1 < q < 256 */
if ( lum_q[i] < 2) lum_q[i] = 1;
if ( chr_q[i] < 2) chr_q[i] = 1;
if ( lum_q[i] > 255) lum_q[i] = 255;
if ( chr_q[i] > 255) chr_q[i] = 255;
}
}
Expires March 1995 [Page 6]