MPEG2TransportFileServerMediaSubsession Class Reference

#include <MPEG2TransportFileServerMediaSubsession.hh>

Inheritance diagram for MPEG2TransportFileServerMediaSubsession:

Inheritance graph
[legend]
Collaboration diagram for MPEG2TransportFileServerMediaSubsession:

Collaboration graph
[legend]

Public Member Functions

unsigned trackNumber () const
char const * trackId ()
void setServerAddressAndPortForSDP (netAddressBits addressBits, portNumBits portBits)
UsageEnvironmentenvir () const
char const * name () const
virtual Boolean isSource () const
virtual Boolean isSink () const
virtual Boolean isRTCPInstance () const
virtual Boolean isRTSPClient () const
virtual Boolean isRTSPServer () const
virtual Boolean isMediaSession () const
virtual Boolean isServerMediaSession () const
virtual Boolean isDarwinInjector () const

Static Public Member Functions

static MPEG2TransportFileServerMediaSubsessioncreateNew (UsageEnvironment &env, char const *dataFileName, char const *indexFileName, Boolean reuseFirstSource)
static Boolean lookupByName (UsageEnvironment &env, char const *mediumName, Medium *&resultMedium)
static void close (UsageEnvironment &env, char const *mediumName)
static void close (Medium *medium)

Protected Member Functions

 MPEG2TransportFileServerMediaSubsession (UsageEnvironment &env, char const *fileName, MPEG2TransportStreamIndexFile *indexFile, Boolean reuseFirstSource)
virtual ~MPEG2TransportFileServerMediaSubsession ()
virtual ClientTrickPlayStatenewClientTrickPlayState ()
virtual char const * sdpLines ()
virtual void getStreamParameters (unsigned clientSessionId, netAddressBits clientAddress, Port const &clientRTPPort, Port const &clientRTCPPort, int tcpSocketNum, unsigned char rtpChannelId, unsigned char rtcpChannelId, netAddressBits &destinationAddress, u_int8_t &destinationTTL, Boolean &isMulticast, Port &serverRTPPort, Port &serverRTCPPort, void *&streamToken)
virtual FramedSourcegetStreamSource (void *streamToken)
virtual char const * getAuxSDPLine (RTPSink *rtpSink, FramedSource *inputSource)
virtual void seekStreamSource (FramedSource *inputSource, double &seekNPT, double streamDuration, u_int64_t &numBytes)
virtual void setStreamSourceScale (FramedSource *inputSource, float scale)
virtual void closeStreamSource (FramedSource *inputSource)
char const * rangeSDPLine () const
TaskTokennextTask ()

Protected Attributes

char const * fFileName
u_int64_t fFileSize
char * fSDPLines
ServerMediaSessionfParentSession
netAddressBits fServerAddressForSDP
portNumBits fPortNumForSDP

Private Member Functions

virtual void startStream (unsigned clientSessionId, void *streamToken, TaskFunc *rtcpRRHandler, void *rtcpRRHandlerClientData, unsigned short &rtpSeqNum, unsigned &rtpTimestamp, ServerRequestAlternativeByteHandler *serverRequestAlternativeByteHandler, void *serverRequestAlternativeByteHandlerClientData)
virtual void pauseStream (unsigned clientSessionId, void *streamToken)
virtual void seekStream (unsigned clientSessionId, void *streamToken, double &seekNPT, double streamDuration, u_int64_t &numBytes)
virtual void setStreamScale (unsigned clientSessionId, void *streamToken, float scale)
virtual void deleteStream (unsigned clientSessionId, void *&streamToken)
virtual FramedSourcecreateNewStreamSource (unsigned clientSessionId, unsigned &estBitrate)
virtual RTPSinkcreateNewRTPSink (Groupsock *rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource *inputSource)
virtual void testScaleFactor (float &scale)
virtual float duration () const
ClientTrickPlayStatelookupClient (unsigned clientSessionId)

Private Attributes

MPEG2TransportStreamIndexFilefIndexFile
float fDuration
HashTablefClientSessionHashTable

Friends

class MediaLookupTable

Detailed Description

Definition at line 43 of file MPEG2TransportFileServerMediaSubsession.hh.


Constructor & Destructor Documentation

MPEG2TransportFileServerMediaSubsession::MPEG2TransportFileServerMediaSubsession ( UsageEnvironment env,
char const *  fileName,
MPEG2TransportStreamIndexFile indexFile,
Boolean  reuseFirstSource 
) [protected]

Definition at line 43 of file MPEG2TransportFileServerMediaSubsession.cpp.

References HashTable::create(), fClientSessionHashTable, fDuration, fIndexFile, MPEG2TransportStreamIndexFile::getPlayingDuration(), NULL, and ONE_WORD_HASH_KEYS.

Referenced by createNew().

00047   : FileServerMediaSubsession(env, fileName, reuseFirstSource),
00048     fIndexFile(indexFile), fDuration(0.0), fClientSessionHashTable(NULL) {
00049   if (fIndexFile != NULL) { // we support 'trick play'
00050     fDuration = fIndexFile->getPlayingDuration();
00051     fClientSessionHashTable = HashTable::create(ONE_WORD_HASH_KEYS);
00052   }
00053 }

MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession (  )  [protected, virtual]

Definition at line 56 of file MPEG2TransportFileServerMediaSubsession.cpp.

References Medium::close(), fClientSessionHashTable, fIndexFile, NULL, and HashTable::RemoveNext().

00056                                            {
00057   if (fIndexFile != NULL) { // we support 'trick play'
00058     Medium::close(fIndexFile);
00059 
00060     // Clean out the client session hash table:
00061     while (1) {
00062       ClientTrickPlayState* client
00063         = (ClientTrickPlayState*)(fClientSessionHashTable->RemoveNext());
00064       if (client == NULL) break;
00065       delete client;
00066     }
00067     delete fClientSessionHashTable;
00068   }
00069 }


Member Function Documentation

MPEG2TransportFileServerMediaSubsession * MPEG2TransportFileServerMediaSubsession::createNew ( UsageEnvironment env,
char const *  dataFileName,
char const *  indexFileName,
Boolean  reuseFirstSource 
) [static]

Definition at line 26 of file MPEG2TransportFileServerMediaSubsession.cpp.

References MPEG2TransportStreamIndexFile::createNew(), env, MPEG2TransportFileServerMediaSubsession(), and NULL.

Referenced by createNewSMS().

00029                                                                              {
00030   MPEG2TransportStreamIndexFile* indexFile;
00031   if (indexFileName != NULL && reuseFirstSource) {
00032     // It makes no sense to support trick play if all clients use the same source.  Fix this:
00033     env << "MPEG2TransportFileServerMediaSubsession::createNew(): ignoring the index file name, because \"reuseFirstSource\" is set\n";
00034     indexFile = NULL;
00035   } else {
00036     indexFile = MPEG2TransportStreamIndexFile::createNew(env, indexFileName);
00037   }
00038   return new MPEG2TransportFileServerMediaSubsession(env, fileName, indexFile,
00039                                                      reuseFirstSource);
00040 }

ClientTrickPlayState * MPEG2TransportFileServerMediaSubsession::newClientTrickPlayState (  )  [protected, virtual]

Definition at line 154 of file MPEG2TransportFileServerMediaSubsession.cpp.

References fIndexFile.

Referenced by createNewStreamSource().

00154                                                                                        {
00155   return new ClientTrickPlayState(fIndexFile);
00156 }

void MPEG2TransportFileServerMediaSubsession::startStream ( unsigned  clientSessionId,
void *  streamToken,
TaskFunc rtcpRRHandler,
void *  rtcpRRHandlerClientData,
unsigned short &  rtpSeqNum,
unsigned &  rtpTimestamp,
ServerRequestAlternativeByteHandler serverRequestAlternativeByteHandler,
void *  serverRequestAlternativeByteHandlerClientData 
) [private, virtual]

Reimplemented from OnDemandServerMediaSubsession.

Definition at line 76 of file MPEG2TransportFileServerMediaSubsession.cpp.

References ClientTrickPlayState::areChangingScale(), fIndexFile, lookupClient(), NULL, OnDemandServerMediaSubsession::pauseStream(), OnDemandServerMediaSubsession::startStream(), True, ClientTrickPlayState::updateStateOnPlayChange(), and ClientTrickPlayState::updateStateOnScaleChange().

00080                                                                    {
00081   if (fIndexFile != NULL) { // we support 'trick play'
00082     ClientTrickPlayState* client = lookupClient(clientSessionId);
00083     if (client != NULL && client->areChangingScale()) {
00084       // First, handle this like a "PAUSE", except that we back up to the previous VSH
00085       client->updateStateOnPlayChange(True);
00086       OnDemandServerMediaSubsession::pauseStream(clientSessionId, streamToken);
00087 
00088       // Then, adjust for the change of scale:
00089       client->updateStateOnScaleChange();
00090     }
00091   }
00092 
00093   // Call the original, default version of this routine:
00094   OnDemandServerMediaSubsession::startStream(clientSessionId, streamToken,
00095                                              rtcpRRHandler, rtcpRRHandlerClientData,
00096                                              rtpSeqNum, rtpTimestamp,
00097                                              serverRequestAlternativeByteHandler, serverRequestAlternativeByteHandlerClientData);
00098 }

void MPEG2TransportFileServerMediaSubsession::pauseStream ( unsigned  clientSessionId,
void *  streamToken 
) [private, virtual]

Reimplemented from OnDemandServerMediaSubsession.

Definition at line 101 of file MPEG2TransportFileServerMediaSubsession.cpp.

References False, fIndexFile, lookupClient(), NULL, OnDemandServerMediaSubsession::pauseStream(), and ClientTrickPlayState::updateStateOnPlayChange().

00101                                                          {
00102   if (fIndexFile != NULL) { // we support 'trick play'
00103     ClientTrickPlayState* client = lookupClient(clientSessionId);
00104     if (client != NULL) {
00105       client->updateStateOnPlayChange(False);
00106     }
00107   }
00108 
00109   // Call the original, default version of this routine:
00110   OnDemandServerMediaSubsession::pauseStream(clientSessionId, streamToken);
00111 }

void MPEG2TransportFileServerMediaSubsession::seekStream ( unsigned  clientSessionId,
void *  streamToken,
double &  seekNPT,
double  streamDuration,
u_int64_t &  numBytes 
) [private, virtual]

Reimplemented from OnDemandServerMediaSubsession.

Definition at line 114 of file MPEG2TransportFileServerMediaSubsession.cpp.

References fIndexFile, lookupClient(), NULL, OnDemandServerMediaSubsession::seekStream(), TRANSPORT_PACKET_SIZE, and ClientTrickPlayState::updateStateFromNPT().

