37 #ifndef RTPSOURCEDATA_H
39 #define RTPSOURCEDATA_H
41 #include "rtpconfig.h"
55 class JRTPLIB_IMPORTEXPORT RTCPSenderReportInfo
58 RTCPSenderReportInfo():ntptimestamp(0,0),receivetime(0,0) { hasinfo =
false; rtptimestamp = 0; packetcount = 0; bytecount = 0; }
59 void Set(
const RTPNTPTime &ntptime,uint32_t rtptime,uint32_t pcount,
60 uint32_t bcount,
const RTPTime &rcvtime) { ntptimestamp = ntptime; rtptimestamp = rtptime; packetcount = pcount; bytecount = bcount; receivetime = rcvtime; hasinfo =
true; }
62 bool HasInfo()
const {
return hasinfo; }
63 RTPNTPTime GetNTPTimestamp()
const {
return ntptimestamp; }
64 uint32_t GetRTPTimestamp()
const {
return rtptimestamp; }
65 uint32_t GetPacketCount()
const {
return packetcount; }
66 uint32_t GetByteCount()
const {
return bytecount; }
67 RTPTime GetReceiveTime()
const {
return receivetime; }
70 RTPNTPTime ntptimestamp;
71 uint32_t rtptimestamp;
77 class JRTPLIB_IMPORTEXPORT RTCPReceiverReportInfo
80 RTCPReceiverReportInfo():receivetime(0,0) { hasinfo =
false; fractionlost = 0; packetslost = 0; exthighseqnr = 0; jitter = 0; lsr = 0; dlsr = 0; }
81 void Set(uint8_t fraclost,int32_t plost,uint32_t exthigh,
82 uint32_t jit,uint32_t l,uint32_t dl,
const RTPTime &rcvtime) { fractionlost = ((double)fraclost)/256.0; packetslost = plost; exthighseqnr = exthigh; jitter = jit; lsr = l; dlsr = dl; receivetime = rcvtime; hasinfo =
true; }
84 bool HasInfo()
const {
return hasinfo; }
85 double GetFractionLost()
const {
return fractionlost; }
86 int32_t GetPacketsLost()
const {
return packetslost; }
87 uint32_t GetExtendedHighestSequenceNumber()
const {
return exthighseqnr; }
88 uint32_t GetJitter()
const {
return jitter; }
89 uint32_t GetLastSRTimestamp()
const {
return lsr; }
90 uint32_t GetDelaySinceLastSR()
const {
return dlsr; }
91 RTPTime GetReceiveTime()
const {
return receivetime; }
96 uint32_t exthighseqnr;
103 class JRTPLIB_IMPORTEXPORT RTPSourceStats
107 void ProcessPacket(RTPPacket *pack,
const RTPTime &receivetime,
double tsunit,
bool ownpacket,
bool *accept,
bool applyprobation,
bool *onprobation);
109 bool HasSentData()
const {
return sentdata; }
110 uint32_t GetNumPacketsReceived()
const {
return packetsreceived; }
111 uint32_t GetBaseSequenceNumber()
const {
return baseseqnr; }
112 uint32_t GetExtendedHighestSequenceNumber()
const {
return exthighseqnr; }
113 uint32_t GetJitter()
const {
return jitter; }
115 int32_t GetNumPacketsReceivedInInterval()
const {
return numnewpackets; }
116 uint32_t GetSavedExtendedSequenceNumber()
const {
return savedextseqnr; }
117 void StartNewInterval() { numnewpackets = 0; savedextseqnr = exthighseqnr; }
119 void SetLastMessageTime(
const RTPTime &t) { lastmsgtime = t; }
120 RTPTime GetLastMessageTime()
const {
return lastmsgtime; }
121 void SetLastRTPPacketTime(
const RTPTime &t) { lastrtptime = t; }
122 RTPTime GetLastRTPPacketTime()
const {
return lastrtptime; }
124 void SetLastNoteTime(
const RTPTime &t) { lastnotetime = t; }
125 RTPTime GetLastNoteTime()
const {
return lastnotetime; }
128 uint32_t packetsreceived;
131 uint32_t exthighseqnr,prevexthighseqnr;
132 uint32_t jitter,prevtimestamp;
134 RTPTime prevpacktime;
137 RTPTime lastnotetime;
138 uint32_t numnewpackets;
139 uint32_t savedextseqnr;
140 #ifdef RTP_SUPPORT_PROBATION
146 inline RTPSourceStats::RTPSourceStats():prevpacktime(0,0),lastmsgtime(0,0),lastrtptime(0,0),lastnotetime(0,0)
152 prevexthighseqnr = 0;
159 #ifdef RTP_SUPPORT_PROBATION
180 bool HasData()
const {
if (!validated)
return false;
return packetlist.empty()?
false:
true; }
203 bool IsActive()
const {
if (!validated)
return false;
if (receivedbye)
return false;
return true; }
246 uint8_t *
GetBYEReason(
size_t *len)
const { *len = byereasonlen;
return byereason; }
393 uint8_t *
SDES_GetName(
size_t *len)
const {
return SDESinf.GetName(len); }
405 uint8_t *
SDES_GetTool(
size_t *len)
const {
return SDESinf.GetTool(len); }
408 uint8_t *
SDES_GetNote(
size_t *len)
const {
return SDESinf.GetNote(len); }
410 #ifdef RTP_SUPPORT_SDESPRIV
417 bool SDES_GetNextPrivateValue(uint8_t **prefix,
size_t *prefixlen,uint8_t **value,
size_t *valuelen) {
return SDESinf.GetNextPrivateValue(prefix,prefixlen,value,valuelen); }
423 bool SDES_GetPrivateValue(uint8_t *prefix,
size_t prefixlen,uint8_t **value,
size_t *valuelen)
const {
return SDESinf.GetPrivateValue(prefix,prefixlen,value,valuelen); }
430 std::list<RTPPacket *> packetlist;
435 double timestampunit;
438 bool processedinrtcp;
441 RTCPSenderReportInfo SRinf,SRprevinf;
442 RTCPReceiverReportInfo RRinf,RRprevinf;
443 RTPSourceStats stats;
446 bool isrtpaddrset,isrtcpaddrset;
461 if (packetlist.empty())
463 p = *(packetlist.begin());
464 packetlist.pop_front();
468 inline void RTPSourceData::FlushPackets()
470 std::list<RTPPacket *>::const_iterator it;
472 for (it = packetlist.begin() ; it != packetlist.end() ; ++it)
473 RTPDelete(*it,GetMemoryManager());
The class RTCPSDESInfo is a container for RTCP SDES information.
Definition: rtcpsdesinfo.h:54
This class is an abstract class which is used to specify destinations, multicast groups etc.
Definition: rtpaddress.h:51
A memory manager.
Definition: rtpmemorymanager.h:151
This is a simple wrapper for the most significant word (MSW) and least significant word (LSW) of an N...
Definition: rtptimeutilities.h:67
Represents an RTP Packet.
Definition: rtppacket.h:57
Describes an entry in the RTPSources source table.
Definition: rtpsourcedata.h:167
uint32_t SR_Prev_GetRTPTimestamp() const
Returns the RTP timestamp contained in the second to last sender report.
Definition: rtpsourcedata.h:287
uint8_t * SDES_GetLocation(size_t *len) const
Returns a pointer to the SDES location item of this participant and stores its length in len.
Definition: rtpsourcedata.h:402
void SetProcessedInRTCP(bool v)
This function is used by the RTCPPacketBuilder class to mark whether this participant's information h...
Definition: rtpsourcedata.h:208
RTPTime INF_GetLastSDESNoteTime() const
Returns the time at which the last SDES NOTE item was received.
Definition: rtpsourcedata.h:387
RTPTime INF_GetLastRTPPacketTime() const
Returns the time at which the last RTP packet was received.
Definition: rtpsourcedata.h:367
bool IsActive() const
Returns true if the source was validated and had not yet sent a BYE packet.
Definition: rtpsourcedata.h:203
uint8_t * SDES_GetPhone(size_t *len) const
Returns a pointer to the SDES phone item of this participant and stores its length in len.
Definition: rtpsourcedata.h:399
uint32_t RR_Prev_GetLastSRTimestamp() const
Returns the LSR value from the second to last report.
Definition: rtpsourcedata.h:340
uint8_t * GetBYEReason(size_t *len) const
Returns the reason for leaving contained in the BYE packet of this participant.
Definition: rtpsourcedata.h:246
RTPTime SR_GetReceiveTime() const
Returns the time at which the last sender report was received.
Definition: rtpsourcedata.h:278
bool SR_HasInfo() const
Returns true if an RTCP sender report has been received from this participant.
Definition: rtpsourcedata.h:263
uint32_t SR_GetRTPTimestamp() const
Returns the RTP timestamp contained in the last sender report.
Definition: rtpsourcedata.h:269
int32_t RR_Prev_GetPacketsLost() const
Returns the number of lost packets contained in the second to last report.
Definition: rtpsourcedata.h:331
uint32_t INF_GetBaseSequenceNumber() const
Returns the base sequence number of this participant.
Definition: rtpsourcedata.h:355
bool RR_HasInfo() const
Returns true if this participant sent a receiver report with information about the reception of our d...
Definition: rtpsourcedata.h:299
bool IsRTCPAddressSet() const
Returns true if the address from which this participant's RTCP packets originate has already been set...
Definition: rtpsourcedata.h:223
bool IsCSRC() const
Returns true if the source identifier is actually a CSRC from an RTP packet.
Definition: rtpsourcedata.h:191
bool IsOwnSSRC() const
Returns true if the participant was added using the RTPSources member function CreateOwnSSRC and retu...
Definition: rtpsourcedata.h:188
uint8_t * SDES_GetEMail(size_t *len) const
Returns a pointer to the SDES e-mail item of this participant and stores its length in len.
Definition: rtpsourcedata.h:396
const RTPAddress * GetRTPDataAddress() const
Returns the address from which this participant's RTP packets originate.
Definition: rtpsourcedata.h:230
double RR_Prev_GetFractionLost() const
Returns the fraction lost value from the second to last report.
Definition: rtpsourcedata.h:328
bool RR_Prev_HasInfo() const
Returns true if this participant sent more than one receiver report with information about the recept...
Definition: rtpsourcedata.h:325
uint32_t INF_GetSavedExtendedSequenceNumber() const
Returns the extended sequence number which was stored by the INF_StartNewInterval call.
Definition: rtpsourcedata.h:376
bool SR_Prev_HasInfo() const
Returns true if more than one RTCP sender report has been received.
Definition: rtpsourcedata.h:281
uint8_t * SDES_GetNote(size_t *len) const
Returns a pointer to the SDES note item of this participant and stores its length in len.
Definition: rtpsourcedata.h:408
RTPTime RR_Prev_GetReceiveTime() const
Returns the time at which the second to last report was received.
Definition: rtpsourcedata.h:346
uint8_t * SDES_GetName(size_t *len) const
Returns a pointer to the SDES name item of this participant and stores its length in len.
Definition: rtpsourcedata.h:393
bool ReceivedBYE() const
Returns true if we received a BYE message for this participant and false otherwise.
Definition: rtpsourcedata.h:240
uint32_t INF_GetJitter() const
Returns the current jitter value for this participant.
Definition: rtpsourcedata.h:361
bool IsSender() const
Returns true if this member is marked as a sender and false if not.
Definition: rtpsourcedata.h:194
uint32_t GetSSRC() const
Returns the SSRC identifier for this member.
Definition: rtpsourcedata.h:183
uint32_t SR_GetPacketCount() const
Returns the packet count contained in the last sender report.
Definition: rtpsourcedata.h:272
RTPTime GetBYETime() const
Returns the time at which the BYE packet was received.
Definition: rtpsourcedata.h:249
uint32_t RR_GetJitter() const
Returns the jitter value from the last report.
Definition: rtpsourcedata.h:311
uint32_t SR_Prev_GetPacketCount() const
Returns the packet count contained in the second to last sender report.
Definition: rtpsourcedata.h:290
double INF_GetEstimatedTimestampUnit() const
Returns the estimated timestamp unit, calculated from two consecutive sender reports.
uint32_t RR_GetExtendedHighestSequenceNumber() const
Returns the extended highest sequence number contained in the last report.
Definition: rtpsourcedata.h:308
uint8_t * SDES_GetTool(size_t *len) const
Returns a pointer to the SDES tool item of this participant and stores its length in len.
Definition: rtpsourcedata.h:405
uint32_t SR_GetByteCount() const
Returns the octet count contained in the last sender report.
Definition: rtpsourcedata.h:275
RTPTime SR_Prev_GetReceiveTime() const
Returns the time at which the second to last sender report was received.
Definition: rtpsourcedata.h:296
double GetTimestampUnit() const
Returns the timestamp unit used for this participant.
Definition: rtpsourcedata.h:260
RTPNTPTime SR_Prev_GetNTPTimestamp() const
Returns the NTP timestamp contained in the second to last sender report.
Definition: rtpsourcedata.h:284
int32_t RR_GetPacketsLost() const
Returns the number of lost packets contained in the last report.
Definition: rtpsourcedata.h:305
RTPTime INF_GetLastMessageTime() const
Returns the time at which something was last heard from this member.
Definition: rtpsourcedata.h:364
uint32_t RR_Prev_GetJitter() const
Returns the jitter value from the second to last report.
Definition: rtpsourcedata.h:337
uint32_t RR_Prev_GetDelaySinceLastSR() const
Returns the DLSR value from the second to last report.
Definition: rtpsourcedata.h:343
const RTPAddress * GetRTCPDataAddress() const
Returns the address from which this participant's RTCP packets originate.
Definition: rtpsourcedata.h:237
int32_t INF_GetNumPacketsReceived() const
Returns the total number of received packets from this participant.
Definition: rtpsourcedata.h:352
RTPTime INF_GetRoundtripTime() const
Estimates the round trip time by using the LSR and DLSR info from the last receiver report.
bool HasData() const
Returns true if there are RTP packets which can be extracted.
Definition: rtpsourcedata.h:180
void SetTimestampUnit(double tsu)
Sets the value for the timestamp unit to be used in jitter calculations for data received from this p...
Definition: rtpsourcedata.h:257
uint32_t RR_GetLastSRTimestamp() const
Returns the LSR value from the last report.
Definition: rtpsourcedata.h:314
void SDES_GotoFirstPrivateValue()
Starts the iteration over the stored SDES private item prefixes and their associated values.
Definition: rtpsourcedata.h:412
uint32_t INF_GetExtendedHighestSequenceNumber() const
Returns the extended highest sequence number received from this participant.
Definition: rtpsourcedata.h:358
uint32_t SR_Prev_GetByteCount() const
Returns the octet count contained in the second to last sender report.
Definition: rtpsourcedata.h:293
double RR_GetFractionLost() const
Returns the fraction lost value from the last report.
Definition: rtpsourcedata.h:302
uint32_t RR_Prev_GetExtendedHighestSequenceNumber() const
Returns the extended highest sequence number contained in the second to last report.
Definition: rtpsourcedata.h:334
bool INF_HasSentData() const
Returns true if validated RTP packets have been received from this participant.
Definition: rtpsourcedata.h:349
bool IsRTPAddressSet() const
Returns true if the address from which this participant's RTP packets originate has already been set.
Definition: rtpsourcedata.h:218
void INF_StartNewInterval()
Starts a new interval to count received packets in; this also stores the current extended highest seq...
Definition: rtpsourcedata.h:381
RTPTime RR_GetReceiveTime() const
Returns the time at which the last report was received.
Definition: rtpsourcedata.h:320
bool IsProcessedInRTCP() const
This function is used by the RTCPPacketBuilder class and returns whether this participant has been pr...
Definition: rtpsourcedata.h:213
uint32_t INF_GetNumPacketsReceivedInInterval() const
Returns the number of packets received since a new interval was started with INF_StartNewInterval.
Definition: rtpsourcedata.h:373
bool SDES_GetPrivateValue(uint8_t *prefix, size_t prefixlen, uint8_t **value, size_t *valuelen) const
Looks for the entry which corresponds to the SDES private item prefix prefix with length prefixlen; i...
Definition: rtpsourcedata.h:423
bool IsValidated() const
Returns true if the participant is validated, which is the case if a number of consecutive RTP packet...
Definition: rtpsourcedata.h:200
uint8_t * SDES_GetCNAME(size_t *len) const
Returns a pointer to the SDES CNAME item of this participant and stores its length in len.
Definition: rtpsourcedata.h:390
bool SDES_GetNextPrivateValue(uint8_t **prefix, size_t *prefixlen, uint8_t **value, size_t *valuelen)
If available, returns true and stores the next SDES private item prefix in prefix and its length in p...
Definition: rtpsourcedata.h:417
uint32_t RR_GetDelaySinceLastSR() const
Returns the DLSR value from the last report.
Definition: rtpsourcedata.h:317
RTPNTPTime SR_GetNTPTimestamp() const
Returns the NTP timestamp contained in the last sender report.
Definition: rtpsourcedata.h:266
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:86