MPEG4ESVideoRTPSink Class Reference

#include <MPEG4ESVideoRTPSink.hh>

Inheritance diagram for MPEG4ESVideoRTPSink:

Inheritance graph
[legend]
Collaboration diagram for MPEG4ESVideoRTPSink:

Collaboration graph
[legend]

Public Types

typedef void( afterPlayingFunc )(void *clientData)

Public Member Functions

void setPacketSizes (unsigned preferredPacketSize, unsigned maxPacketSize)
u_int32_t SSRC () const
u_int32_t convertToRTPTimestamp (struct timeval tv)
unsigned packetCount () const
unsigned octetCount () const
Groupsock const & groupsockBeingUsed () const
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
void setStreamSocket (int sockNum, unsigned char streamChannelId)
void addStreamSocket (int sockNum, unsigned char streamChannelId)
void removeStreamSocket (int sockNum, unsigned char streamChannelId)
void getTotalBitrate (unsigned &outNumBytes, double &outElapsedTime)
Boolean startPlaying (MediaSource &source, afterPlayingFunc *afterFunc, void *afterClientData)
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 MPEG4ESVideoRTPSinkcreateNew (UsageEnvironment &env, Groupsock *RTPgs, unsigned char rtpPayloadFormat, u_int32_t rtpTimestampFrequency=90000)
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

 MPEG4ESVideoRTPSink (UsageEnvironment &env, Groupsock *RTPgs, unsigned char rtpPayloadFormat, u_int32_t rtpTimestampFrequency)
virtual ~MPEG4ESVideoRTPSink ()
virtual Boolean sourceIsCompatibleWithUs (MediaSource &source)
virtual void doSpecialFrameHandling (unsigned fragmentationOffset, unsigned char *frameStart, unsigned numBytesInFrame, struct timeval frameTimestamp, unsigned numRemainingBytes)
virtual Boolean allowFragmentationAfterStart () const
virtual Boolean frameCanAppearAfterPacketStart (unsigned char const *frameStart, unsigned numBytesInFrame) const
virtual char const * auxSDPLine ()
virtual Boolean allowOtherFramesAfterLastFragment () const
virtual unsigned specialHeaderSize () const
virtual unsigned frameSpecificHeaderSize () const
Boolean isFirstPacket () const
Boolean isFirstFrameInPacket () const
Boolean curFragmentationOffset () const
void setMarkerBit ()
void setTimestamp (struct timeval timestamp)
void setSpecialHeaderWord (unsigned word, unsigned wordPosition=0)
void setSpecialHeaderBytes (unsigned char const *bytes, unsigned numBytes, unsigned bytePosition=0)
void setFrameSpecificHeaderWord (unsigned word, unsigned wordPosition=0)
void setFrameSpecificHeaderBytes (unsigned char const *bytes, unsigned numBytes, unsigned bytePosition=0)
void setFramePadding (unsigned numPaddingBytes)
unsigned numFramesUsedSoFar () const
unsigned ourMaxPacketSize () const
virtual Boolean continuePlaying ()
virtual void stopPlaying ()
TaskTokennextTask ()

Static Protected Member Functions

static void onSourceClosure (void *clientData)

Protected Attributes

Boolean fVOPIsPresent
RTPInterface fRTPInterface
unsigned char fRTPPayloadType
unsigned fPacketCount
unsigned fOctetCount
unsigned fTotalOctetCount
timeval fTotalOctetCountStartTime
u_int32_t fCurrentTimestamp
u_int16_t fSeqNo
FramedSourcefSource

Private Attributes

char * fAuxSDPLine

Detailed Description

Definition at line 28 of file MPEG4ESVideoRTPSink.hh.


Member Typedef Documentation

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

Definition at line 33 of file MediaSink.hh.


Constructor & Destructor Documentation

MPEG4ESVideoRTPSink::MPEG4ESVideoRTPSink ( UsageEnvironment env,
Groupsock RTPgs,
unsigned char  rtpPayloadFormat,
u_int32_t  rtpTimestampFrequency 
) [protected]

Definition at line 25 of file MPEG4ESVideoRTPSink.cpp.

Referenced by createNew().