00114                                                                                                                      {
00115   // Begin by calling the original, default version of this routine:
00116   OnDemandServerMediaSubsession::seekStream(clientSessionId, streamToken, seekNPT, streamDuration, numBytes);
00117 
00118   // Then, special handling specific to indexed Transport Stream files:
00119   if (fIndexFile != NULL) { // we support 'trick play'
00120     ClientTrickPlayState* client = lookupClient(clientSessionId);
00121     if (client != NULL) {
00122       unsigned long numTSPacketsToStream = client->updateStateFromNPT(seekNPT, streamDuration);
00123       numBytes = numTSPacketsToStream*TRANSPORT_PACKET_SIZE;
00124     }
00125   }
00126 }

void MPEG2TransportFileServerMediaSubsession::setStreamScale ( unsigned  clientSessionId,
void *  streamToken,
float  scale 
) [private, virtual]

Reimplemented from OnDemandServerMediaSubsession.

Definition at line 129 of file MPEG2TransportFileServerMediaSubsession.cpp.

References fIndexFile, lookupClient(), NULL, ClientTrickPlayState::setNextScale(), and OnDemandServerMediaSubsession::setStreamScale().

00129                                                                          {
00130   if (fIndexFile != NULL) { // we support 'trick play'
00131     ClientTrickPlayState* client = lookupClient(clientSessionId);
00132     if (client != NULL) {
00133       client->setNextScale(scale); // scale won't take effect until the next "PLAY"
00134     }
00135   }
00136 
00137   // Call the original, default version of this routine:
00138   OnDemandServerMediaSubsession::setStreamScale(clientSessionId, streamToken, scale);
00139 }

void MPEG2TransportFileServerMediaSubsession::deleteStream ( unsigned  clientSessionId,
void *&  streamToken 
) [private, virtual]

Reimplemented from OnDemandServerMediaSubsession.

Definition at line 142 of file MPEG2TransportFileServerMediaSubsession.cpp.

References OnDemandServerMediaSubsession::deleteStream(), False, fIndexFile, lookupClient(), NULL, and ClientTrickPlayState::updateStateOnPlayChange().

00142                                                            {
00143   if (fIndexFile != NULL) { // we support 'trick play'
00144     ClientTrickPlayState* client = lookupClient(clientSessionId);
00145     if (client != NULL) {
00146       client->updateStateOnPlayChange(False);
00147     }
00148   }
00149 
00150   // Call the original, default version of this routine:
00151   OnDemandServerMediaSubsession::deleteStream(clientSessionId, streamToken);
00152 }

FramedSource * MPEG2TransportFileServerMediaSubsession::createNewStreamSource ( unsigned  clientSessionId,
unsigned &  estBitrate 
) [private, virtual]

Implements OnDemandServerMediaSubsession.

Definition at line 159 of file MPEG2TransportFileServerMediaSubsession.cpp.

References HashTable::Add(), MPEG2TransportStreamFramer::createNew(), ByteStreamFileSource::createNew(), Medium::envir(), fClientSessionHashTable, fDuration, FileServerMediaSubsession::fFileName, FileServerMediaSubsession::fFileSize, ByteStreamFileSource::fileSize(), fIndexFile, lookupClient(), newClientTrickPlayState(), NULL, ClientTrickPlayState::setSource(), TRANSPORT_PACKET_SIZE, and TRANSPORT_PACKETS_PER_NETWORK_PACKET.

00159                                                                       {
00160   // Create the video source:
00161   unsigned const inputDataChunkSize
00162     = TRANSPORT_PACKETS_PER_NETWORK_PACKET*TRANSPORT_PACKET_SIZE;
00163   ByteStreamFileSource* fileSource
00164     = ByteStreamFileSource::createNew(envir(), fFileName, inputDataChunkSize);
00165   if (fileSource == NULL) return NULL;
00166   fFileSize = fileSource->fileSize();
00167 
00168   // Use the file size and the duration to estimate the stream's bitrate:
00169   if (fFileSize > 0 && fDuration > 0.0) {
00170     estBitrate = (unsigned)((int64_t)fFileSize/(125*fDuration) + 0.5); // kbps, rounded
00171   } else {
00172     estBitrate = 5000; // kbps, estimate
00173   }
00174 
00175 
00176   // Create a framer for the Transport Stream:
00177   MPEG2TransportStreamFramer* framer
00178     = MPEG2TransportStreamFramer::createNew(envir(), fileSource);
00179 
00180   if (fIndexFile != NULL) { // we support 'trick play'
00181     // Keep state for this client (if we don't already have it):
00182     ClientTrickPlayState* client = lookupClient(clientSessionId);
00183     if (client == NULL) {
00184       client = newClientTrickPlayState();
00185       fClientSessionHashTable->Add((char const*)clientSessionId, client);
00186     }
00187     client->setSource(framer);
00188   }
00189 
00190   return framer;
00191 }

RTPSink * MPEG2TransportFileServerMediaSubsession::createNewRTPSink ( Groupsock rtpGroupsock,
unsigned char  rtpPayloadTypeIfDynamic,
FramedSource inputSource 
) [private, virtual]

Implements OnDemandServerMediaSubsession.

Definition at line 194 of file MPEG2TransportFileServerMediaSubsession.cpp.

References SimpleRTPSink::createNew(), Medium::envir(), False, and True.

00196                                                   {
00197   return SimpleRTPSink::createNew(envir(), rtpGroupsock,
00198                                   33, 90000, "video", "MP2T",
00199                                   1, True, False /*no 'M' bit*/);
00200 }

void MPEG2TransportFileServerMediaSubsession::testScaleFactor ( float &  scale  )  [private, virtual]

Reimplemented from ServerMediaSubsession.

Definition at line 202 of file MPEG2TransportFileServerMediaSubsession.cpp.

References fDuration, fIndexFile, and NULL.

