VorbisAudioMatroskaFileServerMediaSubsession Class Reference

#include <VorbisAudioMatroskaFileServerMediaSubsession.hh>

Inheritance diagram for VorbisAudioMatroskaFileServerMediaSubsession:

Inheritance graph
[legend]
Collaboration diagram for VorbisAudioMatroskaFileServerMediaSubsession:

Collaboration graph
[legend]

Public Member Functions

unsigned trackNumber () const
char const * trackId ()
virtual void testScaleFactor (float &scale)
virtual void getAbsoluteTimeRange (char *&absStartTime, char *&absEndTime) const
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 VorbisAudioMatroskaFileServerMediaSubsessioncreateNew (MatroskaFileServerDemux &demux, unsigned trackNumber)
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

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 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 seekStream (unsigned clientSessionId, void *streamToken, char *&absStart, char *&absEnd)
virtual void nullSeekStream (unsigned clientSessionId, void *streamToken)
virtual void setStreamScale (unsigned clientSessionId, void *streamToken, float scale)
virtual float getCurrentNPT (void *streamToken)
virtual FramedSourcegetStreamSource (void *streamToken)
virtual void deleteStream (unsigned clientSessionId, void *&streamToken)
virtual char const * getAuxSDPLine (RTPSink *rtpSink, FramedSource *inputSource)
virtual void seekStreamSource (FramedSource *inputSource, char *&absStart, char *&absEnd)
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
HashTablefDestinationsHashTable
ServerMediaSessionfParentSession
netAddressBits fServerAddressForSDP
portNumBits fPortNumForSDP

Private Member Functions

 VorbisAudioMatroskaFileServerMediaSubsession (MatroskaFileServerDemux &demux, unsigned trackNumber)
virtual ~VorbisAudioMatroskaFileServerMediaSubsession ()
virtual float duration () const
virtual void seekStreamSource (FramedSource *inputSource, double &seekNPT, double streamDuration, u_int64_t &numBytes)
virtual FramedSourcecreateNewStreamSource (unsigned clientSessionId, unsigned &estBitrate)
virtual RTPSinkcreateNewRTPSink (Groupsock *rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource *inputSource)

Private Attributes

MatroskaFileServerDemuxfOurDemux
unsigned fTrackNumber
u_int8_t * fIdentificationHeader
unsigned fIdentificationHeaderSize
u_int8_t * fCommentHeader
unsigned fCommentHeaderSize
u_int8_t * fSetupHeader
unsigned fSetupHeaderSize
unsigned fEstBitrate

Friends

class MediaLookupTable

Detailed Description

Definition at line 32 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.


Constructor & Destructor Documentation

VorbisAudioMatroskaFileServerMediaSubsession::VorbisAudioMatroskaFileServerMediaSubsession ( MatroskaFileServerDemux demux,
unsigned  trackNumber 
) [private]

Definition at line 34 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.

References MatroskaTrack::codecPrivate, MatroskaTrack::codecPrivateSize, False, getPrivByte, NULL, and True.

