VorbisAudioRTPSink Class Reference

#include <VorbisAudioRTPSink.hh>

Inheritance diagram for VorbisAudioRTPSink:

Inheritance graph
[legend]
Collaboration diagram for VorbisAudioRTPSink:

Collaboration graph
[legend]

Public Types

typedef void( onSendErrorFunc )(void *clientData)
typedef void( afterPlayingFunc )(void *clientData)

Public Member Functions

void setPacketSizes (unsigned preferredPacketSize, unsigned maxPacketSize)
void setOnSendErrorFunc (onSendErrorFunc *onSendErrorFunc, void *onSendErrorFuncData)
virtual void stopPlaying ()
Groupsock const & groupsockBeingUsed () const
GroupsockgroupsockBeingUsed ()
unsigned char rtpPayloadType () const
unsigned rtpTimestampFrequency () const
void setRTPTimestampFrequency (unsigned freq)
char const * rtpPayloadFormatName () const
unsigned numChannels () const
virtual char * rtpmapLine () const
u_int16_t currentSeqNo () const
u_int32_t presetNextTimestamp ()
RTPTransmissionStatsDBtransmissionStatsDB () const
Boolean nextTimestampHasBeenPreset () const
BooleanenableRTCPReports ()
void getTotalBitrate (unsigned &outNumBytes, double &outElapsedTime)
timeval const & creationTime () const
timeval const & initialPresentationTime () const
timeval const & mostRecentPresentationTime () const
void resetPresentationTimes ()
void setStreamSocket (int sockNum, unsigned char streamChannelId)
void addStreamSocket (int sockNum, unsigned char streamChannelId)
void removeStreamSocket (int sockNum, unsigned char streamChannelId)
void setServerRequestAlternativeByteHandler (int socketNum, ServerRequestAlternativeByteHandler *handler, void *clientData)
Boolean startPlaying (MediaSource &source, afterPlayingFunc *afterFunc, void *afterClientData)
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 VorbisAudioRTPSinkcreateNew (UsageEnvironment &env, Groupsock *RTPgs, u_int8_t rtpPayloadFormat, u_int32_t rtpTimestampFrequency, unsigned numChannels, u_int8_t *identificationHeader, unsigned identificationHeaderSize, u_int8_t *commentHeader, unsigned commentHeaderSize, u_int8_t *setupHeader, unsigned setupHeaderSize)
static VorbisAudioRTPSinkcreateNew (UsageEnvironment &env, Groupsock *RTPgs, u_int8_t rtpPayloadFormat, u_int32_t rtpTimestampFrequency, unsigned numChannels, char const *configStr)
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

 VorbisAudioRTPSink (UsageEnvironment &env, Groupsock *RTPgs, u_int8_t rtpPayloadFormat, u_int32_t rtpTimestampFrequency, unsigned numChannels, u_int8_t *identificationHeader, unsigned identificationHeaderSize, u_int8_t *commentHeader, unsigned commentHeaderSize, u_int8_t *setupHeader, unsigned setupHeaderSize, u_int32_t identField=0xFACADE)
virtual ~VorbisAudioRTPSink ()
virtual Boolean allowFragmentationAfterStart () const
virtual Boolean allowOtherFramesAfterLastFragment () const
virtual unsigned computeOverflowForNewFrame (unsigned newFrameSize) const
Boolean isFirstPacket () const
Boolean isFirstFrameInPacket () const
unsigned curFragmentationOffset () const
void setMarkerBit ()
void setTimestamp (struct timeval framePresentationTime)
void setSpecialHeaderWord (unsigned word, unsigned wordPosition=0)
void setSpecialHeaderBytes (unsigned char const *bytes, unsigned numBytes, unsigned bytePosition=0)
void setFrameSpecificHeaderWord (unsigned word, unsigned wordPosition=0)
void setFrameSpecificHeaderBytes (unsigned char const *bytes, unsigned numBytes, unsigned bytePosition=0)
void setFramePadding (unsigned numPaddingBytes)
unsigned numFramesUsedSoFar () const
unsigned ourMaxPacketSize () const
virtual Boolean continuePlaying ()
u_int32_t SSRC () const
u_int32_t convertToRTPTimestamp (struct timeval tv)
unsigned packetCount () const
unsigned octetCount () const
virtual Boolean sourceIsCompatibleWithUs (MediaSource &source)
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
fInitialPresentationTime 
fMostRecentPresentationTime
u_int32_t fCurrentTimestamp
u_int16_t fSeqNo
FramedSourcefSource

Private Member Functions

virtual char const * auxSDPLine ()
virtual void doSpecialFrameHandling (unsigned fragmentationOffset, unsigned char *frameStart, unsigned numBytesInFrame, struct timeval framePresentationTime, unsigned numRemainingBytes)
virtual Boolean frameCanAppearAfterPacketStart (unsigned char const *frameStart, unsigned numBytesInFrame) const
virtual unsigned specialHeaderSize () const
virtual unsigned frameSpecificHeaderSize () const

Private Attributes

u_int32_t fIdent
char * fFmtpSDPLine

Friends

class RTCPInstance
class RTPTransmissionStats
class MediaLookupTable

Detailed Description

Definition at line 28 of file VorbisAudioRTPSink.hh.


Member Typedef Documentation

typedef void( MultiFramedRTPSink::onSendErrorFunc)(void *clientData) [inherited]

Definition at line 33 of file MultiFramedRTPSink.hh.

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

Definition at line 33 of file MediaSink.hh.


Constructor & Destructor Documentation

VorbisAudioRTPSink::VorbisAudioRTPSink ( UsageEnvironment env,
Groupsock RTPgs,
u_int8_t  rtpPayloadFormat,
u_int32_t  rtpTimestampFrequency,
unsigned  numChannels,
u_int8_t *  identificationHeader,
unsigned  identificationHeaderSize,
u_int8_t *  commentHeader,
unsigned  commentHeaderSize,
u_int8_t *  setupHeader,
unsigned  setupHeaderSize,
u_int32_t  identField = 0xFACADE 
) [protected]

Definition at line 24 of file VorbisAudioRTPSink.cpp.

References base64Encode(), fFmtpSDPLine, fIdent, NULL, and RTPSink::rtpPayloadType().

Referenced by createNew().