00202                                                                           {
00203   if (fIndexFile != NULL && fDuration > 0.0) {
00204     // We support any integral scale, other than 0
00205     int iScale = scale < 0.0 ? (int)(scale - 0.5f) : (int)(scale + 0.5f); // round
00206     if (iScale == 0) iScale = 1;
00207     scale = (float)iScale;
00208   } else {
00209     scale = 1.0f;
00210   }
00211 }

float MPEG2TransportFileServerMediaSubsession::duration (  )  const [private, virtual]

Reimplemented from ServerMediaSubsession.

Definition at line 213 of file MPEG2TransportFileServerMediaSubsession.cpp.

References fDuration.

00213                                                               {
00214   return fDuration;
00215 }

ClientTrickPlayState * MPEG2TransportFileServerMediaSubsession::lookupClient ( unsigned  clientSessionId  )  [private]

Definition at line 218 of file MPEG2TransportFileServerMediaSubsession.cpp.

References fClientSessionHashTable, and HashTable::Lookup().

Referenced by createNewStreamSource(), deleteStream(), pauseStream(), seekStream(), setStreamScale(), and startStream().

00218                                        {
00219   return (ClientTrickPlayState*)(fClientSessionHashTable->Lookup((char const*)clientSessionId));
00220 }

char const * OnDemandServerMediaSubsession::sdpLines (  )  [protected, virtual, inherited]

Implements ServerMediaSubsession.

Definition at line 50 of file OnDemandServerMediaSubsession.cpp.

References Medium::close(), OnDemandServerMediaSubsession::closeStreamSource(), OnDemandServerMediaSubsession::createNewRTPSink(), OnDemandServerMediaSubsession::createNewStreamSource(), Medium::envir(), OnDemandServerMediaSubsession::fSDPLines, NULL, OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and ServerMediaSubsession::trackNumber().

Referenced by OnDemandServerMediaSubsession::setSDPLinesFromRTPSink().

00050                                         {
00051   if (fSDPLines == NULL) {
00052     // We need to construct a set of SDP lines that describe this
00053     // subsession (as a unicast stream).  To do so, we first create
00054     // dummy (unused) source and "RTPSink" objects,
00055     // whose parameters we use for the SDP lines:
00056     unsigned estBitrate;
00057     FramedSource* inputSource = createNewStreamSource(0, estBitrate);
00058     if (inputSource == NULL) return NULL; // file not found
00059 
00060     struct in_addr dummyAddr;
00061     dummyAddr.s_addr = 0;
00062     Groupsock dummyGroupsock(envir(), dummyAddr, 0, 0);
00063     unsigned char rtpPayloadType = 96 + trackNumber()-1; // if dynamic
00064     RTPSink* dummyRTPSink
00065       = createNewRTPSink(&dummyGroupsock, rtpPayloadType, inputSource);
00066 
00067     setSDPLinesFromRTPSink(dummyRTPSink, inputSource, estBitrate);
00068     Medium::close(dummyRTPSink);
00069     closeStreamSource(inputSource);
00070   }
00071 
00072   return fSDPLines;
00073 }

void OnDemandServerMediaSubsession::getStreamParameters ( unsigned  clientSessionId,
netAddressBits  clientAddress,
Port const &  clientRTPPort,
Port const &  clientRTCPPort,
int  tcpSocketNum,
unsigned char  rtpChannelId,
unsigned char  rtcpChannelId,
netAddressBits destinationAddress,
u_int8_t &  destinationTTL,
Boolean isMulticast,
Port serverRTPPort,
Port serverRTCPPort,
void *&  streamToken 
) [protected, virtual, inherited]

Implements ServerMediaSubsession.

Definition at line 76 of file OnDemandServerMediaSubsession.cpp.

References HashTable::Add(), BasicUDPSink::createNew(), OnDemandServerMediaSubsession::createNewRTPSink(), OnDemandServerMediaSubsession::createNewStreamSource(), Medium::envir(), False, OnDemandServerMediaSubsession::fDestinationsHashTable, OnDemandServerMediaSubsession::fInitialPortNum, OnDemandServerMediaSubsession::fLastStreamToken, OnDemandServerMediaSubsession::fReuseFirstSource, increaseSendBufferTo(), NULL, Port::num(), Groupsock::removeAllDestinations(), Socket::socketNum(), OnDemandServerMediaSubsession::StreamState, and ServerMediaSubsession::trackNumber().

