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


Public Types | |
| typedef void( | onSendErrorFunc )(void *clientData) |
| typedef void( | afterPlayingFunc )(void *clientData) |
Public Member Functions | |
| void | setPacketSizes (unsigned preferredPacketSize, unsigned maxPacketSize) |
| void | setOnSendErrorFunc (onSendErrorFunc *onSendErrorFunc, void *onSendErrorFuncData) |
| virtual void | stopPlaying () |
| Groupsock const & | groupsockBeingUsed () const |
| Groupsock & | groupsockBeingUsed () |
| unsigned char | rtpPayloadType () const |
| unsigned | rtpTimestampFrequency () const |
| void | setRTPTimestampFrequency (unsigned freq) |
| char const * | rtpPayloadFormatName () const |
| unsigned | numChannels () const |
| virtual char const * | sdpMediaType () const |
| virtual char * | rtpmapLine () const |
| virtual char const * | auxSDPLine () |
| u_int16_t | currentSeqNo () const |
| u_int32_t | presetNextTimestamp () |
| RTPTransmissionStatsDB & | transmissionStatsDB () const |
| Boolean | nextTimestampHasBeenPreset () const |
| Boolean & | enableRTCPReports () |
| void | getTotalBitrate (unsigned &outNumBytes, double &outElapsedTime) |
| timeval const & | creationTime () const |
| timeval const & | initialPresentationTime () const |
| timeval const & | mostRecentPresentationTime () const |
| void | resetPresentationTimes () |
| void | setStreamSocket (int sockNum, unsigned char streamChannelId) |
| void | addStreamSocket (int sockNum, unsigned char streamChannelId) |
| void | removeStreamSocket (int sockNum, unsigned char streamChannelId) |
| void | setServerRequestAlternativeByteHandler (int socketNum, ServerRequestAlternativeByteHandler *handler, void *clientData) |
| Boolean | startPlaying (MediaSource &source, afterPlayingFunc *afterFunc, void *afterClientData) |
| FramedSource * | source () const |
| UsageEnvironment & | envir () const |
| char const * | name () const |
| virtual Boolean | isSource () 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 Boolean | lookupByName (UsageEnvironment &env, char const *sinkName, RTPSink *&resultSink) |
| static Boolean | lookupByName (UsageEnvironment &env, char const *sinkName, MediaSink *&resultSink) |
| 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 | |
| MultiFramedRTPSink (UsageEnvironment &env, Groupsock *rtpgs, unsigned char rtpPayloadType, unsigned rtpTimestampFrequency, char const *rtpPayloadFormatName, unsigned numChannels=1) | |
| virtual | ~MultiFramedRTPSink () |
| virtual void | doSpecialFrameHandling (unsigned fragmentationOffset, unsigned char *frameStart, unsigned numBytesInFrame, struct timeval framePresentationTime, unsigned numRemainingBytes) |
| virtual Boolean | allowFragmentationAfterStart () const |
| virtual Boolean | allowOtherFramesAfterLastFragment () const |
| virtual Boolean | frameCanAppearAfterPacketStart (unsigned char const *frameStart, unsigned numBytesInFrame) const |
| virtual unsigned | specialHeaderSize () const |
| virtual unsigned | frameSpecificHeaderSize () const |
| virtual unsigned | computeOverflowForNewFrame (unsigned newFrameSize) const |
| Boolean | isFirstPacket () const |
| Boolean | isFirstFrameInPacket () const |
| unsigned | curFragmentationOffset () const |
| void | setMarkerBit () |
| void | setTimestamp (struct timeval framePresentationTime) |
| void | setSpecialHeaderWord (unsigned word, unsigned wordPosition=0) |
| void | setSpecialHeaderBytes (unsigned char const *bytes, unsigned numBytes, unsigned bytePosition=0) |
| void | setFrameSpecificHeaderWord (unsigned word, unsigned wordPosition=0) |
| void | setFrameSpecificHeaderBytes (unsigned char const *bytes, unsigned numBytes, unsigned bytePosition=0) |
| void | setFramePadding (unsigned numPaddingBytes) |
| unsigned | numFramesUsedSoFar () const |
| unsigned | ourMaxPacketSize () const |
| virtual Boolean | continuePlaying () |
| u_int32_t | SSRC () const |
| u_int32_t | convertToRTPTimestamp (struct timeval tv) |
| unsigned | packetCount () const |
| unsigned | octetCount () const |
| virtual Boolean | sourceIsCompatibleWithUs (MediaSource &source) |
| TaskToken & | nextTask () |
Static Protected Member Functions | |
| static void | onSourceClosure (void *clientData) |
Protected Attributes | |
| RTPInterface | fRTPInterface |
| unsigned char | fRTPPayloadType |
| unsigned | fPacketCount |
| unsigned | fOctetCount |
| unsigned | fTotalOctetCount |
| timeval fTotalOctetCountStartTime fInitialPresentationTime | fMostRecentPresentationTime |
| u_int32_t | fCurrentTimestamp |
| u_int16_t | fSeqNo |
| FramedSource * | fSource |
Private Member Functions | |
| void | buildAndSendPacket (Boolean isFirstPacket) |
| void | packFrame () |
| void | sendPacketIfNecessary () |
| void | afterGettingFrame1 (unsigned numBytesRead, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| Boolean | isTooBigForAPacket (unsigned numBytes) const |
Static Private Member Functions | |
| static void | sendNext (void *firstArg) |
| static void | afterGettingFrame (void *clientData, unsigned numBytesRead, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durationInMicroseconds) |
| static void | ourHandleClosure (void *clientData) |
Private Attributes | |
| OutPacketBuffer * | fOutBuf |
| Boolean | fNoFramesLeft |
| unsigned | fNumFramesUsedSoFar |
| unsigned | fCurFragmentationOffset |
| Boolean | fPreviousFrameEndedFragmentation |
| Boolean | fIsFirstPacket |
| timeval | fNextSendTime |
| unsigned | fTimestampPosition |
| unsigned | fSpecialHeaderPosition |
| unsigned | fSpecialHeaderSize |
| unsigned | fCurFrameSpecificHeaderPosition |
| unsigned | fCurFrameSpecificHeaderSize |
| unsigned | fTotalFrameSpecificHeaderSizes |
| unsigned | fOurMaxPacketSize |
| onSendErrorFunc * | fOnSendErrorFunc |
| void * | fOnSendErrorData |
Friends | |
| void | sendNext (void *) |
| class | RTCPInstance |
| class | RTPTransmissionStats |
| class | MediaLookupTable |
Definition at line 29 of file MultiFramedRTPSink.hh.
| typedef void( MultiFramedRTPSink::onSendErrorFunc)(void *clientData) |
Definition at line 33 of file MultiFramedRTPSink.hh.
typedef void( MediaSink::afterPlayingFunc)(void *clientData) [inherited] |
Definition at line 33 of file MediaSink.hh.
| MultiFramedRTPSink::MultiFramedRTPSink | ( | UsageEnvironment & | env, | |
| Groupsock * | rtpgs, | |||
| unsigned char | rtpPayloadType, | |||
| unsigned | rtpTimestampFrequency, | |||
| char const * | rtpPayloadFormatName, | |||
| unsigned | numChannels = 1 | |||
| ) | [protected] |
Definition at line 37 of file MultiFramedRTPSink.cpp.
References setPacketSizes().
00043 : RTPSink(env, rtpGS, rtpPayloadType, rtpTimestampFrequency, 00044 rtpPayloadFormatName, numChannels), 00045 fOutBuf(NULL), fCurFragmentationOffset(0), fPreviousFrameEndedFragmentation(False), 00046 fOnSendErrorFunc(NULL), fOnSendErrorData(NULL) { 00047 setPacketSizes(1000, 1448); 00048 // Default max packet size (1500, minus allowance for IP, UDP, UMTP headers) 00049 // (Also, make it a multiple of 4 bytes, just in case that matters.) 00050 }
| MultiFramedRTPSink::~MultiFramedRTPSink | ( | ) | [protected, virtual] |
Definition at line 52 of file MultiFramedRTPSink.cpp.
References fOutBuf.
00052 { 00053 delete fOutBuf; 00054 }
| void MultiFramedRTPSink::setPacketSizes | ( | unsigned | preferredPacketSize, | |
| unsigned | maxPacketSize | |||
| ) |
Definition at line 27 of file MultiFramedRTPSink.cpp.
References fOurMaxPacketSize, and fOutBuf.
Referenced by MultiFramedRTPSink().
00028 { 00029 if (preferredPacketSize > maxPacketSize || preferredPacketSize == 0) return; 00030 // sanity check 00031 00032 delete fOutBuf; 00033 fOutBuf = new OutPacketBuffer(preferredPacketSize, maxPacketSize); 00034 fOurMaxPacketSize = maxPacketSize; // save value, in case subclasses need it 00035 }
| void MultiFramedRTPSink::setOnSendErrorFunc | ( | onSendErrorFunc * | onSendErrorFunc, | |
| void * | onSendErrorFuncData | |||
| ) | [inline] |
Definition at line 34 of file MultiFramedRTPSink.hh.
References fOnSendErrorData, and fOnSendErrorFunc.
00034 { 00035 // Can be used to set a callback function to be called if there's an error sending RTP packets on our socket. 00036 fOnSendErrorFunc = onSendErrorFunc; 00037 fOnSendErrorData = onSendErrorFuncData; 00038 }
| void MultiFramedRTPSink::doSpecialFrameHandling | ( | unsigned | fragmentationOffset, | |
| unsigned char * | frameStart, | |||
| unsigned | numBytesInFrame, | |||
| struct timeval | framePresentationTime, | |||
| unsigned | numRemainingBytes | |||
| ) | [protected, virtual] |
Reimplemented in AC3AudioRTPSink, AMRAudioRTPSink, DVVideoRTPSink, H263plusVideoRTPSink, H264VideoRTPSink, JPEGVideoRTPSink, MP3ADURTPSink, MPEG1or2AudioRTPSink, MPEG1or2VideoRTPSink, MPEG4ESVideoRTPSink, MPEG4GenericRTPSink, MPEG4LATMAudioRTPSink, SimpleRTPSink, T140TextRTPSink, VorbisAudioRTPSink, and VP8VideoRTPSink.
Definition at line 57 of file MultiFramedRTPSink.cpp.
References isFirstFrameInPacket(), and setTimestamp().
Referenced by afterGettingFrame1(), VorbisAudioRTPSink::doSpecialFrameHandling(), SimpleRTPSink::doSpecialFrameHandling(), MPEG4LATMAudioRTPSink::doSpecialFrameHandling(), MPEG4GenericRTPSink::doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().
00061 { 00062 // default implementation: If this is the first frame in the packet, 00063 // use its presentationTime for the RTP timestamp: 00064 if (isFirstFrameInPacket()) { 00065 setTimestamp(framePresentationTime); 00066 } 00067 }
| Boolean MultiFramedRTPSink::allowFragmentationAfterStart | ( | ) | const [protected, virtual] |
Reimplemented in MPEG1or2VideoRTPSink, and MPEG4ESVideoRTPSink.
Definition at line 69 of file MultiFramedRTPSink.cpp.
References False.
Referenced by afterGettingFrame1().
00069 { 00070 return False; // by default 00071 }
| Boolean MultiFramedRTPSink::allowOtherFramesAfterLastFragment | ( | ) | const [protected, virtual] |
Definition at line 73 of file MultiFramedRTPSink.cpp.
References False.
Referenced by afterGettingFrame1().
00073 { 00074 return False; // by default 00075 }
| Boolean MultiFramedRTPSink::frameCanAppearAfterPacketStart | ( | unsigned char const * | frameStart, | |
| unsigned | numBytesInFrame | |||
| ) | const [protected, virtual] |
Reimplemented in AC3AudioRTPSink, AMRAudioRTPSink, GSMAudioRTPSink, H263plusVideoRTPSink, H264VideoRTPSink, JPEGVideoRTPSink, MPEG1or2VideoRTPSink, MPEG4ESVideoRTPSink, MPEG4GenericRTPSink, MPEG4LATMAudioRTPSink, SimpleRTPSink, T140TextRTPSink, VorbisAudioRTPSink, and VP8VideoRTPSink.
Definition at line 78 of file MultiFramedRTPSink.cpp.
References True.
Referenced by afterGettingFrame1().
00079 { 00080 return True; // by default 00081 }
| unsigned MultiFramedRTPSink::specialHeaderSize | ( | ) | const [protected, virtual] |
Reimplemented in AC3AudioRTPSink, AMRAudioRTPSink, H263plusVideoRTPSink, JPEGVideoRTPSink, MP3ADURTPSink, MPEG1or2AudioRTPSink, MPEG1or2VideoRTPSink, MPEG4GenericRTPSink, VorbisAudioRTPSink, and VP8VideoRTPSink.
Definition at line 83 of file MultiFramedRTPSink.cpp.
Referenced by buildAndSendPacket(), and isTooBigForAPacket().
| unsigned MultiFramedRTPSink::frameSpecificHeaderSize | ( | ) | const [protected, virtual] |
Reimplemented in VorbisAudioRTPSink.
Definition at line 88 of file MultiFramedRTPSink.cpp.
Referenced by isTooBigForAPacket(), packFrame(), and sendPacketIfNecessary().
| unsigned MultiFramedRTPSink::computeOverflowForNewFrame | ( | unsigned | newFrameSize | ) | const [protected, virtual] |
Reimplemented in DVVideoRTPSink.
Definition at line 93 of file MultiFramedRTPSink.cpp.
References fOutBuf, and OutPacketBuffer::numOverflowBytes().
Referenced by afterGettingFrame1(), and DVVideoRTPSink::computeOverflowForNewFrame().
00093 { 00094 // default implementation: Just call numOverflowBytes() 00095 return fOutBuf->numOverflowBytes(newFrameSize); 00096 }
| Boolean MultiFramedRTPSink::isFirstPacket | ( | ) | const [inline, protected] |
Definition at line 77 of file MultiFramedRTPSink.hh.
References fIsFirstPacket.
Referenced by MPEG1or2AudioRTPSink::doSpecialFrameHandling(), and AMRAudioRTPSink::doSpecialFrameHandling().
00077 { return fIsFirstPacket; }
| Boolean MultiFramedRTPSink::isFirstFrameInPacket | ( | ) | const [inline, protected] |
Definition at line 78 of file MultiFramedRTPSink.hh.
References fNumFramesUsedSoFar.
Referenced by doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), and AMRAudioRTPSink::doSpecialFrameHandling().
00078 { return fNumFramesUsedSoFar == 0; }
| unsigned MultiFramedRTPSink::curFragmentationOffset | ( | ) | const [inline, protected] |
Definition at line 79 of file MultiFramedRTPSink.hh.
References fCurFragmentationOffset.
Referenced by afterGettingFrame1(), MP3ADURTPSink::specialHeaderSize(), JPEGVideoRTPSink::specialHeaderSize(), and H263plusVideoRTPSink::specialHeaderSize().
00079 { return fCurFragmentationOffset; }
| void MultiFramedRTPSink::setMarkerBit | ( | ) | [protected] |
Definition at line 98 of file MultiFramedRTPSink.cpp.
References OutPacketBuffer::extractWord(), fOutBuf, and OutPacketBuffer::insertWord().
Referenced by VP8VideoRTPSink::doSpecialFrameHandling(), T140TextRTPSink::doSpecialFrameHandling(), SimpleRTPSink::doSpecialFrameHandling(), MPEG4LATMAudioRTPSink::doSpecialFrameHandling(), MPEG4GenericRTPSink::doSpecialFrameHandling(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H264VideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), DVVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().
00098 { 00099 unsigned rtpHdr = fOutBuf->extractWord(0); 00100 rtpHdr |= 0x00800000; 00101 fOutBuf->insertWord(rtpHdr, 0); 00102 }
| void MultiFramedRTPSink::setTimestamp | ( | struct timeval | framePresentationTime | ) | [protected] |
Definition at line 104 of file MultiFramedRTPSink.cpp.
References RTPSink::convertToRTPTimestamp(), RTPSink::fCurrentTimestamp, fOutBuf, fTimestampPosition, and OutPacketBuffer::insertWord().
Referenced by VP8VideoRTPSink::doSpecialFrameHandling(), T140TextRTPSink::doSpecialFrameHandling(), doSpecialFrameHandling(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H264VideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), and DVVideoRTPSink::doSpecialFrameHandling().
00104 { 00105 // First, convert the presentation time to a 32-bit RTP timestamp: 00106 fCurrentTimestamp = convertToRTPTimestamp(framePresentationTime); 00107 00108 // Then, insert it into the RTP packet: 00109 fOutBuf->insertWord(fCurrentTimestamp, fTimestampPosition); 00110 }
| void MultiFramedRTPSink::setSpecialHeaderWord | ( | unsigned | word, | |
| unsigned | wordPosition = 0 | |||
| ) | [protected] |
Definition at line 112 of file MultiFramedRTPSink.cpp.
References fOutBuf, fSpecialHeaderPosition, and OutPacketBuffer::insertWord().
Referenced by MPEG1or2VideoRTPSink::doSpecialFrameHandling(), and MPEG1or2AudioRTPSink::doSpecialFrameHandling().
00113 { 00114 fOutBuf->insertWord(word, fSpecialHeaderPosition + 4*wordPosition); 00115 }
| void MultiFramedRTPSink::setSpecialHeaderBytes | ( | unsigned char const * | bytes, | |
| unsigned | numBytes, | |||
| unsigned | bytePosition = 0 | |||
| ) | [protected] |
Definition at line 117 of file MultiFramedRTPSink.cpp.
References fOutBuf, fSpecialHeaderPosition, and OutPacketBuffer::insert().
Referenced by VP8VideoRTPSink::doSpecialFrameHandling(), VorbisAudioRTPSink::doSpecialFrameHandling(), MPEG4GenericRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().
00119 { 00120 fOutBuf->insert(bytes, numBytes, fSpecialHeaderPosition + bytePosition); 00121 }
| void MultiFramedRTPSink::setFrameSpecificHeaderWord | ( | unsigned | word, | |
| unsigned | wordPosition = 0 | |||
| ) | [protected] |
Definition at line 123 of file MultiFramedRTPSink.cpp.
References fCurFrameSpecificHeaderPosition, fOutBuf, and OutPacketBuffer::insertWord().
00124 { 00125 fOutBuf->insertWord(word, fCurFrameSpecificHeaderPosition + 4*wordPosition); 00126 }
| void MultiFramedRTPSink::setFrameSpecificHeaderBytes | ( | unsigned char const * | bytes, | |
| unsigned | numBytes, | |||
| unsigned | bytePosition = 0 | |||
| ) | [protected] |
Definition at line 128 of file MultiFramedRTPSink.cpp.
References fCurFrameSpecificHeaderPosition, fOutBuf, and OutPacketBuffer::insert().
Referenced by VorbisAudioRTPSink::doSpecialFrameHandling().
00130 { 00131 fOutBuf->insert(bytes, numBytes, fCurFrameSpecificHeaderPosition + bytePosition); 00132 }
| void MultiFramedRTPSink::setFramePadding | ( | unsigned | numPaddingBytes | ) | [protected] |
Definition at line 134 of file MultiFramedRTPSink.cpp.
References OutPacketBuffer::enqueue(), OutPacketBuffer::extractWord(), fOutBuf, and OutPacketBuffer::insertWord().
00134 { 00135 if (numPaddingBytes > 0) { 00136 // Add the padding bytes (with the last one being the padding size): 00137 unsigned char paddingBuffer[255]; //max padding 00138 memset(paddingBuffer, 0, numPaddingBytes); 00139 paddingBuffer[numPaddingBytes-1] = numPaddingBytes; 00140 fOutBuf->enqueue(paddingBuffer, numPaddingBytes); 00141 00142 // Set the RTP padding bit: 00143 unsigned rtpHdr = fOutBuf->extractWord(0); 00144 rtpHdr |= 0x20000000; 00145 fOutBuf->insertWord(rtpHdr, 0); 00146 } 00147 }
| unsigned MultiFramedRTPSink::numFramesUsedSoFar | ( | ) | const [inline, protected] |
Definition at line 91 of file MultiFramedRTPSink.hh.
References fNumFramesUsedSoFar.
Referenced by VorbisAudioRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), VorbisAudioRTPSink::frameCanAppearAfterPacketStart(), and GSMAudioRTPSink::frameCanAppearAfterPacketStart().
00091 { return fNumFramesUsedSoFar; }
| unsigned MultiFramedRTPSink::ourMaxPacketSize | ( | ) | const [inline, protected] |
Definition at line 92 of file MultiFramedRTPSink.hh.
References fOurMaxPacketSize.
Referenced by H264VideoRTPSink::continuePlaying().
00092 { return fOurMaxPacketSize; }
| void MultiFramedRTPSink::stopPlaying | ( | ) | [virtual] |
Reimplemented from MediaSink.
Definition at line 156 of file MultiFramedRTPSink.cpp.
References fOutBuf, OutPacketBuffer::resetOffset(), OutPacketBuffer::resetOverflowData(), OutPacketBuffer::resetPacketStart(), and MediaSink::stopPlaying().
Referenced by H264VideoRTPSink::~H264VideoRTPSink(), and T140TextRTPSink::~T140TextRTPSink().
00156 { 00157 fOutBuf->resetPacketStart(); 00158 fOutBuf->resetOffset(); 00159 fOutBuf->resetOverflowData(); 00160 00161 // Then call the default "stopPlaying()" function: 00162 MediaSink::stopPlaying(); 00163 }
| Boolean MultiFramedRTPSink::continuePlaying | ( | ) | [protected, virtual] |
Implements MediaSink.
Reimplemented in H264VideoRTPSink, and T140TextRTPSink.
Definition at line 149 of file MultiFramedRTPSink.cpp.
References buildAndSendPacket(), and True.
Referenced by T140TextRTPSink::continuePlaying(), and H264VideoRTPSink::continuePlaying().
00149 { 00150 // Send the first packet. 00151 // (This will also schedule any future sends.) 00152 buildAndSendPacket(True); 00153 return True; 00154 }
| void MultiFramedRTPSink::buildAndSendPacket | ( | Boolean | isFirstPacket | ) | [private] |
Definition at line 165 of file MultiFramedRTPSink.cpp.
References OutPacketBuffer::curPacketSize(), OutPacketBuffer::enqueueWord(), False, fIsFirstPacket, fNoFramesLeft, fNumFramesUsedSoFar, fOutBuf, RTPSink::fRTPPayloadType, RTPSink::fSeqNo, fSpecialHeaderPosition, fSpecialHeaderSize, fTimestampPosition, fTotalFrameSpecificHeaderSizes, packFrame(), OutPacketBuffer::skipBytes(), specialHeaderSize(), and RTPSink::SSRC().
Referenced by continuePlaying(), and sendNext().
00165 { 00166 fIsFirstPacket = isFirstPacket; 00167 00168 // Set up the RTP header: 00169 unsigned rtpHdr = 0x80000000; // RTP version 2; marker ('M') bit not set (by default; it can be set later) 00170 rtpHdr |= (fRTPPayloadType<<16); 00171 rtpHdr |= fSeqNo; // sequence number 00172 fOutBuf->enqueueWord(rtpHdr); 00173 00174 // Note where the RTP timestamp will go. 00175 // (We can't fill this in until we start packing payload frames.) 00176 fTimestampPosition = fOutBuf->curPacketSize(); 00177 fOutBuf->skipBytes(4); // leave a hole for the timestamp 00178 00179 fOutBuf->enqueueWord(SSRC()); 00180 00181 // Allow for a special, payload-format-specific header following the 00182 // RTP header: 00183 fSpecialHeaderPosition = fOutBuf->curPacketSize(); 00184 fSpecialHeaderSize = specialHeaderSize(); 00185 fOutBuf->skipBytes(fSpecialHeaderSize); 00186 00187 // Begin packing as many (complete) frames into the packet as we can: 00188 fTotalFrameSpecificHeaderSizes = 0; 00189 fNoFramesLeft = False; 00190 fNumFramesUsedSoFar = 0; 00191 packFrame(); 00192 }
| void MultiFramedRTPSink::packFrame | ( | ) | [private] |
Definition at line 194 of file MultiFramedRTPSink.cpp.
References afterGettingFrame(), afterGettingFrame1(), OutPacketBuffer::curPacketSize(), OutPacketBuffer::curPtr(), fCurFrameSpecificHeaderPosition, fCurFrameSpecificHeaderSize, fOutBuf, frameSize, frameSpecificHeaderSize(), MediaSink::fSource, fTotalFrameSpecificHeaderSizes, FramedSource::getNextFrame(), OutPacketBuffer::haveOverflowData(), NULL, ourHandleClosure(), OutPacketBuffer::overflowDataSize(), OutPacketBuffer::overflowDurationInMicroseconds(), OutPacketBuffer::overflowPresentationTime(), OutPacketBuffer::skipBytes(), OutPacketBuffer::totalBytesAvailable(), and OutPacketBuffer::useOverflowData().
Referenced by afterGettingFrame1(), and buildAndSendPacket().
00194 { 00195 // Get the next frame. 00196 00197 // First, see if we have an overflow frame that was too big for the last pkt 00198 if (fOutBuf->haveOverflowData()) { 00199 // Use this frame before reading a new one from the source 00200 unsigned frameSize = fOutBuf->overflowDataSize(); 00201 struct timeval presentationTime = fOutBuf->overflowPresentationTime(); 00202 unsigned durationInMicroseconds = fOutBuf->overflowDurationInMicroseconds(); 00203 fOutBuf->useOverflowData(); 00204 00205 afterGettingFrame1(frameSize, 0, presentationTime, durationInMicroseconds); 00206 } else { 00207 // Normal case: we need to read a new frame from the source 00208 if (fSource == NULL) return; 00209 00210 fCurFrameSpecificHeaderPosition = fOutBuf->curPacketSize(); 00211 fCurFrameSpecificHeaderSize = frameSpecificHeaderSize(); 00212 fOutBuf->skipBytes(fCurFrameSpecificHeaderSize); 00213 fTotalFrameSpecificHeaderSizes += fCurFrameSpecificHeaderSize; 00214 00215 fSource->getNextFrame(fOutBuf->curPtr(), fOutBuf->totalBytesAvailable(), 00216 afterGettingFrame, this, ourHandleClosure, this); 00217 } 00218 }
| void MultiFramedRTPSink::sendPacketIfNecessary | ( | ) | [private] |
Definition at line 357 of file MultiFramedRTPSink.cpp.
References OutPacketBuffer::adjustPacketStart(), OutPacketBuffer::curPacketSize(), Medium::envir(), fNextSendTime, fNoFramesLeft, fNumFramesUsedSoFar, RTPSink::fOctetCount, fOnSendErrorData, fOnSendErrorFunc, fOutBuf, RTPSink::fPacketCount, frameSpecificHeaderSize(), RTPSink::fRTPInterface, RTPSink::fSeqNo, fSpecialHeaderSize, fTotalFrameSpecificHeaderSizes, RTPSink::fTotalOctetCount, OutPacketBuffer::haveOverflowData(), Medium::nextTask(), NULL, MediaSink::onSourceClosure(), our_random(), OutPacketBuffer::packet(), OutPacketBuffer::resetOffset(), OutPacketBuffer::resetPacketStart(), rtpHeaderSize, TaskScheduler::scheduleDelayedTask(), sendNext(), RTPInterface::sendPacket(), UsageEnvironment::taskScheduler(), OutPacketBuffer::totalBufferSize(), and OutPacketBuffer::totalBytesAvailable().
Referenced by afterGettingFrame1(), and ourHandleClosure().
00357 { 00358 if (fNumFramesUsedSoFar > 0) { 00359 // Send the packet: 00360 #ifdef TEST_LOSS 00361 if ((our_random()%10) != 0) // simulate 10% packet loss ##### 00362 #endif 00363 if (!fRTPInterface.sendPacket(fOutBuf->packet(), fOutBuf->curPacketSize())) { 00364 // if failure handler has been specified, call it 00365 if (fOnSendErrorFunc != NULL) (*fOnSendErrorFunc)(fOnSendErrorData); 00366 } 00367 ++fPacketCount; 00368 fTotalOctetCount += fOutBuf->curPacketSize(); 00369 fOctetCount += fOutBuf->curPacketSize() 00370 - rtpHeaderSize - fSpecialHeaderSize - fTotalFrameSpecificHeaderSizes; 00371 00372 ++fSeqNo; // for next time 00373 } 00374 00375 if (fOutBuf->haveOverflowData() 00376 && fOutBuf->totalBytesAvailable() > fOutBuf->totalBufferSize()/2) { 00377 // Efficiency hack: Reset the packet start pointer to just in front of 00378 // the overflow data (allowing for the RTP header and special headers), 00379 // so that we probably don't have to "memmove()" the overflow data 00380 // into place when building the next packet: 00381 unsigned newPacketStart = fOutBuf->curPacketSize() 00382 - (rtpHeaderSize + fSpecialHeaderSize + frameSpecificHeaderSize()); 00383 fOutBuf->adjustPacketStart(newPacketStart); 00384 } else { 00385 // Normal case: Reset the packet start pointer back to the start: 00386 fOutBuf->resetPacketStart(); 00387 } 00388 fOutBuf->resetOffset(); 00389 fNumFramesUsedSoFar = 0; 00390 00391 if (fNoFramesLeft) { 00392 // We're done: 00393 onSourceClosure(this); 00394 } else { 00395 // We have more frames left to send. Figure out when the next frame 00396 // is due to start playing, then make sure that we wait this long before 00397 // sending the next packet. 00398 struct timeval timeNow; 00399 gettimeofday(&timeNow, NULL); 00400 int secsDiff = fNextSendTime.tv_sec - timeNow.tv_sec; 00401 int64_t uSecondsToGo = secsDiff*1000000 + (fNextSendTime.tv_usec - timeNow.tv_usec); 00402 if (uSecondsToGo < 0 || secsDiff < 0) { // sanity check: Make sure that the time-to-delay is non-negative: 00403 uSecondsToGo = 0; 00404 } 00405 00406 // Delay this amount of time: 00407 nextTask() = envir().taskScheduler().scheduleDelayedTask(uSecondsToGo, (TaskFunc*)sendNext, this); 00408 } 00409 }
| void MultiFramedRTPSink::sendNext | ( | void * | firstArg | ) | [static, private] |
Definition at line 412 of file MultiFramedRTPSink.cpp.
References buildAndSendPacket(), and False.
Referenced by sendPacketIfNecessary().
00412 { 00413 MultiFramedRTPSink* sink = (MultiFramedRTPSink*)firstArg; 00414 sink->buildAndSendPacket(False); 00415 }
| void MultiFramedRTPSink::afterGettingFrame | ( | void * | clientData, | |
| unsigned | numBytesRead, | |||
| unsigned | numTruncatedBytes, | |||
| struct timeval | presentationTime, | |||
| unsigned | durationInMicroseconds | |||
| ) | [static, private] |
Definition at line 221 of file MultiFramedRTPSink.cpp.
References afterGettingFrame1().
Referenced by packFrame().
00224 { 00225 MultiFramedRTPSink* sink = (MultiFramedRTPSink*)clientData; 00226 sink->afterGettingFrame1(numBytesRead, numTruncatedBytes, 00227 presentationTime, durationInMicroseconds); 00228 }
| void MultiFramedRTPSink::afterGettingFrame1 | ( | unsigned | numBytesRead, | |
| unsigned | numTruncatedBytes, | |||
| struct timeval | presentationTime, | |||
| unsigned | durationInMicroseconds | |||
| ) | [private] |
Definition at line 231 of file MultiFramedRTPSink.cpp.
References allowFragmentationAfterStart(), allowOtherFramesAfterLastFragment(), computeOverflowForNewFrame(), curFragmentationOffset(), OutPacketBuffer::curPacketSize(), OutPacketBuffer::curPtr(), doSpecialFrameHandling(), Medium::envir(), False, fCurFragmentationOffset, fIsFirstPacket, RTPSink::fMostRecentPresentationTime, fNextSendTime, fNumFramesUsedSoFar, fOutBuf, fPreviousFrameEndedFragmentation, frameCanAppearAfterPacketStart(), OutPacketBuffer::increment(), OutPacketBuffer::isPreferredSize(), isTooBigForAPacket(), OutPacketBuffer::maxSize, NULL, packFrame(), sendPacketIfNecessary(), OutPacketBuffer::setOverflowData(), OutPacketBuffer::totalBytesAvailable(), True, and OutPacketBuffer::wouldOverflow().
Referenced by afterGettingFrame(), and packFrame().
00233 { 00234 if (fIsFirstPacket) { 00235 // Record the fact that we're starting to play now: 00236 gettimeofday(&fNextSendTime, NULL); 00237 } 00238 00239 fMostRecentPresentationTime = presentationTime; 00240 if (fInitialPresentationTime.tv_sec == 0 && fInitialPresentationTime.tv_usec == 0) { 00241 fInitialPresentationTime = presentationTime; 00242 } 00243 00244 if (numTruncatedBytes > 0) { 00245 unsigned const bufferSize = fOutBuf->totalBytesAvailable(); 00246 envir() << "MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (" 00247 << bufferSize << "). " 00248 << numTruncatedBytes << " bytes of trailing data was dropped! Correct this by increasing \"OutPacketBuffer::maxSize\" to at least " 00249 << OutPacketBuffer::maxSize + numTruncatedBytes << ", *before* creating this 'RTPSink'. (Current value is " 00250 << OutPacketBuffer::maxSize << ".)\n"; 00251 } 00252 unsigned curFragmentationOffset = fCurFragmentationOffset; 00253 unsigned numFrameBytesToUse = frameSize; 00254 unsigned overflowBytes = 0; 00255 00256 // If we have already packed one or more frames into this packet, 00257 // check whether this new frame is eligible to be packed after them. 00258 // (This is independent of whether the packet has enough room for this 00259 // new frame; that check comes later.) 00260 if (fNumFramesUsedSoFar > 0) { 00261 if ((fPreviousFrameEndedFragmentation 00262 && !allowOtherFramesAfterLastFragment()) 00263 || !frameCanAppearAfterPacketStart(fOutBuf->curPtr(), frameSize)) { 00264 // Save away this frame for next time: 00265 numFrameBytesToUse = 0; 00266 fOutBuf->setOverflowData(fOutBuf->curPacketSize(), frameSize, 00267 presentationTime, durationInMicroseconds); 00268 } 00269 } 00270 fPreviousFrameEndedFragmentation = False; 00271 00272 if (numFrameBytesToUse > 0) { 00273 // Check whether this frame overflows the packet 00274 if (fOutBuf->wouldOverflow(frameSize)) { 00275 // Don't use this frame now; instead, save it as overflow data, and 00276 // send it in the next packet instead. However, if the frame is too 00277 // big to fit in a packet by itself, then we need to fragment it (and 00278 // use some of it in this packet, if the payload format permits this.) 00279 if (isTooBigForAPacket(frameSize) 00280 && (fNumFramesUsedSoFar == 0 || allowFragmentationAfterStart())) { 00281 // We need to fragment this frame, and use some of it now: 00282 overflowBytes = computeOverflowForNewFrame(frameSize); 00283 numFrameBytesToUse -= overflowBytes; 00284 fCurFragmentationOffset += numFrameBytesToUse; 00285 } else { 00286 // We don't use any of this frame now: 00287 overflowBytes = frameSize; 00288 numFrameBytesToUse = 0; 00289 } 00290 fOutBuf->setOverflowData(fOutBuf->curPacketSize() + numFrameBytesToUse, 00291 overflowBytes, presentationTime, durationInMicroseconds); 00292 } else if (fCurFragmentationOffset > 0) { 00293 // This is the last fragment of a frame that was fragmented over 00294 // more than one packet. Do any special handling for this case: 00295 fCurFragmentationOffset = 0; 00296 fPreviousFrameEndedFragmentation = True; 00297 } 00298 } 00299 00300 if (numFrameBytesToUse == 0 && frameSize > 0) { 00301 // Send our packet now, because we have filled it up: 00302 sendPacketIfNecessary(); 00303 } else { 00304 // Use this frame in our outgoing packet: 00305 unsigned char* frameStart = fOutBuf->curPtr(); 00306 fOutBuf->increment(numFrameBytesToUse); 00307 // do this now, in case "doSpecialFrameHandling()" calls "setFramePadding()" to append padding bytes 00308 00309 // Here's where any payload format specific processing gets done: 00310 doSpecialFrameHandling(curFragmentationOffset, frameStart, 00311 numFrameBytesToUse, presentationTime, 00312 overflowBytes); 00313 00314 ++fNumFramesUsedSoFar; 00315 00316 // Update the time at which the next packet should be sent, based 00317 // on the duration of the frame that we just packed into it. 00318 // However, if this frame has overflow data remaining, then don't 00319 // count its duration yet. 00320 if (overflowBytes == 0) { 00321 fNextSendTime.tv_usec += durationInMicroseconds; 00322 fNextSendTime.tv_sec += fNextSendTime.tv_usec/1000000; 00323 fNextSendTime.tv_usec %= 1000000; 00324 } 00325 00326 // Send our packet now if (i) it's already at our preferred size, or 00327 // (ii) (heuristic) another frame of the same size as the one we just 00328 // read would overflow the packet, or 00329 // (iii) it contains the last fragment of a fragmented frame, and we 00330 // don't allow anything else to follow this or 00331 // (iv) one frame per packet is allowed: 00332 if (fOutBuf->isPreferredSize() 00333 || fOutBuf->wouldOverflow(numFrameBytesToUse) 00334 || (fPreviousFrameEndedFragmentation && 00335 !allowOtherFramesAfterLastFragment()) 00336 || !frameCanAppearAfterPacketStart(fOutBuf->curPtr() - frameSize, 00337 frameSize) ) { 00338 // The packet is ready to be sent now 00339 sendPacketIfNecessary(); 00340 } else { 00341 // There's room for more frames; try getting another: 00342 packFrame(); 00343 } 00344 } 00345 }
| Boolean MultiFramedRTPSink::isTooBigForAPacket | ( | unsigned | numBytes | ) | const [private] |
Definition at line 349 of file MultiFramedRTPSink.cpp.
References fOutBuf, frameSpecificHeaderSize(), OutPacketBuffer::isTooBigForAPacket(), rtpHeaderSize, and specialHeaderSize().
Referenced by afterGettingFrame1().
00349 { 00350 // Check whether a 'numBytes'-byte frame - together with a RTP header and 00351 // (possible) special headers - would be too big for an output packet: 00352 // (Later allow for RTP extension header!) ##### 00353 numBytes += rtpHeaderSize + specialHeaderSize() + frameSpecificHeaderSize(); 00354 return fOutBuf->isTooBigForAPacket(numBytes); 00355 }
| void MultiFramedRTPSink::ourHandleClosure | ( | void * | clientData | ) | [static, private] |
Definition at line 417 of file MultiFramedRTPSink.cpp.
References fNoFramesLeft, sendPacketIfNecessary(), and True.
Referenced by packFrame().
00417 { 00418 MultiFramedRTPSink* sink = (MultiFramedRTPSink*)clientData; 00419 // There are no frames left, but we may have a partially built packet 00420 // to send 00421 sink->fNoFramesLeft = True; 00422 sink->sendPacketIfNecessary(); 00423 }
| Boolean RTPSink::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | sinkName, | |||
| RTPSink *& | resultSink | |||
| ) | [static, inherited] |
Definition at line 26 of file RTPSink.cpp.
References env, False, MediaSink::isRTPSink(), MediaSink::lookupByName(), NULL, and True.
00027 { 00028 resultSink = NULL; // unless we succeed 00029 00030 MediaSink* sink; 00031 if (!MediaSink::lookupByName(env, sinkName, sink)) return False; 00032 00033 if (!sink->isRTPSink()) { 00034 env.setResultMsg(sinkName, " is not a RTP sink"); 00035 return False; 00036 } 00037 00038 resultSink = (RTPSink*)sink; 00039 return True; 00040 }
| Boolean MediaSink::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | sinkName, | |||
| MediaSink *& | resultSink | |||
| ) | [static, inherited] |
Definition at line 39 of file MediaSink.cpp.
References env, False, Medium::isSink(), Medium::lookupByName(), NULL, and True.
Referenced by RTPSink::lookupByName().
00040 { 00041 resultSink = NULL; // unless we succeed 00042 00043 Medium* medium; 00044 if (!Medium::lookupByName(env, sinkName, medium)) return False; 00045 00046 if (!medium->isSink()) { 00047 env.setResultMsg(sinkName, " is not a media sink"); 00048 return False; 00049 } 00050 00051 resultSink = (MediaSink*)medium; 00052 return True; 00053 }
| Boolean Medium::lookupByName | ( | UsageEnvironment & | env, | |
| char const * | mediumName, | |||
| Medium *& | resultMedium | |||
| ) | [static, inherited] |
Definition at line 41 of file Media.cpp.
References env, False, MediaLookupTable::lookup(), NULL, MediaLookupTable::ourMedia(), UsageEnvironment::setResultMsg(), and True.
Referenced by ServerMediaSession::lookupByName(), RTSPServer::lookupByName(), RTSPClient::lookupByName(), RTCPInstance::lookupByName(), MediaSource::lookupByName(), MediaSink::lookupByName(), MediaSession::lookupByName(), and DarwinInjector::lookupByName().
00042 { 00043 resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName); 00044 if (resultMedium == NULL) { 00045 env.setResultMsg("Medium ", mediumName, " does not exist"); 00046 return False; 00047 } 00048 00049 return True; 00050 }
| Groupsock const& RTPSink::groupsockBeingUsed | ( | ) | const [inline, inherited] |
Definition at line 39 of file RTPSink.hh.
References RTPSink::fRTPInterface, and RTPInterface::gs().
Referenced by PassiveServerMediaSubsession::getStreamParameters(), PassiveServerMediaSubsession::sdpLines(), and PassiveServerMediaSubsession::startStream().
00039 { return *(fRTPInterface.gs()); }
| Groupsock& RTPSink::groupsockBeingUsed | ( | ) | [inline, inherited] |
Definition at line 40 of file RTPSink.hh.
References RTPSink::fRTPInterface, and RTPInterface::gs().
00040 { return *(fRTPInterface.gs()); }
| unsigned char RTPSink::rtpPayloadType | ( | ) | const [inline, inherited] |
Definition at line 42 of file RTPSink.hh.
References RTPSink::fRTPPayloadType.
Referenced by MPEG4ESVideoRTPSink::auxSDPLine(), H264VideoRTPSink::auxSDPLine(), AMRAudioRTPSink::auxSDPLine(), DVVideoRTPSink::auxSDPLineFromFramer(), RTPSink::rtpmapLine(), PassiveServerMediaSubsession::sdpLines(), OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), SubstreamDescriptor::SubstreamDescriptor(), and VorbisAudioRTPSink::VorbisAudioRTPSink().
00042 { return fRTPPayloadType; }
| unsigned RTPSink::rtpTimestampFrequency | ( | ) | const [inline, inherited] |
Definition at line 43 of file RTPSink.hh.
References RTPSink::fTimestampFrequency.
Referenced by RTPSink::rtpmapLine(), and SubstreamDescriptor::SubstreamDescriptor().
00043 { return fTimestampFrequency; }
| void RTPSink::setRTPTimestampFrequency | ( | unsigned | freq | ) | [inline, inherited] |
Definition at line 44 of file RTPSink.hh.
References RTPSink::fTimestampFrequency.
00044 { 00045 fTimestampFrequency = freq; 00046 }
| char const* RTPSink::rtpPayloadFormatName | ( | ) | const [inline, inherited] |
Definition at line 47 of file RTPSink.hh.
References RTPSink::fRTPPayloadFormatName.
Referenced by RTPSink::rtpmapLine(), and SubstreamDescriptor::SubstreamDescriptor().
00047 {return fRTPPayloadFormatName;}
| unsigned RTPSink::numChannels | ( | ) | const [inline, inherited] |
Definition at line 49 of file RTPSink.hh.
References RTPSink::fNumChannels.
Referenced by RTPSink::rtpmapLine(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), and SubstreamDescriptor::SubstreamDescriptor().
00049 { return fNumChannels; }
| char const * RTPSink::sdpMediaType | ( | ) | const [virtual, inherited] |
Reimplemented in AudioRTPSink, MPEG4GenericRTPSink, SimpleRTPSink, TextRTPSink, and VideoRTPSink.
Definition at line 125 of file RTPSink.cpp.
Referenced by PassiveServerMediaSubsession::sdpLines(), OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and SubstreamDescriptor::SubstreamDescriptor().
00125 { 00126 return "data"; 00127 // default SDP media (m=) type, unless redefined by subclasses 00128 }
| char * RTPSink::rtpmapLine | ( | ) | const [virtual, inherited] |
Definition at line 130 of file RTPSink.cpp.
References RTPSink::numChannels(), RTPSink::rtpPayloadFormatName(), RTPSink::rtpPayloadType(), RTPSink::rtpTimestampFrequency(), and strDup().
Referenced by PassiveServerMediaSubsession::sdpLines(), and OnDemandServerMediaSubsession::setSDPLinesFromRTPSink().
00130 { 00131 if (rtpPayloadType() >= 96) { // the payload format type is dynamic 00132 char* encodingParamsPart; 00133 if (numChannels() != 1) { 00134 encodingParamsPart = new char[1 + 20 /* max int len */]; 00135 sprintf(encodingParamsPart, "/%d", numChannels()); 00136 } else { 00137 encodingParamsPart = strDup(""); 00138 } 00139 char const* const rtpmapFmt = "a=rtpmap:%d %s/%d%s\r\n"; 00140 unsigned rtpmapFmtSize = strlen(rtpmapFmt) 00141 + 3 /* max char len */ + strlen(rtpPayloadFormatName()) 00142 + 20 /* max int len */ + strlen(encodingParamsPart); 00143 char* rtpmapLine = new char[rtpmapFmtSize]; 00144 sprintf(rtpmapLine, rtpmapFmt, 00145 rtpPayloadType(), rtpPayloadFormatName(), 00146 rtpTimestampFrequency(), encodingParamsPart); 00147 delete[] encodingParamsPart; 00148 00149 return rtpmapLine; 00150 } else { 00151 // The payload format is staic, so there's no "a=rtpmap:" line: 00152 return strDup(""); 00153 } 00154 }
| char const * RTPSink::auxSDPLine | ( | ) | [virtual, inherited] |
Reimplemented in AMRAudioRTPSink, DVVideoRTPSink, H264VideoRTPSink, MPEG4ESVideoRTPSink, MPEG4GenericRTPSink, MPEG4LATMAudioRTPSink, and VorbisAudioRTPSink.
Definition at line 156 of file RTPSink.cpp.
References NULL.
Referenced by awaitConfigInfo(), checkForAuxSDPLine(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), OnDemandServerMediaSubsession::getAuxSDPLine(), PassiveServerMediaSubsession::sdpLines(), and SubstreamDescriptor::SubstreamDescriptor().
00156 { 00157 return NULL; // by default 00158 }
| u_int16_t RTPSink::currentSeqNo | ( | ) | const [inline, inherited] |
Definition at line 56 of file RTPSink.hh.
References RTPSink::fSeqNo.
Referenced by PassiveServerMediaSubsession::startStream(), and OnDemandServerMediaSubsession::startStream().
00056 { return fSeqNo; }
| u_int32_t RTPSink::presetNextTimestamp | ( | ) | [inherited] |
Definition at line 97 of file RTPSink.cpp.
References RTPSink::convertToRTPTimestamp(), RTPSink::fNextTimestampHasBeenPreset, RTPSink::fTimestampBase, NULL, and True.
Referenced by PassiveServerMediaSubsession::startStream(), and OnDemandServerMediaSubsession::startStream().
00097 { 00098 struct timeval timeNow; 00099 gettimeofday(&timeNow, NULL); 00100 00101 u_int32_t tsNow = convertToRTPTimestamp(timeNow); 00102 fTimestampBase = tsNow; 00103 fNextTimestampHasBeenPreset = True; 00104 00105 return tsNow; 00106 }
| RTPTransmissionStatsDB& RTPSink::transmissionStatsDB | ( | ) | const [inline, inherited] |
Definition at line 61 of file RTPSink.hh.
References RTPSink::fTransmissionStatsDB.
Referenced by RTCPInstance::incomingReportHandler1(), and RTCPInstance::removeSSRC().
00061 { 00062 return *fTransmissionStatsDB; 00063 }
| Boolean RTPSink::nextTimestampHasBeenPreset | ( | ) | const [inline, inherited] |
Definition at line 65 of file RTPSink.hh.
References RTPSink::fNextTimestampHasBeenPreset.
Referenced by RTCPInstance::addReport().
00065 { return fNextTimestampHasBeenPreset; }
| Boolean& RTPSink::enableRTCPReports | ( | ) | [inline, inherited] |
Definition at line 66 of file RTPSink.hh.
References RTPSink::fEnableRTCPReports.
Referenced by RTCPInstance::addReport(), ProxyServerMediaSubsession::createNewRTPSink(), and PresentationTimeSessionNormalizer::normalizePresentationTime().
00066 { return fEnableRTCPReports; }
| void RTPSink::getTotalBitrate | ( | unsigned & | outNumBytes, | |
| double & | outElapsedTime | |||
| ) | [inherited] |
Definition at line 108 of file RTPSink.cpp.
References RTPSink::fTotalOctetCount, and NULL.
00108 { 00109 struct timeval timeNow; 00110 gettimeofday(&timeNow, NULL); 00111 00112 outNumBytes = fTotalOctetCount; 00113 outElapsedTime = (double)(timeNow.tv_sec-fTotalOctetCountStartTime.tv_sec) 00114 + (timeNow.tv_usec-fTotalOctetCountStartTime.tv_usec)/1000000.0; 00115 00116 fTotalOctetCount = 0; 00117 fTotalOctetCountStartTime = timeNow; 00118 }
| struct timeval const& RTPSink::creationTime | ( | ) | const [inline, read, inherited] |
Definition at line 72 of file RTPSink.hh.
References RTPSink::fCreationTime.
Referenced by PassiveServerMediaSubsession::getCurrentNPT().
00072 { return fCreationTime; }
| struct timeval const& RTPSink::initialPresentationTime | ( | ) | const [inline, read, inherited] |
Definition at line 73 of file RTPSink.hh.
Referenced by OnDemandServerMediaSubsession::getCurrentNPT().
| struct timeval const& RTPSink::mostRecentPresentationTime | ( | ) | const [inline, read, inherited] |
Definition at line 74 of file RTPSink.hh.
References RTPSink::fMostRecentPresentationTime.
Referenced by OnDemandServerMediaSubsession::getCurrentNPT().
00074 { return fMostRecentPresentationTime; }
| void RTPSink::resetPresentationTimes | ( | ) | [inherited] |
Definition at line 120 of file RTPSink.cpp.
References RTPSink::fMostRecentPresentationTime.
Referenced by OnDemandServerMediaSubsession::nullSeekStream(), and OnDemandServerMediaSubsession::seekStream().
00120 { 00121 fInitialPresentationTime.tv_sec = fMostRecentPresentationTime.tv_sec = 0; 00122 fInitialPresentationTime.tv_usec = fMostRecentPresentationTime.tv_usec = 0; 00123 }
| void RTPSink::setStreamSocket | ( | int | sockNum, | |
| unsigned char | streamChannelId | |||
| ) | [inline, inherited] |
Definition at line 78 of file RTPSink.hh.
References RTPSink::fRTPInterface, and RTPInterface::setStreamSocket().
Referenced by DarwinInjector::setDestination().
00078 { 00079 fRTPInterface.setStreamSocket(sockNum, streamChannelId); 00080 }
| void RTPSink::addStreamSocket | ( | int | sockNum, | |
| unsigned char | streamChannelId | |||
| ) | [inline, inherited] |
Definition at line 81 of file RTPSink.hh.
References RTPInterface::addStreamSocket(), and RTPSink::fRTPInterface.
Referenced by StreamState::startPlaying().
00081 { 00082 fRTPInterface.addStreamSocket(sockNum, streamChannelId); 00083 }
| void RTPSink::removeStreamSocket | ( | int | sockNum, | |
| unsigned char | streamChannelId | |||
| ) | [inline, inherited] |
Definition at line 84 of file RTPSink.hh.
References RTPSink::fRTPInterface, and RTPInterface::removeStreamSocket().
Referenced by StreamState::endPlaying().
00084 { 00085 fRTPInterface.removeStreamSocket(sockNum, streamChannelId); 00086 }
| void RTPSink::setServerRequestAlternativeByteHandler | ( | int | socketNum, | |
| ServerRequestAlternativeByteHandler * | handler, | |||
| void * | clientData | |||
| ) | [inline, inherited] |
Definition at line 87 of file RTPSink.hh.
References RTPSink::fRTPInterface, and RTPInterface::setServerRequestAlternativeByteHandler().
Referenced by StreamState::startPlaying().
00087 { 00088 fRTPInterface.setServerRequestAlternativeByteHandler(socketNum, handler, clientData); 00089 }
| u_int32_t RTPSink::SSRC | ( | ) | const [inline, protected, inherited] |
Definition at line 104 of file RTPSink.hh.
References RTPSink::fSSRC.
Referenced by RTCPInstance::addBYE(), RTCPInstance::addSDES(), RTCPInstance::addSR(), buildAndSendPacket(), and RTCPInstance::incomingReportHandler1().
00104 {return fSSRC;}
| u_int32_t RTPSink::convertToRTPTimestamp | ( | struct timeval | tv | ) | [protected, inherited] |
Definition at line 74 of file RTPSink.cpp.
References False, RTPSink::fNextTimestampHasBeenPreset, RTPSink::fTimestampBase, and RTPSink::fTimestampFrequency.
Referenced by RTCPInstance::addSR(), RTPSink::presetNextTimestamp(), and setTimestamp().
00074 { 00075 // Begin by converting from "struct timeval" units to RTP timestamp units: 00076 u_int32_t timestampIncrement = (fTimestampFrequency*tv.tv_sec); 00077 timestampIncrement += (u_int32_t)(fTimestampFrequency*(tv.tv_usec/1000000.0) + 0.5); // note: rounding 00078 00079 // Then add this to our 'timestamp base': 00080 if (fNextTimestampHasBeenPreset) { 00081 // Make the returned timestamp the same as the current "fTimestampBase", 00082 // so that timestamps begin with the value that was previously preset: 00083 fTimestampBase -= timestampIncrement; 00084 fNextTimestampHasBeenPreset = False; 00085 } 00086 00087 u_int32_t const rtpTimestamp = fTimestampBase + timestampIncrement; 00088 #ifdef DEBUG_TIMESTAMPS 00089 fprintf(stderr, "fTimestampBase: 0x%08x, tv: %lu.%06ld\n\t=> RTP timestamp: 0x%08x\n", 00090 fTimestampBase, tv.tv_sec, tv.tv_usec, rtpTimestamp); 00091 fflush(stderr); 00092 #endif 00093 00094 return rtpTimestamp; 00095 }
| unsigned RTPSink::packetCount | ( | ) | const [inline, protected, inherited] |
Definition at line 107 of file RTPSink.hh.
References RTPSink::fPacketCount.
Referenced by RTCPInstance::addSR(), RTPTransmissionStats::noteIncomingRR(), and RTPTransmissionStats::RTPTransmissionStats().
00107 {return fPacketCount;}
| unsigned RTPSink::octetCount | ( | ) | const [inline, protected, inherited] |
Definition at line 108 of file RTPSink.hh.
References RTPSink::fOctetCount.
Referenced by RTCPInstance::addSR(), RTPTransmissionStats::noteIncomingRR(), and RTPTransmissionStats::RTPTransmissionStats().
00108 {return fOctetCount;}
| Boolean MediaSink::startPlaying | ( | MediaSource & | source, | |
| afterPlayingFunc * | afterFunc, | |||
| void * | afterClientData | |||
| ) | [inherited] |
Definition at line 60 of file MediaSink.cpp.
References MediaSink::continuePlaying(), Medium::envir(), MediaSink::fAfterClientData, MediaSink::fAfterFunc, False, MediaSink::fSource, NULL, UsageEnvironment::setResultMsg(), MediaSink::source(), and MediaSink::sourceIsCompatibleWithUs().
Referenced by MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), H264VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), main(), play(), setupStreams(), StreamState::startPlaying(), startReplicaFileSink(), and startReplicaUDPSink().
00062 { 00063 // Make sure we're not already being played: 00064 if (fSource != NULL) { 00065 envir().setResultMsg("This sink is already being played"); 00066 return False; 00067 } 00068 00069 // Make sure our source is compatible: 00070 if (!sourceIsCompatibleWithUs(source)) { 00071 envir().setResultMsg("MediaSink::startPlaying(): source is not compatible!"); 00072 return False; 00073 } 00074 fSource = (FramedSource*)&source; 00075 00076 fAfterFunc = afterFunc; 00077 fAfterClientData = afterClientData; 00078 return continuePlaying(); 00079 }
| FramedSource* MediaSink::source | ( | ) | const [inline, inherited] |
Definition at line 42 of file MediaSink.hh.
References MediaSink::fSource.
Referenced by AMRAudioFileSink::afterGettingFrame(), JPEGVideoRTPSink::doSpecialFrameHandling(), MPEG4ESVideoRTPSink::sourceIsCompatibleWithUs(), MPEG1or2VideoRTPSink::sourceIsCompatibleWithUs(), MediaSink::sourceIsCompatibleWithUs(), JPEGVideoRTPSink::sourceIsCompatibleWithUs(), H264VideoRTPSink::sourceIsCompatibleWithUs(), DVVideoRTPSink::sourceIsCompatibleWithUs(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), AMRAudioFileSink::sourceIsCompatibleWithUs(), JPEGVideoRTPSink::specialHeaderSize(), and MediaSink::startPlaying().
00042 {return fSource;}
| Boolean MediaSink::sourceIsCompatibleWithUs | ( | MediaSource & | source | ) | [protected, virtual, inherited] |
Reimplemented in AMRAudioFileSink, AMRAudioRTPSink, DVVideoRTPSink, H264VideoRTPSink, JPEGVideoRTPSink, MPEG1or2VideoRTPSink, and MPEG4ESVideoRTPSink.
Definition at line 55 of file MediaSink.cpp.
References FramedSource::isFramedSource(), and MediaSink::source().
Referenced by MediaSink::startPlaying().
00055 { 00056 // We currently support only framed sources. 00057 return source.isFramedSource(); 00058 }
| void MediaSink::onSourceClosure | ( | void * | clientData | ) | [static, protected, inherited] |
Definition at line 92 of file MediaSink.cpp.
References MediaSink::fAfterClientData, MediaSink::fAfterFunc, MediaSink::fSource, and NULL.
Referenced by FileSink::afterGettingFrame(), MFSD_DummySink::afterGettingFrame1(), DummySink::continuePlaying(), MFSD_DummySink::continuePlaying(), FileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), TCPStreamSink::processBuffer(), and sendPacketIfNecessary().
00092 { 00093 MediaSink* sink = (MediaSink*)clientData; 00094 sink->fSource = NULL; // indicates that we can be played again 00095 if (sink->fAfterFunc != NULL) { 00096 (*(sink->fAfterFunc))(sink->fAfterClientData); 00097 } 00098 }
| 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(), 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(), 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(), 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::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(), sendPacketIfNecessary(), and MediaSink::stopPlaying().
00078 { 00079 return fNextTask; 00080 }
| void sendNext | ( | void * | ) | [friend] |
friend class RTCPInstance [friend, inherited] |
Definition at line 102 of file RTPSink.hh.
friend class RTPTransmissionStats [friend, inherited] |
Definition at line 103 of file RTPSink.hh.
friend class MediaLookupTable [friend, inherited] |
OutPacketBuffer* MultiFramedRTPSink::fOutBuf [private] |
Definition at line 119 of file MultiFramedRTPSink.hh.
Referenced by afterGettingFrame1(), buildAndSendPacket(), computeOverflowForNewFrame(), isTooBigForAPacket(), packFrame(), sendPacketIfNecessary(), setFramePadding(), setFrameSpecificHeaderBytes(), setFrameSpecificHeaderWord(), setMarkerBit(), setPacketSizes(), setSpecialHeaderBytes(), setSpecialHeaderWord(), setTimestamp(), stopPlaying(), and ~MultiFramedRTPSink().
Boolean MultiFramedRTPSink::fNoFramesLeft [private] |
Definition at line 121 of file MultiFramedRTPSink.hh.
Referenced by buildAndSendPacket(), ourHandleClosure(), and sendPacketIfNecessary().
unsigned MultiFramedRTPSink::fNumFramesUsedSoFar [private] |
Definition at line 122 of file MultiFramedRTPSink.hh.
Referenced by afterGettingFrame1(), buildAndSendPacket(), isFirstFrameInPacket(), numFramesUsedSoFar(), and sendPacketIfNecessary().
unsigned MultiFramedRTPSink::fCurFragmentationOffset [private] |
Definition at line 123 of file MultiFramedRTPSink.hh.
Referenced by afterGettingFrame1(), and curFragmentationOffset().
Boolean MultiFramedRTPSink::fIsFirstPacket [private] |
Definition at line 126 of file MultiFramedRTPSink.hh.
Referenced by afterGettingFrame1(), buildAndSendPacket(), and isFirstPacket().
struct timeval MultiFramedRTPSink::fNextSendTime [read, private] |
Definition at line 127 of file MultiFramedRTPSink.hh.
Referenced by afterGettingFrame1(), and sendPacketIfNecessary().
unsigned MultiFramedRTPSink::fTimestampPosition [private] |
Definition at line 128 of file MultiFramedRTPSink.hh.
Referenced by buildAndSendPacket(), and setTimestamp().
unsigned MultiFramedRTPSink::fSpecialHeaderPosition [private] |
Definition at line 129 of file MultiFramedRTPSink.hh.
Referenced by buildAndSendPacket(), setSpecialHeaderBytes(), and setSpecialHeaderWord().
unsigned MultiFramedRTPSink::fSpecialHeaderSize [private] |
Definition at line 130 of file MultiFramedRTPSink.hh.
Referenced by buildAndSendPacket(), and sendPacketIfNecessary().
unsigned MultiFramedRTPSink::fCurFrameSpecificHeaderPosition [private] |
Definition at line 131 of file MultiFramedRTPSink.hh.
Referenced by packFrame(), setFrameSpecificHeaderBytes(), and setFrameSpecificHeaderWord().
unsigned MultiFramedRTPSink::fCurFrameSpecificHeaderSize [private] |
unsigned MultiFramedRTPSink::fTotalFrameSpecificHeaderSizes [private] |
Definition at line 133 of file MultiFramedRTPSink.hh.
Referenced by buildAndSendPacket(), packFrame(), and sendPacketIfNecessary().
unsigned MultiFramedRTPSink::fOurMaxPacketSize [private] |
Definition at line 134 of file MultiFramedRTPSink.hh.
Referenced by ourMaxPacketSize(), and setPacketSizes().
Definition at line 136 of file MultiFramedRTPSink.hh.
Referenced by sendPacketIfNecessary(), and setOnSendErrorFunc().
void* MultiFramedRTPSink::fOnSendErrorData [private] |
Definition at line 137 of file MultiFramedRTPSink.hh.
Referenced by sendPacketIfNecessary(), and setOnSendErrorFunc().
RTPInterface RTPSink::fRTPInterface [protected, inherited] |
Definition at line 111 of file RTPSink.hh.
Referenced by RTPSink::addStreamSocket(), RTPSink::groupsockBeingUsed(), RTPSink::removeStreamSocket(), sendPacketIfNecessary(), RTPSink::setServerRequestAlternativeByteHandler(), and RTPSink::setStreamSocket().
unsigned char RTPSink::fRTPPayloadType [protected, inherited] |
Definition at line 112 of file RTPSink.hh.
Referenced by buildAndSendPacket(), and RTPSink::rtpPayloadType().
unsigned RTPSink::fPacketCount [protected, inherited] |
Definition at line 113 of file RTPSink.hh.
Referenced by RTPSink::packetCount(), and sendPacketIfNecessary().
unsigned RTPSink::fOctetCount [protected, inherited] |
Definition at line 113 of file RTPSink.hh.
Referenced by RTPSink::octetCount(), and sendPacketIfNecessary().
unsigned RTPSink::fTotalOctetCount [protected, inherited] |
Definition at line 113 of file RTPSink.hh.
Referenced by RTPSink::getTotalBitrate(), and sendPacketIfNecessary().
struct timeval fTotalOctetCountStartTime fInitialPresentationTime RTPSink::fMostRecentPresentationTime [read, protected, inherited] |
Definition at line 114 of file RTPSink.hh.
Referenced by afterGettingFrame1(), RTPSink::mostRecentPresentationTime(), and RTPSink::resetPresentationTimes().
u_int32_t RTPSink::fCurrentTimestamp [protected, inherited] |
u_int16_t RTPSink::fSeqNo [protected, inherited] |
Definition at line 116 of file RTPSink.hh.
Referenced by buildAndSendPacket(), RTPSink::currentSeqNo(), and sendPacketIfNecessary().
FramedSource* MediaSink::fSource [protected, inherited] |
Definition at line 57 of file MediaSink.hh.
Referenced by FileSink::afterGettingFrame(), AMRAudioFileSink::afterGettingFrame(), MPEG4ESVideoRTPSink::auxSDPLine(), DVVideoRTPSink::auxSDPLine(), DummySink::continuePlaying(), TCPStreamSink::continuePlaying(), T140TextRTPSink::continuePlaying(), MFSD_DummySink::continuePlaying(), H264VideoRTPSink::continuePlaying(), FileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), MediaSink::onSourceClosure(), packFrame(), TCPStreamSink::processBuffer(), MediaSink::source(), JPEGVideoRTPSink::specialHeaderSize(), MediaSink::startPlaying(), MediaSink::stopPlaying(), H264VideoRTPSink::~H264VideoRTPSink(), and T140TextRTPSink::~T140TextRTPSink().
1.5.2