ProxyServerMediaSession Class Reference

#include <ProxyServerMediaSession.hh>

Inheritance diagram for ProxyServerMediaSession:

Inheritance graph
[legend]
Collaboration diagram for ProxyServerMediaSession:

Collaboration graph
[legend]

Public Member Functions

virtual ~ProxyServerMediaSession ()
char const * url () const
Boolean describeCompletedSuccessfully () const
char * generateSDPDescription ()
char const * streamName () const
Boolean addSubsession (ServerMediaSubsession *subsession)
unsigned numSubsessions () const
void testScaleFactor (float &scale)
float duration () const
unsigned referenceCount () const
void incrementReferenceCount ()
void decrementReferenceCount ()
BooleandeleteWhenUnreferenced ()
void deleteAllSubsessions ()
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 isDarwinInjector () const

Static Public Member Functions

static ProxyServerMediaSessioncreateNew (UsageEnvironment &env, RTSPServer *ourRTSPServer, char const *inputStreamURL, char const *streamName=NULL, char const *username=NULL, char const *password=NULL, portNumBits tunnelOverHTTPPortNum=0, int verbosityLevel=0)
static ServerMediaSessioncreateNew (UsageEnvironment &env, char const *streamName=NULL, char const *info=NULL, char const *description=NULL, Boolean isSSM=False, char const *miscSDPLines=NULL)
static Boolean lookupByName (UsageEnvironment &env, char const *mediumName, ServerMediaSession *&resultSession)
static Boolean lookupByName (UsageEnvironment &env, char const *mediumName, Medium *&resultMedium)
static void close (UsageEnvironment &env, char const *mediumName)
static void close (Medium *medium)

Data Fields

char describeCompletedFlag

Protected Member Functions

 ProxyServerMediaSession (UsageEnvironment &env, RTSPServer *ourRTSPServer, char const *inputStreamURL, char const *streamName, char const *username, char const *password, portNumBits tunnelOverHTTPPortNum, int verbosityLevel)
virtual ProxyRTSPClientcreateNewProxyRTSPClient (char const *rtspURL, char const *username, char const *password, portNumBits tunnelOverHTTPPortNum, int verbosityLevel)
TaskTokennextTask ()

Protected Attributes

RTSPServerfOurRTSPServer
ProxyRTSPClientfProxyRTSPClient
MediaSessionfClientMediaSession

Private Member Functions

void continueAfterDESCRIBE (char const *sdpDescription)
void resetDESCRIBEState ()

Private Attributes

int fVerbosityLevel
PresentationTimeSessionNormalizerfPresentationTimeSessionNormalizer

Friends

class ProxyRTSPClient
class ProxyServerMediaSubsession
class MediaLookupTable

Detailed Description

Definition at line 76 of file ProxyServerMediaSession.hh.


Constructor & Destructor Documentation

ProxyServerMediaSession::~ProxyServerMediaSession (  )  [virtual]

Definition at line 89 of file ProxyServerMediaSession.cpp.

References ProxyRTSPClient::auth(), Medium::close(), Medium::envir(), fClientMediaSession, fPresentationTimeSessionNormalizer, fProxyRTSPClient, fVerbosityLevel, NULL, and RTSPClient::sendTeardownCommand().

00089                                                   {
00090   if (fVerbosityLevel > 0) {
00091     envir() << *this << "::~ProxyServerMediaSession()\n";
00092   }
00093 
00094   // Begin by sending a "TEARDOWN" command (without checking for a response):
00095   if (fProxyRTSPClient != NULL) fProxyRTSPClient->sendTeardownCommand(*fClientMediaSession, NULL, fProxyRTSPClient->auth());
00096 
00097   // Then delete our state:
00098   Medium::close(fClientMediaSession);
00099   Medium::close(fProxyRTSPClient);
00100   delete fPresentationTimeSessionNormalizer;
00101 }

ProxyServerMediaSession::ProxyServerMediaSession ( UsageEnvironment env,
RTSPServer ourRTSPServer,
char const *  inputStreamURL,
char const *  streamName,
char const *  username,
char const *  password,
portNumBits  tunnelOverHTTPPortNum,
int  verbosityLevel 
) [protected]

Definition at line 75 of file ProxyServerMediaSession.cpp.

References createNewProxyRTSPClient(), fProxyRTSPClient, and ProxyRTSPClient::sendDESCRIBE().

