sipxmedialib
Version 3.3
|
#include <ReceiverReport.h>
Public Member Functions | |
CReceiverReport (ssrc_t ulSSRC=0, unsigned long ulVersion=2) | |
~CReceiverReport (void) | |
void | SetRTPStatistics (IRTPHeader *piRTPHeader) |
void | SetLastRcvdSRTime (uint32_t aulNTPTimestamp[]) |
void | GetReceiverStatistics (uint32_t *pulFractionalLoss, uint32_t *pulCumulativeLoss, uint32_t *pulHighestSequenceNo, uint32_t *pulInterarrivalJitter, uint32_t *pulSRTimestamp, uint32_t *pulPacketDelay) |
unsigned long | FormatReceiverReport (bool bSRPresent, unsigned char *puchReportBuffer, unsigned long ulBufferSize) |
unsigned long | ParseReceiverReport (bool bHeader, unsigned char *puchReportBuffer) |
ssrc_t | GetSSRC (void) |
virtual void | SetSSRC (ssrc_t ulSSRC) |
Public Member Functions inherited from CBaseClass | |
CBaseClass | CBASECLASS_PROTO_ARGS ((const char *pDerivedType="Unknown", int callLineNum=0)) |
virtual | ~CBaseClass (void) |
virtual bool | Initialize (void) |
bool | IsInitialized (void) |
void | setAutomatic (bool) |
virtual unsigned long AddRef | ADD_RELEASE_PROTO_ARGS ((int callLineNum)) |
virtual unsigned long Release | ADD_RELEASE_PROTO_ARGS ((int callLineNum)) |
Public Member Functions inherited from CRTCPHeader | |
CRTCPHeader (ssrc_t ulSSRC, RTCP_REPORTS_ET etPayloadType, unsigned long ulVersion=2) | |
virtual | ~CRTCPHeader (void) |
virtual unsigned long | GetHeaderLength (void) |
virtual unsigned long | GetVersion (void) |
virtual unsigned long | GetPadding (void) |
virtual RTCP_REPORTS_ET | GetPayload (void) |
virtual unsigned long | GetReportCount (void) |
virtual unsigned long | GetReportLength (void) |
virtual bool | IsOurSSRC (ssrc_t ulSSRC) |
Private Member Functions | |
void | SetRemoteSSRC (IRTPHeader *piRTPHeader) |
void | UpdateJitter (IRTPHeader *pIRTPHeader) |
void | UpdateSequence (IRTPHeader *piRTPHeader) |
void | UpdateSequenceNumbers (ssrc_t ulSequenceNo) |
void | IncrementPacketCounters (void) |
void | UpdateLostPackets (void) |
unsigned long | LoadRemoteSSRC (ssrc_t *pulPayloadBuffer) |
unsigned long | LoadLossStatistics (uint32_t *pulPayloadBuffer) |
unsigned long | LoadExtendedSequence (uint32_t *pulPayloadBuffer) |
unsigned long | LoadJitter (uint32_t *pulPayloadBuffer) |
unsigned long | LoadReportTimes (uint32_t *pulPayloadBuffer) |
unsigned long | ExtractRemoteSSRC (uint32_t *pulPayloadBuffer) |
unsigned long | ExtractLossStatistics (uint32_t *pulPayloadBuffer) |
unsigned long | ExtractExtendedSequence (uint32_t *pulPayloadBuffer) |
unsigned long | ExtractJitter (uint32_t *pulPayloadBuffer) |
unsigned long | ExtractReportTimes (uint32_t *pulPayloadBuffer) |
void | ResetPeriodCounts (void) |
void | ResetStatistics (void) |
Private Attributes | |
CRITICAL_SECTION | m_csSynchronized |
ssrc_t | m_ulRemoteSSRC |
uint32_t | m_ulTotalPacketCount |
uint32_t | m_ulPeriodPacketCount |
uint32_t | m_ulPeriodPacketLoss |
uint32_t | m_ulFractionalLoss |
uint32_t | m_ulCumulativeLoss |
uint32_t | m_ulFirstSequenceNo |
uint32_t | m_ulLastSequenceNo |
uint32_t | m_ulSequenceWraps |
uint32_t | m_ulHighestSequenceNo |
uint32_t | m_ulLastPeriodExpectedCount |
uint32_t | m_ulLastPeriodPacketCount |
uint32_t | m_ulLastPacketSendTime |
uint32_t | m_ulLastPacketReceiveTime |
uint32_t | m_ulMeanJitter |
uint32_t | m_ulLastSRTimestamp |
double | m_dLastSRRcvdTimestamp |
uint32_t | m_ulSRDelay |
uint32_t | m_ulCachedFractionalLoss |
uint32_t | m_ulCachedCumulativeLoss |
uint32_t | m_ulCachedHighestSequenceNo |
uint32_t | m_ulCachedMeanJitter |
uint32_t | m_ulCachedLastSRTimestamp |
uint32_t | m_ulCachedSRDelay |
int | mTotalPackets |
int | mTotalWarnings |
Additional Inherited Members | |
Static Public Member Functions inherited from CBaseClass | |
static bool | AllowDeletes (void) |
static void | s_SetAllowDeletes (int v) |
Static Public Member Functions inherited from CRTCPHeader | |
static int | VetPacket (unsigned char *buffer, int bufferLen) |
Public Attributes inherited from CBaseClass | |
bool | m_bInitialized |
bool | m_bAutomatic |
int | m_ulReferences |
Static Public Attributes inherited from CBaseClass | |
static bool | s_bAllowDeletes = true |
Protected Member Functions inherited from CRTCPHeader | |
unsigned long | FormatRTCPHeader (unsigned char *puchRTCPBuffer, unsigned long ulPadding, unsigned long ulCount, unsigned long ulPayloadLength) |
bool | ParseRTCPHeader (unsigned char *puchRTCPBuffer) |
Protected Attributes inherited from CRTCPHeader | |
unsigned long | m_ulVersion |
unsigned long | m_ulPadding |
unsigned long | m_ulCount |
RTCP_REPORTS_ET | m_etPayloadType |
unsigned long | m_ulLength |
unsigned long | m_ulSSRC |
Class Name: CReceiverReport
Inheritance: CRTCPHeader - RTCP Header Base Class
Interfaces: IReceiverReport - RTCP Receiver Report Interface
Description: The CReceiverReport Class coordinates the processing and generation of RTCP receiver reports associated with either an inbound or outbound RTP connection.
Notes: CReceiverReport is derived from CBaseClass which provides basic Initialization and reference counting support.
CReceiverReport | ( | ssrc_t | ulSSRC = 0 , |
unsigned long | ulVersion = 2 |
||
) |
Method Name: CReceiverReport() - Constructor
Inputs: ssrc_t ulSSRC - The the Identifier for this source uint32_t ulVersion - Version of the RFC Standard being followed
Outputs: None
Returns: None
Description: Performs routine CReceiverReport object initialization.
Usage Notes: A CReceiverReport object shall be created by the CRTCPRender with this constructor. The Sender shall be responsible for maintain receiver statistics related to an outbound RTP connection. The CReceiverReport shall pass the SSRC and version number to the CRTCPHeader at object construction.
~CReceiverReport | ( | void | ) |
Method Name: ~CReceiverReport() - Destructor
Inputs: None
Outputs: None
Returns: None
Description: Shall deallocated and/or release all resources which was acquired over the course of runtime.
Usage Notes:
void SetRTPStatistics | ( | IRTPHeader * | piRTPHeader | ) |
Method Name: SetRTPStatistics
Inputs: IRTPHeader *piRTPHeader - RTP Packet Header received from RTP Source
Outputs: None
Returns: void
Description: Takes the RTPHeader interface passed by the RTP Source object and updates Receiver Report statistics based upon its contents.
Usage Notes:
void SetLastRcvdSRTime | ( | uint32_t | aulNTPTimestamp[] | ) |
Method Name: SetLastRcvdSRTime
Inputs: uint32_t aulNTPTimestamp[]
Outputs: None
Returns: void
Description: Store the RTP timestamp from the last Sender Report received and store the time that this report was received on the system.
Usage Notes:
void GetReceiverStatistics | ( | uint32_t * | pulFractionalLoss, |
uint32_t * | pulCumulativeLoss, | ||
uint32_t * | pulHighestSequenceNo, | ||
uint32_t * | pulInterarrivalJitter, | ||
uint32_t * | pulSRTimestamp, | ||
uint32_t * | pulPacketDelay | ||
) |
Method Name: GetReceiverStatistics
Inputs: None
Outputs: uint32_t *pulFractionalLoss
Returns: void
Description: Returns a number of receiver report statistics associated with an inbound or outbound RTP connection.
Usage Notes:
unsigned long FormatReceiverReport | ( | bool | bSRPresent, |
unsigned char * | puchReportBuffer, | ||
unsigned long | ulBufferSize | ||
) |
Method Name: FormatReceiverReport
Inputs: bool bSRPresent
Outputs: unsigned char *puchReportBuffer
Returns: unsigned long
Description: Constructs a Receiver report using the buffer passed in by the caller. A Receiver Report may be appended to the contents of a Sender Report or sent along in the case where no data was transmitted during the reporting period. The header flag set to True shall cause the Receiver Report to be appended while False will cause a header to be prepended to the Report information.
A call to this method shall cause all period counts to be reset.
Usage Notes: The header of the RTCP Report shall be formatted by delegating to the base class.
unsigned long ParseReceiverReport | ( | bool | bHeader, |
unsigned char * | puchReportBuffer | ||
) |
Method Name: ParseReceiverReport
Inputs: boolean bHeader
Outputs:
Returns: unsigned long
Description: Processes a Receiver report using the buffer passed in by the caller. The header flag shall identify whether the report is prepended with a header.
Usage Notes: The header of the RTCP Report, if provided, shall be parsed by delegating to the base class.
|
inlinevirtual |
Method Name: GetSSRC
Inputs: None
Outputs: None
Returns: ssrc_t - The SSRC of the Bye Report
Description: Returns the SSRC Associated with the Bye Report.
Usage Notes:
Reimplemented from CRTCPHeader.
|
virtual |
Method Name: SetSSRC
Inputs: ssrc_t ulSSRC - Source ID
Outputs: None
Returns: void
Description: Stores the Source Identifier associated with an RTP connection.
Usage Notes:
Reimplemented from CRTCPHeader.
|
private |
Macro Name: DECLARE_IBASE_M
Inputs: None
Outputs: None
Returns: None
Description: This implements the IBaseClass functions used and exposed by derived classes.
Usage Notes:
Method Name: SetRemoteSSRC
Inputs: IRTPHeader *piRTPHeader
Outputs: None
Returns: void
Description: Stores the Source Identifier associated with an RTP source.
Usage Notes:
|
private |
Method Name: UpdateJitter
Inputs: None
Outputs: None
Returns: void
Description: This method shall use the current and previous packet send and receive time to calculate interarrival jitter. The jitter calculated shall be used to update cumulative jitter and average jitter statistics.
Usage Notes:
|
private |
Method Name: UpdateSequence
Inputs: IRTPHeader *piRTPHeader
Outputs: None
Returns: None
Description: This method shall queue the RTP Header to a packet sequencing list and update the Highest Sequence Number statistic. It shall then evaluate the sequence list to determine whether any packets have been lost. Detection of one or more lost packets shall cause the UpdatePacketLoss() to be called with the number of packets lost.
Usage Notes:
|
private |
Method Name: UpdateSequenceNumbers
Inputs: IRTPHeader *piRTPHeader
Outputs: None
Returns: void
Description: This method shall calculate the highest extended sequence number. This value shall be a combination of the highest sequence number received (low 16 bits) and the number of sequence number cycles (high 16 bits).
Usage Notes:
|
private |
Method Name: IncrementPacketCounters
Inputs: None
Outputs: None
Returns: void
Description: This method shall increment both the period and cumulative packet counters.
Usage Notes:
|
private |
Method Name: UpdateLostPackets
Inputs: None
Outputs: None
Returns: void
Description: This method shall update the packet loss counts for the period and the session as well as calculate the fractional packet loss for the period.
Usage Notes:
|
private |
Method Name: LoadRemoteSSRC
Inputs: ssrc_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall load the SSRC ID of the reportee into the payload buffer.
Usage Notes:
|
private |
Method Name: LoadLossStatistics
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall load the fractional and cumulative loss statistics into the payload buffer.
Usage Notes:
|
private |
Method Name: LoadExtendedSequence
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall load the extended highest sequence number. This is the number of times the 16 bit sequence number has wrapped shifted into the high 16 bits with the actual sequence number in the low 16 bits.
Usage Notes:
|
private |
Method Name: LoadJitter
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall load the RTP packet interarrival jitter statistic. This is an estimate of the statistical variance of the RTP data packet interarrival time, measured in timestamp units and expressed as an unsigned integer.
Usage Notes:
|
private |
Method Name: LoadReportTimes
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall load the timestamp of the last SR Report received from an SSRC in addition to loading the delay between our receiving this SR packet and responding with an RR packet.
Usage Notes:
|
private |
Method Name: ExtractRemoteSSRC
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall store the SSRC ID of the reportee found in the payload buffer.
Usage Notes:
|
private |
Method Name: ExtractLossStatistics
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall store the fractional and cumulative loss statistics from the payload buffer.
Usage Notes:
|
private |
Method Name: ExtractExtendedSequence
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall extract the extended highest sequence number. This is the number of times the 16 bit sequence number has wrapped shifted into the high 16 bits with the actual sequence number in the low 16 bits.
Usage Notes:
|
private |
Method Name: ExtractJitter
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall extract the RTP packet interarrival jitter statistic. This is an estimate of the statistical variance of the RTP data packet interarrival time, measured in timestamp units and expressed as an unsigned integer.
Usage Notes:
|
private |
Method Name: ExtractReportTimes
Inputs: uint32_t *pulPayloadBuffer
Outputs: None
Returns: unsigned long
Description: This method shall extract the timestamp of the last SR Report received from an SSRC in addition to loading the delay between our receiving this SR packet and responding with an RR packet.
Usage Notes:
|
private |
Method Name: ResetPeriodCounts
Inputs: None
Outputs: None
Returns: void
Description: This method shall reset all period counters and accumulators.
Usage Notes:
|
private |
Method Name: ResetStatistics
Inputs: None
Outputs: None
Returns: void
Description: This method shall reset all receiver report statistics. A reset shall occur when the SSRC ID is reset due to a collision with a participating source.
Usage Notes:
|
private |
Attribute Name: m_csSynchronized
Type: CRITICAL_SECTION
Description: This is a critical section used to synchronize thread access to this class. This shall prevent several contending threads from executing interleaving linked list operations.
|
private |
Attribute Name: m_ulRemoteSSRC
Type: long
Description: This member shall store the SSRC ID of the FE participant engaged in an RTP connection.
|
private |
Attribute Name: m_ulTotalPacketCount
Type: long
Description: This member shall store the number of packets received since the start of the inbound RTP connection.
|
private |
Attribute Name: m_ulPeriodPacketCount
Type: uint32_t
Description: This member shall store the number of packets received over the reporting period.
|
private |
Attribute Name: m_ulPeriodPacketLoss
Type: uint32_t
Description: This member shall store the number of packets lost over the reporting period.
|
private |
Attribute Name: m_ulFractionalLoss
Type: uint32_t
Description: This member shall store the Fractional Packet Loss express as m_ulPeriodPacketLoss / m_ulPeriodPacketCount + m_ulPeriodPacketLoss
|
private |
Attribute Name: m_ulCumulativeLoss
Type: uint32_t
Description: This member shall store the cumulative packet loss since the start of the inbound RTP connection.
|
private |
Attribute Name: m_ulFirstSequenceNo
Type: uint32_t
Description: This member shall store the first sequence number received in an inbound RTP data packet.
|
private |
Attribute Name: m_ulLastSequenceNo
Type: uint32_t
Description: This member shall store the last sequence number received in an inbound RTP data packet.
|
private |
Attribute Name: m_ulSequenceWraps
Type: uint32_t
Description: This member shall store the number of time the sequence number has wrapped given its 16 bit resolution.
|
private |
Attribute Name: m_ulHighestSequenceNo
Type: uint32_t
Description: This member shall store the highest sequence number received in an inbound RTP data packet in the low 16 bits and the corresponding count of sequence number cycles in the most significant 16 bits.
|
private |
Attribute Name: m_ulLastPeriodExpectedCount
Type: uint32_t
Description: This member shall store the number of packets expected for the last reporting period. This calculation is based on the highest and first sequence numbers acquired for that period.
|
private |
Attribute Name: m_ulLastPeriodPacketCount
Type: uint32_t
Description: This member shall store the number of actual packets received over the previous reporting period.
|
private |
Attribute Name: m_ulLastPacketSendTime
Type: uint32_t
Description: This member shall store the RTP timestamp associated with the last RTP packet received.
|
private |
Attribute Name: m_ulLastPacketReceiveTime
Type: uint32_t
Description: This member shall store the receive timestamp associated with the last RTP packet received.
|
private |
Attribute Name: m_ulMeanJitter
Type: uint32_t
Description: This member shall store the mean interarrival jitter.
|
private |
Attribute Name: m_ulLastSRTimestamp
Type: uint32_t
Description: This member shall store the timestamp for the last Send Report sent by the FE. This is the middle 32 bits of the NTP timestamp of the SR.
|
private |
Attribute Name: m_dLastSRRcvdTimestamp
Type: double
Description: This member shall store the timestamp for the last Send Report received from the FE. This is the system time when the packet was received.
|
private |
Attribute Name: m_ulSRDelay
Type: uint32_t
Description: This member shall store the delay between the formation of this Receiver Report and the last Send Report received for this RTP connection.
|
private |
Attribute Name: m_ulCached....
Type: uint32_t
Description: These member shall store the statistics from the last reporting period so that they may be viewed by interested clients. This is only a temporary solution that should be addressed through creating a copy of the Receiver Report object after the reporting period has expired.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |