RTPTransmissionStats Class Reference

#include <RTPSink.hh>

Collaboration diagram for RTPTransmissionStats:

Collaboration graph
[legend]

Public Member Functions

u_int32_t SSRC () const
sockaddr_in const & lastFromAddress () const
unsigned lastPacketNumReceived () const
unsigned firstPacketNumReported () const
unsigned totNumPacketsLost () const
unsigned jitter () const
unsigned lastSRTime () const
unsigned diffSR_RRTime () const
unsigned roundTripDelay () const
timeval timeCreated () const
timeval lastTimeReceived () const
void getTotalOctetCount (u_int32_t &hi, u_int32_t &lo)
void getTotalPacketCount (u_int32_t &hi, u_int32_t &lo)
Boolean oldValid () const
unsigned packetsReceivedSinceLastRR () const
u_int8_t packetLossRatio () const
int packetsLostBetweenRR () const

Private Member Functions

 RTPTransmissionStats (RTPSink &rtpSink, u_int32_t SSRC)
virtual ~RTPTransmissionStats ()
void noteIncomingRR (struct sockaddr_in const &lastFromAddress, unsigned lossStats, unsigned lastPacketNumReceived, unsigned jitter, unsigned lastSRTime, unsigned diffSR_RRTime)

Private Attributes

RTPSinkfOurRTPSink
u_int32_t fSSRC
sockaddr_in fLastFromAddress
unsigned fLastPacketNumReceived
u_int8_t fPacketLossRatio
unsigned fTotNumPacketsLost
unsigned fJitter
unsigned fLastSRTime
unsigned fDiffSR_RRTime
timeval fTimeCreated fTimeReceived
Boolean fOldValid
unsigned fOldLastPacketNumReceived
unsigned fOldTotNumPacketsLost
Boolean fFirstPacket
unsigned fFirstPacketNumReported
u_int32_t fLastOctetCount
u_int32_t fTotalOctetCount_hi
u_int32_t fTotalOctetCount_lo
u_int32_t fLastPacketCount
u_int32_t fTotalPacketCount_hi
u_int32_t fTotalPacketCount_lo

Friends

class RTPTransmissionStatsDB

Detailed Description

Definition at line 165 of file RTPSink.hh.


Constructor & Destructor Documentation

RTPTransmissionStats::RTPTransmissionStats ( RTPSink rtpSink,
u_int32_t  SSRC 
) [private]

Definition at line 236 of file RTPSink.cpp.

References fLastOctetCount, fLastPacketCount, NULL, RTPSink::octetCount(), and RTPSink::packetCount().

00237   : fOurRTPSink(rtpSink), fSSRC(SSRC), fLastPacketNumReceived(0),
00238     fPacketLossRatio(0), fTotNumPacketsLost(0), fJitter(0),
00239     fLastSRTime(0), fDiffSR_RRTime(0), fFirstPacket(True),
00240     fTotalOctetCount_hi(0), fTotalOctetCount_lo(0),
00241     fTotalPacketCount_hi(0), fTotalPacketCount_lo(0) {
00242   gettimeofday(&fTimeCreated, NULL);
00243 
00244   fLastOctetCount = rtpSink.octetCount();
00245   fLastPacketCount = rtpSink.packetCount();
00246 }

RTPTransmissionStats::~RTPTransmissionStats (  )  [private, virtual]

Definition at line 248 of file RTPSink.cpp.

00248 {}


Member Function Documentation

u_int32_t RTPTransmissionStats::SSRC (  )  const [inline]

Definition at line 167 of file RTPSink.hh.

References fSSRC.

00167 {return fSSRC;}

struct sockaddr_in const& RTPTransmissionStats::lastFromAddress (  )  const [inline, read]

Definition at line 168 of file RTPSink.hh.

References fLastFromAddress.

00168 {return fLastFromAddress;}

unsigned RTPTransmissionStats::lastPacketNumReceived (  )  const [inline]

Definition at line 169 of file RTPSink.hh.

References fLastPacketNumReceived.

00169 {return fLastPacketNumReceived;}

unsigned RTPTransmissionStats::firstPacketNumReported (  )  const [inline]

Definition at line 170 of file RTPSink.hh.

References fFirstPacketNumReported.

00170 {return fFirstPacketNumReported;}

