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

virtual void processStreamRequest (cMessage *msg)
virtual 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 (  ) 

00037 {
00038 }

UDPVideoStreamSvr::~UDPVideoStreamSvr (  )  [virtual]

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


Member Function Documentation

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

Referenced by handleMessage().

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

void UDPVideoStreamSvr::sendStreamData ( cMessage *  timer  )  [protected, virtual]

Referenced by handleMessage(), and processStreamRequest().

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

void UDPVideoStreamSvr::initialize (  )  [protected, virtual]

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

void UDPVideoStreamSvr::finish (  )  [protected, virtual]

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

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

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


Member Data Documentation

Referenced by initialize(), and sendStreamData().

Referenced by initialize().

cPar* UDPVideoStreamSvr::packetLen [protected]

Referenced by initialize(), and sendStreamData().

cPar* UDPVideoStreamSvr::videoSize [protected]

Referenced by initialize().

unsigned int UDPVideoStreamSvr::numStreams [protected]

unsigned long UDPVideoStreamSvr::numPkSent [protected]

Referenced by finish(), initialize(), and sendStreamData().


The documentation for this class was generated from the following files:

Generated on Fri Mar 20 18:51:23 2009 for INET Framework for OMNeT++/OMNEST by  doxygen 1.5.5