440 likes | 755 Views
MPEG + RTP. Previously, on CS5248. MPEG Compression Sequence, GOP, Picture, Slice, Macroblock, Block, DC/AC Coefficient I-Frame, P-Frame, B-Frame. Previously, on CS5248. RTP headers SSRC, Media Timestamp, Marker Bit, Payload Type .. Application-Level Framing . You are Here. Encoder.
E N D
Previously, on CS5248 • MPEG Compression • Sequence, GOP, Picture, Slice, Macroblock, Block, DC/AC Coefficient • I-Frame, P-Frame, B-Frame
Previously, on CS5248 • RTP headers • SSRC, Media Timestamp, Marker Bit, Payload Type .. • Application-Level Framing
You are Here Encoder Decoder Middlebox Receiver Sender Network
How to send/recv? Let the application decide, not protocol stacks. Tennenhouse + Clark
Application Knows Best • How to reorder packets • Whether to ignore loss • Which packet to retransmit
Application Data Unit (ADU) • Can be processed individually, even out-of-order • 8-Bit PCM audio: 1 ADU = 1 Byte • MPEG1 Video: 1 ADU =
How to chop data into packets? • Every received packet should be useful (even in very lossy environment) • Ideally, 1 ADU in 1 packet
RTP Payload Header RTP Header RTP Payload Header RTP Payload • MPEG-1? 2? • Temporal Reference • I? P? B? • Begin of Slice? End of Slice?
RTP Header • Media Timestamp: 32 bits • the instant the first byte in this packet is captured • 90 kHz timestamp (90000 = 1 second)
RTP Header • Marker Bit: • 1 if contains the last byte of a frame
RTP Header • Payload Type: 7 bits • 32 for MPEG-1
RTP Payload Header • MBZ (5 bits) • Unused. Must be 0
RTP Payload Header • T (1 bit) • 1 if there is a MPEG-2 Extension Header after this header.
RTP Payload Header • Temporal Reference (10 bits) • The ‘frame number’ of the current frame within the GOP
RTP Payload Header • AN bit and N bit • Set to 0 for MPEG-1
RTP Payload Header • S (1 bit) • Is there a sequence header in this packet?
RTP 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
RTP Payload Header • Picture Type (3 bits) • I (1), P (2), B (3), D (4)
RTP Payload Header • Motion Vectors Information • Get from most recent picture header
Fragmentation 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)
Fragmentation 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
Packet Size • 1 MTU is 1500 bytes • IP Header • UDP Header • RTP Header • RTP Payload Header • Payload Size =
Project 1 Packetize MPEG-1 Video into RTP Packets
Goal • Read MPEG-1 video, output RTP packets with proper: • RTP headers • RTP payload headers • fragmentation
Mnt (Media Networking Toy) • C++ • Tcl/OTcl • UNIX
Overview OTcl C++ MntData MntComponents
MntComponent • recv(MntData *data) • push(MntData *data)
MntPump • Subclass of MntComponent • No recv() • pump_some( ) { generate data push(data) pump_timer_.msched(time) }
Create and Link Components set a [new MntA] set b [new MntB] $a add_link_to $b $a instprocon_stop_pumping {} { puts “done!” exit } $a start_pumping vwait forever
Important Classes MntComponent MntRTPFileWriter MntPump MntRTPPayloadDumper MntRTPFileReader MntMPEGFileRTPizer
Important Classes MntData MntRTPMPEGPacket MntRTPHdr MntRTPMPEGHdr
MntRTPMPEGPacket RTP Header RTP Payload Header RTP Payload MntRTPHdr *rtp_hdr_; MntRTPMPEGHdr *pl_hdr_; unsignedchar *pl_data_; int pl_len_;
Dealing with Bits • BitStream • A buffer buffer_ endDataPtr_ endBufPtr_
Dealing with Bits • BitParser • Read bits from BitStream BitParser 1011101
Basic Usage #include “mnt_bit_parser.h” #include “mnt_bit_stream.h” BitStream *bs = new BitStream(“a.mpg”); BitParser *bp = new BitParser(); bp->wrap(bs); int x; Bp_GetInt(bp, x);
Dealing with MPEG Headers • MntMPEG1SeqHdr • MntMPEG1GopHdr • MntMPEG1PicHdr • MntMPEG1SliceHdr
Basic Operations • hdr->parse(bp) • hdr->find(bp) • hdr->skip(bp) • hdr->dump(bp1,bp2)
Project Homepage • Descriptions • Skeleton Code • Mnt Documentation • IVLE Forums
Advice • Use the source wisely • Start early