Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

UDPVideoStreamSvr Class Reference

#include <UDPVideoStreamSvr.h>

Inheritance diagram for UDPVideoStreamSvr:

UDPAppBase List of all members.

Detailed Description

Stream VBR video streams to clients.

Cooperates with UDPVideoStreamCli. UDPVideoStreamCli requests a stream and UDPVideoStreamSvr starts streaming to them. Capable of handling streaming to multiple clients.


Public Member Functions

 UDPVideoStreamSvr ()
virtual ~UDPVideoStreamSvr ()

Protected Types

typedef std::vector< VideoStreamData * > VideoStreamVector

Protected Member Functions

void processStreamRequest (cMessage *msg)
void sendStreamData (cMessage *timer)
Overidden cSimpleModule functions
virtual void initialize ()
virtual void finish ()
virtual void handleMessage (cMessage *msg)

Protected Attributes

VideoStreamVector streamVector
int serverPort
cPar * waitInterval
cPar * packetLen
cPar * videoSize
unsigned int numStreams
unsigned long numPkSent

Classes

struct  VideoStreamData


Member Typedef Documentation

typedef std::vector<VideoStreamData *> UDPVideoStreamSvr::VideoStreamVector [protected]
 


Constructor & Destructor Documentation

UDPVideoStreamSvr::UDPVideoStreamSvr  ) 
 

00038 {
00039 }

UDPVideoStreamSvr::~UDPVideoStreamSvr  )  [virtual]
 

00042 {
00043     for (unsigned int i=0; i<streamVector.size(); i++)
00044         delete streamVector[i];
00045 }


Member Function Documentation

void UDPVideoStreamSvr::finish  )  [protected, virtual]
 

00063 {
00064     recordScalar("streams served", numStreams);
00065     recordScalar("packets sent", numPkSent);
00066 }

void UDPVideoStreamSvr::handleMessage cMessage *  msg  )  [protected, virtual]
 

00069 {
00070     if (msg->isSelfMessage())
00071     {
00072         // timer for a particular video stream expired, send packet
00073         sendStreamData(msg);
00074     }
00075     else
00076     {
00077         // start streaming
00078         processStreamRequest(msg);
00079     }
00080 }

void UDPVideoStreamSvr::initialize  )  [protected, virtual]
 

00048 {
00049     waitInterval = &par("waitInterval");
00050     packetLen = &par("packetLen");
00051     videoSize = &par("videoSize");
00052     serverPort = par("serverPort");
00053 
00054     numStreams = 0;
00055     numPkSent = 0;
00056 
00057     WATCH_PTRVECTOR(streamVector);
00058 
00059     bindToPort(serverPort);
00060 }

void UDPVideoStreamSvr::processStreamRequest cMessage *  msg  )  [protected]
 

00084 {
00085     // register video stream...
00086     UDPControlInfo *ctrl = check_and_cast<UDPControlInfo *>(msg->controlInfo());
00087 
00088     VideoStreamData *d = new VideoStreamData;
00089     d->clientAddr = ctrl->srcAddr();
00090     d->clientPort = ctrl->srcPort();
00091     d->videoSize = (*videoSize);
00092     d->bytesLeft = d->videoSize;
00093     d->numPkSent = 0;
00094     streamVector.push_back(d);
00095 
00096     cMessage *timer = new cMessage("VideoStreamTmr");
00097     timer->setContextPointer(d);
00098 
00099     // ... then transmit first packet right away
00100     sendStreamData(timer);
00101 
00102     numStreams++;
00103 }

void UDPVideoStreamSvr::sendStreamData cMessage *  timer  )  [protected]
 

00107 {
00108     VideoStreamData *d = (VideoStreamData *) timer->contextPointer();
00109 
00110     // generate and send a packet
00111     cMessage *pkt = new cMessage("VideoStrmPk");
00112     int pktLen = (*packetLen);
00113     if (pktLen > d->bytesLeft)
00114         pktLen = d->bytesLeft;
00115     pkt->setByteLength(pktLen);
00116     sendToUDP(pkt, serverPort, d->clientAddr, d->clientPort);
00117 
00118     d->bytesLeft -= pktLen;
00119     d->numPkSent++;
00120     numPkSent++;
00121 
00122     // reschedule timer if there's bytes left to send
00123     if (d->bytesLeft!=0)
00124     {
00125         double interval = (*waitInterval);
00126         scheduleAt(simTime()+interval, timer);
00127     }
00128     else
00129     {
00130         delete timer;
00131         // TBD find VideoStreamData in streamVector and delete it
00132     }
00133 }


Member Data Documentation

unsigned long UDPVideoStreamSvr::numPkSent [protected]
 

unsigned int UDPVideoStreamSvr::numStreams [protected]
 

cPar* UDPVideoStreamSvr::packetLen [protected]
 

int UDPVideoStreamSvr::serverPort [protected]
 

VideoStreamVector UDPVideoStreamSvr::streamVector [protected]
 

cPar* UDPVideoStreamSvr::videoSize [protected]
 

cPar* UDPVideoStreamSvr::waitInterval [protected]
 


The documentation for this class was generated from the following files:
Generated on Thu Oct 19 18:22:32 2006 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.0