unsigned RTPTransmissionStats::totNumPacketsLost (  )  const [inline]

Definition at line 171 of file RTPSink.hh.

References fTotNumPacketsLost.

00171 {return fTotNumPacketsLost;}

unsigned RTPTransmissionStats::jitter (  )  const [inline]

Definition at line 172 of file RTPSink.hh.

References fJitter.

00172 {return fJitter;}

unsigned RTPTransmissionStats::lastSRTime (  )  const [inline]

Definition at line 173 of file RTPSink.hh.

References fLastSRTime.

00173 { return fLastSRTime; }

unsigned RTPTransmissionStats::diffSR_RRTime (  )  const [inline]

Definition at line 174 of file RTPSink.hh.

References fDiffSR_RRTime.

00174 { return fDiffSR_RRTime; }

unsigned RTPTransmissionStats::roundTripDelay (  )  const

Definition at line 300 of file RTPSink.cpp.

References fDiffSR_RRTime, fLastSRTime, and fTimeReceived.

Referenced by noteIncomingRR().

00300                                                     {
00301   // Compute the round-trip delay that was indicated by the most recently-received
00302   // RTCP RR packet.  Use the method noted in the RTP/RTCP specification (RFC 3350).
00303 
00304   if (fLastSRTime == 0) {
00305     // Either no RTCP RR packet has been received yet, or else the
00306     // reporting receiver has not yet received any RTCP SR packets from us:
00307     return 0;
00308   }
00309 
00310   // First, convert the time that we received the last RTCP RR packet to NTP format,
00311   // in units of 1/65536 (2^-16) seconds:
00312   unsigned lastReceivedTimeNTP_high
00313     = fTimeReceived.tv_sec + 0x83AA7E80; // 1970 epoch -> 1900 epoch
00314   double fractionalPart = (fTimeReceived.tv_usec*0x0400)/15625.0; // 2^16/10^6
00315   unsigned lastReceivedTimeNTP
00316     = (unsigned)((lastReceivedTimeNTP_high<<16) + fractionalPart + 0.5);
00317 
00318   int rawResult = lastReceivedTimeNTP - fLastSRTime - fDiffSR_RRTime;
00319   if (rawResult < 0) {
00320     // This can happen if there's clock drift between the sender and receiver,
00321     // and if the round-trip time was very small.
00322     rawResult = 0;
00323   }
00324   return (unsigned)rawResult;
00325 }

struct timeval RTPTransmissionStats::timeCreated (  )  const [inline, read]

Definition at line 178 of file RTPSink.hh.

00178 {return fTimeCreated;}

struct timeval RTPTransmissionStats::lastTimeReceived (  )  const [inline, read]

Definition at line 179 of file RTPSink.hh.

References fTimeReceived.

00179 {return fTimeReceived;}

void RTPTransmissionStats::getTotalOctetCount ( u_int32_t &  hi,
u_int32_t &  lo 
)

Definition at line 327 of file RTPSink.cpp.

References fTotalOctetCount_hi, and fTotalOctetCount_lo.

00327                                                                           {
00328   hi = fTotalOctetCount_hi;
00329   lo = fTotalOctetCount_lo;
00330 }

void RTPTransmissionStats::getTotalPacketCount ( u_int32_t &  hi,
u_int32_t &  lo 
)

Definition at line 332 of file RTPSink.cpp.

References fTotalPacketCount_hi, and fTotalPacketCount_lo.

00332                                                                            {
00333   hi = fTotalPacketCount_hi;
00334   lo = fTotalPacketCount_lo;
00335 }

Boolean RTPTransmissionStats::oldValid (  )  const [inline]

Definition at line 184 of file RTPSink.hh.

References fOldValid.

00184 {return fOldValid;} // Have two RRs been received?

unsigned RTPTransmissionStats::packetsReceivedSinceLastRR (  )  const

Definition at line 337 of file RTPSink.cpp.

References fLastPacketNumReceived, fOldLastPacketNumReceived, and fOldValid.

00337                                                                 {
00338   if (!fOldValid) return 0;
00339 
00340   return fLastPacketNumReceived-fOldLastPacketNumReceived;
00341 }

u_int8_t RTPTransmissionStats::packetLossRatio (  )  const [inline]

Definition at line 186 of file RTPSink.hh.

References fPacketLossRatio.