00088                                           {
00089   if (destinationAddress == 0) destinationAddress = clientAddress;
00090   struct in_addr destinationAddr; destinationAddr.s_addr = destinationAddress;
00091   isMulticast = False;
00092 
00093   if (fLastStreamToken != NULL && fReuseFirstSource) {
00094     // Special case: Rather than creating a new 'StreamState',
00095     // we reuse the one that we've already created:
00096     serverRTPPort = ((StreamState*)fLastStreamToken)->serverRTPPort();
00097     serverRTCPPort = ((StreamState*)fLastStreamToken)->serverRTCPPort();
00098     ++((StreamState*)fLastStreamToken)->referenceCount();
00099     streamToken = fLastStreamToken;
00100   } else {
00101     // Normal case: Create a new media source:
00102     unsigned streamBitrate;
00103     FramedSource* mediaSource
00104       = createNewStreamSource(clientSessionId, streamBitrate);
00105 
00106     // Create 'groupsock' and 'sink' objects for the destination,
00107     // using previously unused server port numbers:
00108     RTPSink* rtpSink;
00109     BasicUDPSink* udpSink;
00110     Groupsock* rtpGroupsock;
00111     Groupsock* rtcpGroupsock;
00112     portNumBits serverPortNum;
00113     if (clientRTCPPort.num() == 0) {
00114       // We're streaming raw UDP (not RTP). Create a single groupsock:
00115       NoReuse dummy(envir()); // ensures that we skip over ports that are already in use
00116       for (serverPortNum = fInitialPortNum; ; ++serverPortNum) {
00117         struct in_addr dummyAddr; dummyAddr.s_addr = 0;
00118 
00119         serverRTPPort = serverPortNum;
00120         rtpGroupsock = new Groupsock(envir(), dummyAddr, serverRTPPort, 255);
00121         if (rtpGroupsock->socketNum() >= 0) break; // success
00122       }
00123 
00124       rtcpGroupsock = NULL;
00125       rtpSink = NULL;
00126       udpSink = BasicUDPSink::createNew(envir(), rtpGroupsock);
00127     } else {
00128       // Normal case: We're streaming RTP (over UDP or TCP).  Create a pair of
00129       // groupsocks (RTP and RTCP), with adjacent port numbers (RTP port number even):
00130       NoReuse dummy(envir()); // ensures that we skip over ports that are already in use
00131       for (portNumBits serverPortNum = fInitialPortNum; ; serverPortNum += 2) {
00132         struct in_addr dummyAddr; dummyAddr.s_addr = 0;
00133 
00134         serverRTPPort = serverPortNum;
00135         rtpGroupsock = new Groupsock(envir(), dummyAddr, serverRTPPort, 255);
00136         if (rtpGroupsock->socketNum() < 0) {
00137           delete rtpGroupsock;
00138           continue; // try again
00139         }
00140 
00141         serverRTCPPort = serverPortNum+1;
00142         rtcpGroupsock = new Groupsock(envir(), dummyAddr, serverRTCPPort, 255);
00143         if (rtcpGroupsock->socketNum() < 0) {
00144           delete rtpGroupsock;
00145           delete rtcpGroupsock;
00146           continue; // try again
00147         }
00148 
00149         break; // success
00150       }
00151 
00152       unsigned char rtpPayloadType = 96 + trackNumber()-1; // if dynamic
00153       rtpSink = createNewRTPSink(rtpGroupsock, rtpPayloadType, mediaSource);
00154       udpSink = NULL;
00155     }
00156 
00157     // Turn off the destinations for each groupsock.  They'll get set later
00158     // (unless TCP is used instead):
00159     if (rtpGroupsock != NULL) rtpGroupsock->removeAllDestinations();
00160     if (rtcpGroupsock != NULL) rtcpGroupsock->removeAllDestinations();
00161 
00162     if (rtpGroupsock != NULL) {
00163       // Try to use a big send buffer for RTP -  at least 0.1 second of
00164       // specified bandwidth and at least 50 KB
00165       unsigned rtpBufSize = streamBitrate * 25 / 2; // 1 kbps * 0.1 s = 12.5 bytes
00166       if (rtpBufSize < 50 * 1024) rtpBufSize = 50 * 1024;
00167       increaseSendBufferTo(envir(), rtpGroupsock->socketNum(), rtpBufSize);
00168     }
00169 
00170     // Set up the state of the stream.  The stream will get started later:
00171     streamToken = fLastStreamToken
00172       = new StreamState(*this, serverRTPPort, serverRTCPPort, rtpSink, udpSink,
00173                         streamBitrate, mediaSource,
00174                         rtpGroupsock, rtcpGroupsock);
00175   }
00176 
00177   // Record these destinations as being for this client session id:
00178   Destinations* destinations;
00179   if (tcpSocketNum < 0) { // UDP
00180     destinations = new Destinations(destinationAddr, clientRTPPort, clientRTCPPort);
00181   } else { // TCP
00182     destinations = new Destinations(tcpSocketNum, rtpChannelId, rtcpChannelId);
00183   }
00184   fDestinationsHashTable->Add((char const*)clientSessionId, destinations);
00185 }

