OPAL  Version 3.18.8
rtp_session.h
Go to the documentation of this file.
1 /*
2  * rtp_session.h
3  *
4  * RTP protocol session
5  *
6  * Open H323 Library
7  *
8  * Copyright (c) 1998-2012 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 
30 #ifndef OPAL_RTP_RTP_SESSION_H
31 #define OPAL_RTP_RTP_SESSION_H
32 
33 #ifdef P_USE_PRAGMA
34 #pragma interface
35 #endif
36 
37 #include <opal_config.h>
38 
39 #include <rtp/rtp.h>
40 #include <rtp/jitter.h>
41 #include <opal/mediasession.h>
42 #include <opal/mediafmt.h>
43 #include <ptlib/sockets.h>
44 #include <ptlib/safecoll.h>
45 #include <ptlib/notifier_ext.h>
46 #include <ptclib/pnat.h>
47 #include <ptclib/url.h>
48 
49 #include <list>
50 
51 
52 class OpalRTPEndPoint;
53 class PNatMethod;
54 class PSTUNServer;
55 class PSTUNClient;
56 class RTCP_XR_Metrics;
57 class RTP_MetricsReport;
58 
59 
67 #define OPAL_OPT_RTP_ALLOW_SSRC "RTP-Allow-SSRC"
68 #define OPAL_OPT_RTP_ALLOW_SSRC_ANY "any"
69 #define OPAL_OPT_RTP_ALLOW_SSRC_FIRST "first"
70 #define OPAL_OPT_RTP_ALLOW_SSRC_PRESET "preset"
71 
76 #define OPAL_OPT_RTP_ABS_SEND_TIME "RTP-Abs-Send-Time"
77 
83 #define OPAL_OPT_TRANSPORT_WIDE_CONGESTION_CONTROL "Transport-Wide-Congestion-Control"
84 
85 
87 
91 {
92  PCLASSINFO(OpalRTPSession, OpalMediaSession);
93  public:
94  static const PCaselessString & RTP_AVP();
95  static const PCaselessString & RTP_AVPF();
96 
101  OpalRTPSession(const Init & init);
102 
106  ~OpalRTPSession();
108 
111  virtual const PCaselessString & GetSessionType() const { return RTP_AVP(); }
112  virtual bool Open(const PString & localInterface, const OpalTransportAddress & remoteAddress);
113  virtual bool Close();
114  virtual OpalTransportAddress GetLocalAddress(bool isMediaAddress = true) const;
115  virtual OpalTransportAddress GetRemoteAddress(bool isMediaAddress = true) const;
116  virtual bool SetRemoteAddress(const OpalTransportAddress & remoteAddress, bool isMediaAddress = true);
117  virtual void AttachTransport(const OpalMediaTransportPtr & transport);
119  virtual bool AddGroup(const PString & groupId, const PString & mediaId, bool overwrite = true);
120 
121  virtual bool UpdateMediaFormat(const OpalMediaFormat & mediaFormat);
122 
124  const OpalMediaFormat & mediaFormat,
125  unsigned sessionID,
126  bool isSource
127  );
129 
133  {
136  };
137 #if PTRACING
138  friend ostream & operator<<(ostream & strm, Direction dir);
139 #endif
140 
148  RTP_SyncSourceId id,
149  Direction dir,
150  const char * cname = NULL
151  );
152 
155  virtual bool RemoveSyncSource(
157  PTRACE_PARAM(, const char * reason)
158  );
159 
163 
168  RTP_SyncSourceId primarySSRC,
170  RTP_SyncSourceId rtxSSRC
171  );
172 
177  RTP_DataFrame::PayloadTypes primaryPT,
180  );
181 
182 
185  e_AbortTransport, // Abort is zero so equvalent to false
187  };
188 
190  {
196  };
197 
198  enum ReceiveType {
203  };
204 
208  RTP_DataFrame & frame,
209  RewriteMode rewrite = e_RewriteHeader,
210  const PIPSocketAddressAndPort * remote = NULL,
211  const PTime & now = PTime()
212  );
213 
217  RTP_SyncSourceId ssrc,
218  bool force,
219  const PTime & now = PTime()
220  );
221 
225  RTP_ControlFrame & frame,
226  const PIPSocketAddressAndPort * remote = NULL
227  );
228 
231  virtual PString GetLocalHostName();
232 
233 #if OPAL_STATISTICS
234  virtual void GetStatistics(OpalMediaStatistics & statistics, Direction dir) const;
235 #endif
236 
237 
240  struct Data
241  {
242  Data(const RTP_DataFrame & frame)
243  : m_frame(frame)
245  { }
248  };
249  typedef PNotifierTemplate<Data &> DataNotifier;
250  #define PDECLARE_RTPDataNotifier(cls, fn) PDECLARE_NOTIFIER2(OpalRTPSession, cls, fn, OpalRTPSession::Data &)
251  #define PCREATE_RTPDataNotifier(fn) PCREATE_NOTIFIER2(fn, OpalRTPSession::Data &)
252 
256  void AddDataNotifier(
257  unsigned priority,
258  const DataNotifier & notifier,
259  RTP_SyncSourceId ssrc = 0
260  );
261 
263  void RemoveDataNotifier(
264  const DataNotifier & notifier,
265  RTP_SyncSourceId ssrc = 0
266  );
267 
268  virtual SendReceiveStatus OnSendData(RewriteMode & rewrite, RTP_DataFrame & frame, const PTime & now);
269  virtual SendReceiveStatus OnSendControl(RTP_ControlFrame & frame, const PTime & now);
270  virtual SendReceiveStatus OnPreReceiveData(RTP_DataFrame & frame, const PTime & now);
271  virtual SendReceiveStatus OnReceiveData(RTP_DataFrame & frame, ReceiveType rxType, const PTime & now);
272  virtual SendReceiveStatus OnReceiveControl(RTP_ControlFrame & frame, const PTime & now);
273  virtual bool IsEncrypted() const { return false; }
274 
275  virtual void OnRxSenderReport(const RTP_SenderReport & sender, const PTime & now);
276  virtual void OnRxReceiverReports(RTP_SyncSourceId src, const RTP_ControlFrame::ReceiverReport * rr, unsigned count, const PTime & now);
277  virtual void OnRxReceiverReports(RTP_SyncSourceId src, const std::vector<RTP_ReceiverReport> & reports);
279  virtual void OnRxReceiverReport(RTP_SyncSourceId src, const RTP_ReceiverReport & report);
280  virtual void OnRxSourceDescription(const RTP_SourceDescriptionArray & descriptions);
281  virtual void OnRxGoodbye(const RTP_SyncSourceArray & sources, const PString & reason);
282  virtual void OnRxNACK(RTP_SyncSourceId ssrc, const RTP_ControlFrame::LostPacketMask & lostPackets, const PTime & now);
283  virtual void OnRxTWCC(const RTP_TransportWideCongestionControl & twcc);
284  virtual void OnRxApplDefined(const RTP_ControlFrame::ApplDefinedInfo & info);
285  virtual bool OnReceiveExtendedReports(const RTP_ControlFrame & frame, const PTime & now);
286  virtual void OnRxReceiverReferenceTimeReport(RTP_SyncSourceId ssrc, const PTime & ntp, const PTime & now);
287  virtual void OnRxDelayLastReceiverReport(const RTP_DelayLastReceiverReport & dlrr, const PTime & now);
288 
289  typedef PNotifierListTemplate<const RTP_ControlFrame::ApplDefinedInfo &> ApplDefinedNotifierList;
290  typedef PNotifierTemplate<const RTP_ControlFrame::ApplDefinedInfo &> ApplDefinedNotifier;
291 
293  {
294  m_applDefinedNotifiers.Add(notifier);
295  }
296 
298  {
299  m_applDefinedNotifiers.Remove(notifier);
300  }
301 
302 #if OPAL_RTCP_XR
303  virtual void OnRxMetricsReport(
304  RTP_SyncSourceId src,
305  const RTP_MetricsReport & report
306  );
307 #endif // OPAL_RTCP_XR
308 
309 
315  void SetSinglePortRx(bool v = true);
316 
319  bool IsSinglePortRx() { return m_singlePortRx; }
320 
323  void SetSinglePortTx(bool v = true);
324 
327  bool IsSinglePortTx() { return m_singlePortTx; }
328 
331  void SetReducedSizeRTCP(bool v = true) { m_reducedSizeRTCP = v; }
332 
335  bool UseReducedSizeRTCP() const { return m_reducedSizeRTCP; }
336 
339  bool IsAudio() const { return m_isAudio; }
340 
343  void SetAudio(
344  bool aud
345  ) { m_isAudio = aud; }
346 
347 #if OPAL_RTP_FEC
348  struct FecLevel
349  {
350  PBYTEArray m_mask; // Points to 16 or 48 bits
351  PBYTEArray m_data;
352  };
353  struct FecData
354  {
355  RTP_Timestamp m_timestamp;
356  bool m_pRecovery;
357  bool m_xRecovery;
358  unsigned m_ccRecovery;
359  bool m_mRecovery;
360  unsigned m_ptRecovery;
361  unsigned m_snBase;
362  unsigned m_tsRecovery;
363  unsigned m_lenRecovery;
364  vector<FecLevel> m_level;
365  };
366 
368  RTP_DataFrame::PayloadTypes GetRedundencyPayloadType() const { return m_redundencyPayloadType; }
369 
371  void SetRedundencyPayloadType(RTP_DataFrame::PayloadTypes pt) { m_redundencyPayloadType = pt; }
372 
374  RTP_DataFrame::PayloadTypes GetUlpFecPayloadType() const { return m_ulpFecPayloadType; }
375 
377  void SetUlpFecPayloadType(RTP_DataFrame::PayloadTypes pt) { m_ulpFecPayloadType = pt; }
378 
380  unsigned GetUlpFecSendLevel() const { return m_ulpFecSendLevel; }
381 
383  void SetUlpFecSendLevel(unsigned level) { m_ulpFecSendLevel = level; }
384 #endif // OPAL_RTP_FEC
385 
388  PString GetLabel() const;
389 
392  void SetLabel(const PString & name);
393 
396  PString GetCanonicalName(RTP_SyncSourceId ssrc = 0, Direction dir = e_Sender) const;
397 
400  void SetCanonicalName(const PString & name, RTP_SyncSourceId ssrc = 0, Direction dir = e_Sender);
401 
405  PString GetMediaStreamId(RTP_SyncSourceId ssrc, Direction dir) const;
406 
410  void SetMediaStreamId(const PString & id, RTP_SyncSourceId ssrc, Direction dir);
411 
415  PString GetMediaTrackId(RTP_SyncSourceId ssrc, Direction dir) const;
416 
420  void SetMediaTrackId(const PString & id, RTP_SyncSourceId ssrc, Direction dir);
421 
430  RTP_SyncSourceId ssrc,
431  Direction dir,
432  bool isPrimary
433  ) const;
434 
437  PString GetToolName() const;
438 
441  void SetToolName(const PString & name);
442 
446 
449  void SetHeaderExtensions(const RTPHeaderExtensions & ext);
450 
454  bool AddHeaderExtension(const RTPHeaderExtensionInfo & ext);
455 
456  static const PString & GetAbsSendTimeHdrExtURI();
457  static const PString & GetTransportWideSeqNumHdrExtURI();
458 
462 
466 
469  void SetAnySyncSource(
470  bool allow
471  );
472 
473 
477 
481  PINDEX packets
482  );
483 
486  const PTimeInterval & GetOutOfOrderWaitTime() { return m_waitOutOfOrderTime; }
487 
491  const PTimeInterval & interval
492  ) { m_waitOutOfOrderTime = interval; }
493 
496  PTimeInterval GetReportTimeInterval() { return m_reportTimer.GetResetTime(); }
497 
501  const PTimeInterval & interval
502  ) { m_reportTimer.RunContinuous(interval); }
503 
507 
511  unsigned packets
512  ) { m_txStatisticsInterval = packets; }
513 
517 
521  unsigned packets
522  ) { m_rxStatisticsInterval = packets; }
523 
526  virtual WORD GetLocalDataPort() const;
527 
530  virtual WORD GetLocalControlPort() const;
531 
534  unsigned GetPacketsSent(RTP_SyncSourceId ssrc = 0) const { return GetSyncSource(ssrc, e_Sender).m_packets; }
535 
538  uint64_t GetOctetsSent(RTP_SyncSourceId ssrc = 0) const { return GetSyncSource(ssrc, e_Sender).m_octets; }
539 
542  unsigned GetPacketsReceived(RTP_SyncSourceId ssrc = 0) const { return GetSyncSource(ssrc, e_Receiver).m_packets; }
543 
546  uint64_t GetOctetsReceived(RTP_SyncSourceId ssrc = 0) const { return GetSyncSource(ssrc, e_Receiver).m_octets; }
547 
551 
556 
560 
566 
571  unsigned GetMarkerRecvCount(RTP_SyncSourceId ssrc = 0) const { return GetSyncSource(ssrc, e_Receiver).m_markerCount; }
572 
577  unsigned GetMarkerSendCount(RTP_SyncSourceId ssrc = 0) const { return GetSyncSource(ssrc, e_Sender).m_markerCount; }
578 
584 
590 
596 
602 
608 
614 
619 
625 
629  int GetRoundTripTime() const;
631 
633  virtual SendReceiveStatus SendBYE(RTP_SyncSourceId ssrc = 0);
634 
636  virtual SendReceiveStatus SendNACK(const RTP_ControlFrame::LostPacketMask & lostPackets, RTP_SyncSourceId ssrc = 0);
637 
640 
647  unsigned maxBitRate,
648  unsigned overhead = 0,
649  bool notify = false,
650  RTP_SyncSourceId ssrc = 0
651  );
652 
653 #if OPAL_VIDEO
654 
659  unsigned options,
660  RTP_SyncSourceId ssrc = 0,
661  const PTime & now = PTime()
662  );
663 
668  virtual SendReceiveStatus SendTemporalSpatialTradeOff(unsigned tradeOff, RTP_SyncSourceId ssrc = 0);
669 #endif
670 
672  const PTime & GetLastSentNetTime(RTP_SyncSourceId ssrc = 0) const { return GetSyncSource(ssrc, e_Sender).m_lastPacketNetTime; }
673 
675  void SetJitterBuffer(OpalJitterBuffer * jitterBuffer, RTP_SyncSourceId ssrc = 0);
676 
677  bool HasFeedback(OpalMediaFormat::RTCPFeedback feature) const { return m_feedback&feature; }
678 
679  protected:
680  virtual OpalMediaTransport * CreateMediaTransport(const PString & name);
681  void InternalAttachTransport(const OpalMediaTransportPtr & transport PTRACE_PARAM(, const char * from));
682 
683  bool InternalSetQoS(const PIPSocket::QoS & qos);
684 
686  PDECLARE_MediaReadNotifier(OpalRTPSession, OnRxControlPacket);
687  void SessionFailed(SubChannels subchannel PTRACE_PARAM(, const char * reason));
688 
694  bool m_isAudio;
695  unsigned m_timeUnits;
696  PString m_toolName;
697  PString m_label;
701  PTimeInterval m_staleReceiverTimeout;
702  PINDEX m_maxOutOfOrderPackets; // Number of packets before we give up waiting for an out of order packet
703  PTimeInterval m_waitOutOfOrderTime; // Milliseconds before we give up on an out of order packet
706  OpalMediaFormat::RTCPFeedback m_feedback;
707 
709 
710 #if OPAL_RTP_FEC
711  RTP_DataFrame::PayloadTypes m_redundencyPayloadType;
712  RTP_DataFrame::PayloadTypes m_ulpFecPayloadType;
713  unsigned m_ulpFecSendLevel;
714 #endif // OPAL_RTP_FEC
715 
716  class NotifierMap : public std::multimap<unsigned, DataNotifier>
717  {
718  public:
719  void Add(unsigned priority, const DataNotifier & notifier);
720  void Remove(const DataNotifier & notifier);
721  };
723 
724  friend struct SyncSource;
725  struct SyncSource
726  {
727  SyncSource(OpalRTPSession & session, RTP_SyncSourceId id, Direction dir, const char * cname);
728  virtual ~SyncSource();
729 
730 #if PTRACING
731  friend ostream & operator<<(ostream & strm, const SyncSource & ssrc)
732  { return strm << ssrc.m_session << "SSRC=" << RTP_TRACE_SRC(ssrc.m_sourceIdentifier) << ", "; }
733 #endif
734 
735  virtual SendReceiveStatus OnSendData(RTP_DataFrame & frame, RewriteMode rewrite, const PTime & now);
736  virtual SendReceiveStatus OnReceiveData(RTP_DataFrame & frame, ReceiveType rxType, const PTime & now);
737  virtual SendReceiveStatus OnReceiveRetransmit(RTP_DataFrame & frame, const PTime & now);
738  virtual void SetLastSequenceNumber(RTP_SequenceNumber sequenceNumber);
739  virtual void SaveSentData(const RTP_DataFrame & frame, const PTime & now);
740  virtual void OnRxNACK(const RTP_ControlFrame::LostPacketMask & lostPackets, const PTime & now);
741  virtual bool IsExpectingRetransmit(RTP_SequenceNumber sequenceNumber);
742  virtual SendReceiveStatus OnOutOfOrderPacket(RTP_DataFrame & frame, ReceiveType & rxType, const PTime & now);
743  virtual bool HasPendingFrames() const;
744  virtual bool HandlePendingFrames(const PTime & now);
745 #if OPAL_RTP_FEC
746  virtual SendReceiveStatus OnSendRedundantFrame(RTP_DataFrame & frame);
747  virtual SendReceiveStatus OnSendRedundantData(RTP_DataFrame & primary, RTP_DataFrameList & redundancies);
748  virtual SendReceiveStatus OnReceiveRedundantFrame(RTP_DataFrame & frame);
749  virtual SendReceiveStatus OnReceiveRedundantData(RTP_DataFrame & primary, RTP_DataFrame::PayloadTypes payloadType, unsigned timestamp, const BYTE * data, PINDEX size);
750  virtual SendReceiveStatus OnSendFEC(RTP_DataFrame & primary, FecData & fec);
751  virtual SendReceiveStatus OnReceiveFEC(RTP_DataFrame & primary, const FecData & fec);
752 #endif // OPAL_RTP_FEC
753 
754 
755  void CalculateRTT(const PTime & reportTime, const PTimeInterval & reportDelay, const PTime & now);
756  virtual void CalculateStatistics(const RTP_DataFrame & frame, const PTime & now);
757 #if OPAL_STATISTICS
758  virtual void GetStatistics(OpalMediaStatistics & statistics) const;
759 #endif
760 
761  virtual bool OnSendReceiverReport(RTP_ControlFrame::ReceiverReport * report, const PTime & now PTRACE_PARAM(, unsigned logLevel));
763  virtual void OnRxSenderReport(const RTP_SenderReport & report, const PTime & now);
764  virtual void OnRxReceiverReport(const RTP_ReceiverReport & report, const PTime & now);
765  virtual void OnRxDelayLastReceiverReport(const RTP_DelayLastReceiverReport & dlrr, const PTime & now);
766  virtual SendReceiveStatus SendBYE();
767 
768  bool IsStaleReceiver(const PTime & now) const;
769  bool IsRtx() const { return m_rtxPT != RTP_DataFrame::IllegalPayloadType; }
770  bool IsNackEnabled() const { return !IsRtx() && m_session.HasFeedback(OpalMediaFormat::e_NACK); }
771  uint32_t ExtendSequenceNumber(RTP_SequenceNumber sequenceNumber) const;
772 
779  PString m_mediaTrackId;
780 
781  RTP_SyncSourceId m_rtxSSRC; // Bidirectional link between primary and secondary
782  RTP_DataFrame::PayloadTypes m_rtxPT; // Sending rtx payload type, or receiving rtx primary payload type, only set in seconday SSRC
785 
787 
788  // Sequence handling
803 
805  PTime m_lastNackTime; // If lost, this is valid
806  explicit RxPacket(const RTP_DataFrame & pkt) : RTP_DataFrame(pkt), m_lastNackTime(0) { }
807  explicit RxPacket(const PTime & when) : RTP_DataFrame(0), m_lastNackTime(when) { }
808  };
809  typedef std::map<uint32_t, RxPacket> RxPacketMap;
811 
815  };
816  typedef std::map<RTP_SequenceNumber, TxPacket> TxPacketMap;
817  typedef std::map<PTime, RTP_SequenceNumber> TxPacketTimes;
821 
822  // Generating real time stamping in RTP packets
823  // For e_Receive, times are from last received Sender Report, or Receiver Reference Time Report
824  // For e_Sender, times are from RTP_DataFrame, or synthesized from local real time.
828 
829  // Handling Abs-Send-Time header extension
832 #if PTRACING
833  unsigned m_absSendTimeLoglevel;
834 #endif
835 
836  // Statistics gathered
839  unsigned m_packets; // Note, does not include retransmits via NACK
840  uint64_t m_octets;
841  unsigned m_senderReports;
842  atomic<unsigned> m_NACKs;
843  int m_packetsMissing; // As per RFC
844  int m_packetsUnrecovered; // After possible recovery via NACK (only on rx)
848 
849  int m_averagePacketTime; // Milliseconds
850  int m_maximumPacketTime; // Milliseconds
851  int m_minimumPacketTime; // Milliseconds
852  int m_currentJitter; // Milliseconds
853  int m_maximumJitter; // Milliseconds
854  unsigned m_markerCount;
855 
856  // Working for calculating statistics
860 
864  unsigned m_jitterAccum;
865 
866  // Things to remember for filling in fields of sent SR/RR/DLRR
869  float m_rtcpDiscardRate; // from extended RR
870  int m_rtcpJitterBufferDelay; // from extended RR
871  uint64_t m_ntpPassThrough; // The NTP time from SR
872  PTime m_lastSenderReportTime; // Local time that SR was sent/received
873  PTime m_lastReferencedTime; // Local time SSRC was referenced to prevent going stale
876 
878 
879 #if OPAL_RTCP_XR
880  RTCP_XR_Metrics * m_metrics; // Calculate the VoIP Metrics for RTCP-XR
881 #endif
882 
885 
886  PTRACE_THROTTLE(m_throttleSendData,3,20000);
887  PTRACE_THROTTLE(m_throttleReceiveData,3,20000);
888  PTRACE_THROTTLE(m_throttleRxSR,3,60000,5);
889  PTRACE_THROTTLE(m_throttleRxRR,3,60000, 5);
890  PTRACE_THROTTLE(m_throttleTxRED,3,60000);
891  PTRACE_THROTTLE(m_throttleRxRED,3,60000);
892  PTRACE_THROTTLE(m_throttleRxUnknownFEC,3,10000);
893  PTRACE_THROTTLE(m_throttleInvalidLost,2,60000);
894 
899  };
900 
901  typedef std::map<RTP_SyncSourceId, SyncSource *> SyncSourceMap;
904  atomic<RTP_SyncSourceId> m_defaultSSRC[2]; // For e_Sender and e_Receiver
905 
906  const SyncSource & GetSyncSource(RTP_SyncSourceId ssrc, Direction dir) const;
907  virtual bool GetSyncSource(RTP_SyncSourceId ssrc, Direction dir, SyncSource * & info);
908  virtual SyncSource * UseSyncSource(RTP_SyncSourceId ssrc, Direction dir, bool force);
909  virtual SyncSource * CreateSyncSource(RTP_SyncSourceId id, Direction dir, const char * cname);
910  virtual bool CheckControlSSRC(RTP_SyncSourceId senderSSRC, RTP_SyncSourceId targetSSRC, SyncSource * & info PTRACE_PARAM(, const char * pduName));
911  virtual bool ResequenceOutOfOrderPackets(SyncSource & ssrc) const;
912 
914  virtual bool InternalSendReport(RTP_ControlFrame & report, SyncSource & sender, bool includeReceivers, bool forced, const PTime & now);
915  virtual void InitialiseControlFrame(RTP_ControlFrame & frame, SyncSource & sender);
916 
917  // Some statitsics not SSRC related
921 
923  PDECLARE_NOTIFIER(PTimer, OpalRTPSession, TimedSendReport);
924 
925  // Congestion control
927 
928  // Quality of service support
929  PIPSocket::QoS m_qos;
933 
934  // Call backs for transport data
937 
939 
940  PTRACE_THROTTLE(m_throttleTxReport,3,60000,5);
941  PTRACE_THROTTLE(m_throttleRxEmptyRR,3,60000);
942  PTRACE_THROTTLE(m_throttleRxSDES,4,60000);
943 #if PTRACING
944  std::set<RTP_SyncSourceId> m_loggedBadSSRC;
945 #endif
946 
947  private:
949  void operator=(const OpalRTPSession &) { }
950 
951  P_REMOVE_VIRTUAL(int,WaitForPDU(PUDPSocket&,PUDPSocket&,const PTimeInterval&),0);
952  P_REMOVE_VIRTUAL(SendReceiveStatus,ReadDataOrControlPDU(BYTE *,PINDEX,bool),e_AbortTransport);
953  P_REMOVE_VIRTUAL(bool,WriteDataOrControlPDU(const BYTE *,PINDEX,bool),false);
957  P_REMOVE_VIRTUAL(SendReceiveStatus,OnSendData(RTP_DataFrame&,RewriteMode,const PTime&),e_AbortTransport);
958  P_REMOVE_VIRTUAL(bool,WriteData(RTP_DataFrame &,const PIPSocketAddressAndPort*,bool),false);
959  P_REMOVE_VIRTUAL(SendReceiveStatus,OnReadTimeout(RTP_DataFrame&),e_AbortTransport);
960  P_REMOVE_VIRTUAL(SendReceiveStatus,InternalReadData(RTP_DataFrame &),e_AbortTransport);
961  P_REMOVE_VIRTUAL(SendReceiveStatus,SendReport(bool),e_AbortTransport);
964  P_REMOVE_VIRTUAL(SendReceiveStatus,OnOutOfOrderPacket(RTP_DataFrame&),e_AbortTransport);
966 
967  friend class RTCP_XR_Metrics;
968 };
969 
970 
971 #endif // OPAL_RTP_RTP_H
972 
int m_lateOutOfOrder
Definition: rtp_session.h:847
void SetHeaderExtensions(const RTPHeaderExtensions &ext)
int GetRoundTripTime() const
int m_minimumPacketTime
Definition: rtp_session.h:851
RxPacket(const RTP_DataFrame &pkt)
Definition: rtp_session.h:806
virtual SendReceiveStatus WriteControl(RTP_ControlFrame &frame, const PIPSocketAddressAndPort *remote=NULL)
virtual OpalTransportAddress GetLocalAddress(bool isMediaAddress=true) const
PTimeInterval m_staleReceiverTimeout
Definition: rtp_session.h:701
RxPacket(const PTime &when)
Definition: rtp_session.h:807
unsigned m_rtcpPacketsSent
Definition: rtp_session.h:918
Definition: rtp.h:792
Definition: manager.h:150
virtual void OnRxDelayLastReceiverReport(const RTP_DelayLastReceiverReport &dlrr, const PTime &now)
void CalculateRTT(const PTime &reportTime, const PTimeInterval &reportDelay, const PTime &now)
RTP_SyncSourceId GetSyncSourceOut() const
Definition: rtp_session.h:465
const PTime & GetLastSentNetTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:672
virtual SendReceiveStatus SendTWCC(const RTP_TransportWideCongestionControl &twcc)
Send Transport Wide Congestion Control RTCP command.
static const PString & GetAbsSendTimeHdrExtURI()
unsigned m_transportWideSeqNumHdrExtId
Definition: rtp_session.h:700
int GetMinimumSendTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:589
Definition: rtp_session.h:186
PTime m_lastSenderReportTime
Definition: rtp_session.h:872
RTP_DataFrame::PayloadTypes m_rtxPT
Definition: rtp_session.h:782
PIPSocket::QoS m_qos
Definition: rtp_session.h:929
unsigned m_rtcpPacketsReceived
Definition: rtp_session.h:919
virtual void SetLastSequenceNumber(RTP_SequenceNumber sequenceNumber)
int m_maximumPacketTime
Definition: rtp_session.h:850
Definition: rtp_session.h:134
virtual void OnRxReceiverReferenceTimeReport(RTP_SyncSourceId ssrc, const PTime &ntp, const PTime &now)
Definition: rtp_session.h:725
PTimeInterval m_lateOutOfOrderAdaptBoost
Definition: rtp_session.h:801
virtual void OnRxSenderReport(const RTP_SenderReport &sender, const PTime &now)
int GetMaxJitterTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:618
RTP_SequenceNumber m_nextOutOfOrderPacket
Definition: rtp_session.h:796
virtual SendReceiveStatus OnSendControl(RTP_ControlFrame &frame, const PTime &now)
unsigned m_maximumTimeAccum
Definition: rtp_session.h:862
virtual SendReceiveStatus SendBYE()
int GetPacketsLostByRemote(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:555
int m_maxConsecutiveLost
Definition: rtp_session.h:845
unsigned GetTxStatisticsInterval()
Definition: rtp_session.h:506
RTP_Timestamp m_lastPacketTimestamp
Definition: rtp_session.h:857
uint32_t m_lastRRSequenceNumber
Definition: rtp_session.h:868
bool IsAudio() const
Definition: rtp_session.h:339
virtual bool OnSendReceiverReport(RTP_ControlFrame::ReceiverReport *report, const PTime &now PTRACE_PARAM(, unsigned logLevel))
uint32_t m_firstSequenceNumber
Definition: rtp_session.h:790
Initialisation information for constructing a session.
Definition: mediasession.h:654
virtual SendReceiveStatus WriteData(RTP_DataFrame &frame, RewriteMode rewrite=e_RewriteHeader, const PIPSocketAddressAndPort *remote=NULL, const PTime &now=PTime())
Definition: mediasession.h:647
virtual SendReceiveStatus OnReceiveControl(RTP_ControlFrame &frame, const PTime &now)
void FinaliseSyncSourceRtx(RTP_DataFrame::PayloadTypes primaryPT, RTP_DataFrame::PayloadTypes rtxPT, OpalRTPSession::Direction dir)
PString GetToolName() const
PTime m_endWaitOutOfOrderTime
Definition: rtp_session.h:797
uint32_t m_absSendTimeLowBits
Definition: rtp_session.h:831
PString GetLabel() const
atomic< RTP_SyncSourceId > m_defaultSSRC[2]
Definition: rtp_session.h:904
bool InternalSetQoS(const PIPSocket::QoS &qos)
TxPacketMap m_pendingTxPackets
Definition: rtp_session.h:818
Data(const RTP_DataFrame &frame)
Definition: rtp_session.h:242
void SetTxStatisticsInterval(unsigned packets)
Definition: rtp_session.h:510
void RemoveApplDefinedNotifier(const ApplDefinedNotifier &notifier)
Definition: rtp_session.h:297
RewriteMode
Definition: rtp_session.h:189
virtual bool SetRemoteAddress(const OpalTransportAddress &remoteAddress, bool isMediaAddress=true)
PArray< RTP_SourceDescription > RTP_SourceDescriptionArray
Definition: rtp.h:68
Definition: rtp_session.h:195
OpalRTPEndPoint & m_endpoint
Definition: rtp_session.h:689
RTPHeaderExtensions m_headerExtensions
Definition: rtp_session.h:698
unsigned m_lateOutOfOrderAdaptCount
Definition: rtp_session.h:799
int m_packetsMissing
Definition: rtp_session.h:843
PNotifierTemplate< const RTP_ControlFrame::ApplDefinedInfo & > ApplDefinedNotifier
Definition: rtp_session.h:290
bool IsSinglePortRx()
Definition: rtp_session.h:319
PString GetMediaTrackId(RTP_SyncSourceId ssrc, Direction dir) const
Definition: rtp_session.h:202
virtual bool ResequenceOutOfOrderPackets(SyncSource &ssrc) const
std::map< uint32_t, RxPacket > RxPacketMap
Definition: rtp_session.h:809
virtual SyncSource * UseSyncSource(RTP_SyncSourceId ssrc, Direction dir, bool force)
int GetJitterTimeOnRemote(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:624
std::vector< RTP_SyncSourceId > RTP_SyncSourceArray
Definition: rtp.h:47
void SetToolName(const PString &name)
virtual void OnRxSourceDescription(const RTP_SourceDescriptionArray &descriptions)
SyncSource m_dummySyncSource
Definition: rtp_session.h:903
friend class RTCP_XR_Metrics
Definition: rtp_session.h:967
void SetSinglePortRx(bool v=true)
virtual SendReceiveStatus OnReceiveRetransmit(RTP_DataFrame &frame, const PTime &now)
Definition: rtp.h:485
RTP_SyncSourceId EnableSyncSourceRtx(RTP_SyncSourceId primarySSRC, RTP_DataFrame::PayloadTypes rtxPT, RTP_SyncSourceId rtxSSRC)
virtual PString GetLocalHostName()
Direction
Definition: rtp_session.h:132
PString m_label
Definition: rtp_session.h:697
int m_rtxPackets
Definition: rtp_session.h:783
Direction m_direction
Definition: rtp_session.h:774
ReceiveType
Definition: rtp_session.h:198
uint64_t m_ntpPassThrough
Definition: rtp_session.h:871
virtual SendReceiveStatus SendBYE(RTP_SyncSourceId ssrc=0)
Send BYE command.
PString GetCanonicalName(RTP_SyncSourceId ssrc=0, Direction dir=e_Sender) const
static const PString & GetTransportWideSeqNumHdrExtURI()
virtual bool HandlePendingFrames(const PTime &now)
PString m_mediaTrackId
Definition: rtp_session.h:779
uint64_t m_absSendTimeNTP
Definition: rtp_session.h:830
unsigned m_lastRRPacketsReceived
Definition: rtp_session.h:867
unsigned m_packetsOutOfOrder
Definition: rtp_session.h:846
Definition: rtp_session.h:193
uint32_t m_extendedSequenceNumber
Definition: rtp_session.h:791
virtual bool UpdateMediaFormat(const OpalMediaFormat &mediaFormat)
static const PCaselessString & RTP_AVPF()
PNotifierTemplate< Data & > DataNotifier
Definition: rtp_session.h:249
bool IsNackEnabled() const
Definition: rtp_session.h:770
uint16_t RTP_SequenceNumber
Definition: rtp.h:45
PTimeInterval m_lateOutOfOrderAdaptPeriod
Definition: rtp_session.h:802
SyncSourceMap m_SSRC
Definition: rtp_session.h:902
RTPHeaderExtensions GetHeaderExtensions() const
unsigned m_lastFIRSequenceNumber
Definition: rtp_session.h:792
virtual OpalMediaTransport * CreateMediaTransport(const PString &name)
PayloadTypes
Definition: rtp.h:556
void SetMediaTrackId(const PString &id, RTP_SyncSourceId ssrc, Direction dir)
OpalRTPSession(const Init &init)
unsigned m_consecutiveOutOfOrderPackets
Definition: rtp_session.h:794
Definition: rtp_session.h:804
PTime m_consecutiveOutOfOrderEndTime
Definition: rtp_session.h:795
Definition: rtp_session.h:240
RTP_SyncSourceId GetSyncSourceIn() const
Definition: rtp_session.h:461
OpalManager & m_manager
Definition: rtp_session.h:690
OpalRTPSession & m_session
Definition: rtp_session.h:773
virtual void SaveSentData(const RTP_DataFrame &frame, const PTime &now)
bool AddHeaderExtension(const RTPHeaderExtensionInfo &ext)
PString m_toolName
Definition: rtp_session.h:696
RTP_Timestamp m_reportTimestamp
Definition: rtp_session.h:825
unsigned m_rxStatisticsInterval
Definition: rtp_session.h:705
Definition: rtp_session.h:135
PTime m_lateOutOfOrderAdaptTime
Definition: rtp_session.h:798
RTP_SyncSourceId m_rtxSSRC
Definition: rtp_session.h:781
void SetReducedSizeRTCP(bool v=true)
Definition: rtp_session.h:331
PINDEX m_maxOutOfOrderPackets
Definition: rtp_session.h:702
OpalMediaTransport::CongestionControl * GetCongestionControl()
SendReceiveStatus
Definition: rtp_session.h:183
bool m_sendEstablished
Definition: rtp_session.h:932
PNotifierTemplate< PBYTEArray > ReadNotifier
Definition: mediasession.h:486
int m_rtcpJitterBufferDelay
Definition: rtp_session.h:870
PTime m_referenceReportNTP
Definition: rtp_session.h:875
RTP_Timestamp GetLastSentTimestamp(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:671
virtual void OnRxSenderReport(const RTP_SenderReport &report, const PTime &now)
PTime m_reportAbsoluteTime
Definition: rtp_session.h:826
int m_packetsUnrecovered
Definition: rtp_session.h:844
bool HasFeedback(OpalMediaFormat::RTCPFeedback feature) const
Definition: rtp_session.h:677
unsigned GetPacketsSent(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:534
uint32_t ExtendSequenceNumber(RTP_SequenceNumber sequenceNumber) const
virtual void OnRxTWCC(const RTP_TransportWideCongestionControl &twcc)
virtual void OnRxGoodbye(const RTP_SyncSourceArray &sources, const PString &reason)
Definition: rtp.h:540
uint64_t GetOctetsSent(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:538
Definition: rtp_session.h:812
Definition: jitter.h:51
void AddApplDefinedNotifier(const ApplDefinedNotifier &notifier)
Definition: rtp_session.h:292
OpalMediaTransport::ReadNotifier m_dataNotifier
Definition: rtp_session.h:935
unsigned m_txStatisticsInterval
Definition: rtp_session.h:704
int GetMaximumSendTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:583
Definition: rtp_session.h:192
bool IsSinglePortTx()
Definition: rtp_session.h:327
Definition: rtp_session.h:191
PTRACE_THROTTLE(m_throttleTxReport, 3, 60000, 5)
RTP_SyncSourceId m_loopbackIdentifier
Definition: rtp_session.h:776
Definition: mediafmt.h:806
ApplDefinedNotifierList m_applDefinedNotifiers
Definition: rtp_session.h:938
void InternalAttachTransport(const OpalMediaTransportPtr &transport PTRACE_PARAM(, const char *from))
virtual void GetStatistics(OpalMediaStatistics &statistics) const
void SetJitterBuffer(OpalJitterBuffer *jitterBuffer, RTP_SyncSourceId ssrc=0)
Set the jitter buffer to get certain RTCP statustics from.
PTRACE_THROTTLE(m_throttleSendData, 3, 20000)
PTimeInterval m_pendingTxPacketAgeLimit
Definition: rtp_session.h:820
int m_maximumJitter
Definition: rtp_session.h:853
RTP_SyncSourceId GetRtxSyncSource(RTP_SyncSourceId ssrc, Direction dir, bool isPrimary) const
virtual void OnRxApplDefined(const RTP_ControlFrame::ApplDefinedInfo &info)
void SetRxStatisticsInterval(unsigned packets)
Definition: rtp_session.h:520
PDECLARE_MediaReadNotifier(OpalRTPSession, OnRxDataPacket)
int GetAverageSendTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:565
virtual bool AddGroup(const PString &groupId, const PString &mediaId, bool overwrite=true)
virtual WORD GetLocalDataPort() const
const PTimeInterval & GetOutOfOrderWaitTime()
Definition: rtp_session.h:486
void SetLabel(const PString &name)
void SetCanonicalName(const PString &name, RTP_SyncSourceId ssrc=0, Direction dir=e_Sender)
float m_rtcpDiscardRate
Definition: rtp_session.h:869
void SetReportTimeInterval(const PTimeInterval &interval)
Definition: rtp_session.h:500
Definition: rtp.h:504
virtual bool OnReceiveExtendedReports(const RTP_ControlFrame &frame, const PTime &now)
void SetAnySyncSource(bool allow)
virtual void OnRxNACK(const RTP_ControlFrame::LostPacketMask &lostPackets, const PTime &now)
OpalMediaFormat::RTCPFeedback m_feedback
Definition: rtp_session.h:706
PSafePtr< OpalMediaTransport, PSafePtrMultiThreaded > OpalMediaTransportPtr
Definition: mediasession.h:605
TxPacket(const RTP_DataFrame &pkt)
Definition: rtp_session.h:814
OpalJitterBuffer * m_jitterBuffer
Definition: rtp_session.h:708
RTP_DataFrame m_frame
Definition: rtp_session.h:246
virtual SendReceiveStatus SendReport(RTP_SyncSourceId ssrc, bool force, const PTime &now=PTime())
virtual const PCaselessString & GetSessionType() const
Definition: rtp_session.h:111
OpalJitterBuffer * m_jitterBuffer
Definition: rtp_session.h:883
Definition: rtp_session.h:90
unsigned GetPacketsOutOfOrder(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:559
virtual void OnRxReceiverReport(const RTP_ReceiverReport &report, const PTime &now)
Definition: rtp_session.h:185
virtual void InitialiseControlFrame(RTP_ControlFrame &frame, SyncSource &sender)
virtual SendReceiveStatus OnOutOfOrderPacket(RTP_DataFrame &frame, ReceiveType &rxType, const PTime &now)
bool IsRtx() const
Definition: rtp_session.h:769
PTime m_firstPacketTime
Definition: rtp_session.h:838
std::map< RTP_SyncSourceId, SyncSource * > SyncSourceMap
Definition: rtp_session.h:901
virtual bool Close()
Congestion control handling.
Definition: mediasession.h:515
NotifierMap m_notifiers
Definition: rtp_session.h:722
PString m_mediaStreamId
Definition: rtp_session.h:778
int GetMinimumReceiveTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:607
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
virtual bool RemoveSyncSource(RTP_SyncSourceId id)
bool IsStaleReceiver(const PTime &now) const
Definition: rtp_session.h:184
int m_rtxDuplicates
Definition: rtp_session.h:784
PTime m_lastReferencedTime
Definition: rtp_session.h:873
virtual void OnRxDelayLastReceiverReport(const RTP_DelayLastReceiverReport &dlrr, const PTime &now)
virtual SendReceiveStatus OnSendData(RewriteMode &rewrite, RTP_DataFrame &frame, const PTime &now)
TxPacketTimes m_pendingTxPacketTime
Definition: rtp_session.h:819
bool m_singlePortTx
Definition: rtp_session.h:692
unsigned GetMarkerRecvCount(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:571
virtual bool CheckControlSSRC(RTP_SyncSourceId senderSSRC, RTP_SyncSourceId targetSSRC, SyncSource *&info PTRACE_PARAM(, const char *pduName))
unsigned GetRxStatisticsInterval()
Definition: rtp_session.h:516
SubChannels
Definition: mediasession.h:372
unsigned GetPacketsLost(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:550
unsigned m_statisticsCount
Definition: rtp_session.h:877
int m_roundTripTime
Definition: rtp_session.h:920
virtual SendReceiveStatus OnReceiveData(RTP_DataFrame &frame, ReceiveType rxType, const PTime &now)
PTime m_lastPacketNetTime
Definition: rtp_session.h:859
uint32_t RTP_Timestamp
Definition: rtp.h:44
void SessionFailed(SubChannels subchannel PTRACE_PARAM(, const char *reason))
void SetMaxOutOfOrderPackets(PINDEX packets)
uint64_t m_octets
Definition: rtp_session.h:840
static const PCaselessString & RTP_AVP()
virtual SyncSource * CreateSyncSource(RTP_SyncSourceId id, Direction dir, const char *cname)
virtual SendReceiveStatus SendIntraFrameRequest(unsigned options, RTP_SyncSourceId ssrc=0, const PTime &now=PTime())
RewriteMode m_rewriteMode
Definition: rtp_session.h:813
virtual bool IsEncrypted() const
Definition: rtp_session.h:273
virtual bool HasPendingFrames() const
bool m_isAudio
Definition: rtp_session.h:694
virtual void AttachTransport(const OpalMediaTransportPtr &transport)
void SetMediaStreamId(const PString &id, RTP_SyncSourceId ssrc, Direction dir)
unsigned m_timeUnits
Definition: rtp_session.h:695
unsigned m_packets
Definition: rtp_session.h:839
bool m_singlePortRx
Definition: rtp_session.h:691
int GetAverageReceiveTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:595
void Remove(const DataNotifier &notifier)
virtual OpalMediaTransportPtr DetachTransport()
Definition: mediastrm.h:110
virtual RTP_SyncSourceId AddSyncSource(RTP_SyncSourceId id, Direction dir, const char *cname=NULL)
Definition: rtp.h:523
unsigned m_averageTimeAccum
Definition: rtp_session.h:861
Definition: rtp_session.h:199
Definition: rtp_session.h:716
PString GetMediaStreamId(RTP_SyncSourceId ssrc, Direction dir) const
SyncSource(OpalRTPSession &session, RTP_SyncSourceId id, Direction dir, const char *cname)
PString m_canonicalName
Definition: rtp_session.h:777
OpalMediaTransport::ReadNotifier m_controlNotifier
Definition: rtp_session.h:936
std::map< PTime, RTP_SequenceNumber > TxPacketTimes
Definition: rtp_session.h:817
uint64_t GetOctetsReceived(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:546
NotifierMap m_notifiers
Definition: rtp_session.h:786
virtual void OnRxReceiverReports(RTP_SyncSourceId src, const RTP_ControlFrame::ReceiverReport *rr, unsigned count, const PTime &now)
WORD m_remoteControlPort
Definition: rtp_session.h:931
bool m_synthesizeAbsTime
Definition: rtp_session.h:827
PINDEX GetMaxOutOfOrderPackets()
Definition: rtp_session.h:476
RTP_SyncSourceArray GetSyncSources(Direction dir) const
void RemoveDataNotifier(const DataNotifier &notifier, RTP_SyncSourceId ssrc=0)
Remove the data notifier.
virtual OpalMediaStream * CreateMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource)
PTime m_lastNackTime
Definition: rtp_session.h:805
virtual SendReceiveStatus SendTemporalSpatialTradeOff(unsigned tradeOff, RTP_SyncSourceId ssrc=0)
RxPacketMap m_pendingRxPackets
Definition: rtp_session.h:810
virtual OpalTransportAddress GetRemoteAddress(bool isMediaAddress=true) const
virtual WORD GetLocalControlPort() const
void SetAudio(bool aud)
Definition: rtp_session.h:343
unsigned m_markerCount
Definition: rtp_session.h:854
virtual bool InternalSendReport(RTP_ControlFrame &report, SyncSource &sender, bool includeReceivers, bool forced, const PTime &now)
Set up RTCP as per RFC rules.
const SyncSource & GetSyncSource(RTP_SyncSourceId ssrc, Direction dir) const
Definition: mediasession.h:210
Definition: rtp.h:101
unsigned m_lastTSTOSequenceNumber
Definition: rtp_session.h:793
atomic< unsigned > m_NACKs
Definition: rtp_session.h:842
void SetSinglePortTx(bool v=true)
Definition: transports.h:151
RTP_SequenceNumber m_lastSequenceNumber
Definition: rtp_session.h:789
virtual void GetStatistics(OpalMediaStatistics &statistics, Direction dir) const
void Add(unsigned priority, const DataNotifier &notifier)
OpalJitterBuffer * GetJitterBuffer() const
PTime m_lastPacketAbsTime
Definition: rtp_session.h:858
RTP_SyncSourceId m_sourceIdentifier
Definition: rtp_session.h:775
int m_currentJitter
Definition: rtp_session.h:852
uint32_t RTP_SyncSourceId
Definition: rtp.h:46
RTP_DataFrame::PayloadTypes m_payloadType
Definition: rtp_session.h:837
virtual bool OnSendDelayLastReceiverReport(RTP_ControlFrame::DelayLastReceiverReport::Receiver *report, const PTime &now)
virtual void CalculateStatistics(const RTP_DataFrame &frame, const PTime &now)
unsigned m_lateOutOfOrderAdaptMax
Definition: rtp_session.h:800
void SetOutOfOrderWaitTime(const PTimeInterval &interval)
Definition: rtp_session.h:490
unsigned m_senderReports
Definition: rtp_session.h:841
unsigned m_minimumTimeAccum
Definition: rtp_session.h:863
unsigned m_packetOverhead
Definition: rtp_session.h:930
Definition: rtp.h:832
Definition: mediasession.h:392
bool m_reducedSizeRTCP
Definition: rtp_session.h:693
int m_averagePacketTime
Definition: rtp_session.h:849
Definition: rtp_session.h:201
unsigned m_jitterAccum
Definition: rtp_session.h:864
int GetAvgJitterTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:613
Definition: rtpep.h:77
Definition: rtp_session.h:200
virtual SendReceiveStatus OnPreReceiveData(RTP_DataFrame &frame, const PTime &now)
PTimer m_reportTimer
Definition: rtp_session.h:922
virtual bool Open(const PString &localInterface, const OpalTransportAddress &remoteAddress)
virtual SendReceiveStatus OnSendData(RTP_DataFrame &frame, RewriteMode rewrite, const PTime &now)
virtual void OnRxNACK(RTP_SyncSourceId ssrc, const RTP_ControlFrame::LostPacketMask &lostPackets, const PTime &now)
virtual SendReceiveStatus OnReceiveData(RTP_DataFrame &frame, ReceiveType rxType, const PTime &now)
Definition: rtp_session.h:194
void AddDataNotifier(unsigned priority, const DataNotifier &notifier, RTP_SyncSourceId ssrc=0)
PDECLARE_NOTIFIER(PTimer, OpalRTPSession, TimedSendReport)
PTimeInterval GetReportTimeInterval()
Definition: rtp_session.h:496
unsigned GetMarkerSendCount(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:577
virtual SendReceiveStatus SendFlowControl(unsigned maxBitRate, unsigned overhead=0, bool notify=false, RTP_SyncSourceId ssrc=0)
PTime m_referenceReportTime
Definition: rtp_session.h:874
PNotifierListTemplate< const RTP_ControlFrame::ApplDefinedInfo & > ApplDefinedNotifierList
Definition: rtp_session.h:289
virtual bool IsExpectingRetransmit(RTP_SequenceNumber sequenceNumber)
P_REMOVE_VIRTUAL(SendReceiveStatus, OnSendData(RTP_DataFrame &, bool), e_AbortTransport)
int GetMaximumReceiveTime(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:601
unsigned m_absSendTimeHdrExtId
Definition: rtp_session.h:699
virtual void OnRxReceiverReport(RTP_SyncSourceId src, const RTP_ControlFrame::ReceiverReport &rr)
bool UseReducedSizeRTCP() const
Definition: rtp_session.h:335
SendReceiveStatus m_status
Definition: rtp_session.h:247
virtual SendReceiveStatus SendNACK(const RTP_ControlFrame::LostPacketMask &lostPackets, RTP_SyncSourceId ssrc=0)
Send NACK RTCP command.
unsigned GetPacketsReceived(RTP_SyncSourceId ssrc=0) const
Definition: rtp_session.h:542
PTimeInterval m_waitOutOfOrderTime
Definition: rtp_session.h:703
std::map< RTP_SequenceNumber, TxPacket > TxPacketMap
Definition: rtp_session.h:816