00032   : AudioRTPSink(env, RTPgs, rtpPayloadFormat, rtpTimestampFrequency, "VORBIS", numChannels),
00033     fIdent(identField), fFmtpSDPLine(NULL) {
00034   // Create packed configuration headers, and encode this data into a "a=fmtp:" SDP line that we'll use to describe it:
00035   
00036   // First, count how many headers (<=3) are included, and how many bytes will be used to encode these headers' sizes:
00037   unsigned numHeaders = 0;
00038   unsigned sizeSize[2]; // The number of bytes used to encode the lengths of the first two headers (but not the length of the 3rd)
00039   sizeSize[0] = sizeSize[1] = 0;
00040   if (identificationHeaderSize > 0) {
00041     sizeSize[numHeaders++] = identificationHeaderSize < 128 ? 1 : identificationHeaderSize < 16384 ? 2 : 3;
00042   }
00043   if (commentHeaderSize > 0) {
00044     sizeSize[numHeaders++] = commentHeaderSize < 128 ? 1 : commentHeaderSize < 16384 ? 2 : 3;
00045   }
00046   if (setupHeaderSize > 0) {
00047     ++numHeaders;
00048   } else {
00049     sizeSize[1] = 0; // We have at most two headers, so the second one's length isn't encoded
00050   }
00051   if (numHeaders == 0) return; // With no headers, we can't set up a configuration
00052   if (numHeaders == 1) sizeSize[0] = 0; // With only one header, its length isn't encoded
00053 
00054   // Then figure out the size of the packed configuration headers, and allocate space for this:
00055   unsigned length = identificationHeaderSize + commentHeaderSize + setupHeaderSize; // The "length" field in the packed headers
00056   if (length > (unsigned)0xFFFF) return; // too big for a 16-bit field; we can't handle this
00057   unsigned packedHeadersSize
00058     = 4 // "Number of packed headers" field
00059     + 3 // "ident" field
00060     + 2 // "length" field
00061     + 1 // "n. of headers" field
00062     + sizeSize[0] + sizeSize[1] // "length1" and "length2" (if present) fields
00063     + length;
00064   u_int8_t* packedHeaders = new u_int8_t[packedHeadersSize];
00065   if (packedHeaders == NULL) return;
00066 
00067   // Fill in the 'packed headers':
00068   u_int8_t* p = packedHeaders;
00069   *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 1; // "Number of packed headers": 1
00070   *p++ = fIdent>>16; *p++ = fIdent>>8; *p++ = fIdent; // "Ident" (24 bits)
00071   *p++ = length>>8; *p++ = length; // "length" (16 bits)
00072   *p++ = numHeaders-1; // "n. of headers"
00073   if (numHeaders > 1) {
00074     // Fill in the "length1" header:
00075     unsigned length1 = identificationHeaderSize > 0 ? identificationHeaderSize : commentHeaderSize;
00076     if (length1 >= 16384) {
00077       *p++ = 0x80; // flag, but no more, because we know length1 <= 32767
00078     }
00079     if (length1 >= 128) {
00080       *p++ = 0x80|((length1&0x3F80)>>7); // flag + the second 7 bits
00081     }
00082     *p++ = length1&0x7F; // the low 7 bits
00083 
00084     if (numHeaders > 2) { // numHeaders == 3
00085       // Fill in the "length2" header (for the 'Comment' header):
00086       unsigned length2 = commentHeaderSize;
00087       if (length2 >= 16384) {
00088         *p++ = 0x80; // flag, but no more, because we know length2 <= 32767
00089       }
00090       if (length2 >= 128) {
00091         *p++ = 0x80|((length2&0x3F80)>>7); // flag + the second 7 bits
00092       }
00093       *p++ = length2&0x7F; // the low 7 bits
00094     }
00095   }
00096   // Copy each header:
00097   if (identificationHeader != NULL) memmove(p, identificationHeader, identificationHeaderSize); p += identificationHeaderSize;
00098   if (commentHeader != NULL) memmove(p, commentHeader, commentHeaderSize); p += commentHeaderSize;
00099   if (setupHeader != NULL) memmove(p, setupHeader, setupHeaderSize);
00100   
00101   // Having set up the 'packed configuration headers', Base-64-encode this, and put it in our "a=fmtp:" SDP line:
00102   char* base64PackedHeaders = base64Encode((char const*)packedHeaders, packedHeadersSize);
00103   delete[] packedHeaders;
00104   
00105   unsigned fmtpSDPLineMaxSize = 50 + strlen(base64PackedHeaders); // 50 => more than enough space
00106   fFmtpSDPLine = new char[fmtpSDPLineMaxSize];
00107   sprintf(fFmtpSDPLine, "a=fmtp:%d configuration=%s\r\n", rtpPayloadType(), base64PackedHeaders);
00108   delete[] base64PackedHeaders;
00109 }

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

Definition at line 111 of file VorbisAudioRTPSink.cpp.

References fFmtpSDPLine.

00111                                         {
00112   delete[] fFmtpSDPLine;
00113 }


Member Function Documentation

VorbisAudioRTPSink * VorbisAudioRTPSink::createNew ( UsageEnvironment env,
Groupsock RTPgs,
u_int8_t  rtpPayloadFormat,
u_int32_t  rtpTimestampFrequency,
unsigned  numChannels,
u_int8_t *  identificationHeader,
unsigned  identificationHeaderSize,
u_int8_t *  commentHeader,
unsigned  commentHeaderSize,
u_int8_t *  setupHeader,
unsigned  setupHeaderSize 
) [static]

Definition at line 116 of file VorbisAudioRTPSink.cpp.

References env, and VorbisAudioRTPSink().

Referenced by VorbisAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), and ProxyServerMediaSubsession::createNewRTPSink().

00120                                                                                {
00121   return new VorbisAudioRTPSink(env, RTPgs,
00122                                 rtpPayloadFormat, rtpTimestampFrequency, numChannels,
00123                                 identificationHeader, identificationHeaderSize,
00124                                 commentHeader, commentHeaderSize,
00125                                 setupHeader, setupHeaderSize);
00126 }

VorbisAudioRTPSink * VorbisAudioRTPSink::createNew ( UsageEnvironment env,
Groupsock RTPgs,
u_int8_t  rtpPayloadFormat,
u_int32_t  rtpTimestampFrequency,
unsigned  numChannels,
char const *  configStr 
) [static]

Definition at line 132 of file VorbisAudioRTPSink.cpp.

References ADVANCE, base64Decode(), env, False, GET_ENCODED_VAL, NULL, True, and VorbisAudioRTPSink().