00079   : ServerMediaSession(env, streamName, NULL, NULL, False, NULL),
00080     describeCompletedFlag(0), fOurRTSPServer(ourRTSPServer), fClientMediaSession(NULL),
00081     fVerbosityLevel(verbosityLevel), fPresentationTimeSessionNormalizer(new PresentationTimeSessionNormalizer(envir())) {
00082   // Open a RTSP connection to the input stream, and send a "DESCRIBE" command.
00083   // We'll use the SDP description in the response to set ourselves up.
00084   fProxyRTSPClient = createNewProxyRTSPClient(inputStreamURL, username, password,
00085                                               tunnelOverHTTPPortNum, verbosityLevel > 0 ? verbosityLevel-1 : verbosityLevel);
00086   ProxyRTSPClient::sendDESCRIBE(fProxyRTSPClient);
00087 }


Member Function Documentation

ProxyServerMediaSession * ProxyServerMediaSession::createNew ( UsageEnvironment env,
RTSPServer ourRTSPServer,
char const *  inputStreamURL,
char const *  streamName = NULL,
char const *  username = NULL,
char const *  password = NULL,
portNumBits  tunnelOverHTTPPortNum = 0,
int  verbosityLevel = 0 
) [static]

Definition at line 68 of file ProxyServerMediaSession.cpp.

References env, and ProxyRTSPClient::ProxyServerMediaSession.

Referenced by main().

00070                                                                                                                {
00071   return new ProxyServerMediaSession(env, ourRTSPServer, inputStreamURL, streamName, username, password, tunnelOverHTTPPortNum, verbosityLevel);
00072 }

char const * ProxyServerMediaSession::url (  )  const

Definition at line 103 of file ProxyServerMediaSession.cpp.

References fProxyRTSPClient, NULL, and RTSPClient::url().

Referenced by operator<<().

00103                                                {
00104   return fProxyRTSPClient == NULL ? NULL : fProxyRTSPClient->url();
00105 }

Boolean ProxyServerMediaSession::describeCompletedSuccessfully (  )  const [inline]

Definition at line 95 of file ProxyServerMediaSession.hh.

References fClientMediaSession, and NULL.

00095 { return fClientMediaSession != NULL; }

ProxyRTSPClient * ProxyServerMediaSession::createNewProxyRTSPClient ( char const *  rtspURL,
char const *  username,
char const *  password,
portNumBits  tunnelOverHTTPPortNum,
int  verbosityLevel 
) [protected, virtual]

Definition at line 108 of file ProxyServerMediaSession.cpp.

References ProxyRTSPClient.

Referenced by ProxyServerMediaSession().

00109                                                                                  {
00110   // default implementation:
00111   return new ProxyRTSPClient(*this, rtspURL, username, password, tunnelOverHTTPPortNum, verbosityLevel);
00112 }

void ProxyServerMediaSession::continueAfterDESCRIBE ( char const *  sdpDescription  )  [private]

Definition at line 114 of file ProxyServerMediaSession.cpp.

References ServerMediaSession::addSubsession(), MediaSession::createNew(), describeCompletedFlag, Medium::envir(), fClientMediaSession, fVerbosityLevel, iter, MediaSubsessionIterator::next(), NULL, and ProxyServerMediaSubsession.

Referenced by ProxyRTSPClient::continueAfterDESCRIBE().

00114                                                                               {
00115   describeCompletedFlag = 1;
00116 
00117   // Create a (client) "MediaSession" object from the stream's SDP description ("resultString"), then iterate through its
00118   // "MediaSubsession" objects, to set up corresponding "ServerMediaSubsession" objects that we'll use to serve the stream's tracks.
00119   do {
00120     fClientMediaSession = MediaSession::createNew(envir(), sdpDescription);
00121     if (fClientMediaSession == NULL) break;
00122 
00123     MediaSubsessionIterator iter(*fClientMediaSession);
00124     for (MediaSubsession* mss = iter.next(); mss != NULL; mss = iter.next()) {
00125       ServerMediaSubsession* smss = new ProxyServerMediaSubsession(*mss);
00126       addSubsession(smss);
00127       if (fVerbosityLevel > 0) {
00128         envir() << *this << " added new \"ProxyServerMediaSubsession\" for "
00129                 << mss->protocolName() << "/" << mss->mediumName() << "/" << mss->codecName() << " track\n";
00130       }
00131     }
00132   } while (0);
00133 }

void ProxyServerMediaSession::resetDESCRIBEState (  )  [private]

Definition at line 135 of file ProxyServerMediaSession.cpp.

