Difference between revisions of "Private:psim"
From NMSL
Line 2: | Line 2: | ||
= Class Diagrams = | = Class Diagrams = | ||
+ | |||
+ | * use long for time/offset in msec, which has a rollover time 24.85 days | ||
<pre> | <pre> | ||
− | class Frame { | + | class Frame { // video frame, a layer of it, read from trace file |
int no; // serial number | int no; // serial number | ||
int layer; // layer number it belongs to, set to zero for nonscalable frame | int layer; // layer number it belongs to, set to zero for nonscalable frame | ||
− | + | long deadlineOffset; // deadline offset compared to the start of the video, in msec | |
int size; // frame size in bytes | int size; // frame size in bytes | ||
} | } | ||
− | class Segment { | + | class Segment { // packetized frames |
int no; // serial number | int no; // serial number | ||
Vector<Frame> frames; // reference to included frame | Vector<Frame> frames; // reference to included frame | ||
Line 18: | Line 20: | ||
} | } | ||
− | class Video { | + | class Video { // a media file, shared by a group of peers |
String filename; // video trace file path and name | String filename; // video trace file path and name | ||
Hashtable<int, Frame> frameTrace; // frames read from the trace file | Hashtable<int, Frame> frameTrace; // frames read from the trace file | ||
Line 25: | Line 27: | ||
// noFrame indicates how many frames should we put in one segment; | // noFrame indicates how many frames should we put in one segment; | ||
// we might implement other packtization schemes later. | // we might implement other packtization schemes later. | ||
+ | } | ||
+ | |||
+ | class Neighbor { // keep track of what my neighbor has done | ||
+ | Peer peer; // peer instance, for accessing availability info | ||
+ | int estimateRate; // estimated rate (maybe historical) | ||
+ | } | ||
+ | |||
+ | class Peer { // represent a running peer | ||
+ | int ingressBW; // incoming bandwidth in bps | ||
+ | int egressBW; // outgoing bandwidth in bps | ||
+ | BitSet avail; // availability bufmap | ||
+ | Vector<Neighbor> neighbors; // peers that we may send requests to | ||
+ | } | ||
+ | |||
+ | class Group { // peers that have downloaded or want to download a Video | ||
+ | Video video; // media shared among peers | ||
+ | Vector<Peer> peers; // peers in this group | ||
+ | void join(Peer peer); // adding a new peer into this group | ||
+ | void leave(Peer peer); // removing a peer from this group | ||
+ | } | ||
+ | |||
+ | class Connection { // end to end network link between two peers | ||
+ | Peer peer1; // one end | ||
+ | Peer peer2; // the other | ||
+ | int delay; // transmission delay in msec | ||
+ | } | ||
+ | |||
+ | // XXX TODO XXX | ||
+ | class Event { | ||
+ | long time; // when this event happens | ||
+ | int type; // see below | ||
+ | // 1. connect: peer 1 makes a connection to peer 2, and add each other into neighbors | ||
+ | // 2. requestSent: a receiver sends a high-priority request message to a sender | ||
+ | // 3. requestArrived: a request message gets to a sender | ||
+ | // 4. dataSent: a sender sends a data segment | ||
+ | // 5. dataArrived: a data segment arrives to a receiver | ||
+ | } | ||
+ | |||
+ | class EventQueue { | ||
+ | SortedMap<Long, Event> queue; // events sorted on its time | ||
+ | void handle(Event event); // process an event and update states accordingly | ||
} | } | ||
</pre> | </pre> |
Revision as of 22:36, 4 March 2009
This page documents the development of a discrete event simulator for P2P video streaming applications. This simulator captures important features of data-driven video streaming systems. In particular, it is designed to evaluate: (i) the performance of various segment scheduling algorithms; (ii) the potential of network coding in multi-layer P2P video streaming systems.
Class Diagrams
- use long for time/offset in msec, which has a rollover time 24.85 days
class Frame { // video frame, a layer of it, read from trace file int no; // serial number int layer; // layer number it belongs to, set to zero for nonscalable frame long deadlineOffset; // deadline offset compared to the start of the video, in msec int size; // frame size in bytes } class Segment { // packetized frames int no; // serial number Vector<Frame> frames; // reference to included frame int totalSize; // aggregate size in bytes } class Video { // a media file, shared by a group of peers String filename; // video trace file path and name Hashtable<int, Frame> frameTrace; // frames read from the trace file Hashtable<int, Segment> segmentTrace; // segments generated by the prepareSegments(...) void prepareSegments(int noFrame); // packetize frames into segment, // noFrame indicates how many frames should we put in one segment; // we might implement other packtization schemes later. } class Neighbor { // keep track of what my neighbor has done Peer peer; // peer instance, for accessing availability info int estimateRate; // estimated rate (maybe historical) } class Peer { // represent a running peer int ingressBW; // incoming bandwidth in bps int egressBW; // outgoing bandwidth in bps BitSet avail; // availability bufmap Vector<Neighbor> neighbors; // peers that we may send requests to } class Group { // peers that have downloaded or want to download a Video Video video; // media shared among peers Vector<Peer> peers; // peers in this group void join(Peer peer); // adding a new peer into this group void leave(Peer peer); // removing a peer from this group } class Connection { // end to end network link between two peers Peer peer1; // one end Peer peer2; // the other int delay; // transmission delay in msec } // XXX TODO XXX class Event { long time; // when this event happens int type; // see below // 1. connect: peer 1 makes a connection to peer 2, and add each other into neighbors // 2. requestSent: a receiver sends a high-priority request message to a sender // 3. requestArrived: a request message gets to a sender // 4. dataSent: a sender sends a data segment // 5. dataArrived: a data segment arrives to a receiver } class EventQueue { SortedMap<Long, Event> queue; // events sorted on its time void handle(Event event); // process an event and update states accordingly }