rtp.h
Go to the documentation of this file.
/*
* rtp.h
*
* RTP protocol handler
*
* Open H323 Library
*
* Copyright (c) 1998-2001 Equivalence Pty. Ltd.
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Open H323 Library.
*
* The Initial Developer of the Original Code is Equivalence Pty. Ltd.
*
* Portions of this code were written with the assisance of funding from
* Vovida Networks, Inc. http://www.vovida.com.
*
* Contributor(s): ______________________________________.
*
* $Revision: 27699 $
* $Author: rjongbloed $
* $Date: 2012-05-24 20:35:37 -0500 (Thu, 24 May 2012) $
*/
#ifndef OPAL_RTP_RTP_H
#define OPAL_RTP_RTP_H
#ifdef P_USE_PRAGMA
#pragma interface
#endif
#include <opal/buildopts.h>
#include <ptlib/sockets.h>
#include <ptlib/safecoll.h>
#include <list>
class RTP_JitterBuffer;
class PNatMethod;
class OpalSecurityMode;
class RTCP_XR_Metrics;
//
// class to hold the QoS definitions for an RTP channel
class RTP_QOS : public PObject
{
PCLASSINFO(RTP_QOS,PObject);
public:
PQoS dataQoS;
PQoS ctrlQoS;
};
// Real Time Protocol - IETF RFC1889 and RFC1890
class RTP_DataFrame : public PBYTEArray
{
PCLASSINFO(RTP_DataFrame, PBYTEArray);
public:
RTP_DataFrame(PINDEX payloadSize = 0, PINDEX bufferSize = 0);
RTP_DataFrame(const BYTE * data, PINDEX len, PBoolean dynamic = true);
enum {
ProtocolVersion = 2,
MinHeaderSize = 12,
// Max safe MTU size (576 bytes as per RFC879) minus IP, UDP an RTP headers
MaxMtuPayloadSize = (576-20-16-12)
};
enum PayloadTypes {
PCMU, // G.711 u-Law
FS1016, // Federal Standard 1016 CELP
G721, // ADPCM - Subsumed by G.726
G726 = G721,
GSM, // GSM 06.10
G7231, // G.723.1 at 6.3kbps or 5.3 kbps
DVI4_8k, // DVI4 at 8kHz sample rate
DVI4_16k, // DVI4 at 16kHz sample rate
LPC, // LPC-10 Linear Predictive CELP
PCMA, // G.711 A-Law
G722, // G.722
L16_Stereo, // 16 bit linear PCM
L16_Mono, // 16 bit linear PCM
G723, // G.723
CN, // Confort Noise
MPA, // MPEG1 or MPEG2 audio
G728, // G.728 16kbps CELP
DVI4_11k, // DVI4 at 11kHz sample rate
DVI4_22k, // DVI4 at 22kHz sample rate
G729, // G.729 8kbps
Cisco_CN, // Cisco systems comfort noise (unofficial)
CelB = 25, // Sun Systems Cell-B video
JPEG, // Motion JPEG
H261 = 31, // H.261
MPV, // MPEG1 or MPEG2 video
MP2T, // MPEG2 transport system
H263, // H.263
T38 = 38, // T.38 (internal)
LastKnownPayloadType,
DynamicBase = 96,
MaxPayloadType = 127,
IllegalPayloadType
};
unsigned GetVersion() const { return (theArray[0]>>6)&3; }
PBoolean GetExtension() const { return (theArray[0]&0x10) != 0; }
void SetExtension(PBoolean ext);
PBoolean GetMarker() const { return (theArray[1]&0x80) != 0; }
void SetMarker(PBoolean m);
bool GetPadding() const { return (theArray[0]&0x20) != 0; }
void SetPadding(bool v) { if (v) theArray[0] |= 0x20; else theArray[0] &= 0xdf; }
BYTE * GetPaddingPtr() const { return (BYTE *)(theArray+m_headerSize+m_payloadSize); }
unsigned GetPaddingSize() const { return m_paddingSize; }
bool SetPaddingSize(PINDEX sz);
PayloadTypes GetPayloadType() const { return (PayloadTypes)(theArray[1]&0x7f); }
void SetPayloadType(PayloadTypes t);
WORD GetSequenceNumber() const { return *(PUInt16b *)&theArray[2]; }
void SetSequenceNumber(WORD n) { *(PUInt16b *)&theArray[2] = n; }
DWORD GetTimestamp() const { return *(PUInt32b *)&theArray[4]; }
void SetTimestamp(DWORD t) { *(PUInt32b *)&theArray[4] = t; }
DWORD GetSyncSource() const { return *(PUInt32b *)&theArray[8]; }
void SetSyncSource(DWORD s) { *(PUInt32b *)&theArray[8] = s; }
PINDEX GetContribSrcCount() const { return theArray[0]&0xf; }
DWORD GetContribSource(PINDEX idx) const;
void SetContribSource(PINDEX idx, DWORD src);
PINDEX GetHeaderSize() const { return m_headerSize; }
int GetExtensionType() const; // -1 is no extension
void SetExtensionType(int type);
PINDEX GetExtensionSizeDWORDs() const; // get the number of 32 bit words in the extension (excluding the header).
bool SetExtensionSizeDWORDs(PINDEX sz); // set the number of 32 bit words in the extension (excluding the header)
BYTE * GetExtensionPtr() const;
PINDEX GetPayloadSize() const { return m_payloadSize; }
bool SetPayloadSize(PINDEX sz);
BYTE * GetPayloadPtr() const { return (BYTE *)(theArray+m_headerSize); }
virtual PObject * Clone() const { return new RTP_DataFrame(*this); }
virtual void PrintOn(ostream & strm) const;
// Note this sets the whole packet length, and calculates the various
// sub-section sizes: header payload and padding.
bool SetPacketSize(PINDEX sz);
protected:
PINDEX m_headerSize;
PINDEX m_payloadSize;
PINDEX m_paddingSize;
#if PTRACING
friend ostream & operator<<(ostream & o, PayloadTypes t);
#endif
};
PLIST(RTP_DataFrameList, RTP_DataFrame);
class RTP_ControlFrame : public PBYTEArray
{
PCLASSINFO(RTP_ControlFrame, PBYTEArray);
public:
RTP_ControlFrame(PINDEX compoundSize = 2048);
unsigned GetVersion() const { return (BYTE)theArray[compoundOffset]>>6; }
unsigned GetCount() const { return (BYTE)theArray[compoundOffset]&0x1f; }
void SetCount(unsigned count);
enum PayloadTypes {
e_IntraFrameRequest = 192,
e_SenderReport = 200,
e_ReceiverReport = 201,
e_SourceDescription = 202,
e_Goodbye = 203,
e_ApplDefined = 204,
e_TransportLayerFeedBack = 205, // RFC4585
e_PayloadSpecificFeedBack = 206,
e_ExtendedReport = 207 // RFC3611
};
unsigned GetPayloadType() const { return (BYTE)theArray[compoundOffset+1]; }
void SetPayloadType(unsigned t);
PINDEX GetPayloadSize() const { return 4*(*(PUInt16b *)&theArray[compoundOffset+2]); }
void SetPayloadSize(PINDEX sz);
BYTE * GetPayloadPtr() const;
PBoolean ReadNextPacket();
PBoolean StartNewPacket();
void EndPacket();
PINDEX GetCompoundSize() const;
void Reset(PINDEX size);
#pragma pack(1)
struct ReceiverReport {
PUInt32b ssrc; /* data source being reported */
BYTE fraction; /* fraction lost since last SR/RR */
BYTE lost[3]; /* cumulative number of packets lost (signed!) */
PUInt32b last_seq; /* extended last sequence number received */
PUInt32b jitter; /* interarrival jitter */
PUInt32b lsr; /* last SR packet from this source */
PUInt32b dlsr; /* delay since last SR packet */
unsigned GetLostPackets() const { return (lost[0]<<16U)+(lost[1]<<8U)+lost[2]; }
void SetLostPackets(unsigned lost);
};
struct SenderReport {
PUInt32b ntp_sec; /* NTP timestamp */
PUInt32b ntp_frac;
PUInt32b rtp_ts; /* RTP timestamp */
PUInt32b psent; /* packets sent */
PUInt32b osent; /* octets sent */
};
struct ExtendedReport {
/* VoIP Metrics Report Block */
BYTE bt; /* block type */
BYTE type_specific; /* determined by the block definition */
PUInt16b length; /* length of the report block */
PUInt32b ssrc; /* data source being reported */
BYTE loss_rate; /* fraction of RTP data packets lost */
BYTE discard_rate; /* fraction of RTP data packets discarded */
BYTE burst_density; /* fraction of RTP data packets within burst periods */
BYTE gap_density; /* fraction of RTP data packets within inter-burst gaps */
PUInt16b burst_duration; /* the mean duration, in ms, of burst periods */
PUInt16b gap_duration; /* the mean duration, in ms, of gap periods */
PUInt16b round_trip_delay; /* the most recently calculated round trip time */
PUInt16b end_system_delay; /* the most recently estimates end system delay */
BYTE signal_level; /* voice signal level related to 0 dBm */
BYTE noise_level; /* ratio of the silent background level to 0 dBm */
BYTE rerl; /* residual echo return loss */
BYTE gmin; /* gap threshold */
BYTE r_factor; /* voice quality metric of the call */
BYTE ext_r_factor; /* external R factor */
BYTE mos_lq; /* MOS for listen quality */
BYTE mos_cq; /* MOS for conversational quality */
BYTE rx_config; /* receiver configuration byte */
BYTE reserved; /* reserved for future definition */
PUInt16b jb_nominal; /* current nominal jitter buffer delay, in ms */
PUInt16b jb_maximum; /* current maximum jitter buffer delay, in ms */
PUInt16b jb_absolute; /* current absolute maximum jitter buffer delay, in ms */
};
enum DescriptionTypes {
e_END,
e_CNAME,
e_NAME,
e_EMAIL,
e_PHONE,
e_LOC,
e_TOOL,
e_NOTE,
e_PRIV,
NumDescriptionTypes
};
struct SourceDescription {
PUInt32b src; /* first SSRC/CSRC */
struct Item {
BYTE type; /* type of SDES item (enum DescriptionTypes) */
BYTE length; /* length of SDES item (in octets) */
char data[1]; /* text, not zero-terminated */
/* WARNING, SourceDescription may not be big enough to contain length and data, for
instance, when type == RTP_ControlFrame::e_END.
Be careful whan calling the following function of it may read to over to
memory allocated*/
unsigned int GetLengthTotal() const {return (unsigned int)(length + 2);}
const Item * GetNextItem() const { return (const Item *)((char *)this + length + 2); }
Item * GetNextItem() { return (Item *)((char *)this + length + 2); }
} item[1]; /* list of SDES items */
};
void StartSourceDescription(
DWORD src
);
void AddSourceDescriptionItem(
unsigned type,
const PString & data
);
// RFC4585 Feedback Message Type (FMT)
unsigned GetFbType() const { return (BYTE)theArray[compoundOffset]&0x1f; }
void SetFbType(unsigned type, PINDEX fciSize);
enum PayloadSpecificFbTypes {
e_PictureLossIndication = 1,
e_SliceLostIndication,
e_ReferencePictureSelectionIndication,
e_FullIntraRequest, //RFC5104
e_TemporalSpatialTradeOffRequest,
e_TemporalSpatialTradeOffNotification,
e_VideoBackChannelMessage,
e_ApplicationLayerFbMessage = 15
};
struct FbFCI {
PUInt32b senderSSRC; /* data source of sender of message */
PUInt32b mediaSSRC; /* data source of media */
};
struct FbFIR {
FbFCI fci;
PUInt32b requestSSRC;
BYTE sequenceNUmber;
};
struct FbTSTO {
FbFCI fci;
PUInt32b requestSSRC;
BYTE sequenceNUmber;
BYTE reserver[2];
BYTE tradeOff;
};
#pragma pack()
protected:
PINDEX compoundOffset;
PINDEX payloadSize;
};
class RTP_Session;
#if OPAL_STATISTICS
class OpalMediaStatistics : public PObject
{
PCLASSINFO(OpalMediaStatistics, PObject);
public:
OpalMediaStatistics();
// General info (typicallly from RTP)
PUInt64 m_totalBytes;
unsigned m_totalPackets;
unsigned m_packetsLost;
unsigned m_packetsOutOfOrder;
unsigned m_packetsTooLate;
unsigned m_packetOverruns;
unsigned m_minimumPacketTime;
unsigned m_averagePacketTime;
unsigned m_maximumPacketTime;
// Audio
unsigned m_averageJitter;
unsigned m_maximumJitter;
unsigned m_jitterBufferDelay;
// Video
unsigned m_totalFrames;
unsigned m_keyFrames;
// Fax
#if OPAL_FAX
enum {
FaxNotStarted = -2,
FaxInProgress = -1,
FaxSuccessful = 0,
FaxErrorBase = 1
};
enum FaxCompression {
FaxCompressionUnknown,
FaxCompressionT4_1d,
FaxCompressionT4_2d,
FaxCompressionT6,
};
friend ostream & operator<<(ostream & strm, FaxCompression compression);
struct Fax {
Fax();
int m_result; // -2=not started, -1=progress, 0=success, >0=ended with error
char m_phase; // 'A', 'B', 'D'
int m_bitRate; // e.g. 14400, 9600
FaxCompression m_compression; // 0=N/A, 1=T.4 1d, 2=T.4 2d, 3=T.6
bool m_errorCorrection;
int m_txPages;
int m_rxPages;
int m_totalPages;
int m_imageSize; // In bytes
int m_resolutionX; // Pixels per inch
int m_resolutionY; // Pixels per inch
int m_pageWidth;
int m_pageHeight;
int m_badRows; // Total number of bad rows
int m_mostBadRows; // Longest run of bad rows
int m_errorCorrectionRetries;
PString m_stationId; // Remote station identifier
PString m_errorText;
} m_fax;
#endif
};
#endif
class RTP_UserData : public PObject
{
PCLASSINFO(RTP_UserData, PObject);
public:
virtual void OnTxStatistics(
const RTP_Session & session
) const;
virtual void OnRxStatistics(
const RTP_Session & session
) const;
#if OPAL_VIDEO
virtual void OnTxIntraFrameRequest(
const RTP_Session & session
) const;
virtual void OnRxIntraFrameRequest(
const RTP_Session & session
) const;
#endif
virtual void SessionFailing(
RTP_Session & session
);
};
class RTP_Encoding;
class RTP_Session : public PObject
{
PCLASSINFO(RTP_Session, PObject);
public:
struct Params {
Params()
: id(0)
, userData(NULL)
, autoDelete(true)
, isAudio(false)
, remoteIsNAT(false)
{ }
PString encoding;
unsigned id;
RTP_UserData * userData;
bool autoDelete;
bool isAudio;
bool remoteIsNAT;
};
RTP_Session(
const Params & options
);
~RTP_Session();
void SetJitterBufferSize(
unsigned minJitterDelay,
unsigned maxJitterDelay,
unsigned timeUnits = 0,
PINDEX packetSize = 2048
);
unsigned GetJitterBufferSize() const;
unsigned GetJitterBufferDelay() const { return GetJitterBufferSize()/GetJitterTimeUnits(); }
unsigned GetJitterTimeUnits() const { return m_timeUnits; }
virtual PBoolean ModifyQOS(RTP_QOS * )
{ return false; }
virtual PBoolean ReadBufferedData(
RTP_DataFrame & frame
);
virtual PBoolean ReadData(
RTP_DataFrame & frame
) = 0;
virtual void FlushData();
virtual PBoolean WriteData(
RTP_DataFrame & frame
) = 0;
virtual PBoolean WriteOOBData(
RTP_DataFrame & frame,
bool rewriteTimeStamp = true
);
virtual PBoolean WriteControl(
RTP_ControlFrame & frame
) = 0;
virtual bool Close(
PBoolean reading
) = 0;
virtual void Reopen(
PBoolean isReading
) = 0;
virtual PString GetLocalHostName() = 0;
#if OPAL_STATISTICS
virtual void GetStatistics(OpalMediaStatistics & statistics, bool receiver) const;
#endif
enum SendReceiveStatus {
e_ProcessPacket,
e_IgnorePacket,
e_AbortTransport
};
virtual SendReceiveStatus OnSendData(RTP_DataFrame & frame);
virtual SendReceiveStatus Internal_OnSendData(RTP_DataFrame & frame);
virtual SendReceiveStatus OnSendControl(RTP_ControlFrame & frame, PINDEX & len);
virtual SendReceiveStatus Internal_OnSendControl(RTP_ControlFrame & frame, PINDEX & len);
virtual SendReceiveStatus OnReceiveData(RTP_DataFrame & frame);
virtual SendReceiveStatus Internal_OnReceiveData(RTP_DataFrame & frame);
virtual SendReceiveStatus OnReceiveControl(RTP_ControlFrame & frame);
class ReceiverReport : public PObject {
PCLASSINFO(ReceiverReport, PObject);
public:
void PrintOn(ostream &) const;
DWORD sourceIdentifier;
DWORD fractionLost; /* fraction lost since last SR/RR */
DWORD totalLost; /* cumulative number of packets lost (signed!) */
DWORD lastSequenceNumber; /* extended last sequence number received */
DWORD jitter; /* interarrival jitter */
PTimeInterval lastTimestamp;/* last SR packet from this source */
PTimeInterval delay; /* delay since last SR packet */
};
PARRAY(ReceiverReportArray, ReceiverReport);
class SenderReport : public PObject {
PCLASSINFO(SenderReport, PObject);
public:
void PrintOn(ostream &) const;
DWORD sourceIdentifier;
PTime realTimestamp;
DWORD rtpTimestamp;
DWORD packetsSent;
DWORD octetsSent;
};
virtual void OnRxSenderReport(const SenderReport & sender,
const ReceiverReportArray & reports);
virtual void OnRxReceiverReport(DWORD src,
const ReceiverReportArray & reports);
virtual void OnReceiverReports(const ReceiverReportArray & reports);
class SourceDescription : public PObject {
PCLASSINFO(SourceDescription, PObject);
public:
SourceDescription(DWORD src) { sourceIdentifier = src; }
void PrintOn(ostream &) const;
DWORD sourceIdentifier;
POrdinalToString items;
};
PARRAY(SourceDescriptionArray, SourceDescription);
virtual void OnRxSourceDescription(const SourceDescriptionArray & descriptions);
virtual void OnRxGoodbye(const PDWORDArray & sources,
const PString & reason);
virtual void OnRxApplDefined(const PString & type, unsigned subtype, DWORD src,
const BYTE * data, PINDEX size);
#if OPAL_RTCP_XR
class ExtendedReport : public PObject {
PCLASSINFO(ExtendedReport, PObject);
public:
void PrintOn(ostream &) const;
DWORD sourceIdentifier;
DWORD lossRate; /* fraction of RTP data packets lost */
DWORD discardRate; /* fraction of RTP data packets discarded */
DWORD burstDensity; /* fraction of RTP data packets within burst periods */
DWORD gapDensity; /* fraction of RTP data packets within inter-burst gaps */
DWORD roundTripDelay; /* the most recently calculated round trip time */
DWORD RFactor; /* voice quality metric of the call */
DWORD mosLQ; /* MOS for listen quality */
DWORD mosCQ; /* MOS for conversational quality */
DWORD jbNominal; /* current nominal jitter buffer delay, in ms */
DWORD jbMaximum; /* current maximum jitter buffer delay, in ms */
DWORD jbAbsolute; /* current absolute maximum jitter buffer delay, in ms */
};
PARRAY(ExtendedReportArray, ExtendedReport);
virtual void OnRxExtendedReport(
DWORD src,
const ExtendedReportArray & reports
);
RTCP_XR_Metrics * GetExtendedMetrics() const { return m_metrics; }
#endif // OPAL_RTCP_XR
unsigned GetSessionID() const { return sessionID; }
void SetSessionID(unsigned id) { sessionID = id; }
bool IsAudio() const { return isAudio; }
void SetAudio(
bool aud
) { isAudio = aud; }
PString GetCanonicalName() const;
void SetCanonicalName(const PString & name);
PString GetToolName() const;
void SetToolName(const PString & name);
RTP_UserData * GetUserData() const { return userData; }
void SetUserData(
RTP_UserData * data,
PBoolean autoDeleteUserData = true
);
DWORD GetSyncSourceOut() const { return syncSourceOut; }
bool AllowAnySyncSource() const { return allowAnySyncSource; }
void SetAnySyncSource(
bool allow
) { allowAnySyncSource = allow; }
void SetIgnorePayloadTypeChanges(
PBoolean ignore
) { ignorePayloadTypeChanges = ignore; }
const PTimeInterval & GetReportTimeInterval() { return m_reportTimer.GetResetTime(); }
void SetReportTimeInterval(
const PTimeInterval & interval
) { m_reportTimer.RunContinuous(interval); }
unsigned GetTxStatisticsInterval() { return txStatisticsInterval; }
void SetTxStatisticsInterval(
unsigned packets
);
unsigned GetRxStatisticsInterval() { return rxStatisticsInterval; }
void SetRxStatisticsInterval(
unsigned packets
);
void ClearStatistics();
DWORD GetPacketsSent() const { return packetsSent; }
DWORD GetOctetsSent() const { return octetsSent; }
DWORD GetPacketsReceived() const { return packetsReceived; }
DWORD GetOctetsReceived() const { return octetsReceived; }
DWORD GetPacketsLost() const { return packetsLost; }
DWORD GetPacketsLostByRemote() const { return packetsLostByRemote; }
DWORD GetPacketsOutOfOrder() const { return packetsOutOfOrder; }
DWORD GetPacketsTooLate() const;
DWORD GetPacketOverruns() const;
DWORD GetAverageSendTime() const { return averageSendTime; }
DWORD GetMarkerRecvCount() const { return markerRecvCount; }
DWORD GetMarkerSendCount() const { return markerSendCount; }
DWORD GetMaximumSendTime() const { return maximumSendTime; }
DWORD GetMinimumSendTime() const { return minimumSendTime; }
DWORD GetAverageReceiveTime() const { return averageReceiveTime; }
DWORD GetMaximumReceiveTime() const { return maximumReceiveTime; }
DWORD GetMinimumReceiveTime() const { return minimumReceiveTime; }
enum { JitterRoundingGuardBits = 4 };
DWORD GetAvgJitterTime() const { return (jitterLevel>>JitterRoundingGuardBits)/GetJitterTimeUnits(); }
DWORD GetMaxJitterTime() const { return (maximumJitterLevel>>JitterRoundingGuardBits)/GetJitterTimeUnits(); }
DWORD GetJitterTimeOnRemote() const { return jitterLevelOnRemote/GetJitterTimeUnits(); }
virtual void SetCloseOnBYE(PBoolean v) { closeOnBye = v; }
virtual void SendIntraFrameRequest(bool rfc2032, bool pictureLoss);
virtual void SendTemporalSpatialTradeOff(unsigned tradeOff);
void SetNextSentSequenceNumber(WORD num) { lastSentSequenceNumber = (WORD)(num-1); }
virtual PString GetEncoding() const { return m_encoding; }
virtual void SetEncoding(const PString & newEncoding);
DWORD GetSyncSourceIn() const { return syncSourceIn; }
class EncodingLock
{
public:
EncodingLock(RTP_Session & _session);
~EncodingLock();
__inline RTP_Encoding * operator->() const { return m_encodingHandler; }
protected:
RTP_Session & session;
RTP_Encoding * m_encodingHandler;
};
friend class EncodingLock;
void SetFailed(bool v)
{ failed = v; }
bool HasFailed() const
{ return failed; }
typedef PNotifierTemplate<SendReceiveStatus &> FilterNotifier;
#define PDECLARE_RTPFilterNotifier(cls, fn) PDECLARE_NOTIFIER2(RTP_DataFrame, cls, fn, RTP_Session::SendReceiveStatus &)
#define PCREATE_RTPFilterNotifier(fn) PCREATE_NOTIFIER2(fn, RTP_Session::SendReceiveStatus &)
void AddFilter(const FilterNotifier & filter);
virtual void SendBYE();
protected:
RTP_Session::ReceiverReportArray BuildReceiverReportArray(const RTP_ControlFrame & frame, PINDEX offset);
void AddReceiverReport(RTP_ControlFrame::ReceiverReport & receiver);
PBoolean InsertReportPacket(RTP_ControlFrame & report);
PString m_encoding;
PMutex m_encodingMutex;
RTP_Encoding * m_encodingHandler;
unsigned sessionID;
bool isAudio;
unsigned m_timeUnits;
PString canonicalName;
PString toolName;
RTP_UserData * userData;
PBoolean autoDeleteUserData;
typedef PSafePtr<RTP_JitterBuffer, PSafePtrMultiThreaded> JitterBufferPtr;
JitterBufferPtr m_jitterBuffer;
DWORD syncSourceOut;
DWORD syncSourceIn;
DWORD lastSentTimestamp;
bool allowAnySyncSource;
bool allowOneSyncSourceChange;
PBoolean allowRemoteTransmitAddressChange;
PBoolean allowSequenceChange;
unsigned txStatisticsInterval;
unsigned rxStatisticsInterval;
WORD lastSentSequenceNumber;
WORD expectedSequenceNumber;
PTimeInterval lastSentPacketTime;
PTimeInterval lastReceivedPacketTime;
PTime lastSRTimestamp;
PTime lastSRReceiveTime;
PTimeInterval delaySinceLastSR;
WORD lastRRSequenceNumber;
bool resequenceOutOfOrderPackets;
unsigned consecutiveOutOfOrderPackets;
PTimeInterval outOfOrderWaitTime;
PTimeInterval outOfOrderPacketTime;
std::list<RTP_DataFrame> m_outOfOrderPackets;
void SaveOutOfOrderPacket(RTP_DataFrame & frame);
PMutex dataMutex;
DWORD timeStampOffs; // offset between incoming media timestamp and timeStampOut
PBoolean oobTimeStampBaseEstablished; // true if timeStampOffs has been established by media
DWORD oobTimeStampOutBase; // base timestamp value for oob data
PTimeInterval oobTimeStampBase; // base time for oob timestamp
// Statistics
PTime firstPacketSent;
DWORD packetsSent;
DWORD rtcpPacketsSent;
DWORD octetsSent;
PTime firstPacketReceived;
DWORD packetsReceived;
DWORD senderReportsReceived;
DWORD octetsReceived;
DWORD packetsLost;
DWORD packetsLostByRemote;
DWORD packetsOutOfOrder;
DWORD averageSendTime;
DWORD maximumSendTime;
DWORD minimumSendTime;
DWORD averageReceiveTime;
DWORD maximumReceiveTime;
DWORD minimumReceiveTime;
DWORD jitterLevel;
DWORD jitterLevelOnRemote;
DWORD maximumJitterLevel;
DWORD markerSendCount;
DWORD markerRecvCount;
unsigned txStatisticsCount;
unsigned rxStatisticsCount;
#if OPAL_RTCP_XR
// Calculate the VoIP Metrics for RTCP-XR
RTCP_XR_Metrics * m_metrics;
friend class RTCP_XR_Metrics;
#endif
DWORD averageSendTimeAccum;
DWORD maximumSendTimeAccum;
DWORD minimumSendTimeAccum;
DWORD averageReceiveTimeAccum;
DWORD maximumReceiveTimeAccum;
DWORD minimumReceiveTimeAccum;
DWORD packetsLostSinceLastRR;
DWORD lastTransitTime;
RTP_DataFrame::PayloadTypes lastReceivedPayloadType;
PBoolean ignorePayloadTypeChanges;
PMutex m_reportMutex;
PTimer m_reportTimer;
PDECLARE_NOTIFIER(PTimer, RTP_Session, SendReport);
PBoolean closeOnBye;
PBoolean byeSent;
bool failed;
list<FilterNotifier> m_filters;
};
class RTP_UDP : public RTP_Session
{
PCLASSINFO(RTP_UDP, RTP_Session);
public:
RTP_UDP(
const Params & options
);
~RTP_UDP();
virtual PBoolean ReadData(RTP_DataFrame & frame);
virtual PBoolean Internal_ReadData(RTP_DataFrame & frame);
virtual void FlushData();
virtual PBoolean WriteData(RTP_DataFrame & frame);
virtual PBoolean Internal_WriteData(RTP_DataFrame & frame);
virtual PBoolean WriteOOBData(RTP_DataFrame & frame, bool setTimeStamp = true);
virtual PBoolean WriteControl(RTP_ControlFrame & frame);
virtual bool Close(
PBoolean reading
);
virtual PString GetLocalHostName();
virtual PBoolean ModifyQOS(RTP_QOS * rtpqos);
virtual PBoolean Open(
PIPSocket::Address localAddress,
WORD portBase,
WORD portMax,
BYTE ipTypeOfService,
PNatMethod * natMethod = NULL,
RTP_QOS * rtpqos = NULL
);
virtual void Reopen(PBoolean isReading);
virtual PIPSocket::Address GetLocalAddress() const { return localAddress; }
virtual void SetLocalAddress(
const PIPSocket::Address & addr
) { localAddress = addr; }
PIPSocket::Address GetRemoteAddress() const { return remoteAddress; }
virtual WORD GetLocalDataPort() const { return localDataPort; }
virtual WORD GetLocalControlPort() const { return localControlPort; }
virtual WORD GetRemoteDataPort() const { return remoteDataPort; }
virtual WORD GetRemoteControlPort() const { return remoteControlPort; }
virtual PUDPSocket & GetDataSocket() { return *dataSocket; }
virtual PUDPSocket & GetControlSocket() { return *controlSocket; }
virtual PBoolean SetRemoteSocketInfo(
PIPSocket::Address address,
WORD port,
PBoolean isDataPort
);
virtual void ApplyQOS(
const PIPSocket::Address & addr
);
virtual int GetDataSocketHandle() const
{ return dataSocket != NULL ? dataSocket->GetHandle() : -1; }
virtual int GetControlSocketHandle() const
{ return controlSocket != NULL ? controlSocket->GetHandle() : -1; }
friend class RTP_Encoding;
virtual int WaitForPDU(PUDPSocket & dataSocket, PUDPSocket & controlSocket, const PTimeInterval & timer);
virtual int Internal_WaitForPDU(PUDPSocket & dataSocket, PUDPSocket & controlSocket, const PTimeInterval & timer);
virtual SendReceiveStatus ReadDataPDU(RTP_DataFrame & frame);
virtual SendReceiveStatus Internal_ReadDataPDU(RTP_DataFrame & frame);
virtual SendReceiveStatus OnReadTimeout(RTP_DataFrame & frame);
virtual SendReceiveStatus Internal_OnReadTimeout(RTP_DataFrame & frame);
virtual SendReceiveStatus ReadControlPDU();
virtual SendReceiveStatus ReadDataOrControlPDU(
BYTE * framePtr,
PINDEX frameSize,
PBoolean fromDataChannel
);
virtual bool WriteDataPDU(RTP_DataFrame & frame);
virtual bool WriteDataOrControlPDU(
const BYTE * framePtr,
PINDEX frameSize,
bool toDataChannel
);
virtual void SetEncoding(const PString & newEncoding);
protected:
PIPSocket::Address localAddress;
WORD localDataPort;
WORD localControlPort;
PIPSocket::Address remoteAddress;
WORD remoteDataPort;
WORD remoteControlPort;
PIPSocket::Address remoteTransmitAddress;
PUDPSocket * dataSocket;
PUDPSocket * controlSocket;
bool shutdownRead;
bool shutdownWrite;
bool appliedQOS;
bool remoteIsNAT;
bool localHasNAT;
bool m_firstControl;
int badTransmitCounter;
PTime badTransmitStart;
PTimer timerWriteDataIdle;
PDECLARE_NOTIFIER(PTimer, RTP_UDP, OnWriteDataIdle);
};
class RTP_UDP;
class RTP_Encoding
{
public:
RTP_Encoding();
virtual ~RTP_Encoding();
virtual void ApplyStringOptions(const PStringToString & /*stringOptions*/) {}
virtual void OnStart(RTP_Session & _rtpSession);
virtual void OnFinish();
virtual RTP_Session::SendReceiveStatus OnSendData(RTP_DataFrame & frame);
virtual PBoolean WriteData(RTP_DataFrame & frame, bool oob);
virtual PBoolean WriteDataPDU(RTP_DataFrame & frame);
virtual void OnWriteDataIdle() {}
virtual void SetWriteDataIdleTimer(PTimer &) {}
virtual RTP_Session::SendReceiveStatus OnSendControl(RTP_ControlFrame & frame, PINDEX & len);
virtual RTP_Session::SendReceiveStatus ReadDataPDU(RTP_DataFrame & frame);
virtual RTP_Session::SendReceiveStatus OnReceiveData(RTP_DataFrame & frame);
virtual RTP_Session::SendReceiveStatus OnReadTimeout(RTP_DataFrame & frame);
virtual PBoolean ReadData(RTP_DataFrame & frame);
virtual int WaitForPDU(PUDPSocket & dataSocket, PUDPSocket & controlSocket, const PTimeInterval &);
PMutex mutex;
unsigned refCount;
protected:
RTP_UDP * rtpUDP;
};
PFACTORY_LOAD(RTP_Encoding);
class SecureRTP_UDP : public RTP_UDP
{
PCLASSINFO(SecureRTP_UDP, RTP_UDP);
public:
SecureRTP_UDP(
const Params & options
);
~SecureRTP_UDP();
virtual void SetSecurityMode(OpalSecurityMode * srtpParms);
virtual OpalSecurityMode * GetSecurityParms() const;
protected:
OpalSecurityMode * securityParms;
};
#endif // OPAL_RTP_RTP_H
RTP_ControlFrame::FbTSTO::requestSSRC
PUInt32b requestSSRC
Definition: rtp.h:348
RTP_Session::maximumSendTimeAccum
DWORD maximumSendTimeAccum
Definition: rtp.h:1074
RTP_DataFrame::GetMarker
PBoolean GetMarker() const
Definition: rtp.h:130
RTP_DataFrame::SetExtension
void SetExtension(PBoolean ext)
RTP_DataFrame::PCMA
Definition: rtp.h:96
RTP_ControlFrame::e_NOTE
Definition: rtp.h:289
RTP_Session::timeStampOffs
DWORD timeStampOffs
Definition: rtp.h:1034
OpalMediaStatistics::Fax::m_phase
char m_phase
Definition: rtp.h:415
RTP_Session::GetSessionID
unsigned GetSessionID() const
Definition: rtp.h:736
RTP_DataFrame::SetSyncSource
void SetSyncSource(DWORD s)
Definition: rtp.h:150
RTP_UDP::GetControlSocketHandle
virtual int GetControlSocketHandle() const
Definition: rtp.h:1235
RTP_Session::ReceiverReport::lastTimestamp
PTimeInterval lastTimestamp
Definition: rtp.h:661
RTP_ControlFrame::ExtendedReport::noise_level
BYTE noise_level
Definition: rtp.h:267
OpalMediaStatistics::m_keyFrames
unsigned m_keyFrames
Definition: rtp.h:394
RTP_Session::GetMinimumReceiveTime
DWORD GetMinimumReceiveTime() const
Definition: rtp.h:916
RTP_Session::Params::id
unsigned id
Session ID for RTP channel.
Definition: rtp.h:519
RTP_DataFrame::G723
Definition: rtp.h:100
RTP_DataFrame::H261
Definition: rtp.h:111
RTP_DataFrame::IllegalPayloadType
Definition: rtp.h:122
RTP_ControlFrame::ExtendedReport::end_system_delay
PUInt16b end_system_delay
Definition: rtp.h:265
RTP_UDP::localDataPort
WORD localDataPort
Definition: rtp.h:1268
RTP_ControlFrame::e_EMAIL
Definition: rtp.h:285
OpalSecurityMode
Definition: rtpconn.h:525
RTP_ControlFrame::ReceiverReport::fraction
BYTE fraction
Definition: rtp.h:233
RTP_Session::lastTransitTime
DWORD lastTransitTime
Definition: rtp.h:1080
RTP_Session::firstPacketSent
PTime firstPacketSent
Definition: rtp.h:1040
RTP_DataFrame::SetPaddingSize
bool SetPaddingSize(PINDEX sz)
RTP_Session::GetSyncSourceOut
DWORD GetSyncSourceOut() const
Definition: rtp.h:781
RTP_Session::resequenceOutOfOrderPackets
bool resequenceOutOfOrderPackets
Definition: rtp.h:1025
RTP_DataFrame::Clone
virtual PObject * Clone() const
Definition: rtp.h:168
RTP_DataFrame::SetTimestamp
void SetTimestamp(DWORD t)
Definition: rtp.h:147
RTP_ControlFrame::GetPayloadType
unsigned GetPayloadType() const
Definition: rtp.h:214
RTP_UDP::m_firstControl
bool m_firstControl
Definition: rtp.h:1285
RTP_ControlFrame::ExtendedReport::type_specific
BYTE type_specific
Definition: rtp.h:255
RTP_Session::GetMarkerRecvCount
DWORD GetMarkerRecvCount() const
Definition: rtp.h:880
OpalMediaStatistics::m_packetOverruns
unsigned m_packetOverruns
Definition: rtp.h:382
RTP_ControlFrame::SourceDescription::Item::GetLengthTotal
unsigned int GetLengthTotal() const
Definition: rtp.h:305
RTP_Session::GetAvgJitterTime
DWORD GetAvgJitterTime() const
Definition: rtp.h:923
RTP_DataFrame::SetExtensionType
void SetExtensionType(int type)
RTP_Session::m_encodingHandler
RTP_Encoding * m_encodingHandler
Definition: rtp.h:995
RTP_Session::Params::userData
RTP_UserData * userData
Optional data for session.
Definition: rtp.h:520
RTP_DataFrame::SetPayloadSize
bool SetPayloadSize(PINDEX sz)
RTP_DataFrame::GetSyncSource
DWORD GetSyncSource() const
Definition: rtp.h:149
RTP_Encoding::OnReadTimeout
virtual RTP_Session::SendReceiveStatus OnReadTimeout(RTP_DataFrame &frame)
RTP_Session
Definition: rtp.h:502
RTP_Session::maximumReceiveTime
DWORD maximumReceiveTime
Definition: rtp.h:1055
RTP_ControlFrame::e_FullIntraRequest
Definition: rtp.h:328
RTP_UDP::shutdownWrite
bool shutdownWrite
Definition: rtp.h:1281
RTP_DataFrame::GetVersion
unsigned GetVersion() const
Definition: rtp.h:125
RTP_Session::markerRecvCount
DWORD markerRecvCount
Definition: rtp.h:1062
OpalMediaStatistics::Fax::m_errorCorrection
bool m_errorCorrection
Definition: rtp.h:418
OpalMediaStatistics::Fax::m_imageSize
int m_imageSize
Definition: rtp.h:422
RTP_ControlFrame::ReceiverReport::jitter
PUInt32b jitter
Definition: rtp.h:236
RTP_ControlFrame::ExtendedReport::rerl
BYTE rerl
Definition: rtp.h:268
OpalMediaStatistics::Fax::m_pageHeight
int m_pageHeight
Definition: rtp.h:426
RTP_DataFrame::T38
Definition: rtp.h:116
RTP_Encoding::ApplyStringOptions
virtual void ApplyStringOptions(const PStringToString &)
Definition: rtp.h:1302
RTP_Session::packetsLostByRemote
DWORD packetsLostByRemote
Definition: rtp.h:1049
RTP_DataFrame::G728
Definition: rtp.h:103
RTP_Encoding::SetWriteDataIdleTimer
virtual void SetWriteDataIdleTimer(PTimer &)
Definition: rtp.h:1309
RTP_DataFrame::GetExtensionType
int GetExtensionType() const
RTP_DataFrame::GetPayloadType
PayloadTypes GetPayloadType() const
Definition: rtp.h:140
RTP_UDP::GetLocalControlPort
virtual WORD GetLocalControlPort() const
Definition: rtp.h:1199
RTP_ControlFrame::SenderReport::psent
PUInt32b psent
Definition: rtp.h:248
RTP_UDP::appliedQOS
bool appliedQOS
Definition: rtp.h:1282
RTP_ControlFrame::ExtendedReport::burst_density
BYTE burst_density
Definition: rtp.h:260
RTP_Session::maximumJitterLevel
DWORD maximumJitterLevel
Definition: rtp.h:1059
RTP_ControlFrame::e_CNAME
Definition: rtp.h:283
buildopts.h
RTP_DataFrame::JPEG
Definition: rtp.h:110
RTP_Session::SourceDescription
Definition: rtp.h:684
RTP_UDP::localHasNAT
bool localHasNAT
Definition: rtp.h:1284
RTP_Session::octetsSent
DWORD octetsSent
Definition: rtp.h:1043
RTP_DataFrame::GetPaddingSize
unsigned GetPaddingSize() const
Definition: rtp.h:137
OpalMediaStatistics::Fax::m_stationId
PString m_stationId
Definition: rtp.h:431
RTP_Session::outOfOrderWaitTime
PTimeInterval outOfOrderWaitTime
Definition: rtp.h:1027
RTP_Session::minimumReceiveTime
DWORD minimumReceiveTime
Definition: rtp.h:1056
RTP_ControlFrame::FbTSTO::fci
FbFCI fci
Definition: rtp.h:347
RTP_UDP::GetDataSocket
virtual PUDPSocket & GetDataSocket()
Definition: rtp.h:1211
RTP_Encoding::rtpUDP
RTP_UDP * rtpUDP
Definition: rtp.h:1321
RTP_Encoding::refCount
unsigned refCount
Definition: rtp.h:1318
RTP_ControlFrame::ExtendedReport::gap_density
BYTE gap_density
Definition: rtp.h:261
RTP_Session::toolName
PString toolName
Definition: rtp.h:1001
RTP_Session::oobTimeStampBase
PTimeInterval oobTimeStampBase
Definition: rtp.h:1037
RTP_ControlFrame::compoundOffset
PINDEX compoundOffset
Definition: rtp.h:357
RTP_ControlFrame::SourceDescription::Item::length
BYTE length
Definition: rtp.h:298
RTP_Session::AllowAnySyncSource
bool AllowAnySyncSource() const
Definition: rtp.h:785
RTP_Session::m_outOfOrderPackets
std::list< RTP_DataFrame > m_outOfOrderPackets
Definition: rtp.h:1030
RTP_DataFrame::SetPacketSize
bool SetPacketSize(PINDEX sz)
RTP_Session::e_ProcessPacket
Definition: rtp.h:636
RTP_ControlFrame::ReceiverReport::ssrc
PUInt32b ssrc
Definition: rtp.h:232
RTP_Session::GetMinimumSendTime
DWORD GetMinimumSendTime() const
Definition: rtp.h:898
RTP_Session::lastReceivedPayloadType
RTP_DataFrame::PayloadTypes lastReceivedPayloadType
Definition: rtp.h:1082
RTP_ControlFrame::ExtendedReport::gmin
BYTE gmin
Definition: rtp.h:269
RTP_ControlFrame::ExtendedReport::reserved
BYTE reserved
Definition: rtp.h:275
RTP_Session::markerSendCount
DWORD markerSendCount
Definition: rtp.h:1061
OpalMediaStatistics::m_packetsTooLate
unsigned m_packetsTooLate
Definition: rtp.h:381
RTP_ControlFrame::FbFIR
Definition: rtp.h:340
RTP_Session::SetReportTimeInterval
void SetReportTimeInterval(const PTimeInterval &interval)
Definition: rtp.h:805
RTP_DataFrame::MPV
Definition: rtp.h:112
RTP_Session::octetsReceived
DWORD octetsReceived
Definition: rtp.h:1047
RTP_UDP::SetLocalAddress
virtual void SetLocalAddress(const PIPSocket::Address &addr)
Definition: rtp.h:1185
RTP_Session::minimumSendTime
DWORD minimumSendTime
Definition: rtp.h:1053
RTP_Session::GetAverageReceiveTime
DWORD GetAverageReceiveTime() const
Definition: rtp.h:904
RTP_Session::userData
RTP_UserData * userData
Definition: rtp.h:1002
RTP_Session::allowRemoteTransmitAddressChange
PBoolean allowRemoteTransmitAddressChange
Definition: rtp.h:1013
RTP_ControlFrame::FbFCI::senderSSRC
PUInt32b senderSSRC
Definition: rtp.h:336
RTP_DataFrame::GetContribSrcCount
PINDEX GetContribSrcCount() const
Definition: rtp.h:152
RTP_DataFrame::DVI4_22k
Definition: rtp.h:105
RTP_Session::SenderReport
Definition: rtp.h:666
RTP_Session::SetAnySyncSource
void SetAnySyncSource(bool allow)
Definition: rtp.h:789
RTP_QOS
Definition: rtp.h:58
RTP_DataFrame::SetMarker
void SetMarker(PBoolean m)
RTP_DataFrame::GetPadding
bool GetPadding() const
Definition: rtp.h:133
RTP_DataFrame::DynamicBase
Definition: rtp.h:120
RTP_Session::HasFailed
bool HasFailed() const
Definition: rtp.h:976
OpalMediaStatistics::m_totalFrames
unsigned m_totalFrames
Definition: rtp.h:393
RTP_UDP::shutdownRead
bool shutdownRead
Definition: rtp.h:1280
RTP_Session::consecutiveOutOfOrderPackets
unsigned consecutiveOutOfOrderPackets
Definition: rtp.h:1026
OpalMediaStatistics::FaxCompressionT4_2d
Definition: rtp.h:407
RTP_ControlFrame::ExtendedReport::length
PUInt16b length
Definition: rtp.h:256
RTP_DataFrame::LPC
Definition: rtp.h:95
RTP_Session::EncodingLock::session
RTP_Session & session
Definition: rtp.h:967
RTP_Session::delaySinceLastSR
PTimeInterval delaySinceLastSR
Definition: rtp.h:1023
RTP_DataFrame::CN
Definition: rtp.h:101
RTP_DataFrame::LastKnownPayloadType
Definition: rtp.h:118
RTP_ControlFrame::GetVersion
unsigned GetVersion() const
Definition: rtp.h:197
RTP_Session::GetMaxJitterTime
DWORD GetMaxJitterTime() const
Definition: rtp.h:928
RTP_DataFrame::GetSequenceNumber
WORD GetSequenceNumber() const
Definition: rtp.h:143
RTP_Session::averageSendTimeAccum
DWORD averageSendTimeAccum
Definition: rtp.h:1073
RTP_ControlFrame::ExtendedReport::jb_absolute
PUInt16b jb_absolute
Definition: rtp.h:278
RTP_Session::GetMaximumSendTime
DWORD GetMaximumSendTime() const
Definition: rtp.h:892
RTP_DataFrame::MPA
Definition: rtp.h:102
OpalMediaStatistics::Fax::m_totalPages
int m_totalPages
Definition: rtp.h:421
RTP_Session::GetPacketsSent
DWORD GetPacketsSent() const
Definition: rtp.h:835
RTP_ControlFrame::e_ReferencePictureSelectionIndication
Definition: rtp.h:327
RTP_DataFrame::RTP_DataFrame
RTP_DataFrame(PINDEX payloadSize=0, PINDEX bufferSize=0)
RTP_Session::autoDeleteUserData
PBoolean autoDeleteUserData
Definition: rtp.h:1003
RTP_DataFrame::DVI4_11k
Definition: rtp.h:104
RTP_Session::ReceiverReport::lastSequenceNumber
DWORD lastSequenceNumber
Definition: rtp.h:659
RTP_Session::ReceiverReport::jitter
DWORD jitter
Definition: rtp.h:660
RTP_DataFrame::L16_Mono
Definition: rtp.h:99
RTP_Session::GetPacketsOutOfOrder
DWORD GetPacketsOutOfOrder() const
Definition: rtp.h:860
RTP_Session::m_reportMutex
PMutex m_reportMutex
Definition: rtp.h:1085
RTP_Session::rxStatisticsInterval
unsigned rxStatisticsInterval
Definition: rtp.h:1016
RTP_ControlFrame::e_TemporalSpatialTradeOffNotification
Definition: rtp.h:330
RTP_ControlFrame::SenderReport::rtp_ts
PUInt32b rtp_ts
Definition: rtp.h:247
RTP_DataFrame::GetExtensionSizeDWORDs
PINDEX GetExtensionSizeDWORDs() const
RTP_DataFrame::MaxPayloadType
Definition: rtp.h:121
RTP_DataFrame::PayloadTypes
PayloadTypes
Definition: rtp.h:86
RTP_Encoding::WaitForPDU
virtual int WaitForPDU(PUDPSocket &dataSocket, PUDPSocket &controlSocket, const PTimeInterval &)
RTP_Session::sessionID
unsigned sessionID
Definition: rtp.h:997
RTP_ControlFrame::ReceiverReport::GetLostPackets
unsigned GetLostPackets() const
Definition: rtp.h:240
RTP_Session::GetJitterBufferDelay
unsigned GetJitterBufferDelay() const
Definition: rtp.h:560
RTP_Session::expectedSequenceNumber
WORD expectedSequenceNumber
Definition: rtp.h:1018
RTP_Session::GetPacketsReceived
DWORD GetPacketsReceived() const
Definition: rtp.h:843
RTP_DataFrame::PCMU
Definition: rtp.h:87
RTP_Session::EncodingLock::m_encodingHandler
RTP_Encoding * m_encodingHandler
Definition: rtp.h:968
OpalMediaStatistics::m_totalPackets
unsigned m_totalPackets
Definition: rtp.h:378
RTP_DataFrame::CelB
Definition: rtp.h:109
RTP_Session::packetsOutOfOrder
DWORD packetsOutOfOrder
Definition: rtp.h:1050
RTP_ControlFrame::GetCount
unsigned GetCount() const
Definition: rtp.h:199
RTP_ControlFrame::ExtendedReport::round_trip_delay
PUInt16b round_trip_delay
Definition: rtp.h:264
RTP_Session::GetEncoding
virtual PString GetEncoding() const
Definition: rtp.h:953
RTP_ControlFrame::e_PRIV
Definition: rtp.h:290
RTP_ControlFrame::FbFIR::sequenceNUmber
BYTE sequenceNUmber
Definition: rtp.h:343
RTP_Session::SetFailed
void SetFailed(bool v)
Definition: rtp.h:973
RTP_ControlFrame::ReceiverReport::lsr
PUInt32b lsr
Definition: rtp.h:237
RTP_Encoding::mutex
PMutex mutex
Definition: rtp.h:1317
RTP_DataFrame::GetExtensionPtr
BYTE * GetExtensionPtr() const
RTP_Session::SendReceiveStatus
SendReceiveStatus
Definition: rtp.h:635
RTP_ControlFrame::ExtendedReport::gap_duration
PUInt16b gap_duration
Definition: rtp.h:263
RTP_ControlFrame::SourceDescription::Item::type
BYTE type
Definition: rtp.h:297
RTP_ControlFrame::SenderReport::ntp_frac
PUInt32b ntp_frac
Definition: rtp.h:246
RTP_ControlFrame::FbFIR::fci
FbFCI fci
Definition: rtp.h:341
OpalMediaStatistics::m_maximumPacketTime
unsigned m_maximumPacketTime
Definition: rtp.h:385
RTP_Session::ignorePayloadTypeChanges
PBoolean ignorePayloadTypeChanges
Definition: rtp.h:1083
RTP_ControlFrame::PayloadTypes
PayloadTypes
Definition: rtp.h:202
PFACTORY_LOAD
PFACTORY_LOAD(RTP_Encoding)
RTP_Session::FilterNotifier
PNotifierTemplate< SendReceiveStatus & > FilterNotifier
Definition: rtp.h:979
RTP_UDP::GetRemoteDataPort
virtual WORD GetRemoteDataPort() const
Definition: rtp.h:1203
RTP_Session::EncodingLock
Definition: rtp.h:958
RTP_ControlFrame::ExtendedReport::ext_r_factor
BYTE ext_r_factor
Definition: rtp.h:271
RTP_DataFrame::Cisco_CN
Definition: rtp.h:107
RTP_Session::GetAverageSendTime
DWORD GetAverageSendTime() const
Definition: rtp.h:874
RTP_ControlFrame::ExtendedReport::bt
BYTE bt
Definition: rtp.h:254
RTP_DataFrame
Definition: rtp.h:71
RTP_Session::closeOnBye
PBoolean closeOnBye
Definition: rtp.h:1089
OpalMediaStatistics::Fax::m_compression
FaxCompression m_compression
Definition: rtp.h:417
RTP_ControlFrame::SenderReport
Definition: rtp.h:244
RTP_Session::allowAnySyncSource
bool allowAnySyncSource
Definition: rtp.h:1011
RTP_DataFrame::MinHeaderSize
Definition: rtp.h:81
RTP_Session::GetReportTimeInterval
const PTimeInterval & GetReportTimeInterval()
Definition: rtp.h:801
RTP_DataFrame::GetPayloadSize
PINDEX GetPayloadSize() const
Definition: rtp.h:164
RTP_Session::IsAudio
bool IsAudio() const
Definition: rtp.h:744
RTP_DataFrame::G721
Definition: rtp.h:89
RTP_QOS::ctrlQoS
PQoS ctrlQoS
Definition: rtp.h:63
RTP_DataFrame::FS1016
Definition: rtp.h:88
RTP_Session::Params::encoding
PString encoding
identifies initial RTP encoding (RTP/AVP, UDPTL etc)
Definition: rtp.h:518
RTP_Session::lastSRReceiveTime
PTime lastSRReceiveTime
Definition: rtp.h:1022
RTP_ControlFrame::e_VideoBackChannelMessage
Definition: rtp.h:331
RTP_ControlFrame::ReceiverReport::dlsr
PUInt32b dlsr
Definition: rtp.h:238
OpalMediaStatistics::m_packetsLost
unsigned m_packetsLost
Definition: rtp.h:379
RTP_QOS::dataQoS
PQoS dataQoS
Definition: rtp.h:62
RTP_ControlFrame::SenderReport::osent
PUInt32b osent
Definition: rtp.h:249
RTP_Session::lastSentTimestamp
DWORD lastSentTimestamp
Definition: rtp.h:1010
RTP_ControlFrame::GetFbType
unsigned GetFbType() const
Definition: rtp.h:321
RTP_Session::SenderReport::rtpTimestamp
DWORD rtpTimestamp
Definition: rtp.h:673
OpalMediaStatistics::m_minimumPacketTime
unsigned m_minimumPacketTime
Definition: rtp.h:383
RTP_Session::txStatisticsInterval
unsigned txStatisticsInterval
Definition: rtp.h:1015
RTP_DataFrame::GetPayloadPtr
BYTE * GetPayloadPtr() const
Definition: rtp.h:166
RTP_Session::averageReceiveTimeAccum
DWORD averageReceiveTimeAccum
Definition: rtp.h:1076
RTP_ControlFrame::ExtendedReport::jb_maximum
PUInt16b jb_maximum
Definition: rtp.h:277
RTP_Session::packetsLostSinceLastRR
DWORD packetsLostSinceLastRR
Definition: rtp.h:1079
RTP_ControlFrame::FbTSTO
Definition: rtp.h:346
RTP_Session::Params
Definition: rtp.h:509
RTP_ControlFrame::e_TemporalSpatialTradeOffRequest
Definition: rtp.h:329
RTP_Session::Params::Params
Params()
Definition: rtp.h:510
OpalMediaStatistics::m_averageJitter
unsigned m_averageJitter
Definition: rtp.h:388
RTP_DataFrame::G729
Definition: rtp.h:106
RTP_UDP::badTransmitCounter
int badTransmitCounter
Definition: rtp.h:1286
RTP_Session::m_timeUnits
unsigned m_timeUnits
Definition: rtp.h:999
RTP_ControlFrame::FbFIR::requestSSRC
PUInt32b requestSSRC
Definition: rtp.h:342
RTP_Session::rxStatisticsCount
unsigned rxStatisticsCount
Definition: rtp.h:1065
RTP_Session::GetMarkerSendCount
DWORD GetMarkerSendCount() const
Definition: rtp.h:886
RTP_UDP::GetDataSocketHandle
virtual int GetDataSocketHandle() const
Definition: rtp.h:1232
RTP_DataFrame::G722
Definition: rtp.h:97
RTP_ControlFrame::ExtendedReport
Definition: rtp.h:252
RTP_Session::m_reportTimer
PTimer m_reportTimer
Definition: rtp.h:1086
PLIST
PLIST(RTP_DataFrameList, RTP_DataFrame)
OpalMediaStatistics::Fax::m_resolutionX
int m_resolutionX
Definition: rtp.h:423
RTP_UDP::dataSocket
PUDPSocket * dataSocket
Definition: rtp.h:1277
RTP_Session::Params::remoteIsNAT
bool remoteIsNAT
Remote is behid NAT.
Definition: rtp.h:523
RTP_DataFrame::SetContribSource
void SetContribSource(PINDEX idx, DWORD src)
RTP_Session::GetJitterTimeUnits
unsigned GetJitterTimeUnits() const
Definition: rtp.h:564
RTP_Session::m_jitterBuffer
JitterBufferPtr m_jitterBuffer
Definition: rtp.h:1006
RTP_Session::GetRxStatisticsInterval
unsigned GetRxStatisticsInterval()
Definition: rtp.h:821
RTP_DataFrame::GetHeaderSize
PINDEX GetHeaderSize() const
Definition: rtp.h:156
RTP_Session::packetsSent
DWORD packetsSent
Definition: rtp.h:1041
OpalMediaStatistics::m_averagePacketTime
unsigned m_averagePacketTime
Definition: rtp.h:384
RTP_DataFrame::G7231
Definition: rtp.h:92
RTP_DataFrame::GetPaddingPtr
BYTE * GetPaddingPtr() const
Definition: rtp.h:135
RTP_DataFrame::DVI4_8k
Definition: rtp.h:93
RTP_DataFrame::L16_Stereo
Definition: rtp.h:98
RTP_Session::lastSentSequenceNumber
WORD lastSentSequenceNumber
Definition: rtp.h:1017
RTP_ControlFrame::DescriptionTypes
DescriptionTypes
Definition: rtp.h:281
operator<<
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
SecureRTP_UDP
Definition: rtp.h:1329
RTP_Session::SetNextSentSequenceNumber
void SetNextSentSequenceNumber(WORD num)
Definition: rtp.h:951
RTP_UDP::remoteControlPort
WORD remoteControlPort
Definition: rtp.h:1273
RTP_Encoding::ReadDataPDU
virtual RTP_Session::SendReceiveStatus ReadDataPDU(RTP_DataFrame &frame)
RTP_Session::GetUserData
RTP_UserData * GetUserData() const
Definition: rtp.h:770
OpalMediaStatistics::m_maximumJitter
unsigned m_maximumJitter
Definition: rtp.h:389
RTP_DataFrame::ProtocolVersion
Definition: rtp.h:80
RTP_Session::outOfOrderPacketTime
PTimeInterval outOfOrderPacketTime
Definition: rtp.h:1028
RTP_Session::packetsReceived
DWORD packetsReceived
Definition: rtp.h:1045
RTP_Session::maximumSendTime
DWORD maximumSendTime
Definition: rtp.h:1052
RTP_Session::GetOctetsSent
DWORD GetOctetsSent() const
Definition: rtp.h:839
RTP_Session::JitterBufferPtr
PSafePtr< RTP_JitterBuffer, PSafePtrMultiThreaded > JitterBufferPtr
Definition: rtp.h:1005
RTP_Session::byeSent
PBoolean byeSent
Definition: rtp.h:1090
RTP_ControlFrame::ExtendedReport::loss_rate
BYTE loss_rate
Definition: rtp.h:258
PARRAY
PARRAY(H323CapabilitiesList, H323Capability)
RTP_ControlFrame::ExtendedReport::ssrc
PUInt32b ssrc
Definition: rtp.h:257
OpalMediaStatistics::m_packetsOutOfOrder
unsigned m_packetsOutOfOrder
Definition: rtp.h:380
OpalMediaStatistics::Fax::m_errorCorrectionRetries
int m_errorCorrectionRetries
Definition: rtp.h:429
RTP_DataFrame::MaxMtuPayloadSize
Definition: rtp.h:83
RTP_UDP::localAddress
PIPSocket::Address localAddress
Definition: rtp.h:1267
RTP_Session::canonicalName
PString canonicalName
Definition: rtp.h:1000
RTP_Session::Params::autoDelete
bool autoDelete
Delete optional data with session.
Definition: rtp.h:521
RTP_DataFrame::GetExtension
PBoolean GetExtension() const
Definition: rtp.h:127
RTP_Session::failed
bool failed
set to true if session has received too many ICMP destination unreachable
Definition: rtp.h:1091
RTP_UserData
Definition: rtp.h:444
RTP_Session::m_encodingMutex
PMutex m_encodingMutex
Definition: rtp.h:994
RTP_Session::ReceiverReport::fractionLost
DWORD fractionLost
Definition: rtp.h:657
RTP_Encoding
Definition: rtp.h:1297
OpalMediaStatistics::Fax::m_rxPages
int m_rxPages
Definition: rtp.h:420
RTP_Session::ReceiverReport::delay
PTimeInterval delay
Definition: rtp.h:662
RTP_Session::GetMaximumReceiveTime
DWORD GetMaximumReceiveTime() const
Definition: rtp.h:910
RTP_ControlFrame::e_NAME
Definition: rtp.h:284
RTP_Session::EncodingLock::operator->
__inline RTP_Encoding * operator->() const
Definition: rtp.h:964
RTP_Session::minimumReceiveTimeAccum
DWORD minimumReceiveTimeAccum
Definition: rtp.h:1078
RTP_ControlFrame::ExtendedReport::jb_nominal
PUInt16b jb_nominal
Definition: rtp.h:276
OpalMediaStatistics::FaxCompressionT4_1d
Definition: rtp.h:406
RTP_ControlFrame::ExtendedReport::r_factor
BYTE r_factor
Definition: rtp.h:270
RTP_Session::packetsLost
DWORD packetsLost
Definition: rtp.h:1048
RTP_ControlFrame::ExtendedReport::signal_level
BYTE signal_level
Definition: rtp.h:266
RTP_JitterBuffer
Definition: jitter.h:244
RTP_DataFrame::SetPadding
void SetPadding(bool v)
Definition: rtp.h:134
RTP_DataFrame::MP2T
Definition: rtp.h:113
RTP_UDP::timerWriteDataIdle
PTimer timerWriteDataIdle
Definition: rtp.h:1289
RTP_Session::oobTimeStampOutBase
DWORD oobTimeStampOutBase
Definition: rtp.h:1036
RTP_Session::firstPacketReceived
PTime firstPacketReceived
Definition: rtp.h:1044
RTP_ControlFrame::ExtendedReport::burst_duration
PUInt16b burst_duration
Definition: rtp.h:262
OpalMediaStatistics::Fax::m_mostBadRows
int m_mostBadRows
Definition: rtp.h:428
RTP_Encoding::WriteDataPDU
virtual PBoolean WriteDataPDU(RTP_DataFrame &frame)
RTP_UDP::remoteAddress
PIPSocket::Address remoteAddress
Definition: rtp.h:1271
RTP_DataFrame::G726
Definition: rtp.h:90
RTP_DataFrame::GetTimestamp
DWORD GetTimestamp() const
Definition: rtp.h:146
RTP_Session::jitterLevel
DWORD jitterLevel
Definition: rtp.h:1057
RTP_ControlFrame::ExtendedReport::discard_rate
BYTE discard_rate
Definition: rtp.h:259
RTP_UDP::GetRemoteControlPort
virtual WORD GetRemoteControlPort() const
Definition: rtp.h:1207
RTP_Session::lastReceivedPacketTime
PTimeInterval lastReceivedPacketTime
Definition: rtp.h:1020
RTP_ControlFrame::SourceDescription::Item::GetNextItem
Item * GetNextItem()
Definition: rtp.h:307
OpalMediaStatistics::m_jitterBufferDelay
unsigned m_jitterBufferDelay
Definition: rtp.h:390
RTP_Session::SetAudio
void SetAudio(bool aud)
Definition: rtp.h:748
OpalMediaStatistics::Fax::m_txPages
int m_txPages
Definition: rtp.h:419
RTP_Encoding::OnWriteDataIdle
virtual void OnWriteDataIdle()
Definition: rtp.h:1308
RTP_Session::SenderReport::sourceIdentifier
DWORD sourceIdentifier
Definition: rtp.h:671
RTP_DataFrame::SetPayloadType
void SetPayloadType(PayloadTypes t)
RTP_DataFrame::GetContribSource
DWORD GetContribSource(PINDEX idx) const
RTP_ControlFrame::e_SliceLostIndication
Definition: rtp.h:326
RTP_Session::SetSessionID
void SetSessionID(unsigned id)
Definition: rtp.h:740
RTP_DataFrame::SetExtensionSizeDWORDs
bool SetExtensionSizeDWORDs(PINDEX sz)
OpalMediaStatistics::FaxCompressionT6
Definition: rtp.h:408
RTP_ControlFrame::ExtendedReport::mos_cq
BYTE mos_cq
Definition: rtp.h:273
RTP_ControlFrame::FbFCI
Definition: rtp.h:335
RTP_ControlFrame::ReceiverReport
Definition: rtp.h:231
OpalMediaStatistics::Fax
Definition: rtp.h:411
RTP_ControlFrame::ExtendedReport::rx_config
BYTE rx_config
Definition: rtp.h:274
RTP_DataFrame::GSM
Definition: rtp.h:91
RTP_ControlFrame::payloadSize
PINDEX payloadSize
Definition: rtp.h:358
RTP_Session::GetJitterTimeOnRemote
DWORD GetJitterTimeOnRemote() const
Definition: rtp.h:934
RTP_Session::senderReportsReceived
DWORD senderReportsReceived
Definition: rtp.h:1046
RTP_Session::ReceiverReport
Definition: rtp.h:651
RTP_Session::ModifyQOS
virtual PBoolean ModifyQOS(RTP_QOS *)
Definition: rtp.h:567
RTP_Session::minimumSendTimeAccum
DWORD minimumSendTimeAccum
Definition: rtp.h:1075
RTP_UDP::GetRemoteAddress
PIPSocket::Address GetRemoteAddress() const
Definition: rtp.h:1191
RTP_Session::syncSourceIn
DWORD syncSourceIn
Definition: rtp.h:1009
RTP_UDP::GetControlSocket
virtual PUDPSocket & GetControlSocket()
Definition: rtp.h:1215
RTP_Session::GetTxStatisticsInterval
unsigned GetTxStatisticsInterval()
Definition: rtp.h:811
RTP_Session::maximumReceiveTimeAccum
DWORD maximumReceiveTimeAccum
Definition: rtp.h:1077
RTP_Session::GetSyncSourceIn
DWORD GetSyncSourceIn() const
Definition: rtp.h:956
RTP_Session::lastSRTimestamp
PTime lastSRTimestamp
Definition: rtp.h:1021
RTP_UDP::GetLocalDataPort
virtual WORD GetLocalDataPort() const
Definition: rtp.h:1195
RTP_ControlFrame::SourceDescription::Item::GetNextItem
const Item * GetNextItem() const
Definition: rtp.h:306
RTP_DataFrame::H263
Definition: rtp.h:114
OpalMediaStatistics::FaxCompression
FaxCompression
Definition: rtp.h:404
RTP_ControlFrame::SenderReport::ntp_sec
PUInt32b ntp_sec
Definition: rtp.h:245
RTP_Session::dataMutex
PMutex dataMutex
Definition: rtp.h:1033
RTP_Session::txStatisticsCount
unsigned txStatisticsCount
Definition: rtp.h:1064
RTP_Session::syncSourceOut
DWORD syncSourceOut
Definition: rtp.h:1008
RTP_ControlFrame::SourceDescription::Item
Definition: rtp.h:296
RTP_Session::SourceDescription::items
POrdinalToString items
Definition: rtp.h:691
RTP_Session::lastSentPacketTime
PTimeInterval lastSentPacketTime
Definition: rtp.h:1019
RTP_UDP::remoteTransmitAddress
PIPSocket::Address remoteTransmitAddress
Definition: rtp.h:1275
RTP_Session::GetPacketsLost
DWORD GetPacketsLost() const
Definition: rtp.h:851
RTP_ControlFrame::e_LOC
Definition: rtp.h:287
OpalMediaStatistics::Fax::m_errorText
PString m_errorText
Definition: rtp.h:432
OpalMediaStatistics::Fax::m_bitRate
int m_bitRate
Definition: rtp.h:416
OpalMediaStatistics
Definition: rtp.h:370
RTP_ControlFrame::FbFCI::mediaSSRC
PUInt32b mediaSSRC
Definition: rtp.h:337
RTP_ControlFrame
Definition: rtp.h:190
RTP_ControlFrame::GetPayloadSize
PINDEX GetPayloadSize() const
Definition: rtp.h:217
RTP_Session::SetIgnorePayloadTypeChanges
void SetIgnorePayloadTypeChanges(PBoolean ignore)
Definition: rtp.h:795
RTP_Session::SourceDescription::SourceDescription
SourceDescription(DWORD src)
Definition: rtp.h:687
RTP_DataFrame::m_headerSize
PINDEX m_headerSize
Definition: rtp.h:176
RTP_Session::allowSequenceChange
PBoolean allowSequenceChange
Definition: rtp.h:1014
RTP_Session::isAudio
bool isAudio
Definition: rtp.h:998
RTP_Session::SenderReport::packetsSent
DWORD packetsSent
Definition: rtp.h:674
OpalMediaStatistics::FaxCompressionUnknown
Definition: rtp.h:405
RTP_UDP::controlSocket
PUDPSocket * controlSocket
Definition: rtp.h:1278
RTP_DataFrame::SetSequenceNumber
void SetSequenceNumber(WORD n)
Definition: rtp.h:144
RTP_Session::averageReceiveTime
DWORD averageReceiveTime
Definition: rtp.h:1054
RTP_DataFrame::PrintOn
virtual void PrintOn(ostream &strm) const
RTP_ControlFrame::FbTSTO::sequenceNUmber
BYTE sequenceNUmber
Definition: rtp.h:349
RTP_ControlFrame::ExtendedReport::mos_lq
BYTE mos_lq
Definition: rtp.h:272
RTP_Session::allowOneSyncSourceChange
bool allowOneSyncSourceChange
Definition: rtp.h:1012
RTP_Session::jitterLevelOnRemote
DWORD jitterLevelOnRemote
Definition: rtp.h:1058
RTP_DataFrame::m_paddingSize
PINDEX m_paddingSize
Definition: rtp.h:178
RTP_UDP::remoteIsNAT
bool remoteIsNAT
Definition: rtp.h:1283
RTP_UDP::remoteDataPort
WORD remoteDataPort
Definition: rtp.h:1272
OpalMediaStatistics::Fax::m_result
int m_result
Definition: rtp.h:414
RTP_Session::Params::isAudio
bool isAudio
is audio RTP data
Definition: rtp.h:522
OpalMediaStatistics::Fax::m_badRows
int m_badRows
Definition: rtp.h:427
RTP_Session::averageSendTime
DWORD averageSendTime
Definition: rtp.h:1051
RTP_Session::GetPacketsLostByRemote
DWORD GetPacketsLostByRemote() const
Definition: rtp.h:856
RTP_ControlFrame::FbTSTO::tradeOff
BYTE tradeOff
Definition: rtp.h:351
RTP_ControlFrame::e_END
Definition: rtp.h:282
RTP_ControlFrame::SourceDescription::src
PUInt32b src
Definition: rtp.h:295
RTP_Session::ReceiverReport::totalLost
DWORD totalLost
Definition: rtp.h:658
RTP_UDP::badTransmitStart
PTime badTransmitStart
Definition: rtp.h:1287
RTP_ControlFrame::ReceiverReport::last_seq
PUInt32b last_seq
Definition: rtp.h:235
RTP_ControlFrame::e_PHONE
Definition: rtp.h:286
RTP_Session::SenderReport::realTimestamp
PTime realTimestamp
Definition: rtp.h:672
RTP_DataFrame::m_payloadSize
PINDEX m_payloadSize
Definition: rtp.h:177
RTP_Session::SetCloseOnBYE
virtual void SetCloseOnBYE(PBoolean v)
Definition: rtp.h:937
RTP_Session::rtcpPacketsSent
DWORD rtcpPacketsSent
Definition: rtp.h:1042
OpalMediaStatistics::Fax::m_pageWidth
int m_pageWidth
Definition: rtp.h:425
RTP_Session::e_IgnorePacket
Definition: rtp.h:637
OpalMediaStatistics::Fax::m_resolutionY
int m_resolutionY
Definition: rtp.h:424
RTP_Session::m_encoding
PString m_encoding
Definition: rtp.h:993
RTP_Session::GetOctetsReceived
DWORD GetOctetsReceived() const
Definition: rtp.h:847
RTP_UDP
Definition: rtp.h:1098
RTP_UDP::GetLocalAddress
virtual PIPSocket::Address GetLocalAddress() const
Definition: rtp.h:1181
RTP_Session::SourceDescription::sourceIdentifier
DWORD sourceIdentifier
Definition: rtp.h:690
OpalMediaStatistics::m_totalBytes
PUInt64 m_totalBytes
Definition: rtp.h:377
RTP_Session::lastRRSequenceNumber
WORD lastRRSequenceNumber
Definition: rtp.h:1024
RTP_Session::m_filters
list< FilterNotifier > m_filters
Definition: rtp.h:1093
RTP_ControlFrame::e_TOOL
Definition: rtp.h:288
RTP_ControlFrame::PayloadSpecificFbTypes
PayloadSpecificFbTypes
Definition: rtp.h:324
RTP_Session::ReceiverReport::sourceIdentifier
DWORD sourceIdentifier
Definition: rtp.h:656
RTP_UDP::localControlPort
WORD localControlPort
Definition: rtp.h:1269
SecureRTP_UDP::securityParms
OpalSecurityMode * securityParms
Definition: rtp.h:1349
RTP_Session::oobTimeStampBaseEstablished
PBoolean oobTimeStampBaseEstablished
Definition: rtp.h:1035
RTP_ControlFrame::SourceDescription
Definition: rtp.h:294
RTP_Session::SenderReport::octetsSent
DWORD octetsSent
Definition: rtp.h:675
RTP_DataFrame::DVI4_16k
Definition: rtp.h:94