INET Framework for OMNeT++/OMNEST
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.


Member Typedef Documentation

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

Constructor & Destructor Documentation

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

Member Function Documentation

void UDPVideoStreamSvr::finish ( ) [protected, virtual]
{
    recordScalar("streams served", numStreams);
    recordScalar("packets sent", numPkSent);
}
void UDPVideoStreamSvr::handleMessage ( cMessage *  msg) [protected, virtual]
{
    if (msg->isSelfMessage())
    {
        // timer for a particular video stream expired, send packet
        sendStreamData(msg);
    }
    else
    {
        // start streaming
        processStreamRequest(msg);
    }
}
void UDPVideoStreamSvr::initialize ( ) [protected, virtual]
{
    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]

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]

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]

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

unsigned int UDPVideoStreamSvr::numStreams [protected]
cPar* UDPVideoStreamSvr::packetLen [protected]

Referenced by initialize(), and sendStreamData().

Referenced by initialize(), and sendStreamData().

cPar* UDPVideoStreamSvr::videoSize [protected]

Referenced by initialize().

Referenced by initialize().


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