References Medium::close(), RTSPServer::closeAllClientSessionsForServerMediaSession(), ServerMediaSession::deleteAllSubsessions(), fClientMediaSession, fOurRTSPServer, and NULL.

Referenced by ProxyRTSPClient::continueAfterLivenessCommand().

00135                                                  {
00136   // Delete all of our "ProxyServerMediaSubsession"s; they'll get set up again once we get a response to the new "DESCRIBE".
00137   if (fOurRTSPServer != NULL) {
00138     // First, close any RTSP client connections that may have already been set up:
00139     fOurRTSPServer->closeAllClientSessionsForServerMediaSession(this);
00140   }
00141   deleteAllSubsessions();
00142 
00143   // Finally, delete the client "MediaSession" object that we had set up after receiving the response to the previous "DESCRIBE":
00144   Medium::close(fClientMediaSession); fClientMediaSession = NULL;
00145 }

ServerMediaSession * ServerMediaSession::createNew ( UsageEnvironment env,
char const *  streamName = NULL,
char const *  info = NULL,
char const *  description = NULL,
Boolean  isSSM = False,
char const *  miscSDPLines = NULL 
) [static, inherited]

Definition at line 31 of file ServerMediaSession.cpp.

References env.

Referenced by main().

00033                                                                               {
00034   return new ServerMediaSession(env, streamName, info, description,
00035                                 isSSM, miscSDPLines);
00036 }

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

Definition at line 39 of file ServerMediaSession.cpp.

References env, False, Medium::isServerMediaSession(), Medium::lookupByName(), NULL, and True.

00040                                                    {
00041   resultSession = NULL; // unless we succeed
00042 
00043   Medium* medium;
00044   if (!Medium::lookupByName(env, mediumName, medium)) return False;
00045 
00046   if (!medium->isServerMediaSession()) {
00047     env.setResultMsg(mediumName, " is not a 'ServerMediaSession' object");
00048     return False;
00049   }
00050 
00051   resultSession = (ServerMediaSession*)medium;
00052   return True;
00053 }

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 }

char * ServerMediaSession::generateSDPDescription (  )  [inherited]

Definition at line 204 of file ServerMediaSession.cpp.

References ServerMediaSession::duration(), Medium::envir(), ServerMediaSession::fCreationTime, ServerMediaSession::fDescriptionSDPString, ServerMediaSession::fInfoSDPString, ServerMediaSession::fIsSSM, ServerMediaSession::fMiscSDPLines, MediaSubsession::fNext, ServerMediaSession::fSubsessionsHead, libNameStr, libVersionStr, NULL, ourIPAddress(), strDup(), subsession, and AddressString::val().