00035   : FileServerMediaSubsession(demux.envir(), demux.fileName(), False),
00036     fOurDemux(demux), fTrackNumber(trackNumber),
00037     fIdentificationHeader(NULL), fIdentificationHeaderSize(0),
00038     fCommentHeader(NULL), fCommentHeaderSize(0),
00039     fSetupHeader(NULL), fSetupHeaderSize(0),
00040     fEstBitrate(96/* kbps, default guess */) {
00041   MatroskaTrack* track = fOurDemux.lookup(fTrackNumber);
00042 
00043   // The Matroska file's 'Codec Private' data is assumed to be the Vorbis configuration information,
00044   // containing the "Identification", "Comment", and "Setup" headers.  Extract these headers now:
00045   do {
00046     u_int8_t* p = track->codecPrivate;
00047     unsigned n = track->codecPrivateSize;
00048     if (n == 0 || p == NULL) break; // we have no 'Codec Private' data
00049 
00050     u_int8_t numHeaders;
00051     getPrivByte(numHeaders);
00052     unsigned headerSize[3]; // we don't handle any more than 2+1 headers
00053 
00054     // Extract the sizes of each of these headers:
00055     unsigned sizesSum = 0;
00056     Boolean success = True;
00057     unsigned i;
00058     for (i = 0; i < numHeaders && i < 3; ++i) {
00059       unsigned len = 0;
00060       u_int8_t c;
00061 
00062       do {
00063         success = False;
00064         getPrivByte(c);
00065         success = True;
00066 
00067         len += c;
00068       } while (c == 255);
00069       if (!success || len == 0) break;
00070 
00071       headerSize[i] = len;
00072       sizesSum += len;
00073     }
00074     if (!success) break;
00075 
00076     // Compute the implicit size of the final header:
00077     if (numHeaders < 3) {
00078       int finalHeaderSize = n - sizesSum;
00079       if (finalHeaderSize <= 0) break; // error in data; give up
00080 
00081       headerSize[numHeaders] = (unsigned)finalHeaderSize;
00082       ++numHeaders; // include the final header now
00083     } else {
00084       numHeaders = 3; // The maximum number of headers that we handle
00085     }
00086 
00087     // Then, extract and classify each header:
00088     for (i = 0; i < numHeaders; ++i) {
00089       success = False;
00090       unsigned newHeaderSize = headerSize[i];
00091       u_int8_t* newHeader = new u_int8_t[newHeaderSize];
00092       if (newHeader == NULL) break;
00093       
00094       u_int8_t* hdr = newHeader;
00095       while (newHeaderSize-- > 0) {
00096         success = False;
00097         getPrivByte(*hdr++);
00098         success = True;
00099       }
00100       if (!success) {
00101         delete[] newHeader;
00102         break;
00103       }
00104 
00105       u_int8_t headerType = newHeader[0];
00106       if (headerType == 1) {
00107         delete[] fIdentificationHeader; fIdentificationHeader = newHeader;
00108         fIdentificationHeaderSize = headerSize[i];
00109 
00110         if (fIdentificationHeaderSize >= 28) {
00111           // Get the 'bitrate' values from this header, and use them to set "fEstBitrate":
00112           u_int32_t val;
00113           u_int8_t* p;
00114 
00115           p = &fIdentificationHeader[16];
00116           val = ((p[3]*256 + p[2])*256 + p[1])*256 + p[0]; // i.e., little-endian
00117           int bitrate_maximum = (int)val;
00118           if (bitrate_maximum < 0) bitrate_maximum = 0;
00119 
00120           p = &fIdentificationHeader[20];
00121           val = ((p[3]*256 + p[2])*256 + p[1])*256 + p[0]; // i.e., little-endian
00122           int bitrate_nominal = (int)val;
00123           if (bitrate_nominal < 0) bitrate_nominal = 0;
00124 
00125           p = &fIdentificationHeader[24];
00126           val = ((p[3]*256 + p[2])*256 + p[1])*256 + p[0]; // i.e., little-endian
00127           int bitrate_minimum = (int)val;
00128           if (bitrate_minimum < 0) bitrate_minimum = 0;
00129 
00130           int bitrate
00131             = bitrate_nominal>0 ? bitrate_nominal : bitrate_maximum>0 ? bitrate_maximum : bitrate_minimum>0 ? bitrate_minimum : 0;
00132           if (bitrate > 0) fEstBitrate = ((unsigned)bitrate)/1000;
00133         }
00134       } else if (headerType == 3) {
00135         delete[] fCommentHeader; fCommentHeader = newHeader;
00136         fCommentHeaderSize = headerSize[i];
00137       } else if (headerType == 5) {
00138         delete[] fSetupHeader; fSetupHeader = newHeader;
00139         fSetupHeaderSize = headerSize[i];
00140       } else {
00141         delete[] newHeader; // because it was a header type that we don't understand
00142       }
00143     }
00144     if (!success) break;
00145   } while (0);
00146 }

VorbisAudioMatroskaFileServerMediaSubsession::~VorbisAudioMatroskaFileServerMediaSubsession (  )  [private, virtual]

Definition at line 149 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.

00149                                                 {
00150   delete[] fIdentificationHeader;
00151   delete[] fCommentHeader;
00152   delete[] fSetupHeader;
00153 }


Member Function Documentation

VorbisAudioMatroskaFileServerMediaSubsession * VorbisAudioMatroskaFileServerMediaSubsession::createNew ( MatroskaFileServerDemux demux,
unsigned  trackNumber 
) [static]

Definition at line 27 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.

References demux.

Referenced by MatroskaFileServerDemux::newServerMediaSubsession().

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

Reimplemented from ServerMediaSubsession.

Definition at line 155 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.

