MultiFramedRTPSink Class Reference

#include <MultiFramedRTPSink.hh>

Inheritance diagram for MultiFramedRTPSink:

Inheritance graph
[legend]
Collaboration diagram for MultiFramedRTPSink:

Collaboration graph
[legend]

Public Types

typedef void( afterPlayingFunc )(void *clientData)

Public Member Functions

void setPacketSizes (unsigned preferredPacketSize, unsigned maxPacketSize)
virtual void stopPlaying ()
u_int32_t SSRC () const
u_int32_t convertToRTPTimestamp (struct timeval tv)
unsigned packetCount () const
unsigned octetCount () const
Groupsock const & groupsockBeingUsed () const
GroupsockgroupsockBeingUsed ()
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 ()
RTPTransmissionStatsDBtransmissionStatsDB () 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 setServerRequestAlternativeByteHandler (int socketNum, ServerRequestAlternativeByteHandler *handler, void *clientData)
void getTotalBitrate (unsigned &outNumBytes, double &outElapsedTime)
Boolean startPlaying (MediaSource &source, afterPlayingFunc *afterFunc, void *afterClientData)
FramedSourcesource () const
UsageEnvironmentenvir () 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 frameTimestamp, 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
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 Boolean sourceIsCompatibleWithUs (MediaSource &source)
TaskTokennextTask ()

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
FramedSourcefSource

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

OutPacketBufferfOutBuf
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

Friends

void sendNext (void *)

Detailed Description

Definition at line 29 of file MultiFramedRTPSink.hh.


Member Typedef Documentation

typedef void( MediaSink::afterPlayingFunc)(void *clientData) [inherited]

Definition at line 33 of file MediaSink.hh.


Constructor & Destructor Documentation

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   setPacketSizes(1000, 1448);
00047       // Default max packet size (1500, minus allowance for IP, UDP, UMTP headers)
00048       // (Also, make it a multiple of 4 bytes, just in case that matters.)
00049 }

MultiFramedRTPSink::~MultiFramedRTPSink (  )  [protected, virtual]

Definition at line 51 of file MultiFramedRTPSink.cpp.

References fOutBuf.

00051                                         {
00052   delete fOutBuf;
00053 }


Member Function Documentation

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::doSpecialFrameHandling ( unsigned  fragmentationOffset,
unsigned char *  frameStart,
unsigned  numBytesInFrame,
struct timeval  frameTimestamp,
unsigned  numRemainingBytes 
) [protected, virtual]

Reimplemented in AC3AudioRTPSink, AMRAudioRTPSink, DVVideoRTPSink, H263plusVideoRTPSink, H264VideoRTPSink, JPEGVideoRTPSink, MP3ADURTPSink, MPEG1or2AudioRTPSink, MPEG1or2VideoRTPSink, MPEG4ESVideoRTPSink, MPEG4GenericRTPSink, MPEG4LATMAudioRTPSink, and SimpleRTPSink.

Definition at line 56 of file MultiFramedRTPSink.cpp.

References isFirstFrameInPacket(), and setTimestamp().

Referenced by afterGettingFrame1(), SimpleRTPSink::doSpecialFrameHandling(), MPEG4LATMAudioRTPSink::doSpecialFrameHandling(), MPEG4GenericRTPSink::doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().

00060                                                          {
00061   // default implementation: If this is the first frame in the packet,
00062   // use its timestamp for the RTP timestamp:
00063   if (isFirstFrameInPacket()) {
00064     setTimestamp(frameTimestamp);
00065   }
00066 }

Boolean MultiFramedRTPSink::allowFragmentationAfterStart (  )  const [protected, virtual]

Reimplemented in MPEG1or2VideoRTPSink, and MPEG4ESVideoRTPSink.

Definition at line 68 of file MultiFramedRTPSink.cpp.

References False.

Referenced by afterGettingFrame1().

00068                                                                {
00069   return False; // by default
00070 }

Boolean MultiFramedRTPSink::allowOtherFramesAfterLastFragment (  )  const [protected, virtual]

Definition at line 72 of file MultiFramedRTPSink.cpp.

References False.

Referenced by afterGettingFrame1().

00072                                                                     {
00073   return False; // by default
00074 }

Boolean MultiFramedRTPSink::frameCanAppearAfterPacketStart ( unsigned char const *  frameStart,
unsigned  numBytesInFrame 
) const [protected, virtual]

Reimplemented in AC3AudioRTPSink, AMRAudioRTPSink, GSMAudioRTPSink, H263plusVideoRTPSink, H264VideoRTPSink, JPEGVideoRTPSink, MPEG1or2VideoRTPSink, MPEG4ESVideoRTPSink, MPEG4GenericRTPSink, MPEG4LATMAudioRTPSink, and SimpleRTPSink.

Definition at line 77 of file MultiFramedRTPSink.cpp.

References True.

Referenced by afterGettingFrame1().

00078                                                                      {
00079   return True; // by default
00080 }

unsigned MultiFramedRTPSink::specialHeaderSize (  )  const [protected, virtual]

Reimplemented in AC3AudioRTPSink, AMRAudioRTPSink, H263plusVideoRTPSink, JPEGVideoRTPSink, MP3ADURTPSink, MPEG1or2AudioRTPSink, MPEG1or2VideoRTPSink, and MPEG4GenericRTPSink.

Definition at line 82 of file MultiFramedRTPSink.cpp.

Referenced by buildAndSendPacket(), and isTooBigForAPacket().

00082                                                      {
00083   // default implementation: Assume no special header:
00084   return 0;
00085 }

unsigned MultiFramedRTPSink::frameSpecificHeaderSize (  )  const [protected, virtual]