00028   : VideoRTPSink(env, RTPgs, rtpPayloadFormat, rtpTimestampFrequency, "MP4V-ES"),
00029     fVOPIsPresent(False), fAuxSDPLine(NULL) {
00030 }

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

Definition at line 32 of file MPEG4ESVideoRTPSink.cpp.

References fAuxSDPLine.

00032                                           {
00033   delete[] fAuxSDPLine;
00034 }


Member Function Documentation

MPEG4ESVideoRTPSink * MPEG4ESVideoRTPSink::createNew ( UsageEnvironment env,
Groupsock RTPgs,
unsigned char  rtpPayloadFormat,
u_int32_t  rtpTimestampFrequency = 90000 
) [static]

Definition at line 37 of file MPEG4ESVideoRTPSink.cpp.

References env, and MPEG4ESVideoRTPSink().

Referenced by MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), and main().

00039                                                                 {
00040   return new MPEG4ESVideoRTPSink(env, RTPgs, rtpPayloadFormat,
00041                                  rtpTimestampFrequency);
00042 }

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

Reimplemented from MediaSink.

Definition at line 44 of file MPEG4ESVideoRTPSink.cpp.

References MediaSource::isMPEG4VideoStreamFramer(), and MediaSink::source().

00044                                                                          {
00045   // Our source must be an appropriate framer:
00046   return source.isMPEG4VideoStreamFramer();
00047 }

void MPEG4ESVideoRTPSink::doSpecialFrameHandling ( unsigned  fragmentationOffset,
unsigned char *  frameStart,
unsigned  numBytesInFrame,
struct timeval  frameTimestamp,
unsigned  numRemainingBytes 
) [protected, virtual]

Reimplemented from MultiFramedRTPSink.

Definition at line 52 of file MPEG4ESVideoRTPSink.cpp.

References False, MediaSink::fSource, fVOPIsPresent, NULL, MPEGVideoStreamFramer::pictureEndMarker(), MultiFramedRTPSink::setMarkerBit(), MultiFramedRTPSink::setTimestamp(), and VOP_START_CODE.

00056                                                      {
00057   if (fragmentationOffset == 0) {
00058     // Begin by inspecting the 4-byte code at the start of the frame:
00059     if (numBytesInFrame < 4) return; // shouldn't happen
00060     unsigned startCode = (frameStart[0]<<24) | (frameStart[1]<<16)
00061       | (frameStart[2]<<8) | frameStart[3];
00062 
00063     fVOPIsPresent = startCode == VOP_START_CODE;
00064   }
00065 
00066   // Set the RTP 'M' (marker) bit iff this frame ends a VOP
00067   // (and there are no fragments remaining).
00068   // This relies on the source being a "MPEG4VideoStreamFramer".
00069   MPEG4VideoStreamFramer* framerSource = (MPEG4VideoStreamFramer*)fSource;
00070   if (framerSource != NULL && framerSource->pictureEndMarker()
00071       && numRemainingBytes == 0) {
00072     setMarkerBit();
00073     framerSource->pictureEndMarker() = False;
00074   }
00075 
00076   // Also set the RTP timestamp.  (We do this for each frame
00077   // in the packet, to ensure that the timestamp of the VOP (if present)
00078   // gets used.)
00079   setTimestamp(frameTimestamp);
00080 }

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

Reimplemented from MultiFramedRTPSink.

Definition at line 82 of file MPEG4ESVideoRTPSink.cpp.

References True.

00082                                                                 {
00083   return True;
00084 }

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

Reimplemented from MultiFramedRTPSink.

Definition at line 87 of file MPEG4ESVideoRTPSink.cpp.

References fVOPIsPresent.

00088                                                                      {
00089   // Once we've packed a VOP into the packet, then no other
00090   // frame can be packed into it:
00091   return !fVOPIsPresent;
00092 }

char const * MPEG4ESVideoRTPSink::auxSDPLine (  )  [protected, virtual]

Reimplemented from RTPSink.

Definition at line 94 of file MPEG4ESVideoRTPSink.cpp.

References fAuxSDPLine, MediaSink::fSource, MPEG4VideoStreamFramer::getConfigBytes(), NULL, MPEG4VideoStreamFramer::profile_and_level_indication(), RTPSink::rtpPayloadType(), and strDup().

