Title: MPEG RTP
1MPEG RTP
2Previously, on CS5248
- MPEG Compression
- Sequence, GOP, Picture, Slice, Macroblock, Block,
DC/AC Coefficient - I-Frame, P-Frame, B-Frame
3Previously, on CS5248
- RTP headers
- SSRC, Media Timestamp, Marker Bit, Payload Type
.. - Application-Level Framing
4You are Here
Encoder
Decoder
Middlebox
Sender
Receiver
Network
5Application-Level Framing
6How to send/recv?
Let the application decide, not protocol stacks.
Tennenhouse Clark
7Application Knows Best
- How to reorder packets
- Whether to ignore loss
- Which packet to retransmit
8Application Data Unit (ADU)
- Can be processed individually, even out-of-order
- 8-Bit PCM audio 1 ADU 1 Byte
- MPEG1 Video 1 ADU
9How to chop data into packets?
- Every received packet should be useful (even in
very lossy environment) - Ideally, 1 ADU in 1 packet
10RTP Payload Header
RTP Header
RTP Payload Header
RTP Payload
- MPEG-1? 2?
- Temporal Reference
- I? P? B?
- Begin of Slice? End of Slice?
11RTP Header
- Media Timestamp 32 bits
- the instant the first byte in this packet is
captured - 90 kHz timestamp (90000 1 second)
12RTP Header
- Marker Bit
- 1 if contains the last byte of a frame
13RTP Header
- Payload Type 7 bits
- 32 for MPEG-1
14RTP Payload Header
- MBZ (5 bits)
- Unused. Must be 0
15RTP Payload Header
- T (1 bit)
- 1 if there is a MPEG-2 Extension Header after
this header.
16RTP Payload Header
- Temporal Reference (10 bits)
- The frame number of the current frame within
the GOP
17RTP Payload Header
- AN bit and N bit
- Set to 0 for MPEG-1
18RTP Payload Header
- S (1 bit)
- Is there a sequence header in this packet?
19RTP Payload Header
- BS (1 bit) and ES (1bit)
- BS is 1 iff the first byte of this payload is a
slice header - ES is 1 iff the last byte of this payload is the
end of a slice
20RTP Payload Header
- Picture Type (3 bits)
- I (1), P (2), B (3), D (4)
21RTP Payload Header
- Motion Vectors Information
- Get from most recent picture header
22Fragmentation Rules
- Sequence header at the start of payload
- GOP header at the start of a payload (or follows
Sequence header) - Picture header at the start of a payload (or
follows Sequence/GOP header)
23Fragmentation Rules
- A slice must be either
- First data in the packet, or
- Follows integral number of slices
- A slice may be fragmented if exceeds the size of
a packet
24Packet Size
- 1 MTU is 1500 bytes
- IP Header
- UDP Header
- RTP Header
- RTP Payload Header
- Payload Size
25Project 1
- Packetize MPEG-1 Video into RTP Packets
26Goal
- Read MPEG-1 video, output RTP packets with
proper - RTP headers
- RTP payload headers
- fragmentation
27Mnt (Media Networking Toy)
28Overview
OTcl
C
MntData
MntComponents
29MntComponent
- recv(MntData data)
- push(MntData data)
30MntPump
- Subclass of MntComponent
- No recv()
- pump_some( ) generate data push(data)
pump_timer_.msched(time) -
31Create and Link Components
set a new MntA set b new MntB a add_link_to
b a instproc on_stop_pumping puts
done! exit a start_pumping vwait forever
32Important Classes
MntComponent
MntRTPFileWriter
MntPump
MntRTPPayloadDumper
MntRTPFileReader
MntMPEGFileRTPizer
33Important Classes
MntData
MntRTPMPEGPacket
MntRTPHdr
MntRTPMPEGHdr
34MntRTPMPEGPacket
RTP Header
RTP Payload Header
RTP Payload
MntRTPHdr rtp_hdr_ MntRTPMPEGHdr pl_hdr_
unsigned char pl_data_ int pl_len_
35Example Tcl Scripts
36Dealing with Bits
buffer_
endDataPtr_
endBufPtr_
37Dealing with Bits
- BitParser
- Read bits from BitStream
BitParser
1011101
38Basic Usage
include mnt_bit_parser.h include
mnt_bit_stream.h BitStream bs new
BitStream(a.mpg) BitParser bp new
BitParser() bp-gtwrap(bs) int x Bp_GetInt(bp,
x)
39Dealing with MPEG Headers
- MntMPEG1SeqHdr
- MntMPEG1GopHdr
- MntMPEG1PicHdr
- MntMPEG1SliceHdr
40Basic Operations
- hdr-gtparse(bp)
- hdr-gtfind(bp)
- hdr-gtskip(bp)
- hdr-gtdump(bp1,bp2)
41ExampleMPEG Parsing
42Project Homepage
- Descriptions
- Skeleton Code
- Mnt Documentation
- IVLE Forums
43Advice
- Use the source wisely
- Start early