Definition at line 87 of file MultiFramedRTPSink.cpp.

Referenced by isTooBigForAPacket(), packFrame(), and sendPacketIfNecessary().

00087                                                            {
00088   // default implementation: Assume no frame-specific header:
00089   return 0;
00090 }

unsigned MultiFramedRTPSink::computeOverflowForNewFrame ( unsigned  newFrameSize  )  const [protected, virtual]

Reimplemented in DVVideoRTPSink.

Definition at line 92 of file MultiFramedRTPSink.cpp.

References fOutBuf, and OutPacketBuffer::numOverflowBytes().

Referenced by afterGettingFrame1(), and DVVideoRTPSink::computeOverflowForNewFrame().

00092                                                                                    {
00093   // default implementation: Just call numOverflowBytes()
00094   return fOutBuf->numOverflowBytes(newFrameSize);
00095 }

Boolean MultiFramedRTPSink::isFirstPacket (  )  const [inline, protected]

Definition at line 70 of file MultiFramedRTPSink.hh.

References fIsFirstPacket.

Referenced by MPEG1or2AudioRTPSink::doSpecialFrameHandling(), and AMRAudioRTPSink::doSpecialFrameHandling().

00070 { return fIsFirstPacket; }

Boolean MultiFramedRTPSink::isFirstFrameInPacket (  )  const [inline, protected]

Definition at line 71 of file MultiFramedRTPSink.hh.

References fNumFramesUsedSoFar.

Referenced by doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), and AMRAudioRTPSink::doSpecialFrameHandling().

00071 { return fNumFramesUsedSoFar == 0; }

Boolean MultiFramedRTPSink::curFragmentationOffset (  )  const [inline, protected]

Definition at line 72 of file MultiFramedRTPSink.hh.

References fCurFragmentationOffset.

Referenced by afterGettingFrame1(), MP3ADURTPSink::specialHeaderSize(), JPEGVideoRTPSink::specialHeaderSize(), and H263plusVideoRTPSink::specialHeaderSize().

00072 { return fCurFragmentationOffset; }

void MultiFramedRTPSink::setMarkerBit (  )  [protected]

Definition at line 97 of file MultiFramedRTPSink.cpp.

References OutPacketBuffer::extractWord(), fOutBuf, and OutPacketBuffer::insertWord().

Referenced by 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().

00097                                       {
00098   unsigned rtpHdr = fOutBuf->extractWord(0);
00099   rtpHdr |= 0x00800000;
00100   fOutBuf->insertWord(rtpHdr, 0);
00101 }

void MultiFramedRTPSink::setTimestamp ( struct timeval  timestamp  )  [protected]

Definition at line 103 of file MultiFramedRTPSink.cpp.

References RTPSink::convertToRTPTimestamp(), RTPSink::fCurrentTimestamp, fOutBuf, fTimestampPosition, and OutPacketBuffer::insertWord().

Referenced by doSpecialFrameHandling(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H264VideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), and DVVideoRTPSink::doSpecialFrameHandling().

00103                                                               {
00104   // First, convert the timestamp to a 32-bit RTP timestamp:
00105   fCurrentTimestamp = convertToRTPTimestamp(timestamp);
00106 
00107   // Then, insert it into the RTP packet:
00108   fOutBuf->insertWord(fCurrentTimestamp, fTimestampPosition);
00109 }

void MultiFramedRTPSink::setSpecialHeaderWord ( unsigned  word,
unsigned  wordPosition = 0 
) [protected]

Definition at line 111 of file MultiFramedRTPSink.cpp.

References fOutBuf, fSpecialHeaderPosition, and OutPacketBuffer::insertWord().

Referenced by MPEG1or2VideoRTPSink::doSpecialFrameHandling(), and MPEG1or2AudioRTPSink::doSpecialFrameHandling().

00112                                                                      {
00113   fOutBuf->insertWord(word, fSpecialHeaderPosition + 4*wordPosition);
00114 }

void MultiFramedRTPSink::setSpecialHeaderBytes ( unsigned char const *  bytes,
unsigned  numBytes,
unsigned  bytePosition = 0 
) [protected]

Definition at line 116 of file MultiFramedRTPSink.cpp.

References fOutBuf, fSpecialHeaderPosition, and OutPacketBuffer::insert().

Referenced by MPEG4GenericRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().

00118                                                                       {
00119   fOutBuf->insert(bytes, numBytes, fSpecialHeaderPosition + bytePosition);
00120 }

void MultiFramedRTPSink::setFrameSpecificHeaderWord ( unsigned  word,
unsigned  wordPosition = 0 
) [protected]

Definition at line 122 of file MultiFramedRTPSink.cpp.

References fCurFrameSpecificHeaderPosition, fOutBuf, and OutPacketBuffer::insertWord().

00123                                                                            {
00124   fOutBuf->insertWord(word, fCurFrameSpecificHeaderPosition + 4*wordPosition);
00125 }

void MultiFramedRTPSink::setFrameSpecificHeaderBytes ( unsigned char const *  bytes,
unsigned  numBytes,
unsigned  bytePosition = 0 
) [protected]

Definition at line 127 of file MultiFramedRTPSink.cpp.

References fCurFrameSpecificHeaderPosition, fOutBuf, and OutPacketBuffer::insert().

00129                                                                             {
00130   fOutBuf->insert(bytes, numBytes, fCurFrameSpecificHeaderPosition + bytePosition);
00131 }

void MultiFramedRTPSink::setFramePadding ( unsigned  numPaddingBytes  )  [protected]

Definition at line 133 of file MultiFramedRTPSink.cpp.

References OutPacketBuffer::enqueue(), OutPacketBuffer::extractWord(), fOutBuf, and OutPacketBuffer::insertWord().