00094                                             {
00095   // Generate a new "a=fmtp:" line each time, using parameters from
00096   // our framer source (in case they've changed since the last time that
00097   // we were called):
00098   MPEG4VideoStreamFramer* framerSource = (MPEG4VideoStreamFramer*)fSource;
00099   if (framerSource == NULL) return NULL; // we don't yet have a source
00100 
00101   u_int8_t profile_level_id = framerSource->profile_and_level_indication();
00102   if (profile_level_id == 0) return NULL; // our source isn't ready
00103 
00104   unsigned configLength;
00105   unsigned char* config = framerSource->getConfigBytes(configLength);
00106   if (config == NULL) return NULL; // our source isn't ready
00107 
00108   char const* fmtpFmt =
00109     "a=fmtp:%d "
00110     "profile-level-id=%d;"
00111     "config=";
00112   unsigned fmtpFmtSize = strlen(fmtpFmt)
00113     + 3 /* max char len */
00114     + 3 /* max char len */
00115     + 2*configLength /* 2*, because each byte prints as 2 chars */
00116     + 2 /* trailing \r\n */;
00117   char* fmtp = new char[fmtpFmtSize];
00118   sprintf(fmtp, fmtpFmt, rtpPayloadType(), profile_level_id);
00119   char* endPtr = &fmtp[strlen(fmtp)];
00120   for (unsigned i = 0; i < configLength; ++i) {
00121     sprintf(endPtr, "%02X", config[i]);
00122     endPtr += 2;
00123   }
00124   sprintf(endPtr, "\r\n");
00125 
00126   delete[] fAuxSDPLine;
00127   fAuxSDPLine = strDup(fmtp);
00128   delete[] fmtp;
00129   return fAuxSDPLine;
00130 }

void MultiFramedRTPSink::setPacketSizes ( unsigned  preferredPacketSize,
unsigned  maxPacketSize 
) [inherited]

Definition at line 27 of file MultiFramedRTPSink.cpp.

References MultiFramedRTPSink::fOurMaxPacketSize, and MultiFramedRTPSink::fOutBuf.

Referenced by MultiFramedRTPSink::MultiFramedRTPSink().

00028                                                                 {
00029   if (preferredPacketSize > maxPacketSize || preferredPacketSize == 0) return;
00030       // sanity check
00031 
00032   delete fOutBuf;
00033   fOutBuf = new OutPacketBuffer(preferredPacketSize, maxPacketSize);
00034   fOurMaxPacketSize = maxPacketSize; // save value, in case subclasses need it
00035 }

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

Definition at line 72 of file MultiFramedRTPSink.cpp.

References False.

Referenced by MultiFramedRTPSink::afterGettingFrame1().

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

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

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

Definition at line 82 of file MultiFramedRTPSink.cpp.

Referenced by MultiFramedRTPSink::buildAndSendPacket(), and MultiFramedRTPSink::isTooBigForAPacket().

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

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

Definition at line 87 of file MultiFramedRTPSink.cpp.

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

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

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

Definition at line 65 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fIsFirstPacket.

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

00065 { return fIsFirstPacket; }

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

Definition at line 66 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fNumFramesUsedSoFar.

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

00066 { return fNumFramesUsedSoFar == 0; }

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

Definition at line 67 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fCurFragmentationOffset.

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

00067 { return fCurFragmentationOffset; }

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

Definition at line 92 of file MultiFramedRTPSink.cpp.

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

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

00092                                       {
00093   unsigned rtpHdr = fOutBuf->extractWord(0);
00094   rtpHdr |= 0x00800000;
00095   fOutBuf->insertWord(rtpHdr, 0);
00096 }

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

Definition at line 98 of file MultiFramedRTPSink.cpp.

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

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

00098                                                               {
00099   // First, convert the timestamp to a 32-bit RTP timestamp:
00100   fCurrentTimestamp = convertToRTPTimestamp(timestamp);
00101 
00102   // Then, insert it into the RTP packet:
00103   fOutBuf->insertWord(fCurrentTimestamp, fTimestampPosition);
00104 }

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

Definition at line 106 of file MultiFramedRTPSink.cpp.

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

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

00107                                                                      {
00108   fOutBuf->insertWord(word, fSpecialHeaderPosition + 4*wordPosition);
00109 }

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