00204                                                  {
00205   AddressString ipAddressStr(ourIPAddress(envir()));
00206   unsigned ipAddressStrSize = strlen(ipAddressStr.val());
00207 
00208   // For a SSM sessions, we need a "a=source-filter: incl ..." line also:
00209   char* sourceFilterLine;
00210   if (fIsSSM) {
00211     char const* const sourceFilterFmt =
00212       "a=source-filter: incl IN IP4 * %s\r\n"
00213       "a=rtcp-unicast: reflection\r\n";
00214     unsigned const sourceFilterFmtSize = strlen(sourceFilterFmt) + ipAddressStrSize + 1;
00215 
00216     sourceFilterLine = new char[sourceFilterFmtSize];
00217     sprintf(sourceFilterLine, sourceFilterFmt, ipAddressStr.val());
00218   } else {
00219     sourceFilterLine = strDup("");
00220   }
00221 
00222   char* rangeLine = NULL; // for now
00223   char* sdp = NULL; // for now
00224 
00225   do {
00226     // Count the lengths of each subsession's media-level SDP lines.
00227     // (We do this first, because the call to "subsession->sdpLines()"
00228     // causes correct subsession 'duration()'s to be calculated later.)
00229     unsigned sdpLength = 0;
00230     ServerMediaSubsession* subsession;
00231     for (subsession = fSubsessionsHead; subsession != NULL;
00232          subsession = subsession->fNext) {
00233       char const* sdpLines = subsession->sdpLines();
00234       if (sdpLines == NULL) continue; // the media's not available
00235       sdpLength += strlen(sdpLines);
00236     }
00237     if (sdpLength == 0) break; // the session has no usable subsessions
00238 
00239     // Unless subsessions have differing durations, we also have a "a=range:" line:
00240     float dur = duration();
00241     if (dur == 0.0) {
00242       rangeLine = strDup("a=range:npt=0-\r\n");
00243     } else if (dur > 0.0) {
00244       char buf[100];
00245       sprintf(buf, "a=range:npt=0-%.3f\r\n", dur);
00246       rangeLine = strDup(buf);
00247     } else { // subsessions have differing durations, so "a=range:" lines go there
00248       rangeLine = strDup("");
00249     }
00250 
00251     char const* const sdpPrefixFmt =
00252       "v=0\r\n"
00253       "o=- %ld%06ld %d IN IP4 %s\r\n"
00254       "s=%s\r\n"
00255       "i=%s\r\n"
00256       "t=0 0\r\n"
00257       "a=tool:%s%s\r\n"
00258       "a=type:broadcast\r\n"
00259       "a=control:*\r\n"
00260       "%s"
00261       "%s"
00262       "a=x-qt-text-nam:%s\r\n"
00263       "a=x-qt-text-inf:%s\r\n"
00264       "%s";
00265     sdpLength += strlen(sdpPrefixFmt)
00266       + 20 + 6 + 20 + ipAddressStrSize
00267       + strlen(fDescriptionSDPString)
00268       + strlen(fInfoSDPString)
00269       + strlen(libNameStr) + strlen(libVersionStr)
00270       + strlen(sourceFilterLine)
00271       + strlen(rangeLine)
00272       + strlen(fDescriptionSDPString)
00273       + strlen(fInfoSDPString)
00274       + strlen(fMiscSDPLines);
00275     sdp = new char[sdpLength];
00276     if (sdp == NULL) break;
00277 
00278     // Generate the SDP prefix (session-level lines):
00279     sprintf(sdp, sdpPrefixFmt,
00280             fCreationTime.tv_sec, fCreationTime.tv_usec, // o= <session id>
00281             1, // o= <version> // (needs to change if params are modified)
00282             ipAddressStr.val(), // o= <address>
00283             fDescriptionSDPString, // s= <description>
00284             fInfoSDPString, // i= <info>
00285             libNameStr, libVersionStr, // a=tool:
00286             sourceFilterLine, // a=source-filter: incl (if a SSM session)
00287             rangeLine, // a=range: line
00288             fDescriptionSDPString, // a=x-qt-text-nam: line
00289             fInfoSDPString, // a=x-qt-text-inf: line
00290             fMiscSDPLines); // miscellaneous session SDP lines (if any)
00291 
00292     // Then, add the (media-level) lines for each subsession:
00293     char* mediaSDP = sdp;
00294     for (subsession = fSubsessionsHead; subsession != NULL;
00295          subsession = subsession->fNext) {
00296       mediaSDP += strlen(mediaSDP);
00297       char const* sdpLines = subsession->sdpLines();
00298       if (sdpLines != NULL) sprintf(mediaSDP, "%s", sdpLines);
00299     }
00300   } while (0);
00301 
00302   delete[] rangeLine; delete[] sourceFilterLine;
00303   return sdp;
00304 }

char const* ServerMediaSession::streamName (  )  const [inline, inherited]

Definition at line 60 of file ServerMediaSession.hh.

References ServerMediaSession::fStreamName.

Referenced by RTSPServer::addServerMediaSession(), RTSPServer::RTSPClientSession::livenessTimeoutTask(), RTSPServer::RTSPClientSession::noteClientLiveness(), RTSPServer::removeServerMediaSession(), and RTSPServer::rtspURL().

00060 { return fStreamName; }

Boolean ServerMediaSession::addSubsession ( ServerMediaSubsession subsession  )  [inherited]

Definition at line 91 of file ServerMediaSession.cpp.

References False, ServerMediaSubsession::fNext, ServerMediaSession::fSubsessionCounter, ServerMediaSession::fSubsessionsHead, ServerMediaSession::fSubsessionsTail, NULL, subsession, and True.

Referenced by continueAfterDESCRIBE(), createNewSMS(), and main().

00091                                                                    {
00092   if (subsession->fParentSession != NULL) return False; // it's already used
00093 
00094   if (fSubsessionsTail == NULL) {
00095     fSubsessionsHead = subsession;
00096   } else {
00097     fSubsessionsTail->fNext = subsession;
00098   }
00099   fSubsessionsTail = subsession;
00100 
00101   subsession->fParentSession = this;
00102   subsession->fTrackNumber = ++fSubsessionCounter;
00103   return True;
00104 }

unsigned ServerMediaSession::numSubsessions (  )  const [inline, inherited]