00133                                                                  {
00134   if (numPaddingBytes > 0) {
00135     // Add the padding bytes (with the last one being the padding size):
00136     unsigned char paddingBuffer[255]; //max padding
00137     memset(paddingBuffer, 0, numPaddingBytes);
00138     paddingBuffer[numPaddingBytes-1] = numPaddingBytes;
00139     fOutBuf->enqueue(paddingBuffer, numPaddingBytes);
00140 
00141     // Set the RTP padding bit:
00142     unsigned rtpHdr = fOutBuf->extractWord(0);
00143     rtpHdr |= 0x20000000;
00144     fOutBuf->insertWord(rtpHdr, 0);
00145   }
00146 }

unsigned MultiFramedRTPSink::numFramesUsedSoFar (  )  const [inline, protected]

Definition at line 84 of file MultiFramedRTPSink.hh.

References fNumFramesUsedSoFar.

Referenced by AMRAudioRTPSink::doSpecialFrameHandling(), AC3AudioRTPSink::doSpecialFrameHandling(), and GSMAudioRTPSink::frameCanAppearAfterPacketStart().

00084 { return fNumFramesUsedSoFar; }

unsigned MultiFramedRTPSink::ourMaxPacketSize (  )  const [inline, protected]

Definition at line 85 of file MultiFramedRTPSink.hh.

References fOurMaxPacketSize.

Referenced by H264VideoRTPSink::continuePlaying().

00085 { return fOurMaxPacketSize; }

void MultiFramedRTPSink::stopPlaying (  )  [virtual]

Reimplemented from MediaSink.

Reimplemented in H264VideoRTPSink.

Definition at line 155 of file MultiFramedRTPSink.cpp.

References fOutBuf, OutPacketBuffer::resetOffset(), OutPacketBuffer::resetOverflowData(), OutPacketBuffer::resetPacketStart(), and MediaSink::stopPlaying().

Referenced by H264VideoRTPSink::stopPlaying().

00155                                      {
00156   fOutBuf->resetPacketStart();
00157   fOutBuf->resetOffset();
00158   fOutBuf->resetOverflowData();
00159 
00160   // Then call the default "stopPlaying()" function:
00161   MediaSink::stopPlaying();
00162 }

Boolean MultiFramedRTPSink::continuePlaying (  )  [protected, virtual]

Implements MediaSink.

Reimplemented in H264VideoRTPSink.

Definition at line 148 of file MultiFramedRTPSink.cpp.

References buildAndSendPacket(), and True.

Referenced by H264VideoRTPSink::continuePlaying().

00148                                             {
00149   // Send the first packet.
00150   // (This will also schedule any future sends.)
00151   buildAndSendPacket(True);
00152   return True;
00153 }

void MultiFramedRTPSink::buildAndSendPacket ( Boolean  isFirstPacket  )  [private]

Definition at line 164 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().

00164                                                                  {
00165   fIsFirstPacket = isFirstPacket;
00166 
00167   // Set up the RTP header:
00168   unsigned rtpHdr = 0x80000000; // RTP version 2
00169   rtpHdr |= (fRTPPayloadType<<16);
00170   rtpHdr |= fSeqNo; // sequence number
00171   fOutBuf->enqueueWord(rtpHdr);
00172 
00173   // Note where the RTP timestamp will go.
00174   // (We can't fill this in until we start packing payload frames.)
00175   fTimestampPosition = fOutBuf->curPacketSize();
00176   fOutBuf->skipBytes(4); // leave a hole for the timestamp
00177 
00178   fOutBuf->enqueueWord(SSRC());
00179 
00180   // Allow for a special, payload-format-specific header following the
00181   // RTP header:
00182   fSpecialHeaderPosition = fOutBuf->curPacketSize();
00183   fSpecialHeaderSize = specialHeaderSize();
00184   fOutBuf->skipBytes(fSpecialHeaderSize);
00185 
00186   // Begin packing as many (complete) frames into the packet as we can:
00187   fTotalFrameSpecificHeaderSizes = 0;
00188   fNoFramesLeft = False;
00189   fNumFramesUsedSoFar = 0;
00190   packFrame();
00191 }

void MultiFramedRTPSink::packFrame (  )  [private]

Definition at line 193 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().

00193                                    {
00194   // Get the next frame.
00195 
00196   // First, see if we have an overflow frame that was too big for the last pkt
00197   if (fOutBuf->haveOverflowData()) {
00198     // Use this frame before reading a new one from the source
00199     unsigned frameSize = fOutBuf->overflowDataSize();
00200     struct timeval presentationTime = fOutBuf->overflowPresentationTime();
00201     unsigned durationInMicroseconds = fOutBuf->overflowDurationInMicroseconds();
00202     fOutBuf->useOverflowData();
00203 
00204     afterGettingFrame1(frameSize, 0, presentationTime, durationInMicroseconds);
00205   } else {
00206     // Normal case: we need to read a new frame from the source
00207     if (fSource == NULL) return;
00208 
00209     fCurFrameSpecificHeaderPosition = fOutBuf->curPacketSize();
00210     fCurFrameSpecificHeaderSize = frameSpecificHeaderSize();
00211     fOutBuf->skipBytes(fCurFrameSpecificHeaderSize);
00212     fTotalFrameSpecificHeaderSizes += fCurFrameSpecificHeaderSize;
00213 
00214     fSource->getNextFrame(fOutBuf->curPtr(), fOutBuf->totalBytesAvailable(),
00215                           afterGettingFrame, this, ourHandleClosure, this);
00216   }
00217 }

void MultiFramedRTPSink::sendPacketIfNecessary (  )  [private]