00134                                                      {
00135   u_int8_t* identificationHeader = NULL; unsigned identificationHeaderSize = 0;
00136   u_int8_t* commentHeader = NULL; unsigned commentHeaderSize = 0;
00137   u_int8_t* setupHeader = NULL; unsigned setupHeaderSize = 0;
00138   VorbisAudioRTPSink* resultSink = NULL;
00139 
00140   // Begin by Base64-decoding the configuration string:
00141   unsigned configDataSize;
00142   u_int8_t* configData = base64Decode(configStr, configDataSize);
00143   u_int8_t* p = configData;
00144   unsigned rem = configDataSize;
00145 
00146   do {
00147     if (rem < 4) break;
00148     u_int32_t numPackedHeaders = (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3]; ADVANCE(4);
00149 
00150     if (numPackedHeaders == 0) break;
00151     // Use the first 'packed header' only.
00152 
00153     if (rem < 3) break;
00154     u_int32_t ident = (p[0]<<16)|(p[1]<<8)|p[2]; ADVANCE(3);
00155 
00156     if (rem < 2) break;
00157     u_int16_t length = (p[0]<<8)|p[1]; ADVANCE(2);
00158 
00159     unsigned numHeaders;
00160     GET_ENCODED_VAL(numHeaders);
00161 
00162     Boolean success = False;
00163     for (unsigned i = 0; i < numHeaders+1 && i < 3; ++i) {
00164       success = False;
00165       unsigned headerSize;
00166       if (i < numHeaders) {
00167         // The header size is encoded:
00168         GET_ENCODED_VAL(headerSize);
00169         if (headerSize > length) break;
00170         length -= headerSize;
00171       } else {
00172         // The last header is implicit:
00173         headerSize = length;
00174       }
00175 
00176       // Allocate space for the header bytes; we'll fill it in later
00177       if (i == 0) {
00178         identificationHeaderSize = headerSize;
00179         identificationHeader = new u_int8_t[identificationHeaderSize];
00180       } else if (i == 1) {
00181         commentHeaderSize = headerSize;
00182         commentHeader = new u_int8_t[commentHeaderSize];
00183       } else { // i == 2
00184         setupHeaderSize = headerSize;
00185         setupHeader = new u_int8_t[setupHeaderSize];
00186       }
00187 
00188       success = True;
00189     }
00190     if (!success) break;
00191 
00192     // Copy the remaining config bytes into the appropriate 'header' buffers:
00193     if (identificationHeader != NULL) {
00194       memmove(identificationHeader, p, identificationHeaderSize); ADVANCE(identificationHeaderSize);
00195       if (commentHeader != NULL) {
00196         memmove(commentHeader, p, commentHeaderSize); ADVANCE(commentHeaderSize);
00197         if (setupHeader != NULL) {
00198           memmove(setupHeader, p, setupHeaderSize); ADVANCE(setupHeaderSize);
00199         }
00200       }
00201     }
00202 
00203     resultSink = new VorbisAudioRTPSink(env, RTPgs, rtpPayloadFormat, rtpTimestampFrequency, numChannels,
00204                                         identificationHeader, identificationHeaderSize,
00205                                         commentHeader, commentHeaderSize,
00206                                         setupHeader, setupHeaderSize,
00207                                         ident);
00208   } while (0);
00209 
00210   delete[] configData;
00211   delete[] identificationHeader; delete[] commentHeader; delete[] setupHeader;
00212   return resultSink;
00213 }

char const * VorbisAudioRTPSink::auxSDPLine (  )  [private, virtual]

Reimplemented from RTPSink.

Definition at line 215 of file VorbisAudioRTPSink.cpp.

References fFmtpSDPLine.

00215                                            {
00216   return fFmtpSDPLine;
00217 }

void VorbisAudioRTPSink::doSpecialFrameHandling ( unsigned  fragmentationOffset,
unsigned char *  frameStart,
unsigned  numBytesInFrame,
struct timeval  framePresentationTime,
unsigned  numRemainingBytes 
) [private, virtual]

Reimplemented from MultiFramedRTPSink.

Definition at line 220 of file VorbisAudioRTPSink.cpp.

References MultiFramedRTPSink::doSpecialFrameHandling(), F, fIdent, MultiFramedRTPSink::numFramesUsedSoFar(), MultiFramedRTPSink::setFrameSpecificHeaderBytes(), and MultiFramedRTPSink::setSpecialHeaderBytes().

00224                                                      {
00225   // Set the 4-byte "payload header", as defined in RFC 5215, section 2.2:
00226   u_int8_t header[4];
00227 
00228   // The three bytes of the header are our "Ident":
00229   header[0] = fIdent>>16; header[1] = fIdent>>8; header[2] = fIdent;
00230 
00231   // The final byte contains the "F", "VDT", and "numPkts" fields:
00232   u_int8_t F; // Fragment type
00233   if (numRemainingBytes > 0) {
00234     if (fragmentationOffset > 0) {
00235       F = 2<<6; // continuation fragment
00236     } else {
00237       F = 1<<6; // start fragment
00238     }
00239   } else {
00240     if (fragmentationOffset > 0) {
00241       F = 3<<6; // end fragment
00242     } else {
00243       F = 0<<6; // not fragmented
00244     }
00245   }
00246   u_int8_t const VDT = 0<<4; // Vorbis Data Type (always a "Raw Vorbis payload")
00247   u_int8_t numPkts = F == 0 ? (numFramesUsedSoFar() + 1): 0; // set to 0 when we're a fragment
00248   header[3] = F|VDT|numPkts;
00249 
00250   setSpecialHeaderBytes(header, sizeof header);
00251 
00252   // There's also a 2-byte 'frame-specific' header: The length of the Vorbis data:
00253   u_int8_t frameSpecificHeader[2];
00254   frameSpecificHeader[0] = numBytesInFrame>>8;
00255   frameSpecificHeader[1] = numBytesInFrame;
00256   setFrameSpecificHeaderBytes(frameSpecificHeader, 2);
00257 
00258   // Important: Also call our base class's doSpecialFrameHandling(),
00259   // to set the packet's timestamp:
00260   MultiFramedRTPSink::doSpecialFrameHandling(fragmentationOffset,
00261                                              frameStart, numBytesInFrame,
00262                                              framePresentationTime,
00263                                              numRemainingBytes);
00264 }

