#include <MediaSession.hh>
Inheritance diagram for MediaSession:


Public Member Functions | |
| Boolean | hasSubsessions () const |
| char * | connectionEndpointName () const |
| char const * | CNAME () const |
| in_addr const & | sourceFilterAddr () const |
| float & | scale () |
| char * | mediaSessionType () const |
| char * | sessionName () const |
| char * | sessionDescription () const |
| char const * | controlPath () const |
| double & | playStartTime () |
| double & | playEndTime () |
| char * | absStartTime () const |
| char * | absEndTime () const |
| char *& | _absStartTime () |
| char *& | _absEndTime () |
| Boolean | initiateByMediaType (char const *mimeType, MediaSubsession *&resultSubsession, int useSpecialRTPoffset=-1) |
| UsageEnvironment & | envir () 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 | isServerMediaSession () const |
| virtual Boolean | isDarwinInjector () const |
Static Public Member Functions | |
| static MediaSession * | createNew (UsageEnvironment &env, char const *sdpDescription) |
| static Boolean | lookupByName (UsageEnvironment &env, char const *sourceName, MediaSession *&resultSession) |
| 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 Boolean | isMediaSession () const |
| MediaSession (UsageEnvironment &env) | |
| virtual | ~MediaSession () |
| virtual MediaSubsession * | createNewMediaSubsession () |
| Boolean | initializeWithSDP (char const *sdpDescription) |
| Boolean | parseSDPLine (char const *input, char const *&nextLine) |
| Boolean | parseSDPLine_s (char const *sdpLine) |
| Boolean | parseSDPLine_i (char const *sdpLine) |
| Boolean | parseSDPLine_c (char const *sdpLine) |
| Boolean | parseSDPAttribute_type (char const *sdpLine) |
| Boolean | parseSDPAttribute_control (char const *sdpLine) |
| Boolean | parseSDPAttribute_range (char const *sdpLine) |
| Boolean | parseSDPAttribute_source_filter (char const *sdpLine) |
| TaskToken & | nextTask () |
Static Protected Member Functions | |
| static char * | lookupPayloadFormat (unsigned char rtpPayloadType, unsigned &rtpTimestampFrequency, unsigned &numChannels) |
| static unsigned | guessRTPTimestampFrequency (char const *mediumName, char const *codecName) |
Protected Attributes | |
| char * | fCNAME |
| MediaSubsession * | fSubsessionsHead |
| MediaSubsession * | fSubsessionsTail |
| char * | fConnectionEndpointName |
| double | fMaxPlayStartTime |
| double | fMaxPlayEndTime |
| char * | fAbsStartTime |
| char * | fAbsEndTime |
| in_addr | fSourceFilterAddr |
| float | fScale |
| char * | fMediaSessionType |
| char * | fSessionName |
| char * | fSessionDescription |
| char * | fControlPath |
Friends | |
| class | MediaSubsessionIterator |
| class | MediaLookupTable |
Definition at line 58 of file MediaSession.hh.
| MediaSession::MediaSession | ( | UsageEnvironment & | env | ) | [protected] |
Definition at line 59 of file MediaSession.cpp.
References CNAME(), fCNAME, fSourceFilterAddr, our_random(), and strDup().
Referenced by createNew().
00060 : Medium(env), 00061 fSubsessionsHead(NULL), fSubsessionsTail(NULL), 00062 fConnectionEndpointName(NULL), 00063 fMaxPlayStartTime(0.0f), fMaxPlayEndTime(0.0f), fAbsStartTime(NULL), fAbsEndTime(NULL), 00064 fScale(1.0f), fMediaSessionType(NULL), fSessionName(NULL), fSessionDescription(NULL), 00065 fControlPath(NULL) { 00066 fSourceFilterAddr.s_addr = 0; 00067 00068 // Get our host name, and use this for the RTCP CNAME: 00069 const unsigned maxCNAMElen = 100; 00070 char CNAME[maxCNAMElen+1]; 00071 #ifndef CRIS 00072 gethostname((char*)CNAME, maxCNAMElen); 00073 #else 00074 // "gethostname()" isn't defined for this platform 00075 sprintf(CNAME, "unknown host %d", (unsigned)(our_random()*0x7FFFFFFF)); 00076 #endif 00077 CNAME[maxCNAMElen] = '\0'; // just in case 00078 fCNAME = strDup(CNAME); 00079 }
| MediaSession::~MediaSession | ( | ) | [protected, virtual] |
Definition at line 81 of file MediaSession.cpp.
References fAbsEndTime, fAbsStartTime, fCNAME, fConnectionEndpointName, fControlPath, fMediaSessionType, fSessionDescription, fSessionName, and fSubsessionsHead.
00081 { 00082 delete fSubsessionsHead; 00083 delete[] fCNAME; 00084 delete[] fConnectionEndpointName; 00085 delete[] fAbsStartTime; delete[] fAbsEndTime; 00086 delete[] fMediaSessionType; 00087 delete[] fSessionName; 00088 delete[] fSessionDescription; 00089 delete[] fControlPath; 00090 }
| MediaSession * MediaSession::createNew | ( | UsageEnvironment & | env, | |
| char const * | sdpDescription | |||
| ) | [static] |
Definition at line 29 of file MediaSession.cpp.
References env, initializeWithSDP(), MediaSession(), and NULL.
Referenced by continueAfterDESCRIBE(), ProxyServerMediaSession::continueAfterDESCRIBE(), and DarwinInjector::setDestination().
00030 { 00031 MediaSession* newSession = new MediaSession(env); 00032 if (newSession != NULL) { 00033 if (!newSession->initializeWithSDP(sdpDescription)) { 00034 delete newSession; 00035 return NULL; 00036 } 00037 } 00038 00039 return newSession; 00040 }
| Boolean MediaSession::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | sourceName, | |||
| MediaSession *& | resultSession | |||
| ) | [static] |
Definition at line 42 of file MediaSession.cpp.
References env, False, Medium::isMediaSession(), Medium::lookupByName(), NULL, and True.
00044 { 00045 resultSession = NULL; // unless we succeed 00046 00047 Medium* medium; 00048 if (!Medium::lookupByName(env, instanceName, medium)) return False; 00049 00050 if (!medium->isMediaSession()) { 00051 env.setResultMsg(instanceName, " is not a 'MediaSession' object"); 00052 return False; 00053 } 00054 00055 resultSession = (MediaSession*)medium; 00056 return True; 00057 }
| Boolean MediaSession::hasSubsessions | ( | ) | const [inline] |
Definition at line 66 of file MediaSession.hh.
References fSubsessionsHead, and NULL.
Referenced by continueAfterDESCRIBE().
00066 { return fSubsessionsHead != NULL; }
| char* MediaSession::connectionEndpointName | ( | ) | const [inline] |
Definition at line 68 of file MediaSession.hh.
References fConnectionEndpointName.
Referenced by MediaSubsession::connectionEndpointAddress(), and parseSDPLine_c().
00068 { return fConnectionEndpointName; }
| char const* MediaSession::CNAME | ( | ) | const [inline] |
Definition at line 69 of file MediaSession.hh.
References fCNAME.
Referenced by MediaSubsession::initiate(), and MediaSession().
00069 { return fCNAME; }
| struct in_addr const& MediaSession::sourceFilterAddr | ( | ) | const [inline, read] |
Definition at line 70 of file MediaSession.hh.
References fSourceFilterAddr.
00070 { return fSourceFilterAddr; }
| float& MediaSession::scale | ( | ) | [inline] |
Definition at line 71 of file MediaSession.hh.
References fScale.
Referenced by RTSPClient::handlePLAYResponse(), and RTSPClient::sendRequest().
00071 { return fScale; }
| char* MediaSession::mediaSessionType | ( | ) | const [inline] |
Definition at line 72 of file MediaSession.hh.
References fMediaSessionType.
00072 { return fMediaSessionType; }
| char* MediaSession::sessionName | ( | ) | const [inline] |
Definition at line 73 of file MediaSession.hh.
References fSessionName.
00073 { return fSessionName; }
| char* MediaSession::sessionDescription | ( | ) | const [inline] |
Definition at line 74 of file MediaSession.hh.
References fSessionDescription.
00074 { return fSessionDescription; }
| char const* MediaSession::controlPath | ( | ) | const [inline] |
Definition at line 75 of file MediaSession.hh.
References fControlPath.
Referenced by parseSDPAttribute_control(), and RTSPClient::sessionURL().
00075 { return fControlPath; }
| double& MediaSession::playStartTime | ( | ) | [inline] |
Definition at line 77 of file MediaSession.hh.
References fMaxPlayStartTime.
Referenced by continueAfterPLAY(), RTSPClient::handlePLAYResponse(), MediaSubsession::parseSDPAttribute_range(), parseSDPAttribute_range(), MediaSubsession::playStartTime(), and setupNextSubsession().
00077 { return fMaxPlayStartTime; }
| double& MediaSession::playEndTime | ( | ) | [inline] |
Definition at line 78 of file MediaSession.hh.
References fMaxPlayEndTime.
Referenced by continueAfterPLAY(), RTSPClient::handlePLAYResponse(), MediaSubsession::parseSDPAttribute_range(), parseSDPAttribute_range(), MediaSubsession::playEndTime(), setupNextSubsession(), and setupStreams().
00078 { return fMaxPlayEndTime; }
| char * MediaSession::absStartTime | ( | ) | const |
Definition at line 494 of file MediaSession.cpp.
References MediaSubsession::_absStartTime(), fAbsStartTime, iter, MediaSubsessionIterator::next(), NULL, and subsession.
Referenced by MediaSubsession::absStartTime(), setupNextSubsession(), and setupStreams().
00494 { 00495 if (fAbsStartTime != NULL) return fAbsStartTime; 00496 00497 // If a subsession has an 'absolute' start time, then use that: 00498 MediaSubsessionIterator iter(*this); 00499 MediaSubsession* subsession; 00500 while ((subsession = iter.next()) != NULL) { 00501 if (subsession->_absStartTime() != NULL) return subsession->_absStartTime(); 00502 } 00503 return NULL; 00504 }
| char * MediaSession::absEndTime | ( | ) | const |
Definition at line 506 of file MediaSession.cpp.
References MediaSubsession::_absEndTime(), fAbsEndTime, iter, MediaSubsessionIterator::next(), NULL, and subsession.
Referenced by MediaSubsession::absEndTime(), setupNextSubsession(), and setupStreams().
00506 { 00507 if (fAbsEndTime != NULL) return fAbsEndTime; 00508 00509 // If a subsession has an 'absolute' end time, then use that: 00510 MediaSubsessionIterator iter(*this); 00511 MediaSubsession* subsession; 00512 while ((subsession = iter.next()) != NULL) { 00513 if (subsession->_absEndTime() != NULL) return subsession->_absEndTime(); 00514 } 00515 return NULL; 00516 }
| char*& MediaSession::_absStartTime | ( | ) | [inline] |
Definition at line 82 of file MediaSession.hh.
References fAbsStartTime.
Referenced by RTSPClient::handlePLAYResponse(), and parseSDPAttribute_range().
00082 { return fAbsStartTime; }
| char*& MediaSession::_absEndTime | ( | ) | [inline] |
Definition at line 83 of file MediaSession.hh.
References fAbsEndTime.
Referenced by RTSPClient::handlePLAYResponse(), and parseSDPAttribute_range().
00083 { return fAbsEndTime; }
| Boolean MediaSession::initiateByMediaType | ( | char const * | mimeType, | |
| MediaSubsession *& | resultSubsession, | |||
| int | useSpecialRTPoffset = -1 | |||
| ) |
Definition at line 519 of file MediaSession.cpp.
References MediaSubsession::deInitiate(), Medium::envir(), False, MediaSubsession::initiate(), iter, MediaSource::MIMEtype(), MediaSubsessionIterator::next(), NULL, MediaSubsession::readSource(), UsageEnvironment::setResultMsg(), subsession, and True.
00521 { 00522 // Look through this session's subsessions for media that match "mimeType" 00523 resultSubsession = NULL; 00524 MediaSubsessionIterator iter(*this); 00525 MediaSubsession* subsession; 00526 while ((subsession = iter.next()) != NULL) { 00527 Boolean wasAlreadyInitiated = subsession->readSource() != NULL; 00528 if (!wasAlreadyInitiated) { 00529 // Try to create a source for this subsession: 00530 if (!subsession->initiate(useSpecialRTPoffset)) return False; 00531 } 00532 00533 // Make sure the source's MIME type is one that we handle: 00534 if (strcmp(subsession->readSource()->MIMEtype(), mimeType) != 0) { 00535 if (!wasAlreadyInitiated) subsession->deInitiate(); 00536 continue; 00537 } 00538 00539 resultSubsession = subsession; 00540 break; // use this 00541 } 00542 00543 if (resultSubsession == NULL) { 00544 envir().setResultMsg("Session has no usable media subsession"); 00545 return False; 00546 } 00547 00548 return True; 00549 }
| Boolean MediaSession::isMediaSession | ( | ) | const [protected, virtual] |
Reimplemented from Medium.
Definition at line 92 of file MediaSession.cpp.
References True.
00092 { 00093 return True; 00094 }
| MediaSubsession * MediaSession::createNewMediaSubsession | ( | ) | [protected, virtual] |
Definition at line 96 of file MediaSession.cpp.
Referenced by initializeWithSDP().
00096 { 00097 // default implementation: 00098 return new MediaSubsession(*this); 00099 }
| Boolean MediaSession::initializeWithSDP | ( | char const * | sdpDescription | ) | [protected] |
Definition at line 101 of file MediaSession.cpp.
References createNewMediaSubsession(), Medium::envir(), False, MediaSubsession::fClientPortNum, MediaSubsession::fCodecName, MediaSubsession::fMediumName, MediaSubsession::fNumChannels, MediaSubsession::fProtocolName, MediaSubsession::fRTPPayloadFormat, MediaSubsession::fRTPTimestampFrequency, MediaSubsession::fSavedSDPLines, fSubsessionsHead, fSubsessionsTail, guessRTPTimestampFrequency(), lookupPayloadFormat(), NULL, MediaSubsession::parseSDPAttribute_control(), parseSDPAttribute_control(), MediaSubsession::parseSDPAttribute_fmtp(), MediaSubsession::parseSDPAttribute_framerate(), MediaSubsession::parseSDPAttribute_range(), parseSDPAttribute_range(), MediaSubsession::parseSDPAttribute_rtpmap(), MediaSubsession::parseSDPAttribute_source_filter(), parseSDPAttribute_source_filter(), parseSDPAttribute_type(), MediaSubsession::parseSDPAttribute_x_dimensions(), parseSDPLine(), MediaSubsession::parseSDPLine_b(), MediaSubsession::parseSDPLine_c(), parseSDPLine_c(), parseSDPLine_i(), parseSDPLine_s(), MediaSubsession::serverPortNum, MediaSubsession::setNext(), UsageEnvironment::setResultMsg(), strDup(), strDupSize(), subsession, and True.
Referenced by createNew().
00101 { 00102 if (sdpDescription == NULL) return False; 00103 00104 // Begin by processing all SDP lines until we see the first "m=" 00105 char const* sdpLine = sdpDescription; 00106 char const* nextSDPLine; 00107 while (1) { 00108 if (!parseSDPLine(sdpLine, nextSDPLine)) return False; 00109 //##### We should really check for: 00110 // - "a=control:" attributes (to set the URL for aggregate control) 00111 // - the correct SDP version (v=0) 00112 if (sdpLine[0] == 'm') break; 00113 sdpLine = nextSDPLine; 00114 if (sdpLine == NULL) break; // there are no m= lines at all 00115 00116 // Check for various special SDP lines that we understand: 00117 if (parseSDPLine_s(sdpLine)) continue; 00118 if (parseSDPLine_i(sdpLine)) continue; 00119 if (parseSDPLine_c(sdpLine)) continue; 00120 if (parseSDPAttribute_control(sdpLine)) continue; 00121 if (parseSDPAttribute_range(sdpLine)) continue; 00122 if (parseSDPAttribute_type(sdpLine)) continue; 00123 if (parseSDPAttribute_source_filter(sdpLine)) continue; 00124 } 00125 00126 while (sdpLine != NULL) { 00127 // We have a "m=" line, representing a new sub-session: 00128 MediaSubsession* subsession = createNewMediaSubsession(); 00129 if (subsession == NULL) { 00130 envir().setResultMsg("Unable to create new MediaSubsession"); 00131 return False; 00132 } 00133 00134 // Parse the line as "m=<medium_name> <client_portNum> RTP/AVP <fmt>" 00135 // or "m=<medium_name> <client_portNum>/<num_ports> RTP/AVP <fmt>" 00136 // (Should we be checking for >1 payload format number here?)##### 00137 char* mediumName = strDupSize(sdpLine); // ensures we have enough space 00138 char const* protocolName = NULL; 00139 unsigned payloadFormat; 00140 if ((sscanf(sdpLine, "m=%s %hu RTP/AVP %u", 00141 mediumName, &subsession->fClientPortNum, &payloadFormat) == 3 || 00142 sscanf(sdpLine, "m=%s %hu/%*u RTP/AVP %u", 00143 mediumName, &subsession->fClientPortNum, &payloadFormat) == 3) 00144 && payloadFormat <= 127) { 00145 protocolName = "RTP"; 00146 } else if ((sscanf(sdpLine, "m=%s %hu UDP %u", 00147 mediumName, &subsession->fClientPortNum, &payloadFormat) == 3 || 00148 sscanf(sdpLine, "m=%s %hu udp %u", 00149 mediumName, &subsession->fClientPortNum, &payloadFormat) == 3 || 00150 sscanf(sdpLine, "m=%s %hu RAW/RAW/UDP %u", 00151 mediumName, &subsession->fClientPortNum, &payloadFormat) == 3) 00152 && payloadFormat <= 127) { 00153 // This is a RAW UDP source 00154 protocolName = "UDP"; 00155 } else { 00156 // This "m=" line is bad; output an error message saying so: 00157 char* sdpLineStr; 00158 if (nextSDPLine == NULL) { 00159 sdpLineStr = (char*)sdpLine; 00160 } else { 00161 sdpLineStr = strDup(sdpLine); 00162 sdpLineStr[nextSDPLine-sdpLine] = '\0'; 00163 } 00164 envir() << "Bad SDP \"m=\" line: " << sdpLineStr << "\n"; 00165 if (sdpLineStr != (char*)sdpLine) delete[] sdpLineStr; 00166 00167 delete[] mediumName; 00168 delete subsession; 00169 00170 // Skip the following SDP lines, up until the next "m=": 00171 while (1) { 00172 sdpLine = nextSDPLine; 00173 if (sdpLine == NULL) break; // we've reached the end 00174 if (!parseSDPLine(sdpLine, nextSDPLine)) return False; 00175 00176 if (sdpLine[0] == 'm') break; // we've reached the next subsession 00177 } 00178 continue; 00179 } 00180 00181 // Insert this subsession at the end of the list: 00182 if (fSubsessionsTail == NULL) { 00183 fSubsessionsHead = fSubsessionsTail = subsession; 00184 } else { 00185 fSubsessionsTail->setNext(subsession); 00186 fSubsessionsTail = subsession; 00187 } 00188 00189 subsession->serverPortNum = subsession->fClientPortNum; // by default 00190 00191 char const* mStart = sdpLine; 00192 subsession->fSavedSDPLines = strDup(mStart); 00193 00194 subsession->fMediumName = strDup(mediumName); 00195 delete[] mediumName; 00196 subsession->fProtocolName = strDup(protocolName); 00197 subsession->fRTPPayloadFormat = payloadFormat; 00198 00199 // Process the following SDP lines, up until the next "m=": 00200 while (1) { 00201 sdpLine = nextSDPLine; 00202 if (sdpLine == NULL) break; // we've reached the end 00203 if (!parseSDPLine(sdpLine, nextSDPLine)) return False; 00204 00205 if (sdpLine[0] == 'm') break; // we've reached the next subsession 00206 00207 // Check for various special SDP lines that we understand: 00208 if (subsession->parseSDPLine_c(sdpLine)) continue; 00209 if (subsession->parseSDPLine_b(sdpLine)) continue; 00210 if (subsession->parseSDPAttribute_rtpmap(sdpLine)) continue; 00211 if (subsession->parseSDPAttribute_control(sdpLine)) continue; 00212 if (subsession->parseSDPAttribute_range(sdpLine)) continue; 00213 if (subsession->parseSDPAttribute_fmtp(sdpLine)) continue; 00214 if (subsession->parseSDPAttribute_source_filter(sdpLine)) continue; 00215 if (subsession->parseSDPAttribute_x_dimensions(sdpLine)) continue; 00216 if (subsession->parseSDPAttribute_framerate(sdpLine)) continue; 00217 00218 // (Later, check for malformed lines, and other valid SDP lines#####) 00219 } 00220 if (sdpLine != NULL) subsession->fSavedSDPLines[sdpLine-mStart] = '\0'; 00221 00222 // If we don't yet know the codec name, try looking it up from the 00223 // list of static payload types: 00224 if (subsession->fCodecName == NULL) { 00225 subsession->fCodecName 00226 = lookupPayloadFormat(subsession->fRTPPayloadFormat, 00227 subsession->fRTPTimestampFrequency, 00228 subsession->fNumChannels); 00229 if (subsession->fCodecName == NULL) { 00230 char typeStr[20]; 00231 sprintf(typeStr, "%d", subsession->fRTPPayloadFormat); 00232 envir().setResultMsg("Unknown codec name for RTP payload type ", 00233 typeStr); 00234 return False; 00235 } 00236 } 00237 00238 // If we don't yet know this subsession's RTP timestamp frequency 00239 // (because it uses a dynamic payload type and the corresponding 00240 // SDP "rtpmap" attribute erroneously didn't specify it), 00241 // then guess it now: 00242 if (subsession->fRTPTimestampFrequency == 0) { 00243 subsession->fRTPTimestampFrequency 00244 = guessRTPTimestampFrequency(subsession->fMediumName, 00245 subsession->fCodecName); 00246 } 00247 } 00248 00249 return True; 00250 }
| Boolean MediaSession::parseSDPLine | ( | char const * | input, | |
| char const *& | nextLine | |||
| ) | [protected] |
Definition at line 252 of file MediaSession.cpp.
References Medium::envir(), False, NULL, and True.
Referenced by initializeWithSDP().
00253 { 00254 // Begin by finding the start of the next line (if any): 00255 nextLine = NULL; 00256 for (char const* ptr = inputLine; *ptr != '\0'; ++ptr) { 00257 if (*ptr == '\r' || *ptr == '\n') { 00258 // We found the end of the line 00259 ++ptr; 00260 while (*ptr == '\r' || *ptr == '\n') ++ptr; 00261 nextLine = ptr; 00262 if (nextLine[0] == '\0') nextLine = NULL; // special case for end 00263 break; 00264 } 00265 } 00266 00267 // Then, check that this line is a SDP line of the form <char>=<etc> 00268 // (However, we also accept blank lines in the input.) 00269 if (inputLine[0] == '\r' || inputLine[0] == '\n') return True; 00270 if (strlen(inputLine) < 2 || inputLine[1] != '=' 00271 || inputLine[0] < 'a' || inputLine[0] > 'z') { 00272 envir().setResultMsg("Invalid SDP line: ", inputLine); 00273 return False; 00274 } 00275 00276 return True; 00277 }
| Boolean MediaSession::parseSDPLine_s | ( | char const * | sdpLine | ) | [protected] |
Definition at line 291 of file MediaSession.cpp.
References False, fSessionName, strDup(), strDupSize(), and True.
Referenced by initializeWithSDP().
00291 { 00292 // Check for "s=<session name>" line 00293 char* buffer = strDupSize(sdpLine); 00294 Boolean parseSuccess = False; 00295 00296 if (sscanf(sdpLine, "s=%[^\r\n]", buffer) == 1) { 00297 delete[] fSessionName; fSessionName = strDup(buffer); 00298 parseSuccess = True; 00299 } 00300 delete[] buffer; 00301 00302 return parseSuccess; 00303 }
| Boolean MediaSession::parseSDPLine_i | ( | char const * | sdpLine | ) | [protected] |
Definition at line 305 of file MediaSession.cpp.
References False, fSessionDescription, strDup(), strDupSize(), and True.
Referenced by initializeWithSDP().
00305 { 00306 // Check for "i=<session description>" line 00307 char* buffer = strDupSize(sdpLine); 00308 Boolean parseSuccess = False; 00309 00310 if (sscanf(sdpLine, "i=%[^\r\n]", buffer) == 1) { 00311 delete[] fSessionDescription; fSessionDescription = strDup(buffer); 00312 parseSuccess = True; 00313 } 00314 delete[] buffer; 00315 00316 return parseSuccess; 00317 }
| Boolean MediaSession::parseSDPLine_c | ( | char const * | sdpLine | ) | [protected] |
Definition at line 319 of file MediaSession.cpp.
References connectionEndpointName(), False, fConnectionEndpointName, NULL, parseCLine(), and True.
Referenced by initializeWithSDP().
00319 { 00320 // Check for "c=IN IP4 <connection-endpoint>" 00321 // or "c=IN IP4 <connection-endpoint>/<ttl+numAddresses>" 00322 // (Later, do something with <ttl+numAddresses> also #####) 00323 char* connectionEndpointName = parseCLine(sdpLine); 00324 if (connectionEndpointName != NULL) { 00325 delete[] fConnectionEndpointName; 00326 fConnectionEndpointName = connectionEndpointName; 00327 return True; 00328 } 00329 00330 return False; 00331 }
| Boolean MediaSession::parseSDPAttribute_type | ( | char const * | sdpLine | ) | [protected] |
Definition at line 333 of file MediaSession.cpp.
References False, fMediaSessionType, strDup(), strDupSize(), and True.
Referenced by initializeWithSDP().
00333 { 00334 // Check for a "a=type:broadcast|meeting|moderated|test|H.332|recvonly" line: 00335 Boolean parseSuccess = False; 00336 00337 char* buffer = strDupSize(sdpLine); 00338 if (sscanf(sdpLine, "a=type: %[^ ]", buffer) == 1) { 00339 delete[] fMediaSessionType; 00340 fMediaSessionType = strDup(buffer); 00341 parseSuccess = True; 00342 } 00343 delete[] buffer; 00344 00345 return parseSuccess; 00346 }
| Boolean MediaSession::parseSDPAttribute_control | ( | char const * | sdpLine | ) | [protected] |
Definition at line 348 of file MediaSession.cpp.
References controlPath(), False, fControlPath, strDup(), strDupSize(), and True.
Referenced by initializeWithSDP().
00348 { 00349 // Check for a "a=control:<control-path>" line: 00350 Boolean parseSuccess = False; 00351 00352 char* controlPath = strDupSize(sdpLine); // ensures we have enough space 00353 if (sscanf(sdpLine, "a=control: %s", controlPath) == 1) { 00354 parseSuccess = True; 00355 delete[] fControlPath; fControlPath = strDup(controlPath); 00356 } 00357 delete[] controlPath; 00358 00359 return parseSuccess; 00360 }
| Boolean MediaSession::parseSDPAttribute_range | ( | char const * | sdpLine | ) | [protected] |
Definition at line 385 of file MediaSession.cpp.
References _absEndTime(), _absStartTime(), False, fMaxPlayEndTime, fMaxPlayStartTime, parseRangeAttribute(), playEndTime(), playStartTime(), and True.
Referenced by initializeWithSDP().
00385 { 00386 // Check for a "a=range:npt=<startTime>-<endTime>" line: 00387 // (Later handle other kinds of "a=range" attributes also???#####) 00388 Boolean parseSuccess = False; 00389 00390 double playStartTime; 00391 double playEndTime; 00392 if (parseRangeAttribute(sdpLine, playStartTime, playEndTime)) { 00393 parseSuccess = True; 00394 if (playStartTime > fMaxPlayStartTime) { 00395 fMaxPlayStartTime = playStartTime; 00396 } 00397 if (playEndTime > fMaxPlayEndTime) { 00398 fMaxPlayEndTime = playEndTime; 00399 } 00400 } else if (parseRangeAttribute(sdpLine, _absStartTime(), _absEndTime())) { 00401 parseSuccess = True; 00402 } 00403 00404 return parseSuccess; 00405 }
| Boolean MediaSession::parseSDPAttribute_source_filter | ( | char const * | sdpLine | ) | [protected] |
Definition at line 436 of file MediaSession.cpp.
References fSourceFilterAddr, and parseSourceFilterAttribute().
Referenced by initializeWithSDP().
00436 { 00437 return parseSourceFilterAttribute(sdpLine, fSourceFilterAddr); 00438 }
| char * MediaSession::lookupPayloadFormat | ( | unsigned char | rtpPayloadType, | |
| unsigned & | rtpTimestampFrequency, | |||
| unsigned & | numChannels | |||
| ) | [static, protected] |
Definition at line 440 of file MediaSession.cpp.
References NULL, and strDup().
Referenced by initializeWithSDP().
00441 { 00442 // Look up the codec name and timestamp frequency for known (static) 00443 // RTP payload formats. 00444 char const* temp = NULL; 00445 switch (rtpPayloadType) { 00446 case 0: {temp = "PCMU"; freq = 8000; nCh = 1; break;} 00447 case 2: {temp = "G726-32"; freq = 8000; nCh = 1; break;} 00448 case 3: {temp = "GSM"; freq = 8000; nCh = 1; break;} 00449 case 4: {temp = "G723"; freq = 8000; nCh = 1; break;} 00450 case 5: {temp = "DVI4"; freq = 8000; nCh = 1; break;} 00451 case 6: {temp = "DVI4"; freq = 16000; nCh = 1; break;} 00452 case 7: {temp = "LPC"; freq = 8000; nCh = 1; break;} 00453 case 8: {temp = "PCMA"; freq = 8000; nCh = 1; break;} 00454 case 9: {temp = "G722"; freq = 8000; nCh = 1; break;} 00455 case 10: {temp = "L16"; freq = 44100; nCh = 2; break;} 00456 case 11: {temp = "L16"; freq = 44100; nCh = 1; break;} 00457 case 12: {temp = "QCELP"; freq = 8000; nCh = 1; break;} 00458 case 14: {temp = "MPA"; freq = 90000; nCh = 1; break;} 00459 // 'number of channels' is actually encoded in the media stream 00460 case 15: {temp = "G728"; freq = 8000; nCh = 1; break;} 00461 case 16: {temp = "DVI4"; freq = 11025; nCh = 1; break;} 00462 case 17: {temp = "DVI4"; freq = 22050; nCh = 1; break;} 00463 case 18: {temp = "G729"; freq = 8000; nCh = 1; break;} 00464 case 25: {temp = "CELB"; freq = 90000; nCh = 1; break;} 00465 case 26: {temp = "JPEG"; freq = 90000; nCh = 1; break;} 00466 case 28: {temp = "NV"; freq = 90000; nCh = 1; break;} 00467 case 31: {temp = "H261"; freq = 90000; nCh = 1; break;} 00468 case 32: {temp = "MPV"; freq = 90000; nCh = 1; break;} 00469 case 33: {temp = "MP2T"; freq = 90000; nCh = 1; break;} 00470 case 34: {temp = "H263"; freq = 90000; nCh = 1; break;} 00471 }; 00472 00473 return strDup(temp); 00474 }
| unsigned MediaSession::guessRTPTimestampFrequency | ( | char const * | mediumName, | |
| char const * | codecName | |||
| ) | [static, protected] |
Definition at line 476 of file MediaSession.cpp.
Referenced by initializeWithSDP().
00477 { 00478 // By default, we assume that audio sessions use a frequency of 8000, 00479 // video sessions use a frequency of 90000, 00480 // and text sessions use a frequency of 1000. 00481 // Begin by checking for known exceptions to this rule 00482 // (where the frequency is known unambiguously (e.g., not like "DVI4")) 00483 if (strcmp(codecName, "L16") == 0) return 44100; 00484 if (strcmp(codecName, "MPA") == 0 00485 || strcmp(codecName, "MPA-ROBUST") == 0 00486 || strcmp(codecName, "X-MP3-DRAFT-00")) return 90000; 00487 00488 // Now, guess default values: 00489 if (strcmp(mediumName, "video") == 0) return 90000; 00490 else if (strcmp(mediumName, "text") == 0) return 1000; 00491 return 8000; // for "audio", and any other medium 00492 }
| 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(), 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(), 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(), initializeWithSDP(), 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(), 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] |
| 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::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 }
friend class MediaSubsessionIterator [friend] |
Definition at line 118 of file MediaSession.hh.
friend class MediaLookupTable [friend, inherited] |
char* MediaSession::fCNAME [protected] |
Definition at line 119 of file MediaSession.hh.
Referenced by CNAME(), MediaSession(), and ~MediaSession().
MediaSubsession* MediaSession::fSubsessionsHead [protected] |
Definition at line 122 of file MediaSession.hh.
Referenced by hasSubsessions(), initializeWithSDP(), MediaSubsessionIterator::reset(), and ~MediaSession().
MediaSubsession* MediaSession::fSubsessionsTail [protected] |
char* MediaSession::fConnectionEndpointName [protected] |
Definition at line 126 of file MediaSession.hh.
Referenced by connectionEndpointName(), parseSDPLine_c(), and ~MediaSession().
double MediaSession::fMaxPlayStartTime [protected] |
Definition at line 127 of file MediaSession.hh.
Referenced by parseSDPAttribute_range(), and playStartTime().
double MediaSession::fMaxPlayEndTime [protected] |
Definition at line 128 of file MediaSession.hh.
Referenced by parseSDPAttribute_range(), and playEndTime().
char* MediaSession::fAbsStartTime [protected] |
Definition at line 129 of file MediaSession.hh.
Referenced by _absStartTime(), absStartTime(), and ~MediaSession().
char* MediaSession::fAbsEndTime [protected] |
Definition at line 130 of file MediaSession.hh.
Referenced by _absEndTime(), absEndTime(), and ~MediaSession().
struct in_addr MediaSession::fSourceFilterAddr [read, protected] |
Definition at line 131 of file MediaSession.hh.
Referenced by MediaSession(), parseSDPAttribute_source_filter(), and sourceFilterAddr().
float MediaSession::fScale [protected] |
char* MediaSession::fMediaSessionType [protected] |
Definition at line 133 of file MediaSession.hh.
Referenced by mediaSessionType(), parseSDPAttribute_type(), and ~MediaSession().
char* MediaSession::fSessionName [protected] |
Definition at line 134 of file MediaSession.hh.
Referenced by parseSDPLine_s(), sessionName(), and ~MediaSession().
char* MediaSession::fSessionDescription [protected] |
Definition at line 135 of file MediaSession.hh.
Referenced by parseSDPLine_i(), sessionDescription(), and ~MediaSession().
char* MediaSession::fControlPath [protected] |
Definition at line 136 of file MediaSession.hh.
Referenced by controlPath(), parseSDPAttribute_control(), and ~MediaSession().
1.5.2