00186 { return fPacketLossRatio; }

int RTPTransmissionStats::packetsLostBetweenRR (  )  const

Definition at line 343 of file RTPSink.cpp.

References fOldTotNumPacketsLost, fOldValid, and fTotNumPacketsLost.

00343                                                      {
00344   if (!fOldValid) return 0;
00345 
00346   return fTotNumPacketsLost - fOldTotNumPacketsLost;
00347 }

void RTPTransmissionStats::noteIncomingRR ( struct sockaddr_in const &  lastFromAddress,
unsigned  lossStats,
unsigned  lastPacketNumReceived,
unsigned  jitter,
unsigned  lastSRTime,
unsigned  diffSR_RRTime 
) [private]

Definition at line 251 of file RTPSink.cpp.

References False, fDiffSR_RRTime, fFirstPacket, fFirstPacketNumReported, fJitter, fLastFromAddress, fLastOctetCount, fLastPacketCount, fLastPacketNumReceived, fLastSRTime, fOldLastPacketNumReceived, fOldTotNumPacketsLost, fOldValid, fOurRTPSink, fPacketLossRatio, fTimeReceived, fTotalOctetCount_hi, fTotalOctetCount_lo, fTotalPacketCount_hi, fTotalPacketCount_lo, fTotNumPacketsLost, NULL, RTPSink::octetCount(), RTPSink::packetCount(), roundTripDelay(), and True.

Referenced by RTPTransmissionStatsDB::noteIncomingRR().

00254                                          {
00255   if (fFirstPacket) {
00256     fFirstPacket = False;
00257     fFirstPacketNumReported = lastPacketNumReceived;
00258   } else {
00259     fOldValid = True;
00260     fOldLastPacketNumReceived = fLastPacketNumReceived;
00261     fOldTotNumPacketsLost = fTotNumPacketsLost;
00262   }
00263   gettimeofday(&fTimeReceived, NULL);
00264 
00265   fLastFromAddress = lastFromAddress;
00266   fPacketLossRatio = lossStats>>24;
00267   fTotNumPacketsLost = lossStats&0xFFFFFF;
00268   fLastPacketNumReceived = lastPacketNumReceived;
00269   fJitter = jitter;
00270   fLastSRTime = lastSRTime;
00271   fDiffSR_RRTime = diffSR_RRTime;
00272 #ifdef DEBUG_RR
00273   fprintf(stderr, "RTCP RR data (received at %lu.%06ld): lossStats 0x%08x, lastPacketNumReceived 0x%08x, jitter 0x%08x, lastSRTime 0x%08x, diffSR_RRTime 0x%08x\n",
00274           fTimeReceived.tv_sec, fTimeReceived.tv_usec, lossStats, lastPacketNumReceived, jitter, lastSRTime, diffSR_RRTime);
00275   unsigned rtd = roundTripDelay();
00276   fprintf(stderr, "=> round-trip delay: 0x%04x (== %f seconds)\n", rtd, rtd/65536.0);
00277 #endif
00278 
00279   // Update our counts of the total number of octets and packets sent towards
00280   // this receiver:
00281   u_int32_t newOctetCount = fOurRTPSink.octetCount();
00282   u_int32_t octetCountDiff = newOctetCount - fLastOctetCount;
00283   fLastOctetCount = newOctetCount;
00284   u_int32_t prevTotalOctetCount_lo = fTotalOctetCount_lo;
00285   fTotalOctetCount_lo += octetCountDiff;
00286   if (fTotalOctetCount_lo < prevTotalOctetCount_lo) { // wrap around
00287     ++fTotalOctetCount_hi;
00288   }
00289 
00290   u_int32_t newPacketCount = fOurRTPSink.packetCount();
00291   u_int32_t packetCountDiff = newPacketCount - fLastPacketCount;
00292   fLastPacketCount = newPacketCount;
00293   u_int32_t prevTotalPacketCount_lo = fTotalPacketCount_lo;
00294   fTotalPacketCount_lo += packetCountDiff;
00295   if (fTotalPacketCount_lo < prevTotalPacketCount_lo) { // wrap around
00296     ++fTotalPacketCount_hi;
00297   }
00298 }


Friends And Related Function Documentation

friend class RTPTransmissionStatsDB [friend]

Definition at line 192 of file RTPSink.hh.


Field Documentation