Boolean VorbisAudioRTPSink::frameCanAppearAfterPacketStart ( unsigned char const *  frameStart,
unsigned  numBytesInFrame 
) const [private, virtual]

Reimplemented from MultiFramedRTPSink.

Definition at line 266 of file VorbisAudioRTPSink.cpp.

References MultiFramedRTPSink::numFramesUsedSoFar().

00267                                                                                                {
00268   // We allow more than one frame to be packed into an outgoing RTP packet, but no more than 15:
00269   return numFramesUsedSoFar() <= 15;
00270 }

unsigned VorbisAudioRTPSink::specialHeaderSize (  )  const [private, virtual]

Reimplemented from MultiFramedRTPSink.

Definition at line 272 of file VorbisAudioRTPSink.cpp.

00272                                                      {
00273   return 4;
00274 }

unsigned VorbisAudioRTPSink::frameSpecificHeaderSize (  )  const [private, virtual]

Reimplemented from MultiFramedRTPSink.

Definition at line 276 of file VorbisAudioRTPSink.cpp.

00276                                                            {
00277   return 2;
00278 }

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 }

void MultiFramedRTPSink::setOnSendErrorFunc ( onSendErrorFunc onSendErrorFunc,
void *  onSendErrorFuncData 
) [inline, inherited]

Definition at line 34 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fOnSendErrorData, and MultiFramedRTPSink::fOnSendErrorFunc.

00034                                                                                        {
00035     // Can be used to set a callback function to be called if there's an error sending RTP packets on our socket.
00036     fOnSendErrorFunc = onSendErrorFunc;
00037     fOnSendErrorData = onSendErrorFuncData;
00038   }

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

Reimplemented in MPEG1or2VideoRTPSink, and MPEG4ESVideoRTPSink.

Definition at line 69 of file MultiFramedRTPSink.cpp.

References False.

Referenced by MultiFramedRTPSink::afterGettingFrame1().

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

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

Definition at line 73 of file MultiFramedRTPSink.cpp.

References False.

Referenced by MultiFramedRTPSink::afterGettingFrame1().

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

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

Reimplemented in DVVideoRTPSink.

Definition at line 93 of file MultiFramedRTPSink.cpp.

References MultiFramedRTPSink::fOutBuf, and OutPacketBuffer::numOverflowBytes().

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

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

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

Definition at line 77 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fIsFirstPacket.

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

00077 { return fIsFirstPacket; }

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

Definition at line 78 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fNumFramesUsedSoFar.

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

00078 { return fNumFramesUsedSoFar == 0; }

unsigned MultiFramedRTPSink::curFragmentationOffset (  )  const [inline, protected, inherited]

Definition at line 79 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fCurFragmentationOffset.

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

00079 { return fCurFragmentationOffset; }

void MultiFramedRTPSink::setMarkerBit (  )  [protected, inherited]

Definition at line 98 of file MultiFramedRTPSink.cpp.

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

Referenced by VP8VideoRTPSink::doSpecialFrameHandling(), T140TextRTPSink::doSpecialFrameHandling(), SimpleRTPSink::doSpecialFrameHandling(), MPEG4LATMAudioRTPSink::doSpecialFrameHandling(), MPEG4GenericRTPSink::doSpecialFrameHandling(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MPEG1or2AudioRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), H264VideoRTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), DVVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), and AC3AudioRTPSink::doSpecialFrameHandling().

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

void MultiFramedRTPSink::setTimestamp ( struct timeval  framePresentationTime  )  [protected, inherited]

Definition at line 104 of file MultiFramedRTPSink.cpp.

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

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

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

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

Definition at line 112 of file MultiFramedRTPSink.cpp.

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

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

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

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

Definition at line 117 of file MultiFramedRTPSink.cpp.

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

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

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

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

Definition at line 123 of file MultiFramedRTPSink.cpp.

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

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

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

Definition at line 128 of file MultiFramedRTPSink.cpp.

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

Referenced by doSpecialFrameHandling().

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

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

Definition at line 134 of file MultiFramedRTPSink.cpp.

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

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

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

Definition at line 91 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fNumFramesUsedSoFar.

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

00091 { return fNumFramesUsedSoFar; }

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

Definition at line 92 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fOurMaxPacketSize.

Referenced by H264VideoRTPSink::continuePlaying().

00092 { return fOurMaxPacketSize; }

void MultiFramedRTPSink::stopPlaying (  )  [virtual, inherited]

Reimplemented from MediaSink.

Definition at line 156 of file MultiFramedRTPSink.cpp.

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

Referenced by H264VideoRTPSink::~H264VideoRTPSink(), and T140TextRTPSink::~T140TextRTPSink().

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

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

Implements MediaSink.

Reimplemented in H264VideoRTPSink, and T140TextRTPSink.

Definition at line 149 of file MultiFramedRTPSink.cpp.

References MultiFramedRTPSink::buildAndSendPacket(), and True.

Referenced by T140TextRTPSink::continuePlaying(), and H264VideoRTPSink::continuePlaying().

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

Boolean RTPSink::lookupByName ( UsageEnvironment env,
char const *  sinkName,
RTPSink *&  resultSink 
) [static, inherited]

Definition at line 26 of file RTPSink.cpp.

References env, False, MediaSink::isRTPSink(), MediaSink::lookupByName(), NULL, and True.

00027                                                       {
00028   resultSink = NULL; // unless we succeed
00029 
00030   MediaSink* sink;
00031   if (!MediaSink::lookupByName(env, sinkName, sink)) return False;
00032 
00033   if (!sink->isRTPSink()) {
00034     env.setResultMsg(sinkName, " is not a RTP sink");
00035     return False;
00036   }
00037 
00038   resultSink = (RTPSink*)sink;
00039   return True;
00040 }

Boolean MediaSink::lookupByName ( UsageEnvironment env,
char const *  sinkName,
MediaSink *&  resultSink 
) [static, inherited]

Definition at line 39 of file MediaSink.cpp.

References env, False, Medium::isSink(), Medium::lookupByName(), NULL, and True.

Referenced by RTPSink::lookupByName().

00040                                                         {
00041   resultSink = NULL; // unless we succeed
00042 
00043   Medium* medium;
00044   if (!Medium::lookupByName(env, sinkName, medium)) return False;
00045 
00046   if (!medium->isSink()) {
00047     env.setResultMsg(sinkName, " is not a media sink");
00048     return False;
00049   }
00050 
00051   resultSink = (MediaSink*)medium;
00052   return True;
00053 }

