OPAL  Version 3.10.10
rtp.h
Go to the documentation of this file.
1 /*
2  * rtp.h
3  *
4  * RTP protocol handler
5  *
6  * Open H323 Library
7  *
8  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Open H323 Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Portions of this code were written with the assisance of funding from
25  * Vovida Networks, Inc. http://www.vovida.com.
26  *
27  * Contributor(s): ______________________________________.
28  *
29  * $Revision: 27699 $
30  * $Author: rjongbloed $
31  * $Date: 2012-05-24 20:35:37 -0500 (Thu, 24 May 2012) $
32  */
33 
34 #ifndef OPAL_RTP_RTP_H
35 #define OPAL_RTP_RTP_H
36 
37 #ifdef P_USE_PRAGMA
38 #pragma interface
39 #endif
40 
41 #include <opal/buildopts.h>
42 
43 #include <ptlib/sockets.h>
44 #include <ptlib/safecoll.h>
45 
46 #include <list>
47 
48 
49 class RTP_JitterBuffer;
50 class PNatMethod;
51 class OpalSecurityMode;
52 class RTCP_XR_Metrics;
53 
55 //
56 // class to hold the QoS definitions for an RTP channel
57 
58 class RTP_QOS : public PObject
59 {
60  PCLASSINFO(RTP_QOS,PObject);
61  public:
62  PQoS dataQoS;
63  PQoS ctrlQoS;
64 };
65 
67 // Real Time Protocol - IETF RFC1889 and RFC1890
68 
71 class RTP_DataFrame : public PBYTEArray
72 {
73  PCLASSINFO(RTP_DataFrame, PBYTEArray);
74 
75  public:
76  RTP_DataFrame(PINDEX payloadSize = 0, PINDEX bufferSize = 0);
77  RTP_DataFrame(const BYTE * data, PINDEX len, PBoolean dynamic = true);
78 
79  enum {
80  ProtocolVersion = 2,
81  MinHeaderSize = 12,
82  // Max safe MTU size (576 bytes as per RFC879) minus IP, UDP an RTP headers
83  MaxMtuPayloadSize = (576-20-16-12)
84  };
85 
86  enum PayloadTypes {
87  PCMU, // G.711 u-Law
88  FS1016, // Federal Standard 1016 CELP
89  G721, // ADPCM - Subsumed by G.726
90  G726 = G721,
91  GSM, // GSM 06.10
92  G7231, // G.723.1 at 6.3kbps or 5.3 kbps
93  DVI4_8k, // DVI4 at 8kHz sample rate
94  DVI4_16k, // DVI4 at 16kHz sample rate
95  LPC, // LPC-10 Linear Predictive CELP
96  PCMA, // G.711 A-Law
97  G722, // G.722
98  L16_Stereo, // 16 bit linear PCM
99  L16_Mono, // 16 bit linear PCM
100  G723, // G.723
101  CN, // Confort Noise
102  MPA, // MPEG1 or MPEG2 audio
103  G728, // G.728 16kbps CELP
104  DVI4_11k, // DVI4 at 11kHz sample rate
105  DVI4_22k, // DVI4 at 22kHz sample rate
106  G729, // G.729 8kbps
107  Cisco_CN, // Cisco systems comfort noise (unofficial)
108 
109  CelB = 25, // Sun Systems Cell-B video
110  JPEG, // Motion JPEG
111  H261 = 31, // H.261
112  MPV, // MPEG1 or MPEG2 video
113  MP2T, // MPEG2 transport system
114  H263, // H.263
115 
116  T38 = 38, // T.38 (internal)
117 
119 
120  DynamicBase = 96,
121  MaxPayloadType = 127,
122  IllegalPayloadType
123  };
124 
125  unsigned GetVersion() const { return (theArray[0]>>6)&3; }
126 
127  PBoolean GetExtension() const { return (theArray[0]&0x10) != 0; }
128  void SetExtension(PBoolean ext);
129 
130  PBoolean GetMarker() const { return (theArray[1]&0x80) != 0; }
131  void SetMarker(PBoolean m);
132 
133  bool GetPadding() const { return (theArray[0]&0x20) != 0; }
134  void SetPadding(bool v) { if (v) theArray[0] |= 0x20; else theArray[0] &= 0xdf; }
135  BYTE * GetPaddingPtr() const { return (BYTE *)(theArray+m_headerSize+m_payloadSize); }
136 
137  unsigned GetPaddingSize() const { return m_paddingSize; }
138  bool SetPaddingSize(PINDEX sz);
139 
140  PayloadTypes GetPayloadType() const { return (PayloadTypes)(theArray[1]&0x7f); }
141  void SetPayloadType(PayloadTypes t);
142 
143  WORD GetSequenceNumber() const { return *(PUInt16b *)&theArray[2]; }
144  void SetSequenceNumber(WORD n) { *(PUInt16b *)&theArray[2] = n; }
145 
146  DWORD GetTimestamp() const { return *(PUInt32b *)&theArray[4]; }
147  void SetTimestamp(DWORD t) { *(PUInt32b *)&theArray[4] = t; }
148 
149  DWORD GetSyncSource() const { return *(PUInt32b *)&theArray[8]; }
150  void SetSyncSource(DWORD s) { *(PUInt32b *)&theArray[8] = s; }
151 
152  PINDEX GetContribSrcCount() const { return theArray[0]&0xf; }
153  DWORD GetContribSource(PINDEX idx) const;
154  void SetContribSource(PINDEX idx, DWORD src);
155 
156  PINDEX GetHeaderSize() const { return m_headerSize; }
157 
158  int GetExtensionType() const; // -1 is no extension
159  void SetExtensionType(int type);
160  PINDEX GetExtensionSizeDWORDs() const; // get the number of 32 bit words in the extension (excluding the header).
161  bool SetExtensionSizeDWORDs(PINDEX sz); // set the number of 32 bit words in the extension (excluding the header)
162  BYTE * GetExtensionPtr() const;
163 
164  PINDEX GetPayloadSize() const { return m_payloadSize; }
165  bool SetPayloadSize(PINDEX sz);
166  BYTE * GetPayloadPtr() const { return (BYTE *)(theArray+m_headerSize); }
167 
168  virtual PObject * Clone() const { return new RTP_DataFrame(*this); }
169  virtual void PrintOn(ostream & strm) const;
170 
171  // Note this sets the whole packet length, and calculates the various
172  // sub-section sizes: header payload and padding.
173  bool SetPacketSize(PINDEX sz);
174 
175  protected:
176  PINDEX m_headerSize;
179 
180 #if PTRACING
181  friend ostream & operator<<(ostream & o, PayloadTypes t);
182 #endif
183 };
184 
185 PLIST(RTP_DataFrameList, RTP_DataFrame);
186 
187 
190 class RTP_ControlFrame : public PBYTEArray
191 {
192  PCLASSINFO(RTP_ControlFrame, PBYTEArray);
193 
194  public:
195  RTP_ControlFrame(PINDEX compoundSize = 2048);
196 
197  unsigned GetVersion() const { return (BYTE)theArray[compoundOffset]>>6; }
198 
199  unsigned GetCount() const { return (BYTE)theArray[compoundOffset]&0x1f; }
200  void SetCount(unsigned count);
201 
203  e_IntraFrameRequest = 192,
204  e_SenderReport = 200,
205  e_ReceiverReport = 201,
206  e_SourceDescription = 202,
207  e_Goodbye = 203,
208  e_ApplDefined = 204,
209  e_TransportLayerFeedBack = 205, // RFC4585
210  e_PayloadSpecificFeedBack = 206,
211  e_ExtendedReport = 207 // RFC3611
212  };
213 
214  unsigned GetPayloadType() const { return (BYTE)theArray[compoundOffset+1]; }
215  void SetPayloadType(unsigned t);
216 
217  PINDEX GetPayloadSize() const { return 4*(*(PUInt16b *)&theArray[compoundOffset+2]); }
218  void SetPayloadSize(PINDEX sz);
219 
220  BYTE * GetPayloadPtr() const;
221 
222  PBoolean ReadNextPacket();
223  PBoolean StartNewPacket();
224  void EndPacket();
225 
226  PINDEX GetCompoundSize() const;
227 
228  void Reset(PINDEX size);
229 
230 #pragma pack(1)
231  struct ReceiverReport {
232  PUInt32b ssrc; /* data source being reported */
233  BYTE fraction; /* fraction lost since last SR/RR */
234  BYTE lost[3]; /* cumulative number of packets lost (signed!) */
235  PUInt32b last_seq; /* extended last sequence number received */
236  PUInt32b jitter; /* interarrival jitter */
237  PUInt32b lsr; /* last SR packet from this source */
238  PUInt32b dlsr; /* delay since last SR packet */
239 
240  unsigned GetLostPackets() const { return (lost[0]<<16U)+(lost[1]<<8U)+lost[2]; }
241  void SetLostPackets(unsigned lost);
242  };
243 
244  struct SenderReport {
245  PUInt32b ntp_sec; /* NTP timestamp */
246  PUInt32b ntp_frac;
247  PUInt32b rtp_ts; /* RTP timestamp */
248  PUInt32b psent; /* packets sent */
249  PUInt32b osent; /* octets sent */
250  };
251 
252  struct ExtendedReport {
253  /* VoIP Metrics Report Block */
254  BYTE bt; /* block type */
255  BYTE type_specific; /* determined by the block definition */
256  PUInt16b length; /* length of the report block */
257  PUInt32b ssrc; /* data source being reported */
258  BYTE loss_rate; /* fraction of RTP data packets lost */
259  BYTE discard_rate; /* fraction of RTP data packets discarded */
260  BYTE burst_density; /* fraction of RTP data packets within burst periods */
261  BYTE gap_density; /* fraction of RTP data packets within inter-burst gaps */
262  PUInt16b burst_duration; /* the mean duration, in ms, of burst periods */
263  PUInt16b gap_duration; /* the mean duration, in ms, of gap periods */
264  PUInt16b round_trip_delay; /* the most recently calculated round trip time */
265  PUInt16b end_system_delay; /* the most recently estimates end system delay */
266  BYTE signal_level; /* voice signal level related to 0 dBm */
267  BYTE noise_level; /* ratio of the silent background level to 0 dBm */
268  BYTE rerl; /* residual echo return loss */
269  BYTE gmin; /* gap threshold */
270  BYTE r_factor; /* voice quality metric of the call */
271  BYTE ext_r_factor; /* external R factor */
272  BYTE mos_lq; /* MOS for listen quality */
273  BYTE mos_cq; /* MOS for conversational quality */
274  BYTE rx_config; /* receiver configuration byte */
275  BYTE reserved; /* reserved for future definition */
276  PUInt16b jb_nominal; /* current nominal jitter buffer delay, in ms */
277  PUInt16b jb_maximum; /* current maximum jitter buffer delay, in ms */
278  PUInt16b jb_absolute; /* current absolute maximum jitter buffer delay, in ms */
279  };
280 
291  NumDescriptionTypes
292  };
293 
295  PUInt32b src; /* first SSRC/CSRC */
296  struct Item {
297  BYTE type; /* type of SDES item (enum DescriptionTypes) */
298  BYTE length; /* length of SDES item (in octets) */
299  char data[1]; /* text, not zero-terminated */
300 
301  /* WARNING, SourceDescription may not be big enough to contain length and data, for
302  instance, when type == RTP_ControlFrame::e_END.
303  Be careful whan calling the following function of it may read to over to
304  memory allocated*/
305  unsigned int GetLengthTotal() const {return (unsigned int)(length + 2);}
306  const Item * GetNextItem() const { return (const Item *)((char *)this + length + 2); }
307  Item * GetNextItem() { return (Item *)((char *)this + length + 2); }
308  } item[1]; /* list of SDES items */
309  };
310 
311  void StartSourceDescription(
312  DWORD src
313  );
314 
315  void AddSourceDescriptionItem(
316  unsigned type,
317  const PString & data
318  );
319 
320  // RFC4585 Feedback Message Type (FMT)
321  unsigned GetFbType() const { return (BYTE)theArray[compoundOffset]&0x1f; }
322  void SetFbType(unsigned type, PINDEX fciSize);
323 
325  e_PictureLossIndication = 1,
332  e_ApplicationLayerFbMessage = 15
333  };
334 
335  struct FbFCI {
336  PUInt32b senderSSRC; /* data source of sender of message */
337  PUInt32b mediaSSRC; /* data source of media */
338  };
339 
340  struct FbFIR {
342  PUInt32b requestSSRC;
344  };
345 
346  struct FbTSTO {
348  PUInt32b requestSSRC;
350  BYTE reserver[2];
351  BYTE tradeOff;
352  };
353 
354 #pragma pack()
355 
356  protected:
358  PINDEX payloadSize;
359 };
360 
361 
362 class RTP_Session;
363 
365 
366 #if OPAL_STATISTICS
367 
370 class OpalMediaStatistics : public PObject
371 {
372  PCLASSINFO(OpalMediaStatistics, PObject);
373  public:
375 
376  // General info (typicallly from RTP)
377  PUInt64 m_totalBytes;
378  unsigned m_totalPackets;
379  unsigned m_packetsLost;
386 
387  // Audio
388  unsigned m_averageJitter;
389  unsigned m_maximumJitter;
391 
392  // Video
393  unsigned m_totalFrames;
394  unsigned m_keyFrames;
395 
396  // Fax
397 #if OPAL_FAX
398  enum {
399  FaxNotStarted = -2,
400  FaxInProgress = -1,
401  FaxSuccessful = 0,
402  FaxErrorBase = 1
403  };
409  };
410  friend ostream & operator<<(ostream & strm, FaxCompression compression);
411  struct Fax {
412  Fax();
413 
414  int m_result; // -2=not started, -1=progress, 0=success, >0=ended with error
415  char m_phase; // 'A', 'B', 'D'
416  int m_bitRate; // e.g. 14400, 9600
417  FaxCompression m_compression; // 0=N/A, 1=T.4 1d, 2=T.4 2d, 3=T.6
422  int m_imageSize; // In bytes
423  int m_resolutionX; // Pixels per inch
424  int m_resolutionY; // Pixels per inch
427  int m_badRows; // Total number of bad rows
428  int m_mostBadRows; // Longest run of bad rows
430 
431  PString m_stationId; // Remote station identifier
432  PString m_errorText;
433  } m_fax;
434 #endif
435 };
436 
437 #endif
438 
439 
444 class RTP_UserData : public PObject
445 {
446  PCLASSINFO(RTP_UserData, PObject);
447 
448  public:
455  virtual void OnTxStatistics(
456  const RTP_Session & session
457  ) const;
458 
465  virtual void OnRxStatistics(
466  const RTP_Session & session
467  ) const;
468 
469 #if OPAL_VIDEO
470 
475  virtual void OnTxIntraFrameRequest(
476  const RTP_Session & session
477  ) const;
478 
484  virtual void OnRxIntraFrameRequest(
485  const RTP_Session & session
486  ) const;
487 #endif
488 
492  virtual void SessionFailing(
493  RTP_Session & session
494  );
495 };
496 
497 class RTP_Encoding;
498 
499 
502 class RTP_Session : public PObject
503 {
504  PCLASSINFO(RTP_Session, PObject);
505 
506  public:
509  struct Params {
511  : id(0)
512  , userData(NULL)
513  , autoDelete(true)
514  , isAudio(false)
515  , remoteIsNAT(false)
516  { }
517 
518  PString encoding;
519  unsigned id;
521  bool autoDelete;
522  bool isAudio;
523  bool remoteIsNAT;
524  };
525 
528  RTP_Session(
529  const Params & options
530  );
531 
535  ~RTP_Session();
537 
547  void SetJitterBufferSize(
548  unsigned minJitterDelay,
549  unsigned maxJitterDelay,
550  unsigned timeUnits = 0,
551  PINDEX packetSize = 2048
552  );
553 
559  unsigned GetJitterBufferSize() const;
560  unsigned GetJitterBufferDelay() const { return GetJitterBufferSize()/GetJitterTimeUnits(); }
561 
564  unsigned GetJitterTimeUnits() const { return m_timeUnits; }
565 
567  virtual PBoolean ModifyQOS(RTP_QOS * )
568  { return false; }
569 
575  virtual PBoolean ReadBufferedData(
576  RTP_DataFrame & frame
577  );
578 
584  virtual PBoolean ReadData(
585  RTP_DataFrame & frame
586  ) = 0;
587 
590  virtual void FlushData();
591 
594  virtual PBoolean WriteData(
595  RTP_DataFrame & frame
596  ) = 0;
597 
601  virtual PBoolean WriteOOBData(
602  RTP_DataFrame & frame,
603  bool rewriteTimeStamp = true
604  );
605 
608  virtual PBoolean WriteControl(
609  RTP_ControlFrame & frame
610  ) = 0;
611 
614  virtual bool Close(
615  PBoolean reading
616  ) = 0;
617 
620  virtual void Reopen(
621  PBoolean isReading
622  ) = 0;
623 
626  virtual PString GetLocalHostName() = 0;
627 
628 #if OPAL_STATISTICS
629  virtual void GetStatistics(OpalMediaStatistics & statistics, bool receiver) const;
630 #endif
631 
632 
638  e_AbortTransport
639  };
640  virtual SendReceiveStatus OnSendData(RTP_DataFrame & frame);
641  virtual SendReceiveStatus Internal_OnSendData(RTP_DataFrame & frame);
642 
643  virtual SendReceiveStatus OnSendControl(RTP_ControlFrame & frame, PINDEX & len);
644  virtual SendReceiveStatus Internal_OnSendControl(RTP_ControlFrame & frame, PINDEX & len);
645 
646  virtual SendReceiveStatus OnReceiveData(RTP_DataFrame & frame);
647  virtual SendReceiveStatus Internal_OnReceiveData(RTP_DataFrame & frame);
648 
649  virtual SendReceiveStatus OnReceiveControl(RTP_ControlFrame & frame);
650 
651  class ReceiverReport : public PObject {
652  PCLASSINFO(ReceiverReport, PObject);
653  public:
654  void PrintOn(ostream &) const;
655 
657  DWORD fractionLost; /* fraction lost since last SR/RR */
658  DWORD totalLost; /* cumulative number of packets lost (signed!) */
659  DWORD lastSequenceNumber; /* extended last sequence number received */
660  DWORD jitter; /* interarrival jitter */
661  PTimeInterval lastTimestamp;/* last SR packet from this source */
662  PTimeInterval delay; /* delay since last SR packet */
663  };
664  PARRAY(ReceiverReportArray, ReceiverReport);
665 
666  class SenderReport : public PObject {
667  PCLASSINFO(SenderReport, PObject);
668  public:
669  void PrintOn(ostream &) const;
670 
674  DWORD packetsSent;
675  DWORD octetsSent;
676  };
677 
678  virtual void OnRxSenderReport(const SenderReport & sender,
679  const ReceiverReportArray & reports);
680  virtual void OnRxReceiverReport(DWORD src,
681  const ReceiverReportArray & reports);
682  virtual void OnReceiverReports(const ReceiverReportArray & reports);
683 
684  class SourceDescription : public PObject {
685  PCLASSINFO(SourceDescription, PObject);
686  public:
687  SourceDescription(DWORD src) { sourceIdentifier = src; }
688  void PrintOn(ostream &) const;
689 
691  POrdinalToString items;
692  };
693  PARRAY(SourceDescriptionArray, SourceDescription);
694  virtual void OnRxSourceDescription(const SourceDescriptionArray & descriptions);
695 
696  virtual void OnRxGoodbye(const PDWORDArray & sources,
697  const PString & reason);
698 
699  virtual void OnRxApplDefined(const PString & type, unsigned subtype, DWORD src,
700  const BYTE * data, PINDEX size);
701 
702 #if OPAL_RTCP_XR
703  class ExtendedReport : public PObject {
704  PCLASSINFO(ExtendedReport, PObject);
705  public:
706  void PrintOn(ostream &) const;
707 
708  DWORD sourceIdentifier;
709  DWORD lossRate; /* fraction of RTP data packets lost */
710  DWORD discardRate; /* fraction of RTP data packets discarded */
711  DWORD burstDensity; /* fraction of RTP data packets within burst periods */
712  DWORD gapDensity; /* fraction of RTP data packets within inter-burst gaps */
713  DWORD roundTripDelay; /* the most recently calculated round trip time */
714  DWORD RFactor; /* voice quality metric of the call */
715  DWORD mosLQ; /* MOS for listen quality */
716  DWORD mosCQ; /* MOS for conversational quality */
717  DWORD jbNominal; /* current nominal jitter buffer delay, in ms */
718  DWORD jbMaximum; /* current maximum jitter buffer delay, in ms */
719  DWORD jbAbsolute; /* current absolute maximum jitter buffer delay, in ms */
720  };
721  PARRAY(ExtendedReportArray, ExtendedReport);
722 
723  virtual void OnRxExtendedReport(
724  DWORD src,
725  const ExtendedReportArray & reports
726  );
727 
728  RTCP_XR_Metrics * GetExtendedMetrics() const { return m_metrics; }
729 #endif // OPAL_RTCP_XR
730 
731 
736  unsigned GetSessionID() const { return sessionID; }
737 
740  void SetSessionID(unsigned id) { sessionID = id; }
741 
744  bool IsAudio() const { return isAudio; }
745 
748  void SetAudio(
749  bool aud
750  ) { isAudio = aud; }
751 
754  PString GetCanonicalName() const;
755 
758  void SetCanonicalName(const PString & name);
759 
762  PString GetToolName() const;
763 
766  void SetToolName(const PString & name);
767 
770  RTP_UserData * GetUserData() const { return userData; }
771 
774  void SetUserData(
775  RTP_UserData * data,
776  PBoolean autoDeleteUserData = true
777  );
778 
781  DWORD GetSyncSourceOut() const { return syncSourceOut; }
782 
785  bool AllowAnySyncSource() const { return allowAnySyncSource; }
786 
790  bool allow
791  ) { allowAnySyncSource = allow; }
792 
796  PBoolean ignore
797  ) { ignorePayloadTypeChanges = ignore; }
798 
801  const PTimeInterval & GetReportTimeInterval() { return m_reportTimer.GetResetTime(); }
802 
806  const PTimeInterval & interval
807  ) { m_reportTimer.RunContinuous(interval); }
808 
811  unsigned GetTxStatisticsInterval() { return txStatisticsInterval; }
812 
815  void SetTxStatisticsInterval(
816  unsigned packets
817  );
818 
821  unsigned GetRxStatisticsInterval() { return rxStatisticsInterval; }
822 
825  void SetRxStatisticsInterval(
826  unsigned packets
827  );
828 
831  void ClearStatistics();
832 
835  DWORD GetPacketsSent() const { return packetsSent; }
836 
839  DWORD GetOctetsSent() const { return octetsSent; }
840 
843  DWORD GetPacketsReceived() const { return packetsReceived; }
844 
847  DWORD GetOctetsReceived() const { return octetsReceived; }
848 
851  DWORD GetPacketsLost() const { return packetsLost; }
852 
856  DWORD GetPacketsLostByRemote() const { return packetsLostByRemote; }
857 
860  DWORD GetPacketsOutOfOrder() const { return packetsOutOfOrder; }
861 
864  DWORD GetPacketsTooLate() const;
865 
868  DWORD GetPacketOverruns() const;
869 
874  DWORD GetAverageSendTime() const { return averageSendTime; }
875 
880  DWORD GetMarkerRecvCount() const { return markerRecvCount; }
881 
886  DWORD GetMarkerSendCount() const { return markerSendCount; }
887 
892  DWORD GetMaximumSendTime() const { return maximumSendTime; }
893 
898  DWORD GetMinimumSendTime() const { return minimumSendTime; }
899 
904  DWORD GetAverageReceiveTime() const { return averageReceiveTime; }
905 
910  DWORD GetMaximumReceiveTime() const { return maximumReceiveTime; }
911 
916  DWORD GetMinimumReceiveTime() const { return minimumReceiveTime; }
917 
918  enum { JitterRoundingGuardBits = 4 };
923  DWORD GetAvgJitterTime() const { return (jitterLevel>>JitterRoundingGuardBits)/GetJitterTimeUnits(); }
924 
928  DWORD GetMaxJitterTime() const { return (maximumJitterLevel>>JitterRoundingGuardBits)/GetJitterTimeUnits(); }
929 
934  DWORD GetJitterTimeOnRemote() const { return jitterLevelOnRemote/GetJitterTimeUnits(); }
936 
937  virtual void SetCloseOnBYE(PBoolean v) { closeOnBye = v; }
938 
943  virtual void SendIntraFrameRequest(bool rfc2032, bool pictureLoss);
944 
949  virtual void SendTemporalSpatialTradeOff(unsigned tradeOff);
950 
951  void SetNextSentSequenceNumber(WORD num) { lastSentSequenceNumber = (WORD)(num-1); }
952 
953  virtual PString GetEncoding() const { return m_encoding; }
954  virtual void SetEncoding(const PString & newEncoding);
955 
956  DWORD GetSyncSourceIn() const { return syncSourceIn; }
957 
959  {
960  public:
961  EncodingLock(RTP_Session & _session);
962  ~EncodingLock();
963 
964  __inline RTP_Encoding * operator->() const { return m_encodingHandler; }
965 
966  protected:
969  };
970 
971  friend class EncodingLock;
972 
973  void SetFailed(bool v)
974  { failed = v; }
975 
976  bool HasFailed() const
977  { return failed; }
978 
979  typedef PNotifierTemplate<SendReceiveStatus &> FilterNotifier;
980  #define PDECLARE_RTPFilterNotifier(cls, fn) PDECLARE_NOTIFIER2(RTP_DataFrame, cls, fn, RTP_Session::SendReceiveStatus &)
981  #define PCREATE_RTPFilterNotifier(fn) PCREATE_NOTIFIER2(fn, RTP_Session::SendReceiveStatus &)
982 
983  void AddFilter(const FilterNotifier & filter);
984 
985  virtual void SendBYE();
986 
987  protected:
988  RTP_Session::ReceiverReportArray BuildReceiverReportArray(const RTP_ControlFrame & frame, PINDEX offset);
989  void AddReceiverReport(RTP_ControlFrame::ReceiverReport & receiver);
990 
991  PBoolean InsertReportPacket(RTP_ControlFrame & report);
992 
993  PString m_encoding;
996 
997  unsigned sessionID;
998  bool isAudio;
999  unsigned m_timeUnits;
1000  PString canonicalName;
1001  PString toolName;
1004 
1005  typedef PSafePtr<RTP_JitterBuffer, PSafePtrMultiThreaded> JitterBufferPtr;
1006  JitterBufferPtr m_jitterBuffer;
1007 
1019  PTimeInterval lastSentPacketTime;
1020  PTimeInterval lastReceivedPacketTime;
1023  PTimeInterval delaySinceLastSR;
1027  PTimeInterval outOfOrderWaitTime;
1028  PTimeInterval outOfOrderPacketTime;
1029 
1030  std::list<RTP_DataFrame> m_outOfOrderPackets;
1031  void SaveOutOfOrderPacket(RTP_DataFrame & frame);
1032 
1033  PMutex dataMutex;
1034  DWORD timeStampOffs; // offset between incoming media timestamp and timeStampOut
1035  PBoolean oobTimeStampBaseEstablished; // true if timeStampOffs has been established by media
1036  DWORD oobTimeStampOutBase; // base timestamp value for oob data
1037  PTimeInterval oobTimeStampBase; // base time for oob timestamp
1038 
1039  // Statistics
1043  DWORD octetsSent;
1060 
1063 
1066 
1067 #if OPAL_RTCP_XR
1068  // Calculate the VoIP Metrics for RTCP-XR
1069  RTCP_XR_Metrics * m_metrics;
1070  friend class RTCP_XR_Metrics;
1071 #endif
1072 
1081 
1084 
1087  PDECLARE_NOTIFIER(PTimer, RTP_Session, SendReport);
1088 
1089  PBoolean closeOnBye;
1090  PBoolean byeSent;
1091  bool failed;
1092 
1093  list<FilterNotifier> m_filters;
1094 };
1095 
1098 class RTP_UDP : public RTP_Session
1099 {
1100  PCLASSINFO(RTP_UDP, RTP_Session);
1101 
1102  public:
1107  RTP_UDP(
1108  const Params & options
1109  );
1110 
1112  ~RTP_UDP();
1114 
1122  virtual PBoolean ReadData(RTP_DataFrame & frame);
1123  virtual PBoolean Internal_ReadData(RTP_DataFrame & frame);
1124 
1127  virtual void FlushData();
1128 
1131  virtual PBoolean WriteData(RTP_DataFrame & frame);
1132  virtual PBoolean Internal_WriteData(RTP_DataFrame & frame);
1133 
1137  virtual PBoolean WriteOOBData(RTP_DataFrame & frame, bool setTimeStamp = true);
1138 
1141  virtual PBoolean WriteControl(RTP_ControlFrame & frame);
1142 
1145  virtual bool Close(
1146  PBoolean reading
1147  );
1148 
1151  virtual PString GetLocalHostName();
1153 
1156  virtual PBoolean ModifyQOS(RTP_QOS * rtpqos);
1157 
1162  virtual PBoolean Open(
1163  PIPSocket::Address localAddress,
1164  WORD portBase,
1165  WORD portMax,
1166  BYTE ipTypeOfService,
1167  PNatMethod * natMethod = NULL,
1168  RTP_QOS * rtpqos = NULL
1169  );
1171 
1174  virtual void Reopen(PBoolean isReading);
1176 
1181  virtual PIPSocket::Address GetLocalAddress() const { return localAddress; }
1182 
1185  virtual void SetLocalAddress(
1186  const PIPSocket::Address & addr
1187  ) { localAddress = addr; }
1188 
1191  PIPSocket::Address GetRemoteAddress() const { return remoteAddress; }
1192 
1195  virtual WORD GetLocalDataPort() const { return localDataPort; }
1196 
1199  virtual WORD GetLocalControlPort() const { return localControlPort; }
1200 
1203  virtual WORD GetRemoteDataPort() const { return remoteDataPort; }
1204 
1207  virtual WORD GetRemoteControlPort() const { return remoteControlPort; }
1208 
1211  virtual PUDPSocket & GetDataSocket() { return *dataSocket; }
1212 
1215  virtual PUDPSocket & GetControlSocket() { return *controlSocket; }
1216 
1219  virtual PBoolean SetRemoteSocketInfo(
1220  PIPSocket::Address address,
1221  WORD port,
1222  PBoolean isDataPort
1223  );
1224 
1227  virtual void ApplyQOS(
1228  const PIPSocket::Address & addr
1229  );
1231 
1232  virtual int GetDataSocketHandle() const
1233  { return dataSocket != NULL ? dataSocket->GetHandle() : -1; }
1234 
1235  virtual int GetControlSocketHandle() const
1236  { return controlSocket != NULL ? controlSocket->GetHandle() : -1; }
1237 
1238  friend class RTP_Encoding;
1239 
1240  virtual int WaitForPDU(PUDPSocket & dataSocket, PUDPSocket & controlSocket, const PTimeInterval & timer);
1241  virtual int Internal_WaitForPDU(PUDPSocket & dataSocket, PUDPSocket & controlSocket, const PTimeInterval & timer);
1242 
1243  virtual SendReceiveStatus ReadDataPDU(RTP_DataFrame & frame);
1244  virtual SendReceiveStatus Internal_ReadDataPDU(RTP_DataFrame & frame);
1245 
1247  virtual SendReceiveStatus Internal_OnReadTimeout(RTP_DataFrame & frame);
1248 
1249  virtual SendReceiveStatus ReadControlPDU();
1250  virtual SendReceiveStatus ReadDataOrControlPDU(
1251  BYTE * framePtr,
1252  PINDEX frameSize,
1253  PBoolean fromDataChannel
1254  );
1255 
1256  virtual bool WriteDataPDU(RTP_DataFrame & frame);
1257  virtual bool WriteDataOrControlPDU(
1258  const BYTE * framePtr,
1259  PINDEX frameSize,
1260  bool toDataChannel
1261  );
1262 
1263  virtual void SetEncoding(const PString & newEncoding);
1264 
1265 
1266  protected:
1267  PIPSocket::Address localAddress;
1270 
1271  PIPSocket::Address remoteAddress;
1274 
1275  PIPSocket::Address remoteTransmitAddress;
1276 
1277  PUDPSocket * dataSocket;
1278  PUDPSocket * controlSocket;
1279 
1288 
1290  PDECLARE_NOTIFIER(PTimer, RTP_UDP, OnWriteDataIdle);
1291 };
1292 
1294 
1295 class RTP_UDP;
1296 
1298 {
1299  public:
1300  RTP_Encoding();
1301  virtual ~RTP_Encoding();
1302  virtual void ApplyStringOptions(const PStringToString & /*stringOptions*/) {}
1303  virtual void OnStart(RTP_Session & _rtpSession);
1304  virtual void OnFinish();
1305  virtual RTP_Session::SendReceiveStatus OnSendData(RTP_DataFrame & frame);
1306  virtual PBoolean WriteData(RTP_DataFrame & frame, bool oob);
1307  virtual PBoolean WriteDataPDU(RTP_DataFrame & frame);
1308  virtual void OnWriteDataIdle() {}
1309  virtual void SetWriteDataIdleTimer(PTimer &) {}
1310  virtual RTP_Session::SendReceiveStatus OnSendControl(RTP_ControlFrame & frame, PINDEX & len);
1311  virtual RTP_Session::SendReceiveStatus ReadDataPDU(RTP_DataFrame & frame);
1312  virtual RTP_Session::SendReceiveStatus OnReceiveData(RTP_DataFrame & frame);
1313  virtual RTP_Session::SendReceiveStatus OnReadTimeout(RTP_DataFrame & frame);
1314  virtual PBoolean ReadData(RTP_DataFrame & frame);
1315  virtual int WaitForPDU(PUDPSocket & dataSocket, PUDPSocket & controlSocket, const PTimeInterval &);
1316 
1317  PMutex mutex;
1318  unsigned refCount;
1319 
1320  protected:
1322 };
1323 
1325 
1326 
1328 
1329 class SecureRTP_UDP : public RTP_UDP
1330 {
1331  PCLASSINFO(SecureRTP_UDP, RTP_UDP);
1332 
1333  public:
1338  SecureRTP_UDP(
1339  const Params & options
1340  );
1341 
1343  ~SecureRTP_UDP();
1344 
1345  virtual void SetSecurityMode(OpalSecurityMode * srtpParms);
1346  virtual OpalSecurityMode * GetSecurityParms() const;
1347 
1348  protected:
1350 };
1351 
1352 #endif // OPAL_RTP_RTP_H
1353 
PUInt32b requestSSRC
Definition: rtp.h:348
DWORD maximumSendTimeAccum
Definition: rtp.h:1074
PBoolean GetMarker() const
Definition: rtp.h:130
Definition: rtp.h:96
Definition: rtp.h:289
DWORD timeStampOffs
Definition: rtp.h:1034
char m_phase
Definition: rtp.h:415
unsigned GetSessionID() const
Definition: rtp.h:736
void SetSyncSource(DWORD s)
Definition: rtp.h:150
virtual int GetControlSocketHandle() const
Definition: rtp.h:1235
PTimeInterval lastTimestamp
Definition: rtp.h:661
BYTE noise_level
Definition: rtp.h:267
unsigned m_keyFrames
Definition: rtp.h:394
DWORD GetMinimumReceiveTime() const
Definition: rtp.h:916
unsigned id
Session ID for RTP channel.
Definition: rtp.h:519
Definition: rtp.h:100
PUInt16b end_system_delay
Definition: rtp.h:265
WORD localDataPort
Definition: rtp.h:1268
Definition: rtp.h:285
Definition: rtpconn.h:525
BYTE fraction
Definition: rtp.h:233
DWORD lastTransitTime
Definition: rtp.h:1080
PTime firstPacketSent
Definition: rtp.h:1040
DWORD GetSyncSourceOut() const
Definition: rtp.h:781
bool resequenceOutOfOrderPackets
Definition: rtp.h:1025
virtual PObject * Clone() const
Definition: rtp.h:168
void SetTimestamp(DWORD t)
Definition: rtp.h:147
unsigned GetPayloadType() const
Definition: rtp.h:214
bool m_firstControl
Definition: rtp.h:1285
BYTE type_specific
Definition: rtp.h:255
DWORD GetMarkerRecvCount() const
Definition: rtp.h:880
unsigned m_packetOverruns
Definition: rtp.h:382
unsigned int GetLengthTotal() const
Definition: rtp.h:305
DWORD GetAvgJitterTime() const
Definition: rtp.h:923
RTP_Encoding * m_encodingHandler
Definition: rtp.h:995
RTP_UserData * userData
Optional data for session.
Definition: rtp.h:520
DWORD GetSyncSource() const
Definition: rtp.h:149
virtual RTP_Session::SendReceiveStatus OnReadTimeout(RTP_DataFrame &frame)
Definition: rtp.h:502
DWORD maximumReceiveTime
Definition: rtp.h:1055
bool shutdownWrite
Definition: rtp.h:1281
unsigned GetVersion() const
Definition: rtp.h:125
DWORD markerRecvCount
Definition: rtp.h:1062
bool m_errorCorrection
Definition: rtp.h:418
int m_imageSize
Definition: rtp.h:422
PUInt32b jitter
Definition: rtp.h:236
BYTE rerl
Definition: rtp.h:268
int m_pageHeight
Definition: rtp.h:426
virtual void ApplyStringOptions(const PStringToString &)
Definition: rtp.h:1302
DWORD packetsLostByRemote
Definition: rtp.h:1049
Definition: rtp.h:103
virtual void SetWriteDataIdleTimer(PTimer &)
Definition: rtp.h:1309
PayloadTypes GetPayloadType() const
Definition: rtp.h:140
virtual WORD GetLocalControlPort() const
Definition: rtp.h:1199
PUInt32b psent
Definition: rtp.h:248
bool appliedQOS
Definition: rtp.h:1282
BYTE burst_density
Definition: rtp.h:260
DWORD maximumJitterLevel
Definition: rtp.h:1059
Definition: rtp.h:283
Definition: rtp.h:110
Definition: rtp.h:684
bool localHasNAT
Definition: rtp.h:1284
DWORD octetsSent
Definition: rtp.h:1043
unsigned GetPaddingSize() const
Definition: rtp.h:137
PString m_stationId
Definition: rtp.h:431
PTimeInterval outOfOrderWaitTime
Definition: rtp.h:1027
DWORD minimumReceiveTime
Definition: rtp.h:1056
FbFCI fci
Definition: rtp.h:347
virtual PUDPSocket & GetDataSocket()
Definition: rtp.h:1211
RTP_UDP * rtpUDP
Definition: rtp.h:1321
unsigned refCount
Definition: rtp.h:1318
BYTE gap_density
Definition: rtp.h:261
PString toolName
Definition: rtp.h:1001
PTimeInterval oobTimeStampBase
Definition: rtp.h:1037
PINDEX compoundOffset
Definition: rtp.h:357
bool AllowAnySyncSource() const
Definition: rtp.h:785
std::list< RTP_DataFrame > m_outOfOrderPackets
Definition: rtp.h:1030
Definition: rtp.h:636
PUInt32b ssrc
Definition: rtp.h:232
DWORD GetMinimumSendTime() const
Definition: rtp.h:898
RTP_DataFrame::PayloadTypes lastReceivedPayloadType
Definition: rtp.h:1082
BYTE gmin
Definition: rtp.h:269
BYTE reserved
Definition: rtp.h:275
DWORD markerSendCount
Definition: rtp.h:1061
unsigned m_packetsTooLate
Definition: rtp.h:381
Definition: rtp.h:340
void SetReportTimeInterval(const PTimeInterval &interval)
Definition: rtp.h:805
Definition: rtp.h:112
DWORD octetsReceived
Definition: rtp.h:1047
virtual void SetLocalAddress(const PIPSocket::Address &addr)
Definition: rtp.h:1185
DWORD minimumSendTime
Definition: rtp.h:1053
DWORD GetAverageReceiveTime() const
Definition: rtp.h:904
RTP_UserData * userData
Definition: rtp.h:1002
PBoolean allowRemoteTransmitAddressChange
Definition: rtp.h:1013
PUInt32b senderSSRC
Definition: rtp.h:336
PINDEX GetContribSrcCount() const
Definition: rtp.h:152
Definition: rtp.h:105
Definition: rtp.h:666
void SetAnySyncSource(bool allow)
Definition: rtp.h:789
Definition: rtp.h:58
bool GetPadding() const
Definition: rtp.h:133
bool HasFailed() const
Definition: rtp.h:976
unsigned m_totalFrames
Definition: rtp.h:393
bool shutdownRead
Definition: rtp.h:1280
unsigned consecutiveOutOfOrderPackets
Definition: rtp.h:1026
PUInt16b length
Definition: rtp.h:256
Definition: rtp.h:95
RTP_Session & session
Definition: rtp.h:967
PTimeInterval delaySinceLastSR
Definition: rtp.h:1023
Definition: rtp.h:101
unsigned GetVersion() const
Definition: rtp.h:197
DWORD GetMaxJitterTime() const
Definition: rtp.h:928
WORD GetSequenceNumber() const
Definition: rtp.h:143
DWORD averageSendTimeAccum
Definition: rtp.h:1073
PUInt16b jb_absolute
Definition: rtp.h:278
DWORD GetMaximumSendTime() const
Definition: rtp.h:892
Definition: rtp.h:102
int m_totalPages
Definition: rtp.h:421
DWORD GetPacketsSent() const
Definition: rtp.h:835
PBoolean autoDeleteUserData
Definition: rtp.h:1003
Definition: rtp.h:104
DWORD lastSequenceNumber
Definition: rtp.h:659
DWORD jitter
Definition: rtp.h:660
Definition: rtp.h:99
DWORD GetPacketsOutOfOrder() const
Definition: rtp.h:860
PMutex m_reportMutex
Definition: rtp.h:1085
unsigned rxStatisticsInterval
Definition: rtp.h:1016
PUInt32b rtp_ts
Definition: rtp.h:247
PayloadTypes
Definition: rtp.h:86
virtual int WaitForPDU(PUDPSocket &dataSocket, PUDPSocket &controlSocket, const PTimeInterval &)
unsigned sessionID
Definition: rtp.h:997
unsigned GetLostPackets() const
Definition: rtp.h:240
unsigned GetJitterBufferDelay() const
Definition: rtp.h:560
WORD expectedSequenceNumber
Definition: rtp.h:1018
DWORD GetPacketsReceived() const
Definition: rtp.h:843
Definition: rtp.h:87
RTP_Encoding * m_encodingHandler
Definition: rtp.h:968
unsigned m_totalPackets
Definition: rtp.h:378
DWORD packetsOutOfOrder
Definition: rtp.h:1050
unsigned GetCount() const
Definition: rtp.h:199
PUInt16b round_trip_delay
Definition: rtp.h:264
virtual PString GetEncoding() const
Definition: rtp.h:953
Definition: rtp.h:290
BYTE sequenceNUmber
Definition: rtp.h:343
void SetFailed(bool v)
Definition: rtp.h:973
PUInt32b lsr
Definition: rtp.h:237
PMutex mutex
Definition: rtp.h:1317
SendReceiveStatus
Definition: rtp.h:635
PUInt16b gap_duration
Definition: rtp.h:263
PUInt32b ntp_frac
Definition: rtp.h:246
FbFCI fci
Definition: rtp.h:341
unsigned m_maximumPacketTime
Definition: rtp.h:385
PBoolean ignorePayloadTypeChanges
Definition: rtp.h:1083
PayloadTypes
Definition: rtp.h:202
PFACTORY_LOAD(RTP_Encoding)
PNotifierTemplate< SendReceiveStatus & > FilterNotifier
Definition: rtp.h:979
virtual WORD GetRemoteDataPort() const
Definition: rtp.h:1203
Definition: rtp.h:958
BYTE ext_r_factor
Definition: rtp.h:271
Definition: rtp.h:107
DWORD GetAverageSendTime() const
Definition: rtp.h:874
BYTE bt
Definition: rtp.h:254
Definition: rtp.h:71
PBoolean closeOnBye
Definition: rtp.h:1089
FaxCompression m_compression
Definition: rtp.h:417
Definition: rtp.h:244
bool allowAnySyncSource
Definition: rtp.h:1011
const PTimeInterval & GetReportTimeInterval()
Definition: rtp.h:801
PINDEX GetPayloadSize() const
Definition: rtp.h:164
bool IsAudio() const
Definition: rtp.h:744
Definition: rtp.h:89
PQoS ctrlQoS
Definition: rtp.h:63
Definition: rtp.h:88
PString encoding
identifies initial RTP encoding (RTP/AVP, UDPTL etc)
Definition: rtp.h:518
PTime lastSRReceiveTime
Definition: rtp.h:1022
PUInt32b dlsr
Definition: rtp.h:238
unsigned m_packetsLost
Definition: rtp.h:379
PQoS dataQoS
Definition: rtp.h:62
PUInt32b osent
Definition: rtp.h:249
DWORD lastSentTimestamp
Definition: rtp.h:1010
unsigned GetFbType() const
Definition: rtp.h:321
DWORD rtpTimestamp
Definition: rtp.h:673
unsigned m_minimumPacketTime
Definition: rtp.h:383
unsigned txStatisticsInterval
Definition: rtp.h:1015
BYTE * GetPayloadPtr() const
Definition: rtp.h:166
DWORD averageReceiveTimeAccum
Definition: rtp.h:1076
PUInt16b jb_maximum
Definition: rtp.h:277
DWORD packetsLostSinceLastRR
Definition: rtp.h:1079
Definition: rtp.h:346
Definition: rtp.h:509
Params()
Definition: rtp.h:510
unsigned m_averageJitter
Definition: rtp.h:388
Definition: rtp.h:106
int badTransmitCounter
Definition: rtp.h:1286
unsigned m_timeUnits
Definition: rtp.h:999
PUInt32b requestSSRC
Definition: rtp.h:342
unsigned rxStatisticsCount
Definition: rtp.h:1065
DWORD GetMarkerSendCount() const
Definition: rtp.h:886
virtual int GetDataSocketHandle() const
Definition: rtp.h:1232
Definition: rtp.h:97
PTimer m_reportTimer
Definition: rtp.h:1086
PLIST(RTP_DataFrameList, RTP_DataFrame)
int m_resolutionX
Definition: rtp.h:423
PUDPSocket * dataSocket
Definition: rtp.h:1277
bool remoteIsNAT
Remote is behid NAT.
Definition: rtp.h:523
unsigned GetJitterTimeUnits() const
Definition: rtp.h:564
JitterBufferPtr m_jitterBuffer
Definition: rtp.h:1006
unsigned GetRxStatisticsInterval()
Definition: rtp.h:821
PINDEX GetHeaderSize() const
Definition: rtp.h:156
DWORD packetsSent
Definition: rtp.h:1041
unsigned m_averagePacketTime
Definition: rtp.h:384
Definition: rtp.h:92
BYTE * GetPaddingPtr() const
Definition: rtp.h:135
Definition: rtp.h:93
Definition: rtp.h:98
WORD lastSentSequenceNumber
Definition: rtp.h:1017
DescriptionTypes
Definition: rtp.h:281
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
Definition: rtp.h:1329
void SetNextSentSequenceNumber(WORD num)
Definition: rtp.h:951
WORD remoteControlPort
Definition: rtp.h:1273
virtual RTP_Session::SendReceiveStatus ReadDataPDU(RTP_DataFrame &frame)
RTP_UserData * GetUserData() const
Definition: rtp.h:770
unsigned m_maximumJitter
Definition: rtp.h:389
PTimeInterval outOfOrderPacketTime
Definition: rtp.h:1028
DWORD packetsReceived
Definition: rtp.h:1045
DWORD maximumSendTime
Definition: rtp.h:1052
DWORD GetOctetsSent() const
Definition: rtp.h:839
PSafePtr< RTP_JitterBuffer, PSafePtrMultiThreaded > JitterBufferPtr
Definition: rtp.h:1005
PBoolean byeSent
Definition: rtp.h:1090
BYTE loss_rate
Definition: rtp.h:258
PARRAY(H323CapabilitiesList, H323Capability)
PUInt32b ssrc
Definition: rtp.h:257
unsigned m_packetsOutOfOrder
Definition: rtp.h:380
int m_errorCorrectionRetries
Definition: rtp.h:429
PIPSocket::Address localAddress
Definition: rtp.h:1267
PString canonicalName
Definition: rtp.h:1000
bool autoDelete
Delete optional data with session.
Definition: rtp.h:521
PBoolean GetExtension() const
Definition: rtp.h:127
bool failed
set to true if session has received too many ICMP destination unreachable
Definition: rtp.h:1091
Definition: rtp.h:444
PMutex m_encodingMutex
Definition: rtp.h:994
DWORD fractionLost
Definition: rtp.h:657
Definition: rtp.h:1297
int m_rxPages
Definition: rtp.h:420
PTimeInterval delay
Definition: rtp.h:662
DWORD GetMaximumReceiveTime() const
Definition: rtp.h:910
Definition: rtp.h:284
__inline RTP_Encoding * operator->() const
Definition: rtp.h:964
DWORD minimumReceiveTimeAccum
Definition: rtp.h:1078
PUInt16b jb_nominal
Definition: rtp.h:276
BYTE r_factor
Definition: rtp.h:270
DWORD packetsLost
Definition: rtp.h:1048
BYTE signal_level
Definition: rtp.h:266
Definition: jitter.h:244
void SetPadding(bool v)
Definition: rtp.h:134
Definition: rtp.h:113
PTimer timerWriteDataIdle
Definition: rtp.h:1289
DWORD oobTimeStampOutBase
Definition: rtp.h:1036
PTime firstPacketReceived
Definition: rtp.h:1044
PUInt16b burst_duration
Definition: rtp.h:262
int m_mostBadRows
Definition: rtp.h:428
virtual PBoolean WriteDataPDU(RTP_DataFrame &frame)
PIPSocket::Address remoteAddress
Definition: rtp.h:1271
DWORD GetTimestamp() const
Definition: rtp.h:146
DWORD jitterLevel
Definition: rtp.h:1057
BYTE discard_rate
Definition: rtp.h:259
virtual WORD GetRemoteControlPort() const
Definition: rtp.h:1207
PTimeInterval lastReceivedPacketTime
Definition: rtp.h:1020
Item * GetNextItem()
Definition: rtp.h:307
unsigned m_jitterBufferDelay
Definition: rtp.h:390
void SetAudio(bool aud)
Definition: rtp.h:748
int m_txPages
Definition: rtp.h:419
virtual void OnWriteDataIdle()
Definition: rtp.h:1308
DWORD sourceIdentifier
Definition: rtp.h:671
void SetSessionID(unsigned id)
Definition: rtp.h:740
BYTE mos_cq
Definition: rtp.h:273
Definition: rtp.h:335
Definition: rtp.h:411
BYTE rx_config
Definition: rtp.h:274
Definition: rtp.h:91
PINDEX payloadSize
Definition: rtp.h:358
DWORD GetJitterTimeOnRemote() const
Definition: rtp.h:934
DWORD senderReportsReceived
Definition: rtp.h:1046
Definition: rtp.h:651
virtual PBoolean ModifyQOS(RTP_QOS *)
Definition: rtp.h:567
DWORD minimumSendTimeAccum
Definition: rtp.h:1075
PIPSocket::Address GetRemoteAddress() const
Definition: rtp.h:1191
DWORD syncSourceIn
Definition: rtp.h:1009
virtual PUDPSocket & GetControlSocket()
Definition: rtp.h:1215
unsigned GetTxStatisticsInterval()
Definition: rtp.h:811
DWORD maximumReceiveTimeAccum
Definition: rtp.h:1077
DWORD GetSyncSourceIn() const
Definition: rtp.h:956
PTime lastSRTimestamp
Definition: rtp.h:1021
virtual WORD GetLocalDataPort() const
Definition: rtp.h:1195
const Item * GetNextItem() const
Definition: rtp.h:306
Definition: rtp.h:114
FaxCompression
Definition: rtp.h:404
PUInt32b ntp_sec
Definition: rtp.h:245
PMutex dataMutex
Definition: rtp.h:1033
unsigned txStatisticsCount
Definition: rtp.h:1064
DWORD syncSourceOut
Definition: rtp.h:1008
POrdinalToString items
Definition: rtp.h:691
PTimeInterval lastSentPacketTime
Definition: rtp.h:1019
PIPSocket::Address remoteTransmitAddress
Definition: rtp.h:1275
DWORD GetPacketsLost() const
Definition: rtp.h:851
Definition: rtp.h:287
PString m_errorText
Definition: rtp.h:432
int m_bitRate
Definition: rtp.h:416
Definition: rtp.h:370
PUInt32b mediaSSRC
Definition: rtp.h:337
Definition: rtp.h:190
PINDEX GetPayloadSize() const
Definition: rtp.h:217
void SetIgnorePayloadTypeChanges(PBoolean ignore)
Definition: rtp.h:795
SourceDescription(DWORD src)
Definition: rtp.h:687
PINDEX m_headerSize
Definition: rtp.h:176
PBoolean allowSequenceChange
Definition: rtp.h:1014
bool isAudio
Definition: rtp.h:998
DWORD packetsSent
Definition: rtp.h:674
PUDPSocket * controlSocket
Definition: rtp.h:1278
void SetSequenceNumber(WORD n)
Definition: rtp.h:144
DWORD averageReceiveTime
Definition: rtp.h:1054
BYTE sequenceNUmber
Definition: rtp.h:349
BYTE mos_lq
Definition: rtp.h:272
bool allowOneSyncSourceChange
Definition: rtp.h:1012
DWORD jitterLevelOnRemote
Definition: rtp.h:1058
PINDEX m_paddingSize
Definition: rtp.h:178
bool remoteIsNAT
Definition: rtp.h:1283
WORD remoteDataPort
Definition: rtp.h:1272
int m_result
Definition: rtp.h:414
bool isAudio
is audio RTP data
Definition: rtp.h:522
int m_badRows
Definition: rtp.h:427
DWORD averageSendTime
Definition: rtp.h:1051
DWORD GetPacketsLostByRemote() const
Definition: rtp.h:856
BYTE tradeOff
Definition: rtp.h:351
Definition: rtp.h:282
PUInt32b src
Definition: rtp.h:295
DWORD totalLost
Definition: rtp.h:658
PTime badTransmitStart
Definition: rtp.h:1287
PUInt32b last_seq
Definition: rtp.h:235
Definition: rtp.h:286
PTime realTimestamp
Definition: rtp.h:672
PINDEX m_payloadSize
Definition: rtp.h:177
virtual void SetCloseOnBYE(PBoolean v)
Definition: rtp.h:937
DWORD rtcpPacketsSent
Definition: rtp.h:1042
int m_pageWidth
Definition: rtp.h:425
Definition: rtp.h:637
int m_resolutionY
Definition: rtp.h:424
PString m_encoding
Definition: rtp.h:993
DWORD GetOctetsReceived() const
Definition: rtp.h:847
Definition: rtp.h:1098
virtual PIPSocket::Address GetLocalAddress() const
Definition: rtp.h:1181
DWORD sourceIdentifier
Definition: rtp.h:690
PUInt64 m_totalBytes
Definition: rtp.h:377
WORD lastRRSequenceNumber
Definition: rtp.h:1024
list< FilterNotifier > m_filters
Definition: rtp.h:1093
Definition: rtp.h:288
PayloadSpecificFbTypes
Definition: rtp.h:324
DWORD sourceIdentifier
Definition: rtp.h:656
WORD localControlPort
Definition: rtp.h:1269
OpalSecurityMode * securityParms
Definition: rtp.h:1349
PBoolean oobTimeStampBaseEstablished
Definition: rtp.h:1035
DWORD octetsSent
Definition: rtp.h:675
Definition: rtp.h:94