Definition at line 352 of file MultiFramedRTPSink.cpp.

References OutPacketBuffer::adjustPacketStart(), OutPacketBuffer::curPacketSize(), Medium::envir(), fNextSendTime, fNoFramesLeft, fNumFramesUsedSoFar, RTPSink::fOctetCount, 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().

00352                                                {
00353   if (fNumFramesUsedSoFar > 0) {
00354     // Send the packet:
00355 #ifdef TEST_LOSS
00356     if ((our_random()%10) != 0) // simulate 10% packet loss #####
00357 #endif
00358     fRTPInterface.sendPacket(fOutBuf->packet(), fOutBuf->curPacketSize());
00359     ++fPacketCount;
00360     fTotalOctetCount += fOutBuf->curPacketSize();
00361     fOctetCount += fOutBuf->curPacketSize()
00362       - rtpHeaderSize - fSpecialHeaderSize - fTotalFrameSpecificHeaderSizes;
00363 
00364     ++fSeqNo; // for next time
00365   }
00366 
00367   if (fOutBuf->haveOverflowData()
00368       && fOutBuf->totalBytesAvailable() > fOutBuf->totalBufferSize()/2) {
00369     // Efficiency hack: Reset the packet start pointer to just in front of
00370     // the overflow data (allowing for the RTP header and special headers),
00371     // so that we probably don't have to "memmove()" the overflow data
00372     // into place when building the next packet:
00373     unsigned newPacketStart = fOutBuf->curPacketSize()
00374       - (rtpHeaderSize + fSpecialHeaderSize + frameSpecificHeaderSize());
00375     fOutBuf->adjustPacketStart(newPacketStart);
00376   } else {
00377     // Normal case: Reset the packet start pointer back to the start:
00378     fOutBuf->resetPacketStart();
00379   }
00380   fOutBuf->resetOffset();
00381   fNumFramesUsedSoFar = 0;
00382 
00383   if (fNoFramesLeft) {
00384     // We're done:
00385     onSourceClosure(this);
00386   } else {
00387     // We have more frames left to send.  Figure out when the next frame
00388     // is due to start playing, then make sure that we wait this long before
00389     // sending the next packet.
00390     struct timeval timeNow;
00391     gettimeofday(&timeNow, NULL);
00392     int64_t uSecondsToGo = (fNextSendTime.tv_sec - timeNow.tv_sec)*1000000 + (fNextSendTime.tv_usec - timeNow.tv_usec);
00393 
00394     // Delay this amount of time:
00395     nextTask() = envir().taskScheduler().scheduleDelayedTask(uSecondsToGo, (TaskFunc*)sendNext, this);
00396   }
00397 }

void MultiFramedRTPSink::sendNext ( void *  firstArg  )  [static, private]

Definition at line 400 of file MultiFramedRTPSink.cpp.

References buildAndSendPacket(), and False.

Referenced by sendPacketIfNecessary().

00400                                                 {
00401   MultiFramedRTPSink* sink = (MultiFramedRTPSink*)firstArg;
00402   sink->buildAndSendPacket(False);
00403 }

void MultiFramedRTPSink::afterGettingFrame ( void *  clientData,
unsigned  numBytesRead,
unsigned  numTruncatedBytes,
struct timeval  presentationTime,
unsigned  durationInMicroseconds 
) [static, private]

Definition at line 220 of file MultiFramedRTPSink.cpp.

References afterGettingFrame1().

Referenced by packFrame().

00223                                                      {
00224   MultiFramedRTPSink* sink = (MultiFramedRTPSink*)clientData;
00225   sink->afterGettingFrame1(numBytesRead, numTruncatedBytes,
00226                            presentationTime, durationInMicroseconds);
00227 }

void MultiFramedRTPSink::afterGettingFrame1 ( unsigned  numBytesRead,
unsigned  numTruncatedBytes,
struct timeval  presentationTime,
unsigned  durationInMicroseconds 
) [private]

Definition at line 230 of file MultiFramedRTPSink.cpp.

References allowFragmentationAfterStart(), allowOtherFramesAfterLastFragment(), computeOverflowForNewFrame(), curFragmentationOffset(), OutPacketBuffer::curPacketSize(), OutPacketBuffer::curPtr(), doSpecialFrameHandling(), Medium::envir(), False, fCurFragmentationOffset, fIsFirstPacket, 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().