Boolean Medium::lookupByName ( UsageEnvironment env,
char const *  mediumName,
Medium *&  resultMedium 
) [static, inherited]

Definition at line 41 of file Media.cpp.

References env, False, MediaLookupTable::lookup(), NULL, MediaLookupTable::ourMedia(), UsageEnvironment::setResultMsg(), and True.

Referenced by ServerMediaSession::lookupByName(), RTSPServer::lookupByName(), RTSPClient::lookupByName(), RTCPInstance::lookupByName(), MediaSource::lookupByName(), MediaSink::lookupByName(), MediaSession::lookupByName(), and DarwinInjector::lookupByName().

00042                                                          {
00043   resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName);
00044   if (resultMedium == NULL) {
00045     env.setResultMsg("Medium ", mediumName, " does not exist");
00046     return False;
00047   }
00048 
00049   return True;
00050 }

Groupsock const& RTPSink::groupsockBeingUsed (  )  const [inline, inherited]

Definition at line 39 of file RTPSink.hh.

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

Referenced by PassiveServerMediaSubsession::getStreamParameters(), PassiveServerMediaSubsession::sdpLines(), and PassiveServerMediaSubsession::startStream().

00039 { return *(fRTPInterface.gs()); }

Groupsock& RTPSink::groupsockBeingUsed (  )  [inline, inherited]

Definition at line 40 of file RTPSink.hh.

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

00040 { return *(fRTPInterface.gs()); }

unsigned char RTPSink::rtpPayloadType (  )  const [inline, inherited]

Definition at line 42 of file RTPSink.hh.

References RTPSink::fRTPPayloadType.

Referenced by MPEG4ESVideoRTPSink::auxSDPLine(), H264VideoRTPSink::auxSDPLine(), AMRAudioRTPSink::auxSDPLine(), DVVideoRTPSink::auxSDPLineFromFramer(), RTPSink::rtpmapLine(), PassiveServerMediaSubsession::sdpLines(), OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), SubstreamDescriptor::SubstreamDescriptor(), and VorbisAudioRTPSink().

00042 { return fRTPPayloadType; }

unsigned RTPSink::rtpTimestampFrequency (  )  const [inline, inherited]

Definition at line 43 of file RTPSink.hh.

References RTPSink::fTimestampFrequency.

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

00043 { return fTimestampFrequency; }

void RTPSink::setRTPTimestampFrequency ( unsigned  freq  )  [inline, inherited]

Definition at line 44 of file RTPSink.hh.

References RTPSink::fTimestampFrequency.

00044                                                {
00045     fTimestampFrequency = freq;
00046   }

char const* RTPSink::rtpPayloadFormatName (  )  const [inline, inherited]

Definition at line 47 of file RTPSink.hh.

References RTPSink::fRTPPayloadFormatName.

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

00047 {return fRTPPayloadFormatName;}

unsigned RTPSink::numChannels (  )  const [inline, inherited]

Definition at line 49 of file RTPSink.hh.

References RTPSink::fNumChannels.

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

00049 { return fNumChannels; }

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

Definition at line 130 of file RTPSink.cpp.

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

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

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

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

Definition at line 56 of file RTPSink.hh.

References RTPSink::fSeqNo.

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

00056 { return fSeqNo; }

u_int32_t RTPSink::presetNextTimestamp (  )  [inherited]

Definition at line 97 of file RTPSink.cpp.

References RTPSink::convertToRTPTimestamp(), RTPSink::fNextTimestampHasBeenPreset, RTPSink::fTimestampBase, NULL, and True.

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

00097                                        {
00098   struct timeval timeNow;
00099   gettimeofday(&timeNow, NULL);
00100 
00101   u_int32_t tsNow = convertToRTPTimestamp(timeNow);
00102   fTimestampBase = tsNow;
00103   fNextTimestampHasBeenPreset = True;
00104 
00105   return tsNow;
00106 }

RTPTransmissionStatsDB& RTPSink::transmissionStatsDB (  )  const [inline, inherited]

Definition at line 61 of file RTPSink.hh.

References RTPSink::fTransmissionStatsDB.

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

00061                                                       {
00062     return *fTransmissionStatsDB;
00063   }

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

Definition at line 65 of file RTPSink.hh.

References RTPSink::fNextTimestampHasBeenPreset.

Referenced by RTCPInstance::addReport().

00065 { return fNextTimestampHasBeenPreset; }

Boolean& RTPSink::enableRTCPReports (  )  [inline, inherited]

Definition at line 66 of file RTPSink.hh.

References RTPSink::fEnableRTCPReports.

Referenced by RTCPInstance::addReport(), ProxyServerMediaSubsession::createNewRTPSink(), and PresentationTimeSessionNormalizer::normalizePresentationTime().

00066 { return fEnableRTCPReports; }

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

Definition at line 108 of file RTPSink.cpp.

References RTPSink::fTotalOctetCount, and NULL.

00108                                                                            {
00109   struct timeval timeNow;
00110   gettimeofday(&timeNow, NULL);
00111 
00112   outNumBytes = fTotalOctetCount;
00113   outElapsedTime = (double)(timeNow.tv_sec-fTotalOctetCountStartTime.tv_sec)
00114     + (timeNow.tv_usec-fTotalOctetCountStartTime.tv_usec)/1000000.0;
00115 
00116   fTotalOctetCount = 0;
00117   fTotalOctetCountStartTime = timeNow;
00118 }

struct timeval const& RTPSink::creationTime (  )  const [inline, read, inherited]

Definition at line 72 of file RTPSink.hh.

References RTPSink::fCreationTime.

Referenced by PassiveServerMediaSubsession::getCurrentNPT().

00072 { return fCreationTime; }

struct timeval const& RTPSink::initialPresentationTime (  )  const [inline, read, inherited]

Definition at line 73 of file RTPSink.hh.

Referenced by OnDemandServerMediaSubsession::getCurrentNPT().

00073 { return fInitialPresentationTime; }

struct timeval const& RTPSink::mostRecentPresentationTime (  )  const [inline, read, inherited]

Definition at line 74 of file RTPSink.hh.

References RTPSink::fMostRecentPresentationTime.

Referenced by OnDemandServerMediaSubsession::getCurrentNPT().

00074 { return fMostRecentPresentationTime; }

void RTPSink::resetPresentationTimes (  )  [inherited]

