Classes | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes

UDPVideoStreamSvr Class Reference

#include <UDPVideoStreamSvr.h>

Inheritance diagram for UDPVideoStreamSvr:
UDPAppBase

List of all members.

Classes

struct  VideoStreamData

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

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.

Definition at line 38 of file UDPVideoStreamSvr.h.


Member Typedef Documentation

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

Definition at line 54 of file UDPVideoStreamSvr.h.


Constructor & Destructor Documentation

UDPVideoStreamSvr::UDPVideoStreamSvr (  ) 

Definition at line 36 of file UDPVideoStreamSvr.cc.

{
}

UDPVideoStreamSvr::~UDPVideoStreamSvr (  )  [virtual]

Definition at line 40 of file UDPVideoStreamSvr.cc.

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


Member Function Documentation

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

Definition at line 61 of file UDPVideoStreamSvr.cc.

{
    recordScalar("streams served", numStreams);
    recordScalar("packets sent", numPkSent);
}

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

Definition at line 67 of file UDPVideoStreamSvr.cc.

{
    if (msg->isSelfMessage())
    {
        // timer for a particular video stream expired, send packet
        sendStreamData(msg);
    }
    else
    {
        // start streaming
        processStreamRequest(msg);
    }
}

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

Definition at line 46 of file UDPVideoStreamSvr.cc.

{
    waitInterval = &par("waitInterval");
    packetLen = &par("packetLen");
    videoSize = &par("videoSize");
    serverPort = par("serverPort");

    numStreams = 0;
    numPkSent = 0;

    WATCH_PTRVECTOR(streamVector);

    bindToPort(serverPort);
}

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

Definition at line 82 of file UDPVideoStreamSvr.cc.

Referenced by handleMessage().

{
    // register video stream...
    UDPControlInfo *ctrl = check_and_cast<UDPControlInfo *>(msg->getControlInfo());

    VideoStreamData *d = new VideoStreamData;
    d->clientAddr = ctrl->getSrcAddr();
    d->clientPort = ctrl->getSrcPort();
    d->videoSize = (*videoSize);
    d->bytesLeft = d->videoSize;
    d->numPkSent = 0;
    streamVector.push_back(d);

    cMessage *timer = new cMessage("VideoStreamTmr");
    timer->setContextPointer(d);

    // ... then transmit first packet right away
    sendStreamData(timer);

    numStreams++;
}

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

Definition at line 105 of file UDPVideoStreamSvr.cc.

Referenced by handleMessage(), and processStreamRequest().

{
    VideoStreamData *d = (VideoStreamData *) timer->getContextPointer();

    // generate and send a packet
    cPacket *pkt = new cPacket("VideoStrmPk");
    long pktLen = packetLen->longValue();
    if (pktLen > d->bytesLeft)
        pktLen = d->bytesLeft;
    pkt->setByteLength(pktLen);
    sendToUDP(pkt, serverPort, d->clientAddr, d->clientPort);

    d->bytesLeft -= pktLen;
    d->numPkSent++;
    numPkSent++;

    // reschedule timer if there's bytes left to send
    if (d->bytesLeft!=0)
    {
        simtime_t interval = (*waitInterval);
        scheduleAt(simTime()+interval, timer);
    }
    else
    {
        delete timer;
        // TBD find VideoStreamData in streamVector and delete it
    }
}


Member Data Documentation

unsigned long UDPVideoStreamSvr::numPkSent [protected]

Definition at line 65 of file UDPVideoStreamSvr.h.

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

unsigned int UDPVideoStreamSvr::numStreams [protected]

Definition at line 64 of file UDPVideoStreamSvr.h.

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

cPar* UDPVideoStreamSvr::packetLen [protected]

Definition at line 60 of file UDPVideoStreamSvr.h.

Referenced by initialize(), and sendStreamData().

Definition at line 58 of file UDPVideoStreamSvr.h.

Referenced by initialize(), and sendStreamData().

cPar* UDPVideoStreamSvr::videoSize [protected]

Definition at line 61 of file UDPVideoStreamSvr.h.

Referenced by initialize().

Definition at line 59 of file UDPVideoStreamSvr.h.

Referenced by initialize().


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