#include <UDPVideoStreamSvr.h>
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 |
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.
typedef std::vector<VideoStreamData *> UDPVideoStreamSvr::VideoStreamVector [protected] |
Definition at line 54 of file UDPVideoStreamSvr.h.
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]; }
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 } }
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().
int UDPVideoStreamSvr::serverPort [protected] |
Definition at line 58 of file UDPVideoStreamSvr.h.
Referenced by initialize(), and sendStreamData().
VideoStreamVector UDPVideoStreamSvr::streamVector [protected] |
Definition at line 55 of file UDPVideoStreamSvr.h.
Referenced by initialize(), processStreamRequest(), and ~UDPVideoStreamSvr().
cPar* UDPVideoStreamSvr::videoSize [protected] |
Definition at line 61 of file UDPVideoStreamSvr.h.
Referenced by initialize().
cPar* UDPVideoStreamSvr::waitInterval [protected] |
Definition at line 59 of file UDPVideoStreamSvr.h.
Referenced by initialize().