Definition at line 63 of file ServerMediaSession.hh.

References ServerMediaSession::fSubsessionCounter.

Referenced by ProxyRTSPClient::continueAfterSETUP().

00063 { return fSubsessionCounter; }

void ServerMediaSession::testScaleFactor ( float &  scale  )  [inherited]

Definition at line 106 of file ServerMediaSession.cpp.

References MediaSubsession::fNext, ServerMediaSession::fSubsessionsHead, NULL, and subsession.

00106                                                      {
00107   // First, try setting all subsessions to the desired scale.
00108   // If the subsessions' actual scales differ from each other, choose the
00109   // value that's closest to 1, and then try re-setting all subsessions to that
00110   // value.  If the subsessions' actual scales still differ, re-set them all to 1.
00111   float minSSScale = 1.0;
00112   float maxSSScale = 1.0;
00113   float bestSSScale = 1.0;
00114   float bestDistanceTo1 = 0.0;
00115   ServerMediaSubsession* subsession;
00116   for (subsession = fSubsessionsHead; subsession != NULL;
00117        subsession = subsession->fNext) {
00118     float ssscale = scale;
00119     subsession->testScaleFactor(ssscale);
00120     if (subsession == fSubsessionsHead) { // this is the first subsession
00121       minSSScale = maxSSScale = bestSSScale = ssscale;
00122       bestDistanceTo1 = (float)fabs(ssscale - 1.0f);
00123     } else {
00124       if (ssscale < minSSScale) {
00125         minSSScale = ssscale;
00126       } else if (ssscale > maxSSScale) {
00127         maxSSScale = ssscale;
00128       }
00129 
00130       float distanceTo1 = (float)fabs(ssscale - 1.0f);
00131       if (distanceTo1 < bestDistanceTo1) {
00132         bestSSScale = ssscale;
00133         bestDistanceTo1 = distanceTo1;
00134       }
00135     }
00136   }
00137   if (minSSScale == maxSSScale) {
00138     // All subsessions are at the same scale: minSSScale == bestSSScale == maxSSScale
00139     scale = minSSScale;
00140     return;
00141   }
00142 
00143   // The scales for each subsession differ.  Try to set each one to the value
00144   // that's closest to 1:
00145   for (subsession = fSubsessionsHead; subsession != NULL;
00146        subsession = subsession->fNext) {
00147     float ssscale = bestSSScale;
00148     subsession->testScaleFactor(ssscale);
00149     if (ssscale != bestSSScale) break; // no luck
00150   }
00151   if (subsession == NULL) {
00152     // All subsessions are at the same scale: bestSSScale
00153     scale = bestSSScale;
00154     return;
00155   }
00156 
00157   // Still no luck.  Set each subsession's scale to 1:
00158   for (subsession = fSubsessionsHead; subsession != NULL;
00159        subsession = subsession->fNext) {
00160     float ssscale = 1;
00161     subsession->testScaleFactor(ssscale);
00162   }
00163   scale = 1;
00164 }

float ServerMediaSession::duration (  )  const [inherited]

Definition at line 166 of file ServerMediaSession.cpp.

References MediaSubsession::fNext, ServerMediaSession::fSubsessionsHead, NULL, and subsession.

Referenced by ServerMediaSession::generateSDPDescription(), and ServerMediaSubsession::rangeSDPLine().

00166                                          {
00167   float minSubsessionDuration = 0.0;
00168   float maxSubsessionDuration = 0.0;
00169   for (ServerMediaSubsession* subsession = fSubsessionsHead; subsession != NULL;
00170        subsession = subsession->fNext) {
00171     // Hack: If any subsession supports seeking by 'absolute' time, then return a negative value, to indicate that only subsessions
00172     // will have a "a=range:" attribute:
00173     char* absStartTime = NULL; char* absEndTime = NULL;
00174     subsession->getAbsoluteTimeRange(absStartTime, absEndTime);
00175     if (absStartTime != NULL) return -1.0f;
00176 
00177     float ssduration = subsession->duration();
00178     if (subsession == fSubsessionsHead) { // this is the first subsession
00179       minSubsessionDuration = maxSubsessionDuration = ssduration;
00180     } else if (ssduration < minSubsessionDuration) {
00181         minSubsessionDuration = ssduration;
00182     } else if (ssduration > maxSubsessionDuration) {
00183         maxSubsessionDuration = ssduration;
00184     }
00185   }
00186 
00187   if (maxSubsessionDuration != minSubsessionDuration) {
00188     return -maxSubsessionDuration; // because subsession durations differ
00189   } else {
00190     return maxSubsessionDuration; // all subsession durations are the same
00191   }
00192 }

