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
     double deadlineOffset; // deadline offset compared to the start of the video, in secs
+
     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 23: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
}