Definition at line 120 of file RTPSink.cpp.

References RTPSink::fMostRecentPresentationTime.

Referenced by OnDemandServerMediaSubsession::nullSeekStream(), and OnDemandServerMediaSubsession::seekStream().

00120                                      {
00121   fInitialPresentationTime.tv_sec = fMostRecentPresentationTime.tv_sec = 0;
00122   fInitialPresentationTime.tv_usec = fMostRecentPresentationTime.tv_usec = 0;
00123 }

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

Definition at line 78 of file RTPSink.hh.

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

Referenced by DarwinInjector::setDestination().

00078                                                                    {
00079     fRTPInterface.setStreamSocket(sockNum, streamChannelId);
00080   }

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

Definition at line 81 of file RTPSink.hh.

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

Referenced by StreamState::startPlaying().

00081                                                                    {
00082     fRTPInterface.addStreamSocket(sockNum, streamChannelId);
00083   }

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

Definition at line 84 of file RTPSink.hh.

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

Referenced by StreamState::endPlaying().

00084                                                                       {
00085     fRTPInterface.removeStreamSocket(sockNum, streamChannelId);
00086   }

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

Definition at line 87 of file RTPSink.hh.

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

Referenced by StreamState::startPlaying().

00087                                                                                                                              {
00088     fRTPInterface.setServerRequestAlternativeByteHandler(socketNum, handler, clientData);
00089   }

u_int32_t RTPSink::SSRC (  )  const [inline, protected, inherited]

Definition at line 104 of file RTPSink.hh.

References RTPSink::fSSRC.

Referenced by RTCPInstance::addBYE(), RTCPInstance::addSDES(), RTCPInstance::addSR(), MultiFramedRTPSink::buildAndSendPacket(), and RTCPInstance::incomingReportHandler1().

00104 {return fSSRC;}

u_int32_t RTPSink::convertToRTPTimestamp ( struct timeval  tv  )  [protected, inherited]

Definition at line 74 of file RTPSink.cpp.

References False, RTPSink::fNextTimestampHasBeenPreset, RTPSink::fTimestampBase, and RTPSink::fTimestampFrequency.

Referenced by RTCPInstance::addSR(), RTPSink::presetNextTimestamp(), and MultiFramedRTPSink::setTimestamp().

00074                                                           {
00075   // Begin by converting from "struct timeval" units to RTP timestamp units:
00076   u_int32_t timestampIncrement = (fTimestampFrequency*tv.tv_sec);
00077   timestampIncrement += (u_int32_t)(fTimestampFrequency*(tv.tv_usec/1000000.0) + 0.5); // note: rounding
00078 
00079   // Then add this to our 'timestamp base':
00080   if (fNextTimestampHasBeenPreset) {
00081     // Make the returned timestamp the same as the current "fTimestampBase",
00082     // so that timestamps begin with the value that was previously preset:
00083     fTimestampBase -= timestampIncrement;
00084     fNextTimestampHasBeenPreset = False;
00085   }
00086 
00087   u_int32_t const rtpTimestamp = fTimestampBase + timestampIncrement;
00088 #ifdef DEBUG_TIMESTAMPS
00089   fprintf(stderr, "fTimestampBase: 0x%08x, tv: %lu.%06ld\n\t=> RTP timestamp: 0x%08x\n",
00090           fTimestampBase, tv.tv_sec, tv.tv_usec, rtpTimestamp);
00091   fflush(stderr);
00092 #endif
00093 
00094   return rtpTimestamp;
00095 }

unsigned RTPSink::packetCount (  )  const [inline, protected, inherited]

Definition at line 107 of file RTPSink.hh.

References RTPSink::fPacketCount.

Referenced by RTCPInstance::addSR(), RTPTransmissionStats::noteIncomingRR(), and RTPTransmissionStats::RTPTransmissionStats().

00107 {return fPacketCount;}

unsigned RTPSink::octetCount (  )  const [inline, protected, inherited]

Definition at line 108 of file RTPSink.hh.

References RTPSink::fOctetCount.

Referenced by RTCPInstance::addSR(), RTPTransmissionStats::noteIncomingRR(), and RTPTransmissionStats::RTPTransmissionStats().

00108 {return fOctetCount;}

Boolean MediaSink::startPlaying ( MediaSource source,
afterPlayingFunc afterFunc,
void *  afterClientData 
) [inherited]

Definition at line 60 of file MediaSink.cpp.

References MediaSink::continuePlaying(), Medium::envir(), MediaSink::fAfterClientData, MediaSink::fAfterFunc, False, MediaSink::fSource, NULL, UsageEnvironment::setResultMsg(), MediaSink::source(), and MediaSink::sourceIsCompatibleWithUs().

Referenced by MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), H264VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), main(), play(), setupStreams(), StreamState::startPlaying(), startReplicaFileSink(), and startReplicaUDPSink().

00062                                                        {
00063   // Make sure we're not already being played:
00064   if (fSource != NULL) {
00065     envir().setResultMsg("This sink is already being played");
00066     return False;
00067   }
00068 
00069   // Make sure our source is compatible:
00070   if (!sourceIsCompatibleWithUs(source)) {
00071     envir().setResultMsg("MediaSink::startPlaying(): source is not compatible!");
00072     return False;
00073   }
00074   fSource = (FramedSource*)&source;
00075 
00076   fAfterFunc = afterFunc;
00077   fAfterClientData = afterClientData;
00078   return continuePlaying();
00079 }

FramedSource* MediaSink::source (  )  const [inline, inherited]

Definition at line 42 of file MediaSink.hh.

References MediaSink::fSource.

Referenced by AMRAudioFileSink::afterGettingFrame(), JPEGVideoRTPSink::doSpecialFrameHandling(), MPEG4ESVideoRTPSink::sourceIsCompatibleWithUs(), MPEG1or2VideoRTPSink::sourceIsCompatibleWithUs(), MediaSink::sourceIsCompatibleWithUs(), JPEGVideoRTPSink::sourceIsCompatibleWithUs(), H264VideoRTPSink::sourceIsCompatibleWithUs(), DVVideoRTPSink::sourceIsCompatibleWithUs(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), AMRAudioFileSink::sourceIsCompatibleWithUs(), JPEGVideoRTPSink::specialHeaderSize(), and MediaSink::startPlaying().

00042 {return fSource;}