FramedSource * OnDemandServerMediaSubsession::getStreamSource ( void *  streamToken  )  [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Definition at line 245 of file OnDemandServerMediaSubsession.cpp.

References StreamState::mediaSource(), and NULL.

00245                                                                               {
00246   if (streamToken == NULL) return NULL;
00247 
00248   StreamState* streamState = (StreamState*)streamToken;
00249   return streamState->mediaSource();
00250 }

char const * OnDemandServerMediaSubsession::getAuxSDPLine ( RTPSink rtpSink,
FramedSource inputSource 
) [protected, virtual, inherited]

Reimplemented in DVVideoFileServerMediaSubsession, H264VideoFileServerMediaSubsession, and MPEG4VideoFileServerMediaSubsession.

Definition at line 280 of file OnDemandServerMediaSubsession.cpp.

References RTPSink::auxSDPLine(), and NULL.

Referenced by OnDemandServerMediaSubsession::setSDPLinesFromRTPSink().

00280                                                                {
00281   // Default implementation:
00282   return rtpSink == NULL ? NULL : rtpSink->auxSDPLine();
00283 }

void OnDemandServerMediaSubsession::seekStreamSource ( FramedSource inputSource,
double &  seekNPT,
double  streamDuration,
u_int64_t &  numBytes 
) [protected, virtual, inherited]

Reimplemented in AACAudioMatroskaFileServerMediaSubsession, AC3AudioMatroskaFileServerMediaSubsession, H264VideoMatroskaFileServerMediaSubsession, DVVideoFileServerMediaSubsession, MP3AudioFileServerMediaSubsession, MPEG1or2DemuxedServerMediaSubsession, WAVAudioFileServerMediaSubsession, MP3AudioMatroskaFileServerMediaSubsession, T140TextMatroskaFileServerMediaSubsession, VorbisAudioMatroskaFileServerMediaSubsession, and VP8VideoMatroskaFileServerMediaSubsession.

Definition at line 285 of file OnDemandServerMediaSubsession.cpp.

Referenced by OnDemandServerMediaSubsession::seekStream().

00286                                                                                                                           {
00287   // Default implementation: Do nothing
00288 }

void OnDemandServerMediaSubsession::setStreamSourceScale ( FramedSource inputSource,
float  scale 
) [protected, virtual, inherited]

Reimplemented in MP3AudioFileServerMediaSubsession, and WAVAudioFileServerMediaSubsession.

Definition at line 291 of file OnDemandServerMediaSubsession.cpp.

Referenced by OnDemandServerMediaSubsession::setStreamScale().

00291                                                                      {
00292   // Default implementation: Do nothing
00293 }

void OnDemandServerMediaSubsession::closeStreamSource ( FramedSource inputSource  )  [protected, virtual, inherited]

Definition at line 295 of file OnDemandServerMediaSubsession.cpp.

References Medium::close().

Referenced by StreamState::reclaim(), and OnDemandServerMediaSubsession::sdpLines().

00295                                                                                {
00296   Medium::close(inputSource);
00297 }

unsigned ServerMediaSubsession::trackNumber (  )  const [inline, inherited]

Definition at line 121 of file ServerMediaSession.hh.

References ServerMediaSubsession::fTrackNumber.

Referenced by OnDemandServerMediaSubsession::getStreamParameters(), and OnDemandServerMediaSubsession::sdpLines().

00121 { return fTrackNumber; }

char const * ServerMediaSubsession::trackId (  )  [inherited]

Definition at line 324 of file ServerMediaSession.cpp.

References ServerMediaSubsession::fTrackId, ServerMediaSubsession::fTrackNumber, NULL, and strDup().

Referenced by PassiveServerMediaSubsession::sdpLines(), and OnDemandServerMediaSubsession::setSDPLinesFromRTPSink().

00324                                            {
00325   if (fTrackNumber == 0) return NULL; // not yet in a ServerMediaSession
00326 
00327   if (fTrackId == NULL) {
00328     char buf[100];
00329     sprintf(buf, "track%d", fTrackNumber);
00330     fTrackId = strDup(buf);
00331   }
00332   return fTrackId;
00333 }

void ServerMediaSubsession::setServerAddressAndPortForSDP ( netAddressBits  addressBits,
portNumBits  portBits 
) [inherited]

Definition at line 367 of file ServerMediaSession.cpp.

References ServerMediaSubsession::fPortNumForSDP, and ServerMediaSubsession::fServerAddressForSDP.

00368                                                                                 {
00369   fServerAddressForSDP = addressBits;
00370   fPortNumForSDP = portBits;
00371 }

char const * ServerMediaSubsession::rangeSDPLine (  )  const [protected, inherited]

Definition at line 374 of file ServerMediaSession.cpp.

References ServerMediaSubsession::duration(), ServerMediaSession::duration(), ServerMediaSubsession::fParentSession, NULL, and strDup().

Referenced by PassiveServerMediaSubsession::sdpLines(), and OnDemandServerMediaSubsession::setSDPLinesFromRTPSink().

00374                                           {
00375   if (fParentSession == NULL) return NULL;
00376 
00377   // If all of our parent's subsessions have the same duration
00378   // (as indicated by "fParentSession->duration() >= 0"), there's no "a=range:" line:
00379   if (fParentSession->duration() >= 0.0) return strDup("");
00380 
00381   // Use our own duration for a "a=range:" line:
00382   float ourDuration = duration();
00383   if (ourDuration == 0.0) {
00384     return strDup("a=range:npt=0-\r\n");
00385   } else {
00386     char buf[100];
00387     sprintf(buf, "a=range:npt=0-%.3f\r\n", ourDuration);
00388     return strDup(buf);
00389   }
00390 }

Boolean Medium::lookupByName ( UsageEnvironment env,
char const *  mediumName,
Medium *&  resultMedium 
) [static, inherited]

Definition at line 41 of file Media.cpp.

References env, False, MediaLookupTable::lookup(), NULL, MediaLookupTable::ourMedia(), UsageEnvironment::setResultMsg(), and True.

Referenced by ServerMediaSession::lookupByName(), RTSPServer::lookupByName(), RTSPClient::lookupByName(), RTCPInstance::lookupByName(), MediaSource::lookupByName(), MediaSink::lookupByName(), MediaSession::lookupByName(), and DarwinInjector::lookupByName().

00042                                                          {
00043   resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName);
00044   if (resultMedium == NULL) {
00045     env.setResultMsg("Medium ", mediumName, " does not exist");
00046     return False;
00047   }
00048 
00049   return True;
00050 }

void Medium::close ( UsageEnvironment env,
char const *  mediumName 
) [static, inherited]

Definition at line 52 of file Media.cpp.

References env, MediaLookupTable::ourMedia(), and MediaLookupTable::remove().