Definition at line 111 of file MultiFramedRTPSink.cpp.

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

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

00113                                                                       {
00114   fOutBuf->insert(bytes, numBytes, fSpecialHeaderPosition + bytePosition);
00115 }

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

Definition at line 117 of file MultiFramedRTPSink.cpp.

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

00118                                                                            {
00119   fOutBuf->insertWord(word, fCurFrameSpecificHeaderPosition + 4*wordPosition);
00120 }

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

Definition at line 122 of file MultiFramedRTPSink.cpp.

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

00124                                                                             {
00125   fOutBuf->insert(bytes, numBytes, fCurFrameSpecificHeaderPosition + bytePosition);
00126 }

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

Definition at line 128 of file MultiFramedRTPSink.cpp.

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

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

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

Definition at line 79 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fNumFramesUsedSoFar.

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

00079 { return fNumFramesUsedSoFar; }

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

Definition at line 81 of file MultiFramedRTPSink.hh.

References MultiFramedRTPSink::fOurMaxPacketSize.

Referenced by H264VideoRTPSink::continuePlaying().

00081 { return fOurMaxPacketSize; }

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

Implements MediaSink.

Reimplemented in H264VideoRTPSink.

Definition at line 143 of file MultiFramedRTPSink.cpp.

References MultiFramedRTPSink::buildAndSendPacket(), and True.

Referenced by H264VideoRTPSink::continuePlaying().

00143                                             {
00144   // Send the first packet.
00145   // (This will also schedule any future sends.)
00146   buildAndSendPacket(True);
00147   return True;
00148 }

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

Reimplemented from MediaSink.

Reimplemented in H264VideoRTPSink.

Definition at line 150 of file MultiFramedRTPSink.cpp.

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

Referenced by H264VideoRTPSink::stopPlaying().

00150                                      {
00151   fOutBuf->resetPacketStart();
00152   fOutBuf->resetOffset();
00153   fOutBuf->resetOverflowData();
00154 
00155   // Then call the default "stopPlaying()" function:
00156   MediaSink::stopPlaying();
00157 }

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

Definition at line 26 of file RTPSink.cpp.

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

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

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

Definition at line 39 of file MediaSink.cpp.

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

Referenced by RTPSink::lookupByName().

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

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

Definition at line 65 of file Media.cpp.

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

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

00066                                                          {
00067   resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName);
00068   if (resultMedium == NULL) {
00069     env.setResultMsg("Medium ", mediumName, " does not exist");
00070     return False;
00071   }
00072 
00073   return True;
00074 }

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

Definition at line 39 of file RTPSink.hh.

References RTPSink::fSSRC.

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

00039 {return fSSRC;}

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

Definition at line 73 of file RTPSink.cpp.

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

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

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

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

Definition at line 42 of file RTPSink.hh.

References RTPSink::fPacketCount.

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

00042 {return fPacketCount;}

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

Definition at line 43 of file RTPSink.hh.

References RTPSink::fOctetCount.

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

00043 {return fOctetCount;}

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

Definition at line 46 of file RTPSink.hh.

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

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

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

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

Definition at line 47 of file RTPSink.hh.

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

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

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

Definition at line 49 of file RTPSink.hh.

References RTPSink::fRTPPayloadType.

Referenced by auxSDPLine(), AMRAudioRTPSink::auxSDPLine(), RTPSink::rtpmapLine(), PassiveServerMediaSubsession::sdpLines(), OnDemandServerMediaSubsession::setSDPLinesFromRTPSink(), and SubstreamDescriptor::SubstreamDescriptor().

00049 { return fRTPPayloadType; }

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

Definition at line 50 of file RTPSink.hh.

References RTPSink::fTimestampFrequency.

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

00050 { return fTimestampFrequency; }

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

Definition at line 51 of file RTPSink.hh.

References RTPSink::fTimestampFrequency.

00051                                                {
00052     fTimestampFrequency = freq;
00053   }

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

Definition at line 54 of file RTPSink.hh.

References RTPSink::fRTPPayloadFormatName.

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

00054 {return fRTPPayloadFormatName;}

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

Definition at line 56 of file RTPSink.hh.

References RTPSink::fNumChannels.

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

00056 { return fNumChannels; }

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