Boolean MediaSink::sourceIsCompatibleWithUs ( MediaSource source  )  [protected, virtual, inherited]

Reimplemented in AMRAudioFileSink, AMRAudioRTPSink, DVVideoRTPSink, H264VideoRTPSink, JPEGVideoRTPSink, MPEG1or2VideoRTPSink, and MPEG4ESVideoRTPSink.

Definition at line 55 of file MediaSink.cpp.

References FramedSource::isFramedSource(), and MediaSink::source().

Referenced by MediaSink::startPlaying().

00055                                                                {
00056   // We currently support only framed sources.
00057   return source.isFramedSource();
00058 }

void MediaSink::onSourceClosure ( void *  clientData  )  [static, protected, inherited]

Definition at line 92 of file MediaSink.cpp.

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

Referenced by FileSink::afterGettingFrame(), MFSD_DummySink::afterGettingFrame1(), DummySink::continuePlaying(), MFSD_DummySink::continuePlaying(), FileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), TCPStreamSink::processBuffer(), and MultiFramedRTPSink::sendPacketIfNecessary().

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

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

Definition at line 52 of file Media.cpp.

References env, MediaLookupTable::ourMedia(), and MediaLookupTable::remove().

Referenced by afterPlaying(), Medium::close(), closeMediaSinks(), OnDemandServerMediaSubsession::closeStreamSource(), continueAfterTEARDOWN(), WAVAudioFileSource::createNew(), QuickTimeFileSink::createNew(), QCELPAudioRTPSource::createNew(), MP3FileSource::createNew(), AVIFileSink::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), ServerMediaSession::deleteAllSubsessions(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), ProxyServerMediaSession::resetDESCRIBEState(), OnDemandServerMediaSubsession::sdpLines(), shutdownStream(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MatroskaFileParser::~MatroskaFileParser(), MatroskaFileServerDemux::~MatroskaFileServerDemux(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::~RTSPClientConnectionSupportingHTTPStreaming(), ServerMediaSubsession::~ServerMediaSubsession(), StreamClientState::~StreamClientState(), StreamReplicator::~StreamReplicator(), and T140TextRTPSink::~T140TextRTPSink().

00052                                                           {
00053   MediaLookupTable::ourMedia(env)->remove(name);
00054 }

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

Definition at line 56 of file Media.cpp.

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

00056                                  {
00057   if (medium == NULL) return;
00058 
00059   close(medium->envir(), medium->name());
00060 }

UsageEnvironment& Medium::envir (  )  const [inline, inherited]

Definition at line 59 of file Media.hh.

References Medium::fEnviron.

Referenced by QuickTimeFileSink::addArbitraryString(), FileSink::addData(), RTCPInstance::addStreamSocket(), MPEG2IFrameIndexFromTransportStream::addToTail(), StreamParser::afterGettingBytes1(), DummySink::afterGettingFrame(), TCPStreamSink::afterGettingFrame(), T140IdleFilter::afterGettingFrame(), FileSink::afterGettingFrame(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), RTSPServer::RTSPClientConnection::changeClientInputSocket(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), ProxyServerMediaSubsession::closeStreamSource(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), ProxyServerMediaSession::continueAfterDESCRIBE(), ProxyRTSPClient::continueAfterLivenessCommand(), ProxyRTSPClient::continueAfterSETUP(), T140TextRTPSink::continuePlaying(), QuickTimeFileSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), VP8VideoMatroskaFileServerMediaSubsession::createNewRTPSink(), VorbisAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), T140TextMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportUDPServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), MP3AudioFileServerMediaSubsession::createNewRTPSink(), H264VideoFileServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), DVVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), AC3AudioMatroskaFileServerMediaSubsession::createNewRTPSink(), AC3AudioFileServerMediaSubsession::createNewRTPSink(), AACAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewStreamSource(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportUDPServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MP3AudioFileServerMediaSubsession::createNewStreamSource(), H264VideoMatroskaFileServerMediaSubsession::createNewStreamSource(), H264VideoFileServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), AC3AudioFileServerMediaSubsession::createNewStreamSource(), AMRDeinterleavingBuffer::deliverIncomingFrame(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), DeviceSource::DeviceSource(), WAVAudioFileSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), MPEG2TransportStreamMultiplexor::doGetNextFrame(), MPEG2IFrameIndexFromTransportStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), SIPClient::doInviteStateMachine(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), WAVAudioFileSource::doStopGettingFrames(), T140IdleFilter::doStopGettingFrames(), MultiFramedRTPSource::doStopGettingFrames(), FramedSource::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPServer::RTSPClientConnection::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), H264VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptions(), DVVideoStreamFramer::getProfile(), SIPClient::getResponse(), SIPClient::getResponseCode(), getSDPDescription(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPClient::handleAlternativeRequestByte1(), RTSPClient::handleGET_PARAMETERResponse(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), RTSPClient::handleIncomingRequest(), RTSPClient::handlePLAYResponse(), RTSPClient::handleRequestError(), RTSPClient::handleResponseBytes(), RTSPClient::handleSETUPResponse(), RTSPServer::incomingConnectionHandler(), RTSPClient::incomingDataHandler1(), RTCPInstance::incomingReportHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MatroskaDemux::MatroskaDemux(), MatroskaFile::MatroskaFile(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), MultiFramedRTPSource::networkReadHandler1(), MatroskaDemux::newDemuxedTrack(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), T140IdleFilter::onSourceClosure(), RTSPClient::openConnection(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MatroskaFileParser::parseStartOfFile(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), TCPStreamSink::processBuffer(), SIPClient::processURL(), AC3AudioStreamParser::readAndSaveAFrame(), MPEG1or2Demux::registerReadInterest(), RTCPInstance::reschedule(), RTSPClient::resendCommand(), ProxyRTSPClient::reset(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), RTSPServer::rtspURLPrefix(), RTCPInstance::schedule(), ProxyRTSPClient::scheduleDESCRIBECommand(), ProxyRTSPClient::scheduleLivenessCommand(), OnDemandServerMediaSubsession::sdpLines(), SIPClient::sendACK(), SIPClient::sendBYE(), SIPClient::sendINVITE(), MultiFramedRTPSink::sendPacketIfNecessary(), SIPClient::sendRequest(), RTSPClient::sendRequest(), DarwinInjector::setDestination(), RTSPClient::setupHTTPTunneling1(), setupNextSubsession(), RTSPServer::setUpTunnelingOverHTTP(), QuickTimeFileSink::setWord(), AVIFileSink::setWord(), QuickTimeFileSink::setWord64(), shutdownStream(), SIPClient::SIPClient(), TCPStreamSink::socketWritableHandler1(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), AVIFileSink::startPlaying(), startPlayingSession(), PassiveServerMediaSubsession::startStream(), MediaSink::stopPlaying(), ProxyServerMediaSubsession::subsessionByeHandler(), tearDownSession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), DeviceSource::~DeviceSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), ProxyServerMediaSubsession::~ProxyServerMediaSubsession(), RTSPServer::~RTSPServer(), StreamClientState::~StreamClientState(), T140IdleFilter::~T140IdleFilter(), and WAVAudioFileSource::~WAVAudioFileSource().

