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


Public Types | |
| typedef void( | afterPlayingFunc )(void *clientData) |
Public Member Functions | |
| void | setPacketSizes (unsigned preferredPacketSize, unsigned maxPacketSize) |
| u_int32_t | SSRC () const |
| u_int32_t | convertToRTPTimestamp (struct timeval tv) |
| unsigned | packetCount () const |
| unsigned | octetCount () const |
| 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 * | rtpmapLine () const |
| virtual char const * | auxSDPLine () |
| u_int16_t | currentSeqNo () const |
| u_int32_t | presetNextTimestamp () |
| RTPTransmissionStatsDB & | transmissionStatsDB () const |
| Boolean | nextTimestampHasBeenPreset () const |
| void | setStreamSocket (int sockNum, unsigned char streamChannelId) |
| void | addStreamSocket (int sockNum, unsigned char streamChannelId) |
| void | removeStreamSocket (int sockNum, unsigned char streamChannelId) |
| void | getTotalBitrate (unsigned &outNumBytes, double &outElapsedTime) |
| 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 MPEG1or2VideoRTPSink * | createNew (UsageEnvironment &env, Groupsock *RTPgs) |
| 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 | |
| MPEG1or2VideoRTPSink (UsageEnvironment &env, Groupsock *RTPgs) | |
| virtual | ~MPEG1or2VideoRTPSink () |
| virtual Boolean | allowOtherFramesAfterLastFragment () const |
| virtual unsigned | frameSpecificHeaderSize () const |
| Boolean | isFirstPacket () const |
| Boolean | isFirstFrameInPacket () const |
| Boolean | curFragmentationOffset () const |
| void | setMarkerBit () |
| void | setTimestamp (struct timeval timestamp) |
| 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 () |
| virtual void | stopPlaying () |
| 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 |
| u_int32_t | fCurrentTimestamp |
| u_int16_t | fSeqNo |
| FramedSource * | fSource |
Private Member Functions | |
| virtual Boolean | sourceIsCompatibleWithUs (MediaSource &source) |
| virtual void | doSpecialFrameHandling (unsigned fragmentationOffset, unsigned char *frameStart, unsigned numBytesInFrame, struct timeval frameTimestamp, unsigned numRemainingBytes) |
| virtual Boolean | allowFragmentationAfterStart () const |
| virtual Boolean | frameCanAppearAfterPacketStart (unsigned char const *frameStart, unsigned numBytesInFrame) const |
| virtual unsigned | specialHeaderSize () const |
Private Attributes | |
| struct { | |
| unsigned temporal_reference | |
| unsigned char picture_coding_type | |
| unsigned char vector_code_bits | |
| } | fPictureState |
| Boolean | fPreviousFrameWasSlice |
| Boolean | fSequenceHeaderPresent |
| Boolean | fPacketBeginsSlice |
| Boolean | fPacketEndsSlice |
Definition at line 28 of file MPEG1or2VideoRTPSink.hh.
typedef void( MediaSink::afterPlayingFunc)(void *clientData) [inherited] |
Definition at line 33 of file MediaSink.hh.
| MPEG1or2VideoRTPSink::MPEG1or2VideoRTPSink | ( | UsageEnvironment & | env, | |
| Groupsock * | RTPgs | |||
| ) | [protected] |
Definition at line 24 of file MPEG1or2VideoRTPSink.cpp.
References fPictureState.
Referenced by createNew().
00025 : VideoRTPSink(env, RTPgs, 32, 90000, "MPV") { 00026 fPictureState.temporal_reference = 0; 00027 fPictureState.picture_coding_type = fPictureState.vector_code_bits = 0; 00028 }
| MPEG1or2VideoRTPSink::~MPEG1or2VideoRTPSink | ( | ) | [protected, virtual] |
| MPEG1or2VideoRTPSink * MPEG1or2VideoRTPSink::createNew | ( | UsageEnvironment & | env, | |
| Groupsock * | RTPgs | |||
| ) | [static] |
Definition at line 34 of file MPEG1or2VideoRTPSink.cpp.
References env, and MPEG1or2VideoRTPSink().
Referenced by MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), and main().
00034 { 00035 return new MPEG1or2VideoRTPSink(env, RTPgs); 00036 }
| Boolean MPEG1or2VideoRTPSink::sourceIsCompatibleWithUs | ( | MediaSource & | source | ) | [private, virtual] |
Reimplemented from MediaSink.
Definition at line 38 of file MPEG1or2VideoRTPSink.cpp.
References MediaSource::isMPEG1or2VideoStreamFramer(), and MediaSink::source().
00038 { 00039 // Our source must be an appropriate framer: 00040 return source.isMPEG1or2VideoStreamFramer(); 00041 }
| void MPEG1or2VideoRTPSink::doSpecialFrameHandling | ( | unsigned | fragmentationOffset, | |
| unsigned char * | frameStart, | |||
| unsigned | numBytesInFrame, | |||
| struct timeval | frameTimestamp, | |||
| unsigned | numRemainingBytes | |||
| ) | [private, virtual] |
Reimplemented from MultiFramedRTPSink.
Definition at line 68 of file MPEG1or2VideoRTPSink.cpp.
References Medium::envir(), False, fPacketBeginsSlice, fPacketEndsSlice, fPictureState, fPreviousFrameWasSlice, fSequenceHeaderPresent, MediaSink::fSource, MultiFramedRTPSink::isFirstFrameInPacket(), NULL, PICTURE_START_CODE, MPEGVideoStreamFramer::pictureEndMarker(), MultiFramedRTPSink::setMarkerBit(), MultiFramedRTPSink::setSpecialHeaderWord(), MultiFramedRTPSink::setTimestamp(), True, and VIDEO_SEQUENCE_HEADER_START_CODE.
00072 { 00073 Boolean thisFrameIsASlice = False; // until we learn otherwise 00074 if (isFirstFrameInPacket()) { 00075 fSequenceHeaderPresent = fPacketBeginsSlice = fPacketEndsSlice = False; 00076 } 00077 00078 if (fragmentationOffset == 0) { 00079 // Begin by inspecting the 4-byte code at the start of the frame: 00080 if (numBytesInFrame < 4) return; // shouldn't happen 00081 unsigned startCode = (frameStart[0]<<24) | (frameStart[1]<<16) 00082 | (frameStart[2]<<8) | frameStart[3]; 00083 00084 if (startCode == VIDEO_SEQUENCE_HEADER_START_CODE) { 00085 // This is a video sequence header 00086 fSequenceHeaderPresent = True; 00087 } else if (startCode == PICTURE_START_CODE) { 00088 // This is a picture header 00089 00090 // Record the parameters of this picture: 00091 if (numBytesInFrame < 8) return; // shouldn't happen 00092 unsigned next4Bytes = (frameStart[4]<<24) | (frameStart[5]<<16) 00093 | (frameStart[6]<<8) | frameStart[7]; 00094 unsigned char byte8 = numBytesInFrame == 8 ? 0 : frameStart[8]; 00095 00096 fPictureState.temporal_reference = (next4Bytes&0xFFC00000)>>(32-10); 00097 fPictureState.picture_coding_type = (next4Bytes&0x00380000)>>(32-(10+3)); 00098 00099 unsigned char FBV, BFC, FFV, FFC; 00100 FBV = BFC = FFV = FFC = 0; 00101 switch (fPictureState.picture_coding_type) { 00102 case 3: 00103 FBV = (byte8&0x40)>>6; 00104 BFC = (byte8&0x38)>>3; 00105 // fall through to: 00106 case 2: 00107 FFV = (next4Bytes&0x00000004)>>2; 00108 FFC = ((next4Bytes&0x00000003)<<1) | ((byte8&0x80)>>7); 00109 } 00110 00111 fPictureState.vector_code_bits = (FBV<<7) | (BFC<<4) | (FFV<<3) | FFC; 00112 } else if ((startCode&0xFFFFFF00) == 0x00000100) { 00113 unsigned char lastCodeByte = startCode&0xFF; 00114 00115 if (lastCodeByte <= 0xAF) { 00116 // This is (the start of) a slice 00117 thisFrameIsASlice = True; 00118 } else { 00119 // This is probably a GOP header; we don't do anything with this 00120 } 00121 } else { 00122 // The first 4 bytes aren't a code that we recognize. 00123 envir() << "Warning: MPEG1or2VideoRTPSink::doSpecialFrameHandling saw strange first 4 bytes " 00124 << (void*)startCode << ", but we're not a fragment\n"; 00125 } 00126 } else { 00127 // We're a fragment (other than the first) of a slice. 00128 thisFrameIsASlice = True; 00129 } 00130 00131 if (thisFrameIsASlice) { 00132 // This packet begins a slice iff there's no fragmentation offset: 00133 fPacketBeginsSlice = (fragmentationOffset == 0); 00134 00135 // This packet also ends a slice iff there are no fragments remaining: 00136 fPacketEndsSlice = (numRemainingBytes == 0); 00137 } 00138 00139 // Set the video-specific header based on the parameters that we've seen. 00140 // Note that this may get done more than once, if several frames appear 00141 // in the packet. That's OK, because this situation happens infrequently, 00142 // and we want the video-specific header to reflect the most up-to-date 00143 // information (in particular, from a Picture Header) anyway. 00144 unsigned videoSpecificHeader = 00145 // T == 0 00146 (fPictureState.temporal_reference<<16) | 00147 // AN == N == 0 00148 (fSequenceHeaderPresent<<13) | 00149 (fPacketBeginsSlice<<12) | 00150 (fPacketEndsSlice<<11) | 00151 (fPictureState.picture_coding_type<<8) | 00152 fPictureState.vector_code_bits; 00153 setSpecialHeaderWord(videoSpecificHeader); 00154 00155 // Also set the RTP timestamp. (As above, we do this for each frame 00156 // in the packet.) 00157 setTimestamp(frameTimestamp); 00158 00159 // Set the RTP 'M' (marker) bit iff this frame ends (i.e., is the last 00160 // slice of) a picture (and there are no fragments remaining). 00161 // This relies on the source being a "MPEG1or2VideoStreamFramer". 00162 MPEG1or2VideoStreamFramer* framerSource = (MPEG1or2VideoStreamFramer*)fSource; 00163 if (framerSource != NULL && framerSource->pictureEndMarker() 00164 && numRemainingBytes == 0) { 00165 setMarkerBit(); 00166 framerSource->pictureEndMarker() = False; 00167 } 00168 00169 fPreviousFrameWasSlice = thisFrameIsASlice; 00170 }
| Boolean MPEG1or2VideoRTPSink::allowFragmentationAfterStart | ( | ) | const [private, virtual] |
Reimplemented from MultiFramedRTPSink.
Definition at line 43 of file MPEG1or2VideoRTPSink.cpp.
References True.
00043 { 00044 return True; 00045 }
| Boolean MPEG1or2VideoRTPSink::frameCanAppearAfterPacketStart | ( | unsigned char const * | frameStart, | |
| unsigned | numBytesInFrame | |||
| ) | const [private, virtual] |
Reimplemented from MultiFramedRTPSink.
Definition at line 48 of file MPEG1or2VideoRTPSink.cpp.
References fPreviousFrameWasSlice, and True.
00049 { 00050 // A 'frame' (which in this context can mean a header or a slice as well as a 00051 // complete picture) can appear at other than the first position in a packet 00052 // in all situations, EXCEPT when it follows the end of (i.e., the last slice 00053 // of) a picture. I.e., the headers at the beginning of a picture must 00054 // appear at the start of a RTP packet. 00055 if (!fPreviousFrameWasSlice) return True; 00056 00057 // A slice is already packed into this packet. We allow this new 'frame' 00058 // to be packed after it, provided that it is also a slice: 00059 return numBytesInFrame >= 4 00060 && frameStart[0] == 0 && frameStart[1] == 0 && frameStart[2] == 1 00061 && frameStart[3] >= 1 && frameStart[3] <= 0xAF; 00062 }
| unsigned MPEG1or2VideoRTPSink::specialHeaderSize | ( | ) | const [private, virtual] |
| void MultiFramedRTPSink::setPacketSizes | ( | unsigned | preferredPacketSize, | |
| unsigned | maxPacketSize | |||
| ) | [inherited] |
Definition at line 27 of file MultiFramedRTPSink.cpp.
References MultiFramedRTPSink::fOurMaxPacketSize, and MultiFramedRTPSink::fOutBuf.
Referenced by MultiFramedRTPSink::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 }
| Boolean MultiFramedRTPSink::allowOtherFramesAfterLastFragment | ( | ) | const [protected, virtual, inherited] |
Definition at line 72 of file MultiFramedRTPSink.cpp.
References False.
Referenced by MultiFramedRTPSink::afterGettingFrame1().
00072 { 00073 return False; // by default 00074 }
| unsigned MultiFramedRTPSink::frameSpecificHeaderSize | ( | ) | const [protected, virtual, inherited] |
Definition at line 87 of file MultiFramedRTPSink.cpp.
Referenced by MultiFramedRTPSink::isTooBigForAPacket(), MultiFramedRTPSink::packFrame(), and MultiFramedRTPSink::sendPacketIfNecessary().
| Boolean MultiFramedRTPSink::isFirstPacket | ( | ) | const [inline, protected, inherited] |
Definition at line 65 of file MultiFramedRTPSink.hh.
References MultiFramedRTPSink::fIsFirstPacket.
Referenced by MPEG1or2AudioRTPSink::doSpecialFrameHandling(), and AMRAudioRTPSink::doSpecialFrameHandling().
00065 { return fIsFirstPacket; }
| Boolean MultiFramedRTPSink::isFirstFrameInPacket | ( | ) | const [inline, protected, inherited] |
Definition at line 66 of file MultiFramedRTPSink.hh.
References MultiFramedRTPSink::fNumFramesUsedSoFar.
Referenced by MultiFramedRTPSink::doSpecialFrameHandling(), doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), and AMRAudioRTPSink::doSpecialFrameHandling().
00066 { return fNumFramesUsedSoFar == 0; }
| Boolean MultiFramedRTPSink::curFragmentationOffset | ( | ) | const [inline, protected, inherited] |
Definition at line 67 of file MultiFramedRTPSink.hh.
References MultiFramedRTPSink::fCurFragmentationOffset.
Referenced by MultiFramedRTPSink::afterGettingFrame1(), MP3ADURTPSink::specialHeaderSize(), JPEGVideoRTPSink::specialHeaderSize(), and H263plusVideoRTPSink::specialHeaderSize().
00067 { return fCurFragmentationOffset; }
| void MultiFramedRTPSink::setMarkerBit | ( | ) | [protected, inherited] |
Definition at line 92 of file MultiFramedRTPSink.cpp.
References OutPacketBuffer::extractWord(), MultiFramedRTPSink::fOutBuf, and OutPacketBuffer::insertWord().
Referenced by SimpleRTPSink::doSpecialFrameHandling(), MPEG4LATMAudioRTPSink::doSpecialFrameHandling(), MPEG4GenericRTPSink::doSpecialFrameHandling(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H264VideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().
00092 { 00093 unsigned rtpHdr = fOutBuf->extractWord(0); 00094 rtpHdr |= 0x00800000; 00095 fOutBuf->insertWord(rtpHdr, 0); 00096 }
| void MultiFramedRTPSink::setTimestamp | ( | struct timeval | timestamp | ) | [protected, inherited] |
Definition at line 98 of file MultiFramedRTPSink.cpp.
References RTPSink::convertToRTPTimestamp(), RTPSink::fCurrentTimestamp, MultiFramedRTPSink::fOutBuf, MultiFramedRTPSink::fTimestampPosition, and OutPacketBuffer::insertWord().
Referenced by MultiFramedRTPSink::doSpecialFrameHandling(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H264VideoRTPSink::doSpecialFrameHandling(), and H263plusVideoRTPSink::doSpecialFrameHandling().
00098 { 00099 // First, convert the timestamp to a 32-bit RTP timestamp: 00100 fCurrentTimestamp = convertToRTPTimestamp(timestamp); 00101 00102 // Then, insert it into the RTP packet: 00103 fOutBuf->insertWord(fCurrentTimestamp, fTimestampPosition); 00104 }
| void MultiFramedRTPSink::setSpecialHeaderWord | ( | unsigned | word, | |
| unsigned | wordPosition = 0 | |||
| ) | [protected, inherited] |
Definition at line 106 of file MultiFramedRTPSink.cpp.
References MultiFramedRTPSink::fOutBuf, MultiFramedRTPSink::fSpecialHeaderPosition, and OutPacketBuffer::insertWord().
Referenced by doSpecialFrameHandling(), and MPEG1or2AudioRTPSink::doSpecialFrameHandling().
00107 { 00108 fOutBuf->insertWord(word, fSpecialHeaderPosition + 4*wordPosition); 00109 }
| void MultiFramedRTPSink::setSpecialHeaderBytes | ( | unsigned char const * | bytes, | |
| unsigned | numBytes, | |||
| unsigned | bytePosition = 0 | |||
| ) | [protected, inherited] |
Definition at line 111 of file MultiFramedRTPSink.cpp.
References MultiFramedRTPSink::fOutBuf, MultiFramedRTPSink::fSpecialHeaderPosition, and OutPacketBuffer::insert().
Referenced by MPEG4GenericRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().
00113 { 00114 fOutBuf->insert(bytes, numBytes, fSpecialHeaderPosition + bytePosition); 00115 }
| void MultiFramedRTPSink::setFrameSpecificHeaderWord | ( | unsigned | word, | |
| unsigned | wordPosition = 0 | |||
| ) | [protected, inherited] |
Definition at line 117 of file MultiFramedRTPSink.cpp.
References MultiFramedRTPSink::fCurFrameSpecificHeaderPosition, MultiFramedRTPSink::fOutBuf, and OutPacketBuffer::insertWord().
00118 { 00119 fOutBuf->insertWord(word, fCurFrameSpecificHeaderPosition + 4*wordPosition); 00120 }
| void MultiFramedRTPSink::setFrameSpecificHeaderBytes | ( | unsigned char const * | bytes, | |
| unsigned | numBytes, | |||
| unsigned | bytePosition = 0 | |||
| ) | [protected, inherited] |
Definition at line 122 of file MultiFramedRTPSink.cpp.
References MultiFramedRTPSink::fCurFrameSpecificHeaderPosition, MultiFramedRTPSink::fOutBuf, and OutPacketBuffer::insert().
00124 { 00125 fOutBuf->insert(bytes, numBytes, fCurFrameSpecificHeaderPosition + bytePosition); 00126 }
| void MultiFramedRTPSink::setFramePadding | ( | unsigned | numPaddingBytes | ) | [protected, inherited] |
Definition at line 128 of file MultiFramedRTPSink.cpp.
References OutPacketBuffer::enqueue(), OutPacketBuffer::extractWord(), MultiFramedRTPSink::fOutBuf, and OutPacketBuffer::insertWord().
00128 { 00129 if (numPaddingBytes > 0) { 00130 // Add the padding bytes (with the last one being the padding size): 00131 unsigned char paddingBuffer[255]; //max padding 00132 memset(paddingBuffer, 0, numPaddingBytes); 00133 paddingBuffer[numPaddingBytes-1] = numPaddingBytes; 00134 fOutBuf->enqueue(paddingBuffer, numPaddingBytes); 00135 00136 // Set the RTP padding bit: 00137 unsigned rtpHdr = fOutBuf->extractWord(0); 00138 rtpHdr |= 0x20000000; 00139 fOutBuf->insertWord(rtpHdr, 0); 00140 } 00141 }
| unsigned MultiFramedRTPSink::numFramesUsedSoFar | ( | ) | const [inline, protected, inherited] |
Definition at line 79 of file MultiFramedRTPSink.hh.
References MultiFramedRTPSink::fNumFramesUsedSoFar.
Referenced by AMRAudioRTPSink::doSpecialFrameHandling(), AC3AudioRTPSink::doSpecialFrameHandling(), and GSMAudioRTPSink::frameCanAppearAfterPacketStart().
00079 { return fNumFramesUsedSoFar; }
| unsigned MultiFramedRTPSink::ourMaxPacketSize | ( | ) | const [inline, protected, inherited] |
Definition at line 81 of file MultiFramedRTPSink.hh.
References MultiFramedRTPSink::fOurMaxPacketSize.
Referenced by H264VideoRTPSink::continuePlaying().
00081 { return fOurMaxPacketSize; }
| Boolean MultiFramedRTPSink::continuePlaying | ( | ) | [protected, virtual, inherited] |
Implements MediaSink.
Reimplemented in H264VideoRTPSink.
Definition at line 143 of file MultiFramedRTPSink.cpp.
References MultiFramedRTPSink::buildAndSendPacket(), and True.
Referenced by H264VideoRTPSink::continuePlaying().
00143 { 00144 // Send the first packet. 00145 // (This will also schedule any future sends.) 00146 buildAndSendPacket(True); 00147 return True; 00148 }
| void MultiFramedRTPSink::stopPlaying | ( | ) | [protected, virtual, inherited] |
Reimplemented from MediaSink.
Reimplemented in H264VideoRTPSink.
Definition at line 150 of file MultiFramedRTPSink.cpp.
References MultiFramedRTPSink::fOutBuf, OutPacketBuffer::resetOffset(), OutPacketBuffer::resetOverflowData(), OutPacketBuffer::resetPacketStart(), and MediaSink::stopPlaying().
Referenced by H264VideoRTPSink::stopPlaying().
00150 { 00151 fOutBuf->resetPacketStart(); 00152 fOutBuf->resetOffset(); 00153 fOutBuf->resetOverflowData(); 00154 00155 // Then call the default "stopPlaying()" function: 00156 MediaSink::stopPlaying(); 00157 }
| 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 65 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().
00066 { 00067 resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName); 00068 if (resultMedium == NULL) { 00069 env.setResultMsg("Medium ", mediumName, " does not exist"); 00070 return False; 00071 } 00072 00073 return True; 00074 }
| u_int32_t RTPSink::SSRC | ( | ) | const [inline, inherited] |
Definition at line 39 of file RTPSink.hh.
References RTPSink::fSSRC.
Referenced by RTCPInstance::addBYE(), RTCPInstance::addSDES(), RTCPInstance::addSR(), MultiFramedRTPSink::buildAndSendPacket(), and RTCPInstance::incomingReportHandler1().
00039 {return fSSRC;}
| u_int32_t RTPSink::convertToRTPTimestamp | ( | struct timeval | tv | ) | [inherited] |
Definition at line 73 of file RTPSink.cpp.
References False, RTPSink::fNextTimestampHasBeenPreset, RTPSink::fTimestampBase, and RTPSink::fTimestampFrequency.
Referenced by RTCPInstance::addSR(), RTPSink::presetNextTimestamp(), and MultiFramedRTPSink::setTimestamp().
00073 { 00074 // Begin by converting from "struct timeval" units to RTP timestamp units: 00075 u_int32_t timestampIncrement = (fTimestampFrequency*tv.tv_sec); 00076 timestampIncrement += (u_int32_t)((2.0*fTimestampFrequency*tv.tv_usec + 1000000.0)/2000000); 00077 // 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, inherited] |
Definition at line 42 of file RTPSink.hh.
References RTPSink::fPacketCount.
Referenced by RTCPInstance::addSR(), RTPTransmissionStats::noteIncomingRR(), and RTPTransmissionStats::RTPTransmissionStats().
00042 {return fPacketCount;}
| unsigned RTPSink::octetCount | ( | ) | const [inline, inherited] |
Definition at line 43 of file RTPSink.hh.
References RTPSink::fOctetCount.
Referenced by RTCPInstance::addSR(), RTPTransmissionStats::noteIncomingRR(), and RTPTransmissionStats::RTPTransmissionStats().
00043 {return fOctetCount;}
| Groupsock const& RTPSink::groupsockBeingUsed | ( | ) | const [inline, inherited] |
Definition at line 46 of file RTPSink.hh.
References RTPSink::fRTPInterface, and RTPInterface::gs().
Referenced by PassiveServerMediaSubsession::getStreamParameters(), and PassiveServerMediaSubsession::sdpLines().
00046 { return *(fRTPInterface.gs()); }
| Groupsock& RTPSink::groupsockBeingUsed | ( | ) | [inline, inherited] |
Definition at line 47 of file RTPSink.hh.
References RTPSink::fRTPInterface, and RTPInterface::gs().
00047 { return *(fRTPInterface.gs()); }
| unsigned char RTPSink::rtpPayloadType | ( | ) | const [inline, inherited] |
Definition at line 49 of file RTPSink.hh.
References RTPSink::fRTPPayloadType.
Referenced by MPEG4ESVideoRTPSink::auxSDPLine(), AMRAudioRTPSink::auxSDPLine(), RTPSink::rtpmapLine(), PassiveServerMediaSubsession::sdpLines(), OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and SubstreamDescriptor::SubstreamDescriptor().
00049 { return fRTPPayloadType; }
| unsigned RTPSink::rtpTimestampFrequency | ( | ) | const [inline, inherited] |
Definition at line 50 of file RTPSink.hh.
References RTPSink::fTimestampFrequency.
Referenced by RTPSink::rtpmapLine(), and SubstreamDescriptor::SubstreamDescriptor().
00050 { return fTimestampFrequency; }
| void RTPSink::setRTPTimestampFrequency | ( | unsigned | freq | ) | [inline, inherited] |
Definition at line 51 of file RTPSink.hh.
References RTPSink::fTimestampFrequency.
00051 { 00052 fTimestampFrequency = freq; 00053 }
| char const* RTPSink::rtpPayloadFormatName | ( | ) | const [inline, inherited] |
Definition at line 54 of file RTPSink.hh.
References RTPSink::fRTPPayloadFormatName.
Referenced by RTPSink::rtpmapLine(), and SubstreamDescriptor::SubstreamDescriptor().
00054 {return fRTPPayloadFormatName;}
| unsigned RTPSink::numChannels | ( | ) | const [inline, inherited] |