RTPSink& RTPTransmissionStats::fOurRTPSink [private]

Definition at line 202 of file RTPSink.hh.

Referenced by noteIncomingRR().

u_int32_t RTPTransmissionStats::fSSRC [private]

Definition at line 203 of file RTPSink.hh.

Referenced by SSRC().

struct sockaddr_in RTPTransmissionStats::fLastFromAddress [read, private]

Definition at line 204 of file RTPSink.hh.

Referenced by lastFromAddress(), and noteIncomingRR().

unsigned RTPTransmissionStats::fLastPacketNumReceived [private]

Definition at line 205 of file RTPSink.hh.

Referenced by lastPacketNumReceived(), noteIncomingRR(), and packetsReceivedSinceLastRR().

u_int8_t RTPTransmissionStats::fPacketLossRatio [private]

Definition at line 206 of file RTPSink.hh.

Referenced by noteIncomingRR(), and packetLossRatio().

unsigned RTPTransmissionStats::fTotNumPacketsLost [private]

Definition at line 207 of file RTPSink.hh.

Referenced by noteIncomingRR(), packetsLostBetweenRR(), and totNumPacketsLost().

unsigned RTPTransmissionStats::fJitter [private]

Definition at line 208 of file RTPSink.hh.

Referenced by jitter(), and noteIncomingRR().

unsigned RTPTransmissionStats::fLastSRTime [private]

Definition at line 209 of file RTPSink.hh.

Referenced by lastSRTime(), noteIncomingRR(), and roundTripDelay().

unsigned RTPTransmissionStats::fDiffSR_RRTime [private]

Definition at line 210 of file RTPSink.hh.

Referenced by diffSR_RRTime(), noteIncomingRR(), and roundTripDelay().

struct timeval fTimeCreated RTPTransmissionStats::fTimeReceived [read, private]

Definition at line 211 of file RTPSink.hh.

Referenced by lastTimeReceived(), noteIncomingRR(), and roundTripDelay().

Boolean RTPTransmissionStats::fOldValid [private]

Definition at line 212 of file RTPSink.hh.

Referenced by noteIncomingRR(), oldValid(), packetsLostBetweenRR(), and packetsReceivedSinceLastRR().

unsigned RTPTransmissionStats::fOldLastPacketNumReceived [private]

Definition at line 213 of file RTPSink.hh.

Referenced by noteIncomingRR(), and packetsReceivedSinceLastRR().

unsigned RTPTransmissionStats::fOldTotNumPacketsLost [private]

Definition at line 214 of file RTPSink.hh.

Referenced by noteIncomingRR(), and packetsLostBetweenRR().

Boolean RTPTransmissionStats::fFirstPacket [private]

Definition at line 215 of file RTPSink.hh.

Referenced by noteIncomingRR().

unsigned RTPTransmissionStats::fFirstPacketNumReported [private]

Definition at line 216 of file RTPSink.hh.

Referenced by firstPacketNumReported(), and noteIncomingRR().

u_int32_t RTPTransmissionStats::fLastOctetCount [private]

Definition at line 217 of file RTPSink.hh.

Referenced by noteIncomingRR(), and RTPTransmissionStats().

u_int32_t RTPTransmissionStats::fTotalOctetCount_hi [private]

Definition at line 217 of file RTPSink.hh.

Referenced by getTotalOctetCount(), and noteIncomingRR().

u_int32_t RTPTransmissionStats::fTotalOctetCount_lo [private]

Definition at line 217 of file RTPSink.hh.

Referenced by getTotalOctetCount(), and noteIncomingRR().

u_int32_t RTPTransmissionStats::fLastPacketCount [private]

Definition at line 218 of file RTPSink.hh.

Referenced by noteIncomingRR(), and RTPTransmissionStats().

u_int32_t RTPTransmissionStats::fTotalPacketCount_hi [private]

Definition at line 218 of file RTPSink.hh.

Referenced by getTotalPacketCount(), and noteIncomingRR().

u_int32_t RTPTransmissionStats::fTotalPacketCount_lo [private]

Definition at line 218 of file RTPSink.hh.

Referenced by getTotalPacketCount(), and noteIncomingRR().


The documentation for this class was generated from the following files:
Generated on Tue Oct 7 15:40:09 2008 for live by  doxygen 1.5.2