00059 {return fEnviron;}

char const* Medium::name (  )  const [inline, inherited]

Definition at line 61 of file Media.hh.

References Medium::fMediumName.

Referenced by QuickTimeFileSink::addAtom_hdlr2(), Medium::close(), MP3ADUTranscoder::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), and MP3FileSource::initializeStream().

00061 {return fMediumName;}

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

Reimplemented in MediaSource.

Definition at line 62 of file Media.cpp.

References False.

Referenced by MediaSource::lookupByName().

00062                                {
00063   return False; // default implementation
00064 }

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

Reimplemented in RTCPInstance.

Definition at line 70 of file Media.cpp.

References False.

Referenced by RTCPInstance::lookupByName().

00070                                      {
00071   return False; // default implementation
00072 }

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

Reimplemented in RTSPClient.

Definition at line 74 of file Media.cpp.

References False.

Referenced by RTSPClient::lookupByName().

00074                                    {
00075   return False; // default implementation
00076 }

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

Reimplemented in RTSPServer.

Definition at line 78 of file Media.cpp.

References False.

Referenced by RTSPServer::lookupByName().

00078                                    {
00079   return False; // default implementation
00080 }

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

Reimplemented in MediaSession.

Definition at line 82 of file Media.cpp.

References False.

Referenced by MediaSession::lookupByName().

00082                                      {
00083   return False; // default implementation
00084 }

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

Reimplemented in ServerMediaSession.

Definition at line 86 of file Media.cpp.

References False.

Referenced by ServerMediaSession::lookupByName().

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

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

Reimplemented in DarwinInjector.

Definition at line 90 of file Media.cpp.

References False.

Referenced by DarwinInjector::lookupByName().

00090                                        {
00091   return False; // default implementation
00092 }

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

Definition at line 78 of file Media.hh.

References Medium::fNextTask.

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

00078                         {
00079         return fNextTask;
00080   }


Friends And Related Function Documentation

friend class RTCPInstance [friend, inherited]

Definition at line 102 of file RTPSink.hh.

friend class RTPTransmissionStats [friend, inherited]

Definition at line 103 of file RTPSink.hh.

friend class MediaLookupTable [friend, inherited]

Definition at line 74 of file Media.hh.


Field Documentation

u_int32_t VorbisAudioRTPSink::fIdent [private]

Definition at line 69 of file VorbisAudioRTPSink.hh.

Referenced by doSpecialFrameHandling(), and VorbisAudioRTPSink().

char* VorbisAudioRTPSink::fFmtpSDPLine [private]

Definition at line 70 of file VorbisAudioRTPSink.hh.

Referenced by auxSDPLine(), VorbisAudioRTPSink(), and ~VorbisAudioRTPSink().

RTPInterface RTPSink::fRTPInterface [protected, inherited]

Definition at line 111 of file RTPSink.hh.

Referenced by RTPSink::addStreamSocket(), RTPSink::groupsockBeingUsed(), RTPSink::removeStreamSocket(), MultiFramedRTPSink::sendPacketIfNecessary(), RTPSink::setServerRequestAlternativeByteHandler(), and RTPSink::setStreamSocket().

unsigned char RTPSink::fRTPPayloadType [protected, inherited]

Definition at line 112 of file RTPSink.hh.

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

unsigned RTPSink::fPacketCount [protected, inherited]

Definition at line 113 of file RTPSink.hh.

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

unsigned RTPSink::fOctetCount [protected, inherited]

Definition at line 113 of file RTPSink.hh.

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

unsigned RTPSink::fTotalOctetCount [protected, inherited]

Definition at line 113 of file RTPSink.hh.

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

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

Definition at line 114 of file RTPSink.hh.

Referenced by MultiFramedRTPSink::afterGettingFrame1(), RTPSink::mostRecentPresentationTime(), and RTPSink::resetPresentationTimes().

u_int32_t RTPSink::fCurrentTimestamp [protected, inherited]

Definition at line 115 of file RTPSink.hh.

Referenced by MultiFramedRTPSink::setTimestamp().

u_int16_t RTPSink::fSeqNo [protected, inherited]

Definition at line 116 of file RTPSink.hh.

Referenced by MultiFramedRTPSink::buildAndSendPacket(), RTPSink::currentSeqNo(), and MultiFramedRTPSink::sendPacketIfNecessary().

FramedSource* MediaSink::fSource [protected, inherited]

Definition at line 57 of file MediaSink.hh.

Referenced by FileSink::afterGettingFrame(), AMRAudioFileSink::afterGettingFrame(), MPEG4ESVideoRTPSink::auxSDPLine(), DVVideoRTPSink::auxSDPLine(), DummySink::continuePlaying(), TCPStreamSink::continuePlaying(), T140TextRTPSink::continuePlaying(), MFSD_DummySink::continuePlaying(), H264VideoRTPSink::continuePlaying(), FileSink::continuePlaying(), BasicUDPSink::continuePlaying1(), MPEG4ESVideoRTPSink::doSpecialFrameHandling(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), JPEGVideoRTPSink::doSpecialFrameHandling(), AMRAudioRTPSink::doSpecialFrameHandling(), MediaSink::onSourceClosure(), MultiFramedRTPSink::packFrame(), TCPStreamSink::processBuffer(), MediaSink::source(), JPEGVideoRTPSink::specialHeaderSize(), MediaSink::startPlaying(), MediaSink::stopPlaying(), H264VideoRTPSink::~H264VideoRTPSink(), and T140TextRTPSink::~T140TextRTPSink().


The documentation for this class was generated from the following files:
Generated on Mon Apr 29 13:32:46 2013 for live by  doxygen 1.5.2