References MatroskaFileServerDemux::fileDuration(), and fOurDemux.

00155 { return fOurDemux.fileDuration(); }

void VorbisAudioMatroskaFileServerMediaSubsession::seekStreamSource ( FramedSource inputSource,
double &  seekNPT,
double  streamDuration,
u_int64_t &  numBytes 
) [private, virtual]

Reimplemented from OnDemandServerMediaSubsession.

Definition at line 158 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.

00158                                                                                                                  {
00159   ((MatroskaDemuxedTrack*)inputSource)->seekToTime(seekNPT);
00160 }

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

Implements OnDemandServerMediaSubsession.

Definition at line 163 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.

References fEstBitrate, fOurDemux, fTrackNumber, and MatroskaFileServerDemux::newDemuxedTrack().

00163                                                                       {
00164   estBitrate = fEstBitrate; // kbps, estimate
00165 
00166   return fOurDemux.newDemuxedTrack(clientSessionId, fTrackNumber);
00167 }

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

Implements OnDemandServerMediaSubsession.

Definition at line 170 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.

References VorbisAudioRTPSink::createNew(), Medium::envir(), fCommentHeader, fCommentHeaderSize, fIdentificationHeader, fIdentificationHeaderSize, fOurDemux, fSetupHeader, fSetupHeaderSize, fTrackNumber, MatroskaFileServerDemux::lookup(), MatroskaTrack::numChannels, and MatroskaTrack::samplingFrequency.

00170                                                                                                                 {
00171   MatroskaTrack* track = fOurDemux.lookup(fTrackNumber);
00172   return VorbisAudioRTPSink::createNew(envir(), rtpGroupsock,
00173                                        rtpPayloadTypeIfDynamic, track->samplingFrequency, track->numChannels,
00174                                        fIdentificationHeader, fIdentificationHeaderSize,
00175                                        fCommentHeader, fCommentHeaderSize,
00176                                        fSetupHeader, fSetupHeaderSize);
00177 }

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 }

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

Implements ServerMediaSubsession.

Reimplemented in MPEG2TransportFileServerMediaSubsession.

Definition at line 187 of file OnDemandServerMediaSubsession.cpp.

References RTPSink::currentSeqNo(), OnDemandServerMediaSubsession::fDestinationsHashTable, HashTable::Lookup(), NULL, RTPSink::presetNextTimestamp(), StreamState::rtpSink(), and StreamState::startPlaying().

Referenced by MPEG2TransportFileServerMediaSubsession::startStream().

00194                                                                                                      {
00195   StreamState* streamState = (StreamState*)streamToken;
00196   Destinations* destinations
00197     = (Destinations*)(fDestinationsHashTable->Lookup((char const*)clientSessionId));
00198   if (streamState != NULL) {
00199     streamState->startPlaying(destinations,
00200                               rtcpRRHandler, rtcpRRHandlerClientData,
00201                               serverRequestAlternativeByteHandler, serverRequestAlternativeByteHandlerClientData);
00202     RTPSink* rtpSink = streamState->rtpSink(); // alias
00203     if (rtpSink != NULL) {
00204       rtpSeqNum = rtpSink->currentSeqNo();
00205       rtpTimestamp = rtpSink->presetNextTimestamp();
00206     }
00207   }
00208 }