00232                                                       {
00233   if (fIsFirstPacket) {
00234     // Record the fact that we're starting to play now:
00235     gettimeofday(&fNextSendTime, NULL);
00236   }
00237 
00238   if (numTruncatedBytes > 0) {
00239     unsigned const bufferSize = fOutBuf->totalBytesAvailable();
00240     unsigned newMaxSize = frameSize + numTruncatedBytes;
00241     envir() << "MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size ("
00242             << bufferSize << ").  "
00243             << numTruncatedBytes << " bytes of trailing data was dropped!  Correct this by increasing \"OutPacketBuffer::maxSize\" to at least "
00244             << newMaxSize << ", *before* creating this 'RTPSink'.  (Current value is "
00245             << OutPacketBuffer::maxSize << ".)\n";
00246   }
00247   unsigned curFragmentationOffset = fCurFragmentationOffset;
00248   unsigned numFrameBytesToUse = frameSize;
00249   unsigned overflowBytes = 0;
00250 
00251   // If we have already packed one or more frames into this packet,
00252   // check whether this new frame is eligible to be packed after them.
00253   // (This is independent of whether the packet has enough room for this
00254   // new frame; that check comes later.)
00255   if (fNumFramesUsedSoFar > 0) {
00256     if ((fPreviousFrameEndedFragmentation
00257          && !allowOtherFramesAfterLastFragment())
00258         || !frameCanAppearAfterPacketStart(fOutBuf->curPtr(), frameSize)) {
00259       // Save away this frame for next time:
00260       numFrameBytesToUse = 0;
00261       fOutBuf->setOverflowData(fOutBuf->curPacketSize(), frameSize,
00262                                presentationTime, durationInMicroseconds);
00263     }
00264   }
00265   fPreviousFrameEndedFragmentation = False;
00266 
00267   if (numFrameBytesToUse > 0) {
00268     // Check whether this frame overflows the packet
00269     if (fOutBuf->wouldOverflow(frameSize)) {
00270       // Don't use this frame now; instead, save it as overflow data, and
00271       // send it in the next packet instead.  However, if the frame is too
00272       // big to fit in a packet by itself, then we need to fragment it (and
00273       // use some of it in this packet, if the payload format permits this.)
00274       if (isTooBigForAPacket(frameSize)
00275           && (fNumFramesUsedSoFar == 0 || allowFragmentationAfterStart())) {
00276         // We need to fragment this frame, and use some of it now:
00277         overflowBytes = computeOverflowForNewFrame(frameSize);
00278         numFrameBytesToUse -= overflowBytes;
00279         fCurFragmentationOffset += numFrameBytesToUse;
00280       } else {
00281         // We don't use any of this frame now:
00282         overflowBytes = frameSize;
00283         numFrameBytesToUse = 0;
00284       }
00285       fOutBuf->setOverflowData(fOutBuf->curPacketSize() + numFrameBytesToUse,
00286                                overflowBytes, presentationTime, durationInMicroseconds);
00287     } else if (fCurFragmentationOffset > 0) {
00288       // This is the last fragment of a frame that was fragmented over
00289       // more than one packet.  Do any special handling for this case:
00290       fCurFragmentationOffset = 0;
00291       fPreviousFrameEndedFragmentation = True;
00292     }
00293   }
00294 
00295   if (numFrameBytesToUse == 0) {
00296     // Send our packet now, because we have filled it up:
00297     sendPacketIfNecessary();
00298   } else {
00299     // Use this frame in our outgoing packet:
00300     unsigned char* frameStart = fOutBuf->curPtr();
00301     fOutBuf->increment(numFrameBytesToUse);
00302         // do this now, in case "doSpecialFrameHandling()" calls "setFramePadding()" to append padding bytes
00303 
00304     // Here's where any payload format specific processing gets done:
00305     doSpecialFrameHandling(curFragmentationOffset, frameStart,
00306                            numFrameBytesToUse, presentationTime,
00307                            overflowBytes);
00308 
00309     ++fNumFramesUsedSoFar;
00310 
00311     // Update the time at which the next packet should be sent, based
00312     // on the duration of the frame that we just packed into it.
00313     // However, if this frame has overflow data remaining, then don't
00314     // count its duration yet.
00315     if (overflowBytes == 0) {
00316       fNextSendTime.tv_usec += durationInMicroseconds;
00317       fNextSendTime.tv_sec += fNextSendTime.tv_usec/1000000;
00318       fNextSendTime.tv_usec %= 1000000;
00319     }
00320 
00321     // Send our packet now if (i) it's already at our preferred size, or
00322     // (ii) (heuristic) another frame of the same size as the one we just
00323     //      read would overflow the packet, or
00324     // (iii) it contains the last fragment of a fragmented frame, and we
00325     //      don't allow anything else to follow this or
00326     // (iv) one frame per packet is allowed:
00327     if (fOutBuf->isPreferredSize()
00328         || fOutBuf->wouldOverflow(numFrameBytesToUse)
00329         || (fPreviousFrameEndedFragmentation &&
00330             !allowOtherFramesAfterLastFragment())
00331         || !frameCanAppearAfterPacketStart(fOutBuf->curPtr() - frameSize,
00332                                            frameSize) ) {
00333       // The packet is ready to be sent now
00334       sendPacketIfNecessary();
00335     } else {
00336       // There's room for more frames; try getting another:
00337       packFrame();
00338     }
00339   }
00340 }

Boolean MultiFramedRTPSink::isTooBigForAPacket ( unsigned  numBytes  )  const [private]

Definition at line 344 of file MultiFramedRTPSink.cpp.

References fOutBuf, frameSpecificHeaderSize(), OutPacketBuffer::isTooBigForAPacket(), rtpHeaderSize, and specialHeaderSize().

Referenced by afterGettingFrame1().

00344                                                                       {
00345   // Check whether a 'numBytes'-byte frame - together with a RTP header and
00346   // (possible) special headers - would be too big for an output packet:
00347   // (Later allow for RTP extension header!) #####
00348   numBytes += rtpHeaderSize + specialHeaderSize() + frameSpecificHeaderSize();
00349   return fOutBuf->isTooBigForAPacket(numBytes);
00350 }

void MultiFramedRTPSink::ourHandleClosure ( void *  clientData  )  [static, private]

Definition at line 405 of file MultiFramedRTPSink.cpp.

References fNoFramesLeft, sendPacketIfNecessary(), and True.

Referenced by packFrame().

00405                                                           {
00406   MultiFramedRTPSink* sink = (MultiFramedRTPSink*)clientData;
00407   // There are no frames left, but we may have a partially built packet
00408   //  to send
00409   sink->fNoFramesLeft = True;
00410   sink->sendPacketIfNecessary();
00411 }

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(), 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 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(), PassiveServerMediaSubsession::sdpLines(), and PassiveServerMediaSubsession::startStream().

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(), DVVideoRTPSink::auxSDPLineFromFramer(), 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]

Definition at line 56 of file RTPSink.hh.

