The following headers are used, all values are in network byte order. The text
below describes the packet formats used in pml-0.01. Note that these packet
formats will be obsoleted in ml-0.02.
The P2P Multicast Transport (PMT) header is used when
transporting a resource from sender to receivers.
|
0 |
4 |
8 |
12 |
16 |
20 |
24 |
28 |
0 |
Vers |
PacketID |
SessionID |
1 |
SegmentID |
2 |
Payload (...) |
PMT header
Transmissions wiill use a value of 0 for the Version field to
distinguish the packets from PMSD packets, described below. The packet Id is
the sequence number of the packet in the transmission of the current segment.
The SessionID must match the SessionID in the corresponding PMSD header
describing the multicast session.
The P2P Multicast Session Description (PMSD) header is used
when describing a resource using a multicast group.
|
0 |
4 |
8 |
12 |
16 |
20 |
24 |
28 |
0 |
Vers |
CodingID |
SessionID |
1 |
Payload size (bytes) |
Starts in (sec) |
(Res.) |
2 |
Source IP address |
3 |
Multicast group IP address |
4 |
UDP port |
Bitrate (8Kbit/s) |
5 |
Filesize
(bytes) |
6 |
7 |
File
TigerTree Hash |
8 |
9 |
10 |
11 |
12 |
13 |
Part offset
| |
14 |
Part length |
15 |
Part
TigerTree Hash |
16 |
17 |
18 |
19 |
20 |
21 |
Filename (Max 128 bytes) |
PMSD header
The first four bytes of each header are used to multiplex both PMT and PMSD
packets on the same (S,G) session. Currently, version number 0 indicates that a
PMT packet is being sent and version number 1 indicates that a PMSD version 1
packet is being sent.
The bitrate field in the PMSP header is provided in multiples of 8Kbit/s. So a
bitrate value of 8 means that the session will be transmitted at 64Kbit/s
The payload field in the PMSD header indicates the payload size of PMT packets,
so excluding the PMTP header (which is 8 bytes)
The following P2P Multicast Transport encodings are defined:
ID |
Codec |
Parameters |
Remarks |
0 |
Reed-Solomon |
SYMSIZE=8, Genpoly = 0x187, FCS=1, Prime=1, NROOTS=8 |
(deprecated) |
1 |
LDGM-Stairs |
Left degree = 7, Data packets = int(Part length / Payload
size) + 1, FEC packets = int (0.25 * data packets), Seed = 1
|
|
PMT coding