JRTPLIB  3.11.1
rtcpscheduler.h
Go to the documentation of this file.
1 /*
2 
3  This file is a part of JRTPLIB
4  Copyright (c) 1999-2017 Jori Liesenborgs
5 
6  Contact: jori.liesenborgs@gmail.com
7 
8  This library was developed at the Expertise Centre for Digital Media
9  (http://www.edm.uhasselt.be), a research center of the Hasselt University
10  (http://www.uhasselt.be). The library is based upon work done for
11  my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
12 
13  Permission is hereby granted, free of charge, to any person obtaining a
14  copy of this software and associated documentation files (the "Software"),
15  to deal in the Software without restriction, including without limitation
16  the rights to use, copy, modify, merge, publish, distribute, sublicense,
17  and/or sell copies of the Software, and to permit persons to whom the
18  Software is furnished to do so, subject to the following conditions:
19 
20  The above copyright notice and this permission notice shall be included
21  in all copies or substantial portions of the Software.
22 
23  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29  IN THE SOFTWARE.
30 
31 */
32 
37 #ifndef RTCPSCHEDULER_H
38 
39 #define RTCPSCHEDULER_H
40 
41 #include "rtpconfig.h"
42 #include "rtptimeutilities.h"
43 #include "rtprandom.h"
44 
45 namespace jrtplib
46 {
47 
48 class RTCPCompoundPacket;
49 class RTPPacket;
50 class RTPSources;
51 
53 class JRTPLIB_IMPORTEXPORT RTCPSchedulerParams
54 {
55 public:
58 
60  int SetRTCPBandwidth(double bw);
61 
63  double GetRTCPBandwidth() const { return bandwidth; }
64 
66  int SetSenderBandwidthFraction(double fraction);
67 
69  double GetSenderBandwidthFraction() const { return senderfraction; }
70 
72  int SetMinimumTransmissionInterval(const RTPTime &t);
73 
75  RTPTime GetMinimumTransmissionInterval() const { return mininterval; }
76 
78  void SetUseHalfAtStartup(bool usehalf) { usehalfatstartup = usehalf; }
79 
83  bool GetUseHalfAtStartup() const { return usehalfatstartup; }
84 
86  void SetRequestImmediateBYE(bool v) { immediatebye = v; }
87 
91  bool GetRequestImmediateBYE() const { return immediatebye; }
92 private:
93  double bandwidth;
94  double senderfraction;
95  RTPTime mininterval;
96  bool usehalfatstartup;
97  bool immediatebye;
98 };
99 
101 class JRTPLIB_IMPORTEXPORT RTCPScheduler
102 {
103 public:
111  RTCPScheduler(RTPSources &sources, RTPRandom &rtprand);
112  ~RTCPScheduler();
113 
115  void Reset();
116 
118  void SetParameters(const RTCPSchedulerParams &params) { schedparams = params; }
119 
121  RTCPSchedulerParams GetParameters() const { return schedparams; }
122 
124  void SetHeaderOverhead(size_t numbytes) { headeroverhead = numbytes; }
125 
127  size_t GetHeaderOverhead() const { return headeroverhead; }
128 
130  void AnalyseIncoming(RTCPCompoundPacket &rtcpcomppack);
131 
133  void AnalyseOutgoing(RTCPCompoundPacket &rtcpcomppack);
134 
136  void ActiveMemberDecrease();
137 
141  void ScheduleBYEPacket(size_t packetsize);
142 
147  RTPTime GetTransmissionDelay();
148 
154  bool IsTime();
155 
160  RTPTime CalculateDeterministicInterval(bool sender = false);
161 private:
162  void CalculateNextRTCPTime();
163  void PerformReverseReconsideration();
164  RTPTime CalculateBYETransmissionInterval();
165  RTPTime CalculateTransmissionInterval(bool sender);
166 
167  RTPSources &sources;
168  RTCPSchedulerParams schedparams;
169  size_t headeroverhead;
170  size_t avgrtcppacksize;
171  bool hassentrtcp;
172  bool firstcall;
173  RTPTime nextrtcptime;
174  RTPTime prevrtcptime;
175  int pmembers;
176 
177  // for BYE packet scheduling
178  bool byescheduled;
179  int byemembers,pbyemembers;
180  size_t avgbyepacketsize;
181  bool sendbyenow;
182 
183  RTPRandom &rtprand;
184 };
185 
186 } // end namespace
187 
188 #endif // RTCPSCHEDULER_H
189 
bool GetRequestImmediateBYE() const
Returns if the scheduler will schedule a BYE packet to be sent immediately if allowed (default is tru...
Definition: rtcpscheduler.h:91
size_t GetHeaderOverhead() const
Returns the currently used header overhead.
Definition: rtcpscheduler.h:127
This class determines when RTCP compound packets should be sent.
Definition: rtcpscheduler.h:101
Interface for generating random numbers.
Definition: rtprandom.h:51
Represents an RTCP compound packet.
Definition: rtcpcompoundpacket.h:53
void SetRequestImmediateBYE(bool v)
If v is true, the scheduler will schedule a BYE packet to be sent immediately if allowed.
Definition: rtcpscheduler.h:86
Represents a table in which information about the participating sources is kept.
Definition: rtpsources.h:74
double GetSenderBandwidthFraction() const
Returns the fraction of the RTCP bandwidth reserved for senders (default is 25%). ...
Definition: rtcpscheduler.h:69
Definition: rtpfaketransmitter.h:64
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:84
void SetParameters(const RTCPSchedulerParams &params)
Sets the scheduler parameters to be used to params.
Definition: rtcpscheduler.h:118
Describes parameters used by the RTCPScheduler class.
Definition: rtcpscheduler.h:53
bool GetUseHalfAtStartup() const
Returns true if only half the minimum interval should be used before sending the first RTCP compound ...
Definition: rtcpscheduler.h:83
void SetHeaderOverhead(size_t numbytes)
Sets the header overhead from underlying protocols (for example UDP and IP) to numbytes.
Definition: rtcpscheduler.h:124
RTCPSchedulerParams GetParameters() const
Returns the currently used scheduler parameters.
Definition: rtcpscheduler.h:121
RTPTime GetMinimumTransmissionInterval() const
Returns the minimum RTCP transmission interval (default is 5 seconds).
Definition: rtcpscheduler.h:75
double GetRTCPBandwidth() const
Returns the used RTCP bandwidth in bytes per second (default is 1000).
Definition: rtcpscheduler.h:63
void SetUseHalfAtStartup(bool usehalf)
If usehalf is true, only use half the minimum interval before sending the first RTCP compound packet...
Definition: rtcpscheduler.h:78