References RTPSink::fNumChannels.

Referenced by RTPSink::rtpmapLine(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), and SubstreamDescriptor::SubstreamDescriptor().

00056 { return fNumChannels; }

char const * RTPSink::sdpMediaType (  )  const [virtual, inherited]

Reimplemented in AudioRTPSink, MPEG4GenericRTPSink, SimpleRTPSink, and VideoRTPSink.

Definition at line 120 of file RTPSink.cpp.

Referenced by PassiveServerMediaSubsession::sdpLines(), OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and SubstreamDescriptor::SubstreamDescriptor().

00120                                         {
00121   return "data";
00122   // default SDP media (m=) type, unless redefined by subclasses
00123 }

char * RTPSink::rtpmapLine (  )  const [virtual, inherited]

Definition at line 125 of file RTPSink.cpp.

References RTPSink::numChannels(), RTPSink::rtpPayloadFormatName(), RTPSink::rtpPayloadType(), RTPSink::rtpTimestampFrequency(), and strDup().

Referenced by PassiveServerMediaSubsession::sdpLines(), and OnDemandServerMediaSubsession::setSDPLinesFromRTPSink().

00125                                 {
00126   if (rtpPayloadType() >= 96) { // the payload format type is dynamic
00127     char* encodingParamsPart;
00128     if (numChannels() != 1) {
00129       encodingParamsPart = new char[1 + 20 /* max int len */];
00130       sprintf(encodingParamsPart, "/%d", numChannels());
00131     } else {
00132       encodingParamsPart = strDup("");
00133     }
00134     char const* const rtpmapFmt = "a=rtpmap:%d %s/%d%s\r\n";
00135     unsigned rtpmapFmtSize = strlen(rtpmapFmt)
00136       + 3 /* max char len */ + strlen(rtpPayloadFormatName())
00137       + 20 /* max int len */ + strlen(encodingParamsPart);
00138     char* rtpmapLine = new char[rtpmapFmtSize];
00139     sprintf(rtpmapLine, rtpmapFmt,
00140             rtpPayloadType(), rtpPayloadFormatName(),
00141             rtpTimestampFrequency(), encodingParamsPart);
00142     delete[] encodingParamsPart;
00143 
00144     return rtpmapLine;
00145   } else {
00146     // The payload format is staic, so there's no "a=rtpmap:" line:
00147     return strDup("");
00148   }
00149 }

char const * RTPSink::auxSDPLine (  )  [virtual, inherited]

Reimplemented in AMRAudioRTPSink, DVVideoRTPSink, H264VideoRTPSink, MPEG4ESVideoRTPSink, MPEG4GenericRTPSink, and MPEG4LATMAudioRTPSink.

Definition at line 151 of file RTPSink.cpp.

References NULL.

Referenced by awaitConfigInfo(), checkForAuxSDPLine(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), OnDemandServerMediaSubsession::getAuxSDPLine(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), PassiveServerMediaSubsession::sdpLines(), and SubstreamDescriptor::SubstreamDescriptor().

00151                                 {
00152   return NULL; // by default
00153 }

u_int16_t RTPSink::currentSeqNo (  )  const [inline, inherited]

Definition at line 63 of file RTPSink.hh.

References RTPSink::fSeqNo.

Referenced by PassiveServerMediaSubsession::startStream(), and OnDemandServerMediaSubsession::startStream().

00063 { 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 68 of file RTPSink.hh.

References RTPSink::fTransmissionStatsDB.

Referenced by RTCPInstance::incomingReportHandler1(), and RTCPInstance::removeSSRC().

00068                                                       {
00069     return *fTransmissionStatsDB;
00070   }

Boolean RTPSink::nextTimestampHasBeenPreset (  )  const [inline, inherited]

Definition at line 72 of file RTPSink.hh.

References RTPSink::fNextTimestampHasBeenPreset.

Referenced by RTCPInstance::sendReport().

00072 { return fNextTimestampHasBeenPreset; }

void RTPSink::setStreamSocket ( int  sockNum,
unsigned char  streamChannelId 
) [inline, inherited]

Definition at line 74 of file RTPSink.hh.

References RTPSink::fRTPInterface, and RTPInterface::setStreamSocket().

Referenced by DarwinInjector::setDestination().

00074                                                                    {
00075     fRTPInterface.setStreamSocket(sockNum, streamChannelId);
00076   }

void RTPSink::addStreamSocket ( int  sockNum,
unsigned char  streamChannelId 
) [inline, inherited]

Definition at line 77 of file RTPSink.hh.

References RTPInterface::addStreamSocket(), and RTPSink::fRTPInterface.

Referenced by StreamState::startPlaying().

00077                                                                    {
00078     fRTPInterface.addStreamSocket(sockNum, streamChannelId);
00079   }

void RTPSink::removeStreamSocket ( int  sockNum,
unsigned char  streamChannelId 
) [inline, inherited]

Definition at line 80 of file RTPSink.hh.

References RTPSink::fRTPInterface, and RTPInterface::removeStreamSocket().

Referenced by StreamState::endPlaying().

00080                                                                       {
00081     fRTPInterface.removeStreamSocket(sockNum, streamChannelId);
00082   }

void RTPSink::setServerRequestAlternativeByteHandler ( int  socketNum,
ServerRequestAlternativeByteHandler handler,
void *  clientData 
) [inline, inherited]

Definition at line 83 of file RTPSink.hh.

References RTPSink::fRTPInterface, and RTPInterface::setServerRequestAlternativeByteHandler().

Referenced by StreamState::startPlaying().

00083                                                                                                                              {
00084     fRTPInterface.setServerRequestAlternativeByteHandler(socketNum, handler, clientData);
00085   }

void RTPSink::getTotalBitrate ( unsigned &  outNumBytes,
double &  outElapsedTime 
) [inherited]

Definition at line 108 of file RTPSink.cpp.

References RTPSink::fTotalOctetCount, RTPSink::fTotalOctetCountStartTime, 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 }

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(), getMPEG1or2TimeCode(), main(), play(), setupStreams(), and StreamState::startPlaying().

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::afterGettingFrame1(), 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, H264VideoFileSink, 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 93 of file MediaSink.cpp.