Referenced by afterPlaying(), Medium::close(), closeMediaSinks(), OnDemandServerMediaSubsession::closeStreamSource(), continueAfterTEARDOWN(), WAVAudioFileSource::createNew(), QuickTimeFileSink::createNew(), QCELPAudioRTPSource::createNew(), MP3HTTPSource::createNew(), MP3FileSource::createNew(), AVIFileSink::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), RTSPServerSupportingHTTPStreaming::RTSPClientSessionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), OnDemandServerMediaSubsession::sdpLines(), shutdownStream(), T140TextRTPSink::stopPlaying(), H264VideoRTPSink::stopPlaying(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), InputESSourceRecord::~InputESSourceRecord(), MatroskaFileParser::~MatroskaFileParser(), MatroskaFileServerDemux::~MatroskaFileServerDemux(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), ~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), RTSPServerSupportingHTTPStreaming::RTSPClientSessionSupportingHTTPStreaming::~RTSPClientSessionSupportingHTTPStreaming(), ServerMediaSession::~ServerMediaSession(), ServerMediaSubsession::~ServerMediaSubsession(), StreamClientState::~StreamClientState(), and StreamReplicator::~StreamReplicator().

00052                                                           {
00053   MediaLookupTable::ourMedia(env)->remove(name);
00054 }

void Medium::close ( Medium medium  )  [static, inherited]

Definition at line 56 of file Media.cpp.

References Medium::close(), Medium::envir(), Medium::name(), and NULL.

00056                                  {
00057   if (medium == NULL) return;
00058 
00059   close(medium->envir(), medium->name());
00060 }

UsageEnvironment& Medium::envir (  )  const [inline, inherited]

Definition at line 59 of file Media.hh.

References Medium::fEnviron.

Referenced by QuickTimeFileSink::addArbitraryString(), FileSink::addData(), RTCPInstance::addStreamSocket(), MPEG2IFrameIndexFromTransportStream::addToTail(), StreamParser::afterGettingBytes1(), DummySink::afterGettingFrame(), T140IdleFilter::afterGettingFrame(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), RTSPServer::RTSPClientSession::changeClientInputSocket(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), T140TextRTPSink::continuePlaying(), QuickTimeFileSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), VP8VideoMatroskaFileServerMediaSubsession::createNewRTPSink(), VorbisAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), T140TextMatroskaFileServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportUDPServerMediaSubsession::createNewRTPSink(), createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), MP3AudioFileServerMediaSubsession::createNewRTPSink(), H264VideoFileServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), DVVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), AC3AudioMatroskaFileServerMediaSubsession::createNewRTPSink(), AC3AudioFileServerMediaSubsession::createNewRTPSink(), AACAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportUDPServerMediaSubsession::createNewStreamSource(), createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MP3AudioFileServerMediaSubsession::createNewStreamSource(), H264VideoMatroskaFileServerMediaSubsession::createNewStreamSource(), H264VideoFileServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), AC3AudioFileServerMediaSubsession::createNewStreamSource(), AMRDeinterleavingBuffer::deliverIncomingFrame(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), DeviceSource::DeviceSource(), WAVAudioFileSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), MPEG2IFrameIndexFromTransportStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), SIPClient::doInviteStateMachine(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), T140IdleFilter::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), H264VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptions(), DVVideoStreamFramer::getProfile(), SIPClient::getResponse(), SIPClient::getResponseCode(), getSDPDescription(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPClient::handleGET_PARAMETERResponse(), RTSPServerSupportingHTTPStreaming::RTSPClientSessionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), RTSPClient::handleIncomingRequest(), RTSPClient::handlePLAYResponse(), RTSPClient::handleRequestError(), RTSPClient::handleResponseBytes(), RTSPClient::handleSETUPResponse(), RTSPServer::incomingConnectionHandler(), RTSPClient::incomingDataHandler1(), RTCPInstance::incomingReportHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MatroskaDemux::MatroskaDemux(), MatroskaFile::MatroskaFile(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), MatroskaDemux::newDemuxedTrack(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), RTSPClient::openConnection(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MatroskaFileParser::parseStartOfFile(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), TCPStreamSink::processBuffer(), SIPClient::processURL(), AC3AudioStreamParser::readAndSaveAFrame(), MPEG1or2Demux::registerReadInterest(), RTCPInstance::reschedule(), RTSPClient::resendCommand(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), RTSPServer::rtspURLPrefix(), RTCPInstance::schedule(), OnDemandServerMediaSubsession::sdpLines(), SIPClient::sendACK(), SIPClient::sendBYE(), SIPClient::sendINVITE(), MultiFramedRTPSink::sendPacketIfNecessary(), SIPClient::sendRequest(), RTSPClient::sendRequest(), DarwinInjector::setDestination(), RTSPClient::setupHTTPTunneling1(), setupNextSubsession(), RTSPServer::setUpTunnelingOverHTTP(), QuickTimeFileSink::setWord(), AVIFileSink::setWord(), QuickTimeFileSink::setWord64(), shutdownStream(), SIPClient::SIPClient(), TCPStreamSink::socketWritableHandler1(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), AVIFileSink::startPlaying(), startPlayingSession(), PassiveServerMediaSubsession::startStream(), MediaSink::stopPlaying(), tearDownSession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), DeviceSource::~DeviceSource(), RTSPServer::~RTSPServer(), StreamClientState::~StreamClientState(), and T140IdleFilter::~T140IdleFilter().

00059 {return fEnviron;}

char const* Medium::name (  )  const [inline, inherited]

Definition at line 61 of file Media.hh.

References Medium::fMediumName.

Referenced by QuickTimeFileSink::addAtom_hdlr2(), Medium::close(), MP3ADUTranscoder::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), and MP3FileSource::initializeStream().

00061 {return fMediumName;}

Boolean Medium::isSource (  )  const [virtual, inherited]

Reimplemented in MediaSource.

Definition at line 62 of file Media.cpp.

References False.