unsigned ServerMediaSession::referenceCount (  )  const [inline, inherited]

Definition at line 71 of file ServerMediaSession.hh.

References ServerMediaSession::fReferenceCount.

Referenced by RTSPServer::removeServerMediaSession(), and RTSPServer::RTSPClientSession::~RTSPClientSession().

00071 { return fReferenceCount; }

void ServerMediaSession::incrementReferenceCount (  )  [inline, inherited]

Definition at line 72 of file ServerMediaSession.hh.

References ServerMediaSession::fReferenceCount.

Referenced by RTSPServer::RTSPClientSession::handleCmd_SETUP().

00072 { ++fReferenceCount; }

void ServerMediaSession::decrementReferenceCount (  )  [inline, inherited]

Definition at line 73 of file ServerMediaSession.hh.

References ServerMediaSession::fReferenceCount.

Referenced by RTSPServer::RTSPClientSession::~RTSPClientSession().

00073 { if (fReferenceCount > 0) --fReferenceCount; }

Boolean& ServerMediaSession::deleteWhenUnreferenced (  )  [inline, inherited]

Definition at line 74 of file ServerMediaSession.hh.

References ServerMediaSession::fDeleteWhenUnreferenced.

Referenced by RTSPServer::removeServerMediaSession(), and RTSPServer::RTSPClientSession::~RTSPClientSession().

00074 { return fDeleteWhenUnreferenced; }

void ServerMediaSession::deleteAllSubsessions (  )  [inherited]

Definition at line 194 of file ServerMediaSession.cpp.

References Medium::close(), ServerMediaSession::fSubsessionCounter, ServerMediaSession::fSubsessionsHead, ServerMediaSession::fSubsessionsTail, and NULL.

Referenced by resetDESCRIBEState(), and ServerMediaSession::~ServerMediaSession().

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(), 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(), 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(), continueAfterDESCRIBE(), ProxyRTSPClient::continueAfterLivenessCommand(), ProxyRTSPClient::continueAfterSETUP(), T140TextRTPSink::continuePlaying(), QuickTimeFileSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), VP8VideoMatroskaFileServerMediaSubsession::createNewRTPSink(), VorbisAudioMatroskaFileServerMediaSubsession::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(), 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::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 ProxyRTSPClient [friend]

Definition at line 114 of file ProxyServerMediaSession.hh.

Referenced by createNewProxyRTSPClient().

friend class ProxyServerMediaSubsession [friend]

Definition at line 115 of file ProxyServerMediaSession.hh.

Referenced by continueAfterDESCRIBE().

friend class MediaLookupTable [friend, inherited]

Definition at line 74 of file Media.hh.


Field Documentation

char ProxyServerMediaSession::describeCompletedFlag

Definition at line 92 of file ProxyServerMediaSession.hh.

Referenced by continueAfterDESCRIBE().

RTSPServer* ProxyServerMediaSession::fOurRTSPServer [protected]

Definition at line 109 of file ProxyServerMediaSession.hh.

Referenced by resetDESCRIBEState().

ProxyRTSPClient* ProxyServerMediaSession::fProxyRTSPClient [protected]

Definition at line 110 of file ProxyServerMediaSession.hh.

Referenced by ProxyServerMediaSubsession::closeStreamSource(), ProxyServerMediaSubsession::createNewStreamSource(), ProxyServerMediaSession(), url(), and ~ProxyServerMediaSession().

MediaSession* ProxyServerMediaSession::fClientMediaSession [protected]

Definition at line 111 of file ProxyServerMediaSession.hh.

Referenced by continueAfterDESCRIBE(), describeCompletedSuccessfully(), ProxyRTSPClient::handleSubsessionTimeout(), resetDESCRIBEState(), ProxyRTSPClient::sendLivenessCommand(), and ~ProxyServerMediaSession().

int ProxyServerMediaSession::fVerbosityLevel [private]

Definition at line 120 of file ProxyServerMediaSession.hh.

Referenced by continueAfterDESCRIBE(), and ~ProxyServerMediaSession().

class PresentationTimeSessionNormalizer* ProxyServerMediaSession::fPresentationTimeSessionNormalizer [private]

Definition at line 121 of file ProxyServerMediaSession.hh.

Referenced by ProxyServerMediaSubsession::createNewStreamSource(), and ~ProxyServerMediaSession().


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