References MediaSink::fAfterClientData, MediaSink::fAfterFunc, MediaSink::fSource, and NULL.

Referenced by DummySink::afterGettingFrame1(), FileSink::afterGettingFrame1(), DummySink::continuePlaying(), FileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), HTTPSink::ourOnSourceClosure(), and sendPacketIfNecessary().

00093                                                 {
00094   MediaSink* sink = (MediaSink*)clientData;
00095   sink->fSource = NULL; // indicates that we can be played again
00096   if (sink->fAfterFunc != NULL) {
00097     (*(sink->fAfterFunc))(sink->fAfterClientData);
00098   }
00099 }

void Medium::close ( UsageEnvironment env,
char const *  mediumName 
) [static, inherited]

Definition at line 76 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(), MP3HTTPSource::createNew(), MP3FileSource::createNew(), AVIFileSink::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), OnDemandServerMediaSubsession::sdpLines(), H264VideoRTPSink::stopPlaying(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ServerMediaSession::~ServerMediaSession(), and ServerMediaSubsession::~ServerMediaSubsession().

00076                                                           {
00077   MediaLookupTable::ourMedia(env)->remove(name);
00078 }

void Medium::close ( Medium medium  )  [static, inherited]

Definition at line 80 of file Media.cpp.

References Medium::close(), Medium::envir(), Medium::name(), and NULL.

00080                                  {
00081   if (medium == NULL) return;
00082 
00083   close(medium->envir(), medium->name());
00084 }

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::afterGettingBytes(), afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), HTTPSink::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), QuickTimeFileSink::continuePlaying(), HTTPSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), DVVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), WAVAudioFileSource::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(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPOverHTTPServer::HTTPClientConnection::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptions(), DVVideoStreamFramer::getProfile(), SIPClient::getResponse(), SIPClient::getResponseCode(), getSDPDescription(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPClient::handleGET_PARAMETERResponse(), RTSPClient::handleIncomingRequest(), RTSPClient::handlePLAYResponse(), RTSPClient::handleRequestError(), RTSPClient::handleResponseBytes(), RTSPClient::handleSETUPResponse(), RTSPServer::incomingConnectionHandler1(), RTSPOverHTTPServer::incomingConnectionHandler1(), RTSPClient::incomingDataHandler1(), RTCPInstance::incomingReportHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), RTSPClient::openConnection(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), AC3AudioRTPSource::processSpecialHeader(), SIPClient::processURL(), AC3AudioStreamParser::readAndSaveAFrame(), MPEG1or2Demux::registerReadInterest(), RTCPInstance::reschedule(), RTSPClient::resendCommand(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), RTSPServer::rtspURLPrefix(), RTCPInstance::schedule(), OnDemandServerMediaSubsession::sdpLines(), SIPClient::sendACK(), SIPClient::sendBYE(), SIPClient::sendINVITE(), sendPacketIfNecessary(), SIPClient::sendRequest(), RTSPClient::sendRequest(), DarwinInjector::setDestination(), RTSPClient::setupHTTPTunneling1(), QuickTimeFileSink::setWord(), AVIFileSink::setWord(), QuickTimeFileSink::setWord64(), SIPClient::SIPClient(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), AVIFileSink::startPlaying(), startPlayingSession(), PassiveServerMediaSubsession::startStream(), MediaSink::stopPlaying(), tearDownSession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), RTSPOverHTTPServer::HTTPClientConnection::~HTTPClientConnection(), and RTSPServer::~RTSPServer().

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 86 of file Media.cpp.

References False.

Referenced by MediaSource::lookupByName().

00086                                {
00087   return False; // default implementation
00088 }

Boolean Medium::isRTCPInstance (  )  const [virtual, inherited]

Reimplemented in RTCPInstance.

Definition at line 94 of file Media.cpp.

References False.

Referenced by RTCPInstance::lookupByName().

00094                                      {
00095   return False; // default implementation
00096 }

Boolean Medium::isRTSPClient (  )  const [virtual, inherited]

Reimplemented in RTSPClient.

Definition at line 98 of file Media.cpp.

References False.

Referenced by RTSPClient::lookupByName().

00098                                    {
00099   return False; // default implementation
00100 }

Boolean Medium::isRTSPServer (  )  const [virtual, inherited]

Reimplemented in RTSPServer.

Definition at line 102 of file Media.cpp.

References False.

Referenced by RTSPServer::lookupByName().

00102                                    {
00103   return False; // default implementation
00104 }

Boolean Medium::isMediaSession (  )  const [virtual, inherited]

Reimplemented in MediaSession.

Definition at line 106 of file Media.cpp.

References False.

Referenced by MediaSession::lookupByName().

00106                                      {
00107   return False; // default implementation
00108 }

Boolean Medium::isServerMediaSession (  )  const [virtual, inherited]

Reimplemented in ServerMediaSession.

Definition at line 110 of file Media.cpp.

References False.

Referenced by ServerMediaSession::lookupByName().

00110                                            {
00111   return False; // default implementation
00112 }

Boolean Medium::isDarwinInjector (  )  const [virtual, inherited]

Reimplemented in DarwinInjector.