Referenced by MediaSource::lookupByName().

00062                                {
00063   return False; // default implementation
00064 }

Boolean Medium::isSink (  )  const [virtual, inherited]

Reimplemented in MediaSink.

Definition at line 66 of file Media.cpp.

References False.

Referenced by MediaSink::lookupByName().

00066                              {
00067   return False; // default implementation
00068 }

Boolean Medium::isRTCPInstance (  )  const [virtual, inherited]

Reimplemented in RTCPInstance.

Definition at line 70 of file Media.cpp.

References False.

Referenced by RTCPInstance::lookupByName().

00070                                      {
00071   return False; // default implementation
00072 }

Boolean Medium::isRTSPClient (  )  const [virtual, inherited]

Reimplemented in RTSPClient.

Definition at line 74 of file Media.cpp.

References False.

Referenced by RTSPClient::lookupByName().

00074                                    {
00075   return False; // default implementation
00076 }

Boolean Medium::isRTSPServer (  )  const [virtual, inherited]

Reimplemented in RTSPServer.

Definition at line 78 of file Media.cpp.

References False.

Referenced by RTSPServer::lookupByName().

00078                                    {
00079   return False; // default implementation
00080 }

Boolean Medium::isMediaSession (  )  const [virtual, inherited]

Reimplemented in MediaSession.

Definition at line 82 of file Media.cpp.

References False.

Referenced by MediaSession::lookupByName().

00082                                      {
00083   return False; // default implementation
00084 }

Boolean Medium::isServerMediaSession (  )  const [virtual, inherited]

Reimplemented in ServerMediaSession.

Definition at line 86 of file Media.cpp.

References False.

Referenced by ServerMediaSession::lookupByName().

00086                                            {
00087   return False; // default implementation
00088 }

Boolean Medium::isDarwinInjector (  )  const [virtual, inherited]

Reimplemented in DarwinInjector.

Definition at line 90 of file Media.cpp.

References False.

Referenced by DarwinInjector::lookupByName().

00090                                        {
00091   return False; // default implementation
00092 }

TaskToken& Medium::nextTask (  )  [inline, protected, inherited]

Definition at line 78 of file Media.hh.

References Medium::fNextTask.

Referenced by BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), WAVAudioFileSource::doGetNextFrame(), MP3FileSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), ByteStreamFileSource::doReadFromFile(), RTCPInstance::reschedule(), RTCPInstance::schedule(), MultiFramedRTPSink::sendPacketIfNecessary(), and MediaSink::stopPlaying().

00078                         {
00079         return fNextTask;
00080   }


Friends And Related Function Documentation

friend class MediaLookupTable [friend, inherited]

Definition at line 74 of file Media.hh.


Field Documentation

MPEG2TransportStreamIndexFile* MPEG2TransportFileServerMediaSubsession::fIndexFile [private]

Definition at line 91 of file MPEG2TransportFileServerMediaSubsession.hh.

Referenced by createNewStreamSource(), deleteStream(), MPEG2TransportFileServerMediaSubsession(), newClientTrickPlayState(), pauseStream(), seekStream(), setStreamScale(), startStream(), testScaleFactor(), and ~MPEG2TransportFileServerMediaSubsession().

float MPEG2TransportFileServerMediaSubsession::fDuration [private]

Definition at line 92 of file MPEG2TransportFileServerMediaSubsession.hh.

Referenced by createNewStreamSource(), duration(), MPEG2TransportFileServerMediaSubsession(), and testScaleFactor().

HashTable* MPEG2TransportFileServerMediaSubsession::fClientSessionHashTable [private]

Definition at line 93 of file MPEG2TransportFileServerMediaSubsession.hh.

Referenced by createNewStreamSource(), lookupClient(), MPEG2TransportFileServerMediaSubsession(), and ~MPEG2TransportFileServerMediaSubsession().

char const* FileServerMediaSubsession::fFileName [protected, inherited]

Definition at line 36 of file FileServerMediaSubsession.hh.

Referenced by MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MP3AudioFileServerMediaSubsession::createNewStreamSource(), H264VideoFileServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), AC3AudioFileServerMediaSubsession::createNewStreamSource(), and FileServerMediaSubsession::~FileServerMediaSubsession().

u_int64_t FileServerMediaSubsession::fFileSize [protected, inherited]

Definition at line 37 of file FileServerMediaSubsession.hh.

Referenced by MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), H264VideoFileServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), and DVVideoFileServerMediaSubsession::seekStreamSource().

char* OnDemandServerMediaSubsession::fSDPLines [protected, inherited]

Definition at line 94 of file OnDemandServerMediaSubsession.hh.

Referenced by OnDemandServerMediaSubsession::sdpLines(), OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and OnDemandServerMediaSubsession::~OnDemandServerMediaSubsession().

ServerMediaSession* ServerMediaSubsession::fParentSession [protected, inherited]

Definition at line 169 of file ServerMediaSession.hh.

Referenced by ServerMediaSubsession::rangeSDPLine().

netAddressBits ServerMediaSubsession::fServerAddressForSDP [protected, inherited]

Definition at line 170 of file ServerMediaSession.hh.

Referenced by OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and ServerMediaSubsession::setServerAddressAndPortForSDP().

portNumBits ServerMediaSubsession::fPortNumForSDP [protected, inherited]

Definition at line 171 of file ServerMediaSession.hh.

Referenced by OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and ServerMediaSubsession::setServerAddressAndPortForSDP().


The documentation for this class was generated from the following files:
Generated on Thu Feb 2 23:55:25 2012 for live by  doxygen 1.5.2