void OnDemandServerMediaSubsession::pauseStream ( unsigned  clientSessionId,
void *  streamToken 
) [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Reimplemented in MPEG2TransportFileServerMediaSubsession.

Definition at line 210 of file OnDemandServerMediaSubsession.cpp.

References OnDemandServerMediaSubsession::fReuseFirstSource, NULL, and StreamState::pause().

Referenced by MPEG2TransportFileServerMediaSubsession::pauseStream(), and MPEG2TransportFileServerMediaSubsession::startStream().

00211                                                                    {
00212   // Pausing isn't allowed if multiple clients are receiving data from
00213   // the same source:
00214   if (fReuseFirstSource) return;
00215 
00216   StreamState* streamState = (StreamState*)streamToken;
00217   if (streamState != NULL) streamState->pause();
00218 }

void OnDemandServerMediaSubsession::seekStream ( unsigned  clientSessionId,
void *  streamToken,
double &  seekNPT,
double  streamDuration,
u_int64_t &  numBytes 
) [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Reimplemented in MPEG2TransportFileServerMediaSubsession.

Definition at line 220 of file OnDemandServerMediaSubsession.cpp.

References OnDemandServerMediaSubsession::fReuseFirstSource, StreamState::mediaSource(), NULL, RTPSink::resetPresentationTimes(), StreamState::rtpSink(), OnDemandServerMediaSubsession::seekStreamSource(), and StreamState::startNPT().

Referenced by MPEG2TransportFileServerMediaSubsession::seekStream().

00221                                                                                                                                {
00222   numBytes = 0; // by default: unknown
00223 
00224   // Seeking isn't allowed if multiple clients are receiving data from the same source:
00225   if (fReuseFirstSource) return;
00226 
00227   StreamState* streamState = (StreamState*)streamToken;
00228   if (streamState != NULL && streamState->mediaSource() != NULL) {
00229     seekStreamSource(streamState->mediaSource(), seekNPT, streamDuration, numBytes);
00230 
00231     streamState->startNPT() = (float)seekNPT;
00232     RTPSink* rtpSink = streamState->rtpSink(); // alias
00233     if (rtpSink != NULL) rtpSink->resetPresentationTimes();
00234   }
00235 }

void OnDemandServerMediaSubsession::seekStream ( unsigned  clientSessionId,
void *  streamToken,
char *&  absStart,
char *&  absEnd 
) [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Definition at line 237 of file OnDemandServerMediaSubsession.cpp.

References OnDemandServerMediaSubsession::fReuseFirstSource, StreamState::mediaSource(), NULL, and OnDemandServerMediaSubsession::seekStreamSource().

00238                                                                                                   {
00239   // Seeking isn't allowed if multiple clients are receiving data from the same source:
00240   if (fReuseFirstSource) return;
00241 
00242   StreamState* streamState = (StreamState*)streamToken;
00243   if (streamState != NULL && streamState->mediaSource() != NULL) {
00244     seekStreamSource(streamState->mediaSource(), absStart, absEnd);
00245   }
00246 }

void OnDemandServerMediaSubsession::nullSeekStream ( unsigned  clientSessionId,
void *  streamToken 
) [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Definition at line 248 of file OnDemandServerMediaSubsession.cpp.

References OnDemandServerMediaSubsession::getCurrentNPT(), StreamState::mediaSource(), NULL, RTPSink::resetPresentationTimes(), StreamState::rtpSink(), and StreamState::startNPT().

00248                                                                                                   {
00249   StreamState* streamState = (StreamState*)streamToken;
00250   if (streamState != NULL && streamState->mediaSource() != NULL) {
00251     // Because we're not seeking here, get the current NPT, and remember it as the new 'start' NPT:
00252     streamState->startNPT() = getCurrentNPT(streamToken);
00253     RTPSink* rtpSink = streamState->rtpSink(); // alias
00254     if (rtpSink != NULL) rtpSink->resetPresentationTimes();
00255   }
00256 }

void OnDemandServerMediaSubsession::setStreamScale ( unsigned  clientSessionId,
void *  streamToken,
float  scale 
) [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Reimplemented in MPEG2TransportFileServerMediaSubsession.

Definition at line 258 of file OnDemandServerMediaSubsession.cpp.

References OnDemandServerMediaSubsession::fReuseFirstSource, StreamState::mediaSource(), NULL, and OnDemandServerMediaSubsession::setStreamSourceScale().

Referenced by MPEG2TransportFileServerMediaSubsession::setStreamScale().

00259                                                                                    {
00260   // Changing the scale factor isn't allowed if multiple clients are receiving data
00261   // from the same source:
00262   if (fReuseFirstSource) return;
00263 
00264   StreamState* streamState = (StreamState*)streamToken;
00265   if (streamState != NULL && streamState->mediaSource() != NULL) {
00266     setStreamSourceScale(streamState->mediaSource(), scale);
00267   }
00268 }

float OnDemandServerMediaSubsession::getCurrentNPT ( void *  streamToken  )  [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Definition at line 270 of file OnDemandServerMediaSubsession.cpp.

References RTPSink::initialPresentationTime(), RTPSink::mostRecentPresentationTime(), NULL, StreamState::rtpSink(), and StreamState::startNPT().

Referenced by OnDemandServerMediaSubsession::nullSeekStream().

00270                                                                     {
00271   do {
00272     if (streamToken == NULL) break;
00273 
00274     StreamState* streamState = (StreamState*)streamToken;
00275     RTPSink* rtpSink = streamState->rtpSink();
00276     if (rtpSink == NULL) break;
00277 
00278     return streamState->startNPT()
00279       + (rtpSink->mostRecentPresentationTime().tv_sec - rtpSink->initialPresentationTime().tv_sec)
00280       + (rtpSink->mostRecentPresentationTime().tv_sec - rtpSink->initialPresentationTime().tv_sec)/1000000.0f;
00281   } while (0);
00282 
00283   return 0.0;
00284 }

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

Reimplemented from ServerMediaSubsession.

Definition at line 286 of file OnDemandServerMediaSubsession.cpp.

References StreamState::mediaSource(), and NULL.

00286                                                                               {
00287   if (streamToken == NULL) return NULL;
00288 
00289   StreamState* streamState = (StreamState*)streamToken;
00290   return streamState->mediaSource();
00291 }

void OnDemandServerMediaSubsession::deleteStream ( unsigned  clientSessionId,
void *&  streamToken 
) [protected, virtual, inherited]

Reimplemented from ServerMediaSubsession.

Reimplemented in MPEG2TransportFileServerMediaSubsession.

Definition at line 293 of file OnDemandServerMediaSubsession.cpp.

References StreamState::endPlaying(), OnDemandServerMediaSubsession::fDestinationsHashTable, HashTable::Lookup(), NULL, StreamState::referenceCount(), and HashTable::Remove().

Referenced by MPEG2TransportFileServerMediaSubsession::deleteStream().

00294                                                                      {
00295   StreamState* streamState = (StreamState*)streamToken;
00296 
00297   // Look up (and remove) the destinations for this client session:
00298   Destinations* destinations
00299     = (Destinations*)(fDestinationsHashTable->Lookup((char const*)clientSessionId));
00300   if (destinations != NULL) {
00301     fDestinationsHashTable->Remove((char const*)clientSessionId);
00302 
00303     // Stop streaming to these destinations:
00304     if (streamState != NULL) streamState->endPlaying(destinations);
00305   }
00306 
00307   // Delete the "StreamState" structure if it's no longer being used:
00308   if (streamState != NULL) {
00309     if (streamState->referenceCount() > 0) --streamState->referenceCount();
00310     if (streamState->referenceCount() == 0) {
00311       delete streamState;
00312       streamToken = NULL;
00313     }
00314   }
00315 
00316   // Finally, delete the destinations themselves:
00317   delete destinations;
00318 }

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

Reimplemented in DVVideoFileServerMediaSubsession, H264VideoFileServerMediaSubsession, and MPEG4VideoFileServerMediaSubsession.

Definition at line 321 of file OnDemandServerMediaSubsession.cpp.

References RTPSink::auxSDPLine(), and NULL.

Referenced by OnDemandServerMediaSubsession::setSDPLinesFromRTPSink().

00321                                                                {
00322   // Default implementation:
00323   return rtpSink == NULL ? NULL : rtpSink->auxSDPLine();
00324 }

void OnDemandServerMediaSubsession::seekStreamSource ( FramedSource inputSource,
char *&  absStart,
char *&  absEnd 
) [protected, virtual, inherited]

Definition at line 331 of file OnDemandServerMediaSubsession.cpp.

References NULL.

00332                                                                                      {
00333   // Default implementation: do nothing (but delete[] and assign "absStart" and "absEnd" to NULL, to show that we don't handle this)
00334   delete[] absStart; absStart = NULL;
00335   delete[] absEnd; absEnd = NULL;
00336 }

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

Reimplemented in MP3AudioFileServerMediaSubsession, and WAVAudioFileServerMediaSubsession.

Definition at line 339 of file OnDemandServerMediaSubsession.cpp.

Referenced by OnDemandServerMediaSubsession::setStreamScale().

00339                                                                      {
00340   // Default implementation: Do nothing
00341 }

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

Reimplemented in ProxyServerMediaSubsession.

Definition at line 343 of file OnDemandServerMediaSubsession.cpp.

References Medium::close().

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

00343                                                                                {
00344   Medium::close(inputSource);
00345 }

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

Definition at line 128 of file ServerMediaSession.hh.

References ServerMediaSubsession::fTrackNumber.

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

00128 { return fTrackNumber; }

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

Definition at line 344 of file ServerMediaSession.cpp.

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

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

00344                                            {
00345   if (fTrackNumber == 0) return NULL; // not yet in a ServerMediaSession
00346 
00347   if (fTrackId == NULL) {
00348     char buf[100];
00349     sprintf(buf, "track%d", fTrackNumber);
00350     fTrackId = strDup(buf);
00351   }
00352   return fTrackId;
00353 }

void ServerMediaSubsession::testScaleFactor ( float &  scale  )  [virtual, inherited]

Reimplemented in MP3AudioFileServerMediaSubsession, MPEG2TransportFileServerMediaSubsession, and WAVAudioFileServerMediaSubsession.

Definition at line 390 of file ServerMediaSession.cpp.

00390                                                         {
00391   // default implementation: Support scale = 1 only
00392   scale = 1;
00393 }

void ServerMediaSubsession::getAbsoluteTimeRange ( char *&  absStartTime,
char *&  absEndTime 
) const [virtual, inherited]

Definition at line 400 of file ServerMediaSession.cpp.

References NULL.

Referenced by ServerMediaSubsession::rangeSDPLine().

00400                                                                                              {
00401   // default implementation: We don't support seeking by 'absolute' time, so indicate this by setting both parameters to NULL:
00402   absStartTime = absEndTime = NULL;
00403 }

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

Definition at line 405 of file ServerMediaSession.cpp.

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

00406                                                                                 {
00407   fServerAddressForSDP = addressBits;
00408   fPortNumForSDP = portBits;
00409 }

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

Definition at line 412 of file ServerMediaSession.cpp.

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

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

00412                                           {
00413   // First, check for the special case where we support seeking by 'absolute' time:
00414   char* absStart = NULL; char* absEnd = NULL;
00415   getAbsoluteTimeRange(absStart, absEnd);
00416   if (absStart != NULL) {
00417     char buf[100];
00418 
00419     if (absEnd != NULL) {
00420       sprintf(buf, "a=range:clock=%s-%s\r\n", absStart, absEnd);
00421     } else {
00422       sprintf(buf, "a=range:clock=%s-\r\n", absStart);
00423     }
00424     return strDup(buf);
00425   }
00426 
00427   if (fParentSession == NULL) return NULL;
00428 
00429   // If all of our parent's subsessions have the same duration
00430   // (as indicated by "fParentSession->duration() >= 0"), there's no "a=range:" line:
00431   if (fParentSession->duration() >= 0.0) return strDup("");
00432 
00433   // Use our own duration for a "a=range:" line:
00434   float ourDuration = duration();
00435   if (ourDuration == 0.0) {
00436     return strDup("a=range:npt=0-\r\n");
00437   } else {
00438     char buf[100];
00439     sprintf(buf, "a=range:npt=0-%.3f\r\n", ourDuration);
00440     return strDup(buf);
00441   }
00442 }

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(), MP3FileSource::createNew(), AVIFileSink::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), ServerMediaSession::deleteAllSubsessions(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), ProxyServerMediaSession::resetDESCRIBEState(), OnDemandServerMediaSubsession::sdpLines(), shutdownStream(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MatroskaFileParser::~MatroskaFileParser(), MatroskaFileServerDemux::~MatroskaFileServerDemux(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::~RTSPClientConnectionSupportingHTTPStreaming(), ServerMediaSubsession::~ServerMediaSubsession(), StreamClientState::~StreamClientState(), StreamReplicator::~StreamReplicator(), and T140TextRTPSink::~T140TextRTPSink().

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(), TCPStreamSink::afterGettingFrame(), T140IdleFilter::afterGettingFrame(), FileSink::afterGettingFrame(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), RTSPServer::RTSPClientConnection::changeClientInputSocket(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), ProxyServerMediaSubsession::closeStreamSource(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), ProxyServerMediaSession::continueAfterDESCRIBE(), ProxyRTSPClient::continueAfterLivenessCommand(), ProxyRTSPClient::continueAfterSETUP(), T140TextRTPSink::continuePlaying(), QuickTimeFileSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), VP8VideoMatroskaFileServerMediaSubsession::createNewRTPSink(), createNewRTPSink(), T140TextMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportUDPServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), MP3AudioFileServerMediaSubsession::createNewRTPSink(), H264VideoFileServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), DVVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), AC3AudioMatroskaFileServerMediaSubsession::createNewRTPSink(), AC3AudioFileServerMediaSubsession::createNewRTPSink(), AACAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewStreamSource(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportUDPServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::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(), MPEG2TransportStreamMultiplexor::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(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), WAVAudioFileSource::doStopGettingFrames(), T140IdleFilter::doStopGettingFrames(), MultiFramedRTPSource::doStopGettingFrames(), FramedSource::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPServer::RTSPClientConnection::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::handleAlternativeRequestByte1(), RTSPClient::handleGET_PARAMETERResponse(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::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(), MultiFramedRTPSource::networkReadHandler1(), MatroskaDemux::newDemuxedTrack(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), T140IdleFilter::onSourceClosure(), 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(), ProxyRTSPClient::reset(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), RTSPServer::rtspURLPrefix(), RTCPInstance::schedule(), ProxyRTSPClient::scheduleDESCRIBECommand(), ProxyRTSPClient::scheduleLivenessCommand(), 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(), ProxyServerMediaSubsession::subsessionByeHandler(), tearDownSession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), DeviceSource::~DeviceSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), ProxyServerMediaSubsession::~ProxyServerMediaSubsession(), RTSPServer::~RTSPServer(), StreamClientState::~StreamClientState(), T140IdleFilter::~T140IdleFilter(), and WAVAudioFileSource::~WAVAudioFileSource().

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(), MP3FileSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MultiFramedRTPSource::doStopGettingFrames(), FramedSource::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), 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

MatroskaFileServerDemux& VorbisAudioMatroskaFileServerMediaSubsession::fOurDemux [private]

Definition at line 50 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink(), createNewStreamSource(), and duration().

unsigned VorbisAudioMatroskaFileServerMediaSubsession::fTrackNumber [private]

Reimplemented from ServerMediaSubsession.

Definition at line 51 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink(), and createNewStreamSource().

u_int8_t* VorbisAudioMatroskaFileServerMediaSubsession::fIdentificationHeader [private]

Definition at line 53 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink().

unsigned VorbisAudioMatroskaFileServerMediaSubsession::fIdentificationHeaderSize [private]

Definition at line 53 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink().

u_int8_t* VorbisAudioMatroskaFileServerMediaSubsession::fCommentHeader [private]

Definition at line 54 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink().

unsigned VorbisAudioMatroskaFileServerMediaSubsession::fCommentHeaderSize [private]

Definition at line 54 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink().

u_int8_t* VorbisAudioMatroskaFileServerMediaSubsession::fSetupHeader [private]

Definition at line 55 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink().

unsigned VorbisAudioMatroskaFileServerMediaSubsession::fSetupHeaderSize [private]

Definition at line 55 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewRTPSink().

unsigned VorbisAudioMatroskaFileServerMediaSubsession::fEstBitrate [private]

Definition at line 57 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.

Referenced by createNewStreamSource().

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

Definition at line 36 of file FileServerMediaSubsession.hh.

Referenced by MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::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(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), H264VideoFileServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), and DVVideoFileServerMediaSubsession::seekStreamSource().

char* OnDemandServerMediaSubsession::fSDPLines [protected, inherited]

Definition at line 104 of file OnDemandServerMediaSubsession.hh.

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

HashTable* OnDemandServerMediaSubsession::fDestinationsHashTable [protected, inherited]

Definition at line 105 of file OnDemandServerMediaSubsession.hh.

Referenced by OnDemandServerMediaSubsession::deleteStream(), OnDemandServerMediaSubsession::getStreamParameters(), OnDemandServerMediaSubsession::startStream(), and OnDemandServerMediaSubsession::~OnDemandServerMediaSubsession().

ServerMediaSession* ServerMediaSubsession::fParentSession [protected, inherited]

Definition at line 187 of file ServerMediaSession.hh.

Referenced by ProxyServerMediaSubsession::closeStreamSource(), ProxyRTSPClient::continueAfterSETUP(), ProxyServerMediaSubsession::createNewStreamSource(), ServerMediaSubsession::rangeSDPLine(), and ProxyServerMediaSubsession::verbosityLevel().

netAddressBits ServerMediaSubsession::fServerAddressForSDP [protected, inherited]

Definition at line 188 of file ServerMediaSession.hh.

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

portNumBits ServerMediaSubsession::fPortNumForSDP [protected, inherited]

Definition at line 189 of file ServerMediaSession.hh.

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


The documentation for this class was generated from the following files:
Generated on Mon Apr 29 13:32:45 2013 for live by  doxygen 1.5.2