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


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) |
| 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 | isMediaSession () const |
| virtual Boolean | isServerMediaSession () const |
| virtual Boolean | isDarwinInjector () const |
Static Public Member Functions | |
| static VorbisAudioMatroskaFileServerMediaSubsession * | createNew (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 FramedSource * | getStreamSource (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 |
| TaskToken & | nextTask () |
Protected Attributes | |
| char const * | fFileName |
| u_int64_t | fFileSize |
| char * | fSDPLines |
| HashTable * | fDestinationsHashTable |
| ServerMediaSession * | fParentSession |
| 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 FramedSource * | createNewStreamSource (unsigned clientSessionId, unsigned &estBitrate) |
| virtual RTPSink * | createNewRTPSink (Groupsock *rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource *inputSource) |
Private Attributes | |
| MatroskaFileServerDemux & | fOurDemux |
| 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 |
Definition at line 32 of file VorbisAudioMatroskaFileServerMediaSubsession.hh.
| 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 }
| VorbisAudioMatroskaFileServerMediaSubsession * VorbisAudioMatroskaFileServerMediaSubsession::createNew | ( | MatroskaFileServerDemux & | demux, | |
| unsigned | trackNumber | |||
| ) | [static] |
Definition at line 27 of file VorbisAudioMatroskaFileServerMediaSubsession.cpp.
References demux.
Referenced by MatroskaFileServerDemux::newServerMediaSubsession().
00027 { 00028 return new VorbisAudioMatroskaFileServerMediaSubsession(demux, trackNumber); 00029 }
| 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().
| 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] |
| 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 }
friend class MediaLookupTable [friend, inherited] |
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] |
ServerMediaSession* ServerMediaSubsession::fParentSession [protected, inherited] |
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().
1.5.2