Definition at line 114 of file Media.cpp.

References False.

Referenced by DarwinInjector::lookupByName().

00114                                        {
00115   return False; // default implementation
00116 }

TaskToken& Medium::nextTask (  )  [inline, protected, inherited]

Definition at line 77 of file Media.hh.

References Medium::fNextTask.

Referenced by BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), WAVAudioFileSource::doGetNextFrame(), MP3FileSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), ByteStreamFileSource::doReadFromFile(), RTCPInstance::reschedule(), RTCPInstance::schedule(), sendPacketIfNecessary(), and MediaSink::stopPlaying().

00077                         {
00078         return fNextTask;
00079   }


Friends And Related Function Documentation

void sendNext ( void *   )  [friend]


Field Documentation

OutPacketBuffer* MultiFramedRTPSink::fOutBuf [private]

Definition at line 112 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 114 of file MultiFramedRTPSink.hh.

Referenced by buildAndSendPacket(), ourHandleClosure(), and sendPacketIfNecessary().

unsigned MultiFramedRTPSink::fNumFramesUsedSoFar [private]

Definition at line 115 of file MultiFramedRTPSink.hh.

Referenced by afterGettingFrame1(), buildAndSendPacket(), isFirstFrameInPacket(), numFramesUsedSoFar(), and sendPacketIfNecessary().

unsigned MultiFramedRTPSink::fCurFragmentationOffset [private]

Definition at line 116 of file MultiFramedRTPSink.hh.

Referenced by afterGettingFrame1(), and curFragmentationOffset().

Boolean MultiFramedRTPSink::fPreviousFrameEndedFragmentation [private]

Definition at line 117 of file MultiFramedRTPSink.hh.

Referenced by afterGettingFrame1().

Boolean MultiFramedRTPSink::fIsFirstPacket [private]

Definition at line 119 of file MultiFramedRTPSink.hh.

Referenced by afterGettingFrame1(), buildAndSendPacket(), and isFirstPacket().

struct timeval MultiFramedRTPSink::fNextSendTime [read, private]

Definition at line 120 of file MultiFramedRTPSink.hh.

Referenced by afterGettingFrame1(), and sendPacketIfNecessary().

unsigned MultiFramedRTPSink::fTimestampPosition [private]

Definition at line 121 of file MultiFramedRTPSink.hh.

Referenced by buildAndSendPacket(), and setTimestamp().

unsigned MultiFramedRTPSink::fSpecialHeaderPosition [private]

Definition at line 122 of file MultiFramedRTPSink.hh.

Referenced by buildAndSendPacket(), setSpecialHeaderBytes(), and setSpecialHeaderWord().

unsigned MultiFramedRTPSink::fSpecialHeaderSize [private]

Definition at line 123 of file MultiFramedRTPSink.hh.

Referenced by buildAndSendPacket(), and sendPacketIfNecessary().

unsigned MultiFramedRTPSink::fCurFrameSpecificHeaderPosition [private]

Definition at line 124 of file MultiFramedRTPSink.hh.

Referenced by packFrame(), setFrameSpecificHeaderBytes(), and setFrameSpecificHeaderWord().

unsigned MultiFramedRTPSink::fCurFrameSpecificHeaderSize [private]

Definition at line 125 of file MultiFramedRTPSink.hh.

Referenced by packFrame().

unsigned MultiFramedRTPSink::fTotalFrameSpecificHeaderSizes [private]

Definition at line 126 of file MultiFramedRTPSink.hh.

Referenced by buildAndSendPacket(), packFrame(), and sendPacketIfNecessary().

unsigned MultiFramedRTPSink::fOurMaxPacketSize [private]

Definition at line 127 of file MultiFramedRTPSink.hh.

Referenced by ourMaxPacketSize(), and setPacketSizes().

RTPInterface RTPSink::fRTPInterface [protected, inherited]

Definition at line 102 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 103 of file RTPSink.hh.

Referenced by buildAndSendPacket(), and RTPSink::rtpPayloadType().

unsigned RTPSink::fPacketCount [protected, inherited]

Definition at line 104 of file RTPSink.hh.

Referenced by RTPSink::packetCount(), and sendPacketIfNecessary().

unsigned RTPSink::fOctetCount [protected, inherited]

Definition at line 104 of file RTPSink.hh.

Referenced by RTPSink::octetCount(), and sendPacketIfNecessary().

unsigned RTPSink::fTotalOctetCount [protected, inherited]

Definition at line 104 of file RTPSink.hh.

Referenced by RTPSink::getTotalBitrate(), and sendPacketIfNecessary().

struct timeval RTPSink::fTotalOctetCountStartTime [read, protected, inherited]

Definition at line 105 of file RTPSink.hh.

Referenced by RTPSink::getTotalBitrate().

u_int32_t RTPSink::fCurrentTimestamp [protected, inherited]

Definition at line 106 of file RTPSink.hh.

Referenced by setTimestamp().

u_int16_t RTPSink::fSeqNo [protected, inherited]

Definition at line 107 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 AMRAudioFileSink::afterGettingFrame1(), MPEG4ESVideoRTPSink::auxSDPLine(), DVVideoRTPSink::auxSDPLine(), DummySink::continuePlaying(), HTTPSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), FileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), MediaSink::onSourceClosure(), packFrame(), MediaSink::source(), JPEGVideoRTPSink::specialHeaderSize(), MediaSink::startPlaying(), MediaSink::stopPlaying(), H264VideoRTPSink::stopPlaying(), and H264VideoRTPSink::~H264VideoRTPSink().


The documentation for this class was generated from the following files:
Generated on Fri Sep 3 02:37:38 2010 for live by  doxygen 1.5.2