OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef WEBRTC_MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_H_ | 11 #ifndef WEBRTC_MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_H_ |
12 #define WEBRTC_MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_H_ | 12 #define WEBRTC_MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_H_ |
13 | 13 |
14 #include <set> | 14 #include <set> |
15 #include <string> | 15 #include <string> |
16 #include <utility> | 16 #include <utility> |
17 #include <vector> | 17 #include <vector> |
18 | 18 |
19 #include "webrtc/base/constructormagic.h" | 19 #include "webrtc/base/constructormagic.h" |
20 #include "webrtc/modules/include/module.h" | 20 #include "webrtc/modules/include/module.h" |
21 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" | 21 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
22 #include "webrtc/modules/video_coding/include/video_coding_defines.h" | 22 #include "webrtc/modules/video_coding/include/video_coding_defines.h" |
23 | 23 |
24 namespace webrtc { | 24 namespace webrtc { |
| 25 |
25 // Forward declarations. | 26 // Forward declarations. |
26 class RateLimiter; | 27 class RateLimiter; |
27 class ReceiveStatistics; | 28 class ReceiveStatistics; |
28 class RemoteBitrateEstimator; | 29 class RemoteBitrateEstimator; |
29 class RtcEventLog; | 30 class RtcEventLog; |
30 class RtpReceiver; | 31 class RtpReceiver; |
31 class Transport; | 32 class Transport; |
32 | 33 |
33 RTPExtensionType StringToRtpExtensionType(const std::string& extension); | 34 RTPExtensionType StringToRtpExtensionType(const std::string& extension); |
34 | 35 |
35 namespace rtcp { | 36 namespace rtcp { |
36 class TransportFeedback; | 37 class TransportFeedback; |
37 } | 38 } |
38 | 39 |
39 class RtpRtcp : public Module { | 40 class RtpRtcp : public Module { |
40 public: | 41 public: |
41 struct Configuration { | 42 struct Configuration { |
42 Configuration(); | 43 Configuration(); |
43 | 44 |
44 /* id - Unique identifier of this RTP/RTCP module object | 45 // True for a audio version of the RTP/RTCP module object false will create |
45 * audio - True for a audio version of the RTP/RTCP module | 46 // a video version. |
46 * object false will create a video version | 47 bool audio = false; |
47 * clock - The clock to use to read time. If NULL object | 48 bool receiver_only = false; |
48 * will be using the system clock. | 49 |
49 * incoming_data - Callback object that will receive the incoming | 50 // The clock to use to read time. If nullptr then system clock will be used. |
50 * data. May not be NULL; default callback will do | 51 Clock* clock = nullptr; |
51 * nothing. | 52 |
52 * incoming_messages - Callback object that will receive the incoming | |
53 * RTP messages. May not be NULL; default callback | |
54 * will do nothing. | |
55 * outgoing_transport - Transport object that will be called when packets | |
56 * are ready to be sent out on the network | |
57 * intra_frame_callback - Called when the receiver request a intra frame. | |
58 * bandwidth_callback - Called when we receive a changed estimate from | |
59 * the receiver of out stream. | |
60 * remote_bitrate_estimator - Estimates the bandwidth available for a set of | |
61 * streams from the same client. | |
62 * paced_sender - Spread any bursts of packets into smaller | |
63 * bursts to minimize packet loss. | |
64 */ | |
65 bool audio; | |
66 bool receiver_only; | |
67 Clock* clock; | |
68 ReceiveStatistics* receive_statistics; | 53 ReceiveStatistics* receive_statistics; |
69 Transport* outgoing_transport; | 54 |
70 RtcpIntraFrameObserver* intra_frame_callback; | 55 // Transport object that will be called when packets are ready to be sent |
71 RtcpBandwidthObserver* bandwidth_callback; | 56 // out on the network. |
72 TransportFeedbackObserver* transport_feedback_callback; | 57 Transport* outgoing_transport = nullptr; |
73 RtcpRttStats* rtt_stats; | 58 |
74 RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer; | 59 // Called when the receiver request a intra frame. |
75 RemoteBitrateEstimator* remote_bitrate_estimator; | 60 RtcpIntraFrameObserver* intra_frame_callback = nullptr; |
76 RtpPacketSender* paced_sender; | 61 |
77 TransportSequenceNumberAllocator* transport_sequence_number_allocator; | 62 // Called when we receive a changed estimate from the receiver of out |
78 BitrateStatisticsObserver* send_bitrate_observer; | 63 // stream. |
79 FrameCountObserver* send_frame_count_observer; | 64 RtcpBandwidthObserver* bandwidth_callback = nullptr; |
80 SendSideDelayObserver* send_side_delay_observer; | 65 |
81 RtcEventLog* event_log; | 66 TransportFeedbackObserver* transport_feedback_callback = nullptr; |
82 SendPacketObserver* send_packet_observer; | 67 RtcpRttStats* rtt_stats = nullptr; |
83 RateLimiter* retransmission_rate_limiter; | 68 RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer = nullptr; |
| 69 |
| 70 // Estimates the bandwidth available for a set of streams from the same |
| 71 // client. |
| 72 RemoteBitrateEstimator* remote_bitrate_estimator = nullptr; |
| 73 |
| 74 // Spread any bursts of packets into smaller bursts to minimize packet loss. |
| 75 RtpPacketSender* paced_sender = nullptr; |
| 76 |
| 77 TransportSequenceNumberAllocator* transport_sequence_number_allocator = |
| 78 nullptr; |
| 79 BitrateStatisticsObserver* send_bitrate_observer = nullptr; |
| 80 FrameCountObserver* send_frame_count_observer = nullptr; |
| 81 SendSideDelayObserver* send_side_delay_observer = nullptr; |
| 82 RtcEventLog* event_log = nullptr; |
| 83 SendPacketObserver* send_packet_observer = nullptr; |
| 84 RateLimiter* retransmission_rate_limiter = nullptr; |
| 85 |
| 86 private: |
84 RTC_DISALLOW_COPY_AND_ASSIGN(Configuration); | 87 RTC_DISALLOW_COPY_AND_ASSIGN(Configuration); |
85 }; | 88 }; |
86 | 89 |
87 /* | 90 // Create a RTP/RTCP module object using the system clock. |
88 * Create a RTP/RTCP module object using the system clock. | 91 // |configuration| - Configuration of the RTP/RTCP module. |
89 * | |
90 * configuration - Configuration of the RTP/RTCP module. | |
91 */ | |
92 static RtpRtcp* CreateRtpRtcp(const RtpRtcp::Configuration& configuration); | 92 static RtpRtcp* CreateRtpRtcp(const RtpRtcp::Configuration& configuration); |
93 | 93 |
94 /************************************************************************** | 94 // ************************************************************************** |
95 * | 95 // Receiver functions |
96 * Receiver functions | 96 // ************************************************************************** |
97 * | 97 |
98 ***************************************************************************/ | 98 virtual int32_t IncomingRtcpPacket(const uint8_t* incoming_packet, |
99 | 99 size_t incoming_packet_length) = 0; |
100 virtual int32_t IncomingRtcpPacket(const uint8_t* incoming_packet, | 100 |
101 size_t incoming_packet_length) = 0; | 101 virtual void SetRemoteSSRC(uint32_t ssrc) = 0; |
102 | 102 |
103 virtual void SetRemoteSSRC(uint32_t ssrc) = 0; | 103 // ************************************************************************** |
104 | 104 // Sender |
105 /************************************************************************** | 105 // ************************************************************************** |
106 * | 106 |
107 * Sender | 107 // Sets MTU. |
108 * | 108 // |size| - Max transfer unit in bytes, default is 1500. |
109 ***************************************************************************/ | 109 // Returns -1 on failure else 0. |
110 | 110 virtual int32_t SetMaxTransferUnit(uint16_t size) = 0; |
111 /* | 111 |
112 * set MTU | 112 // Sets transtport overhead. Default is IPv4 and UDP with no encryption. |
113 * | 113 // |tcp| - true for TCP false UDP. |
114 * size - Max transfer unit in bytes, default is 1500 | 114 // |ipv6| - true for IP version 6 false for version 4. |
115 * | 115 // |authentication_overhead| - number of bytes to leave for an authentication |
116 * return -1 on failure else 0 | 116 // header. |
117 */ | 117 // Returns -1 on failure else 0 |
118 virtual int32_t SetMaxTransferUnit(uint16_t size) = 0; | 118 virtual int32_t SetTransportOverhead(bool tcp, |
119 | 119 bool ipv6, |
120 /* | 120 uint8_t authentication_overhead = 0) = 0; |
121 * set transtport overhead | 121 |
122 * default is IPv4 and UDP with no encryption | 122 // Returns max payload length, which is a combination of the configuration |
123 * | 123 // MaxTransferUnit and TransportOverhead. |
124 * TCP - true for TCP false UDP | 124 // Does not account for RTP headers and FEC/ULP/RED overhead (when FEC is |
125 * IPv6 - true for IP version 6 false for version 4 | 125 // enabled). |
126 * authenticationOverhead - number of bytes to leave for an | 126 virtual uint16_t MaxPayloadLength() const = 0; |
127 * authentication header | 127 |
128 * | 128 // Returns max data payload length, which is a combination of the |
129 * return -1 on failure else 0 | 129 // configuration MaxTransferUnit, headers and TransportOverhead. |
130 */ | 130 // Takes into account RTP headers and FEC/ULP/RED overhead (when FEC is |
131 virtual int32_t SetTransportOverhead( | 131 // enabled). |
132 bool TCP, | 132 virtual uint16_t MaxDataPayloadLength() const = 0; |
133 bool IPV6, | 133 |
134 uint8_t authenticationOverhead = 0) = 0; | 134 // Sets codec name and payload type. Returns -1 on failure else 0. |
135 | 135 virtual int32_t RegisterSendPayload(const CodecInst& voice_codec) = 0; |
136 /* | 136 |
137 * Get max payload length | 137 // Sets codec name and payload type. Return -1 on failure else 0. |
138 * | 138 virtual int32_t RegisterSendPayload(const VideoCodec& video_codec) = 0; |
139 * A combination of the configuration MaxTransferUnit and | 139 |
140 * TransportOverhead. | 140 virtual void RegisterVideoSendPayload(int payload_type, |
141 * Does not account FEC/ULP/RED overhead if FEC is enabled. | 141 const char* payload_name) = 0; |
142 * Does not account for RTP headers | 142 |
143 */ | 143 // Unregisters a send payload. |
144 virtual uint16_t MaxPayloadLength() const = 0; | 144 // |payload_type| - payload type of codec |
145 | 145 // Returns -1 on failure else 0. |
146 /* | 146 virtual int32_t DeRegisterSendPayload(int8_t payload_type) = 0; |
147 * Get max data payload length | 147 |
148 * | 148 // (De)registers RTP header extension type and id. |
149 * A combination of the configuration MaxTransferUnit, headers and | 149 // Returns -1 on failure else 0. |
150 * TransportOverhead. | 150 virtual int32_t RegisterSendRtpHeaderExtension(RTPExtensionType type, |
151 * Takes into account FEC/ULP/RED overhead if FEC is enabled. | 151 uint8_t id) = 0; |
152 * Takes into account RTP headers | 152 |
153 */ | 153 virtual int32_t DeregisterSendRtpHeaderExtension(RTPExtensionType type) = 0; |
154 virtual uint16_t MaxDataPayloadLength() const = 0; | 154 |
155 | 155 // Returns start timestamp. |
156 /* | 156 virtual uint32_t StartTimestamp() const = 0; |
157 * set codec name and payload type | 157 |
158 * | 158 // Sets start timestamp. Start timestamp is set to a random value if this |
159 * return -1 on failure else 0 | 159 // function is never called. |
160 */ | 160 virtual void SetStartTimestamp(uint32_t timestamp) = 0; |
161 virtual int32_t RegisterSendPayload( | 161 |
162 const CodecInst& voiceCodec) = 0; | 162 // Returns SequenceNumber. |
163 | 163 virtual uint16_t SequenceNumber() const = 0; |
164 /* | 164 |
165 * set codec name and payload type | 165 // Sets SequenceNumber, default is a random number. |
166 * | 166 virtual void SetSequenceNumber(uint16_t seq) = 0; |
167 * return -1 on failure else 0 | 167 |
168 */ | 168 virtual void SetRtpState(const RtpState& rtp_state) = 0; |
169 virtual int32_t RegisterSendPayload( | 169 virtual void SetRtxState(const RtpState& rtp_state) = 0; |
170 const VideoCodec& videoCodec) = 0; | 170 virtual RtpState GetRtpState() const = 0; |
171 | 171 virtual RtpState GetRtxState() const = 0; |
172 virtual void RegisterVideoSendPayload(int payload_type, | 172 |
173 const char* payload_name) = 0; | 173 // Returns SSRC. |
174 | 174 virtual uint32_t SSRC() const = 0; |
175 /* | 175 |
176 * Unregister a send payload | 176 // Sets SSRC, default is a random number. |
177 * | 177 virtual void SetSSRC(uint32_t ssrc) = 0; |
178 * payloadType - payload type of codec | 178 |
179 * | 179 // Sets CSRC. |
180 * return -1 on failure else 0 | 180 // |csrcs| - vector of CSRCs |
181 */ | 181 virtual void SetCsrcs(const std::vector<uint32_t>& csrcs) = 0; |
182 virtual int32_t DeRegisterSendPayload(int8_t payloadType) = 0; | 182 |
183 | 183 // Turns on/off sending RTX (RFC 4588). The modes can be set as a combination |
184 /* | 184 // of values of the enumerator RtxMode. |
185 * (De)register RTP header extension type and id. | 185 virtual void SetRtxSendStatus(int modes) = 0; |
186 * | 186 |
187 * return -1 on failure else 0 | 187 // Returns status of sending RTX (RFC 4588). The returned value can be |
188 */ | 188 // a combination of values of the enumerator RtxMode. |
189 virtual int32_t RegisterSendRtpHeaderExtension(RTPExtensionType type, | 189 virtual int RtxSendStatus() const = 0; |
190 uint8_t id) = 0; | 190 |
191 | 191 // Sets the SSRC to use when sending RTX packets. This doesn't enable RTX, |
192 virtual int32_t DeregisterSendRtpHeaderExtension(RTPExtensionType type) = 0; | 192 // only the SSRC is set. |
193 | 193 virtual void SetRtxSsrc(uint32_t ssrc) = 0; |
194 /* | 194 |
195 * get start timestamp | 195 // Sets the payload type to use when sending RTX packets. Note that this |
196 */ | 196 // doesn't enable RTX, only the payload type is set. |
197 virtual uint32_t StartTimestamp() const = 0; | 197 virtual void SetRtxSendPayloadType(int payload_type, |
198 | 198 int associated_payload_type) = 0; |
199 /* | 199 |
200 * configure start timestamp, default is a random number | 200 // Sets sending status. Sends kRtcpByeCode when going from true to false. |
201 * | 201 // Returns -1 on failure else 0. |
202 * timestamp - start timestamp | 202 virtual int32_t SetSendingStatus(bool sending) = 0; |
203 */ | 203 |
204 virtual void SetStartTimestamp(uint32_t timestamp) = 0; | 204 // Returns current sending status. |
205 | 205 virtual bool Sending() const = 0; |
206 /* | 206 |
207 * Get SequenceNumber | 207 // Starts/Stops media packets. On by default. |
208 */ | 208 virtual void SetSendingMediaStatus(bool sending) = 0; |
209 virtual uint16_t SequenceNumber() const = 0; | 209 |
210 | 210 // Returns current media sending status. |
211 /* | 211 virtual bool SendingMedia() const = 0; |
212 * Set SequenceNumber, default is a random number | 212 |
213 */ | 213 // Returns current bitrate in Kbit/s. |
214 virtual void SetSequenceNumber(uint16_t seq) = 0; | 214 virtual void BitrateSent(uint32_t* total_rate, |
215 | 215 uint32_t* video_rate, |
216 virtual void SetRtpState(const RtpState& rtp_state) = 0; | 216 uint32_t* fec_rate, |
217 virtual void SetRtxState(const RtpState& rtp_state) = 0; | 217 uint32_t* nack_rate) const = 0; |
218 virtual RtpState GetRtpState() const = 0; | 218 |
219 virtual RtpState GetRtxState() const = 0; | 219 // Used by the codec module to deliver a video or audio frame for |
220 | 220 // packetization. |
221 /* | 221 // |frame_type| - type of frame to send |
222 * Get SSRC | 222 // |payload_type| - payload type of frame to send |
223 */ | 223 // |timestamp| - timestamp of frame to send |
224 virtual uint32_t SSRC() const = 0; | 224 // |payload_data| - payload buffer of frame to send |
225 | 225 // |payload_size| - size of payload buffer to send |
226 /* | 226 // |fragmentation| - fragmentation offset data for fragmented frames such |
227 * configure SSRC, default is a random number | 227 // as layers or RED |
228 */ | 228 // Returns -1 on failure else 0. |
229 virtual void SetSSRC(uint32_t ssrc) = 0; | 229 virtual int32_t SendOutgoingData( |
230 | 230 FrameType frame_type, |
231 /* | 231 int8_t payload_type, |
232 * Set CSRC | 232 uint32_t timestamp, |
233 * | 233 int64_t capture_time_ms, |
234 * csrcs - vector of CSRCs | 234 const uint8_t* payload_data, |
235 */ | 235 size_t payload_size, |
236 virtual void SetCsrcs(const std::vector<uint32_t>& csrcs) = 0; | 236 const RTPFragmentationHeader* fragmentation = nullptr, |
237 | 237 const RTPVideoHeader* rtp_video_header = nullptr) = 0; |
238 /* | 238 |
239 * Turn on/off sending RTX (RFC 4588). The modes can be set as a combination | 239 virtual bool TimeToSendPacket(uint32_t ssrc, |
240 * of values of the enumerator RtxMode. | 240 uint16_t sequence_number, |
241 */ | 241 int64_t capture_time_ms, |
242 virtual void SetRtxSendStatus(int modes) = 0; | 242 bool retransmission, |
243 | 243 int probe_cluster_id) = 0; |
244 /* | 244 |
245 * Get status of sending RTX (RFC 4588). The returned value can be | 245 virtual size_t TimeToSendPadding(size_t bytes, int probe_cluster_id) = 0; |
246 * a combination of values of the enumerator RtxMode. | 246 |
247 */ | 247 // Called on generation of new statistics after an RTP send. |
248 virtual int RtxSendStatus() const = 0; | 248 virtual void RegisterSendChannelRtpStatisticsCallback( |
249 | 249 StreamDataCountersCallback* callback) = 0; |
250 // Sets the SSRC to use when sending RTX packets. This doesn't enable RTX, | 250 virtual StreamDataCountersCallback* GetSendChannelRtpStatisticsCallback() |
251 // only the SSRC is set. | 251 const = 0; |
252 virtual void SetRtxSsrc(uint32_t ssrc) = 0; | 252 |
253 | 253 // ************************************************************************** |
254 // Sets the payload type to use when sending RTX packets. Note that this | 254 // RTCP |
255 // doesn't enable RTX, only the payload type is set. | 255 // ************************************************************************** |
256 virtual void SetRtxSendPayloadType(int payload_type, | 256 |
257 int associated_payload_type) = 0; | 257 // Returns RTCP status. |
258 | 258 virtual RtcpMode RTCP() const = 0; |
259 /* | 259 |
260 * sends kRtcpByeCode when going from true to false | 260 // Sets RTCP status i.e on(compound or non-compound)/off. |
261 * | 261 // |method| - RTCP method to use. |
262 * sending - on/off | 262 virtual void SetRTCPStatus(RtcpMode method) = 0; |
263 * | 263 |
264 * return -1 on failure else 0 | 264 // Sets RTCP CName (i.e unique identifier). |
265 */ | 265 // Returns -1 on failure else 0. |
266 virtual int32_t SetSendingStatus(bool sending) = 0; | 266 virtual int32_t SetCNAME(const char* cname) = 0; |
267 | 267 |
268 /* | 268 // Returns remote CName. |
269 * get send status | 269 // Returns -1 on failure else 0. |
270 */ | 270 virtual int32_t RemoteCNAME(uint32_t remote_ssrc, |
271 virtual bool Sending() const = 0; | 271 char cname[RTCP_CNAME_SIZE]) const = 0; |
272 | 272 |
273 /* | 273 // Returns remote NTP. |
274 * Starts/Stops media packets, on by default | 274 // Returns -1 on failure else 0. |
275 * | 275 virtual int32_t RemoteNTP(uint32_t* received_ntp_secs, |
276 * sending - on/off | 276 uint32_t* received_ntp_frac, |
277 */ | 277 uint32_t* rtcp_arrival_time_secs, |
278 virtual void SetSendingMediaStatus(bool sending) = 0; | 278 uint32_t* rtcp_arrival_time_frac, |
279 | 279 uint32_t* rtcp_timestamp) const = 0; |
280 /* | 280 |
281 * get send status | 281 // Returns -1 on failure else 0. |
282 */ | 282 virtual int32_t AddMixedCNAME(uint32_t ssrc, const char* cname) = 0; |
283 virtual bool SendingMedia() const = 0; | 283 |
284 | 284 // Returns -1 on failure else 0. |
285 /* | 285 virtual int32_t RemoveMixedCNAME(uint32_t ssrc) = 0; |
286 * get sent bitrate in Kbit/s | 286 |
287 */ | 287 // Returns current RTT (round-trip time) estimate. |
288 virtual void BitrateSent(uint32_t* totalRate, | 288 // Returns -1 on failure else 0. |
289 uint32_t* videoRate, | 289 virtual int32_t RTT(uint32_t remote_ssrc, |
290 uint32_t* fecRate, | 290 int64_t* rtt, |
291 uint32_t* nackRate) const = 0; | 291 int64_t* avg_rtt, |
292 | 292 int64_t* min_rtt, |
293 /* | 293 int64_t* max_rtt) const = 0; |
294 * Used by the codec module to deliver a video or audio frame for | 294 |
295 * packetization. | 295 // Forces a send of a RTCP packet. Periodic SR and RR are triggered via the |
296 * | 296 // process function. |
297 * frameType - type of frame to send | 297 // Returns -1 on failure else 0. |
298 * payloadType - payload type of frame to send | 298 virtual int32_t SendRTCP(RTCPPacketType rtcp_packet_type) = 0; |
299 * timestamp - timestamp of frame to send | 299 |
300 * payloadData - payload buffer of frame to send | 300 // Forces a send of a RTCP packet with more than one packet type. |
301 * payloadSize - size of payload buffer to send | 301 // periodic SR and RR are triggered via the process function |
302 * fragmentation - fragmentation offset data for fragmented frames such | 302 // Returns -1 on failure else 0. |
303 * as layers or RED | 303 virtual int32_t SendCompoundRTCP( |
304 * | 304 const std::set<RTCPPacketType>& rtcp_packet_types) = 0; |
305 * return -1 on failure else 0 | 305 |
306 */ | 306 // Notifies the sender about good state of the RTP receiver. |
307 virtual int32_t SendOutgoingData( | 307 virtual int32_t SendRTCPReferencePictureSelection(uint64_t picture_id) = 0; |
308 FrameType frameType, | 308 |
309 int8_t payloadType, | 309 // Send a RTCP Slice Loss Indication (SLI). |
310 uint32_t timeStamp, | 310 // |picture_id| - 6 least significant bits of picture_id. |
311 int64_t capture_time_ms, | 311 virtual int32_t SendRTCPSliceLossIndication(uint8_t picture_id) = 0; |
312 const uint8_t* payloadData, | 312 |
313 size_t payloadSize, | 313 // Returns statistics of the amount of data sent. |
314 const RTPFragmentationHeader* fragmentation = NULL, | 314 // Returns -1 on failure else 0. |
315 const RTPVideoHeader* rtpVideoHdr = NULL) = 0; | 315 virtual int32_t DataCountersRTP(size_t* bytes_sent, |
316 | 316 uint32_t* packets_sent) const = 0; |
317 virtual bool TimeToSendPacket(uint32_t ssrc, | 317 |
318 uint16_t sequence_number, | 318 // Returns send statistics for the RTP and RTX stream. |
319 int64_t capture_time_ms, | 319 virtual void GetSendStreamDataCounters( |
320 bool retransmission, | 320 StreamDataCounters* rtp_counters, |
321 int probe_cluster_id) = 0; | 321 StreamDataCounters* rtx_counters) const = 0; |
322 | 322 |
323 virtual size_t TimeToSendPadding(size_t bytes, int probe_cluster_id) = 0; | 323 // Returns packet loss statistics for the RTP stream. |
324 | 324 virtual void GetRtpPacketLossStats( |
325 // Called on generation of new statistics after an RTP send. | 325 bool outgoing, |
326 virtual void RegisterSendChannelRtpStatisticsCallback( | 326 uint32_t ssrc, |
327 StreamDataCountersCallback* callback) = 0; | 327 struct RtpPacketLossStats* loss_stats) const = 0; |
328 virtual StreamDataCountersCallback* | 328 |
329 GetSendChannelRtpStatisticsCallback() const = 0; | 329 // Returns received RTCP sender info. |
330 | 330 // Returns -1 on failure else 0. |
331 /************************************************************************** | 331 virtual int32_t RemoteRTCPStat(RTCPSenderInfo* sender_info) = 0; |
332 * | 332 |
333 * RTCP | 333 // Returns received RTCP report block. |
334 * | 334 // Returns -1 on failure else 0. |
335 ***************************************************************************/ | 335 virtual int32_t RemoteRTCPStat( |
336 | 336 std::vector<RTCPReportBlock>* receive_blocks) const = 0; |
337 /* | 337 |
338 * Get RTCP status | 338 // (APP) Sets application specific data. |
339 */ | 339 // Returns -1 on failure else 0. |
340 virtual RtcpMode RTCP() const = 0; | 340 virtual int32_t SetRTCPApplicationSpecificData(uint8_t sub_type, |
341 | 341 uint32_t name, |
342 /* | 342 const uint8_t* data, |
343 * configure RTCP status i.e on(compound or non- compound)/off | 343 uint16_t length) = 0; |
344 * | 344 // (XR) Sets VOIP metric. |
345 * method - RTCP method to use | 345 // Returns -1 on failure else 0. |
346 */ | 346 virtual int32_t SetRTCPVoIPMetrics(const RTCPVoIPMetric* VoIPMetric) = 0; |
347 virtual void SetRTCPStatus(RtcpMode method) = 0; | 347 |
348 | 348 // (XR) Sets Receiver Reference Time Report (RTTR) status. |
349 /* | 349 virtual void SetRtcpXrRrtrStatus(bool enable) = 0; |
350 * Set RTCP CName (i.e unique identifier) | 350 |
351 * | 351 // Returns current Receiver Reference Time Report (RTTR) status. |
352 * return -1 on failure else 0 | 352 virtual bool RtcpXrRrtrStatus() const = 0; |
353 */ | 353 |
354 virtual int32_t SetCNAME(const char* c_name) = 0; | 354 // (REMB) Receiver Estimated Max Bitrate. |
355 | 355 virtual bool REMB() const = 0; |
356 /* | 356 |
357 * Get remote CName | 357 virtual void SetREMBStatus(bool enable) = 0; |
358 * | 358 |
359 * return -1 on failure else 0 | 359 virtual void SetREMBData(uint32_t bitrate, |
360 */ | 360 const std::vector<uint32_t>& ssrcs) = 0; |
361 virtual int32_t RemoteCNAME(uint32_t remoteSSRC, | 361 |
362 char cName[RTCP_CNAME_SIZE]) const = 0; | 362 // (TMMBR) Temporary Max Media Bit Rate |
363 | 363 virtual bool TMMBR() const = 0; |
364 /* | 364 |
365 * Get remote NTP | 365 virtual void SetTMMBRStatus(bool enable) = 0; |
366 * | 366 |
367 * return -1 on failure else 0 | 367 // (NACK) |
368 */ | 368 |
369 virtual int32_t RemoteNTP( | 369 // TODO(holmer): Propagate this API to VideoEngine. |
370 uint32_t *ReceivedNTPsecs, | 370 // Returns the currently configured selective retransmission settings. |
371 uint32_t *ReceivedNTPfrac, | 371 virtual int SelectiveRetransmissions() const = 0; |
372 uint32_t *RTCPArrivalTimeSecs, | 372 |
373 uint32_t *RTCPArrivalTimeFrac, | 373 // TODO(holmer): Propagate this API to VideoEngine. |
374 uint32_t *rtcp_timestamp) const = 0; | 374 // Sets the selective retransmission settings, which will decide which |
375 | 375 // packets will be retransmitted if NACKed. Settings are constructed by |
376 /* | 376 // combining the constants in enum RetransmissionMode with bitwise OR. |
377 * AddMixedCNAME | 377 // All packets are retransmitted if kRetransmitAllPackets is set, while no |
378 * | 378 // packets are retransmitted if kRetransmitOff is set. |
379 * return -1 on failure else 0 | 379 // By default all packets except FEC packets are retransmitted. For VP8 |
380 */ | 380 // with temporal scalability only base layer packets are retransmitted. |
381 virtual int32_t AddMixedCNAME(uint32_t SSRC, const char* c_name) = 0; | 381 // Returns -1 on failure, otherwise 0. |
382 | 382 virtual int SetSelectiveRetransmissions(uint8_t settings) = 0; |
383 /* | 383 |
384 * RemoveMixedCNAME | 384 // Sends a Negative acknowledgement packet. |
385 * | 385 // Returns -1 on failure else 0. |
386 * return -1 on failure else 0 | 386 // TODO(philipel): Deprecate this and start using SendNack instead, mostly |
387 */ | 387 // because we want a function that actually send NACK for the specified |
388 virtual int32_t RemoveMixedCNAME(uint32_t SSRC) = 0; | 388 // packets. |
389 | 389 virtual int32_t SendNACK(const uint16_t* nack_list, uint16_t size) = 0; |
390 /* | 390 |
391 * Get RoundTripTime | 391 // Sends NACK for the packets specified. |
392 * | 392 // Note: This assumes the caller keeps track of timing and doesn't rely on |
393 * return -1 on failure else 0 | 393 // the RTP module to do this. |
394 */ | 394 virtual void SendNack(const std::vector<uint16_t>& sequence_numbers) = 0; |
395 virtual int32_t RTT(uint32_t remoteSSRC, | 395 |
396 int64_t* RTT, | 396 // Store the sent packets, needed to answer to a Negative acknowledgment |
397 int64_t* avgRTT, | 397 // requests. |
398 int64_t* minRTT, | 398 virtual void SetStorePacketsStatus(bool enable, uint16_t numberToStore) = 0; |
399 int64_t* maxRTT) const = 0; | 399 |
400 | 400 // Returns true if the module is configured to store packets. |
401 /* | 401 virtual bool StorePackets() const = 0; |
402 * Force a send of a RTCP packet | 402 |
403 * periodic SR and RR are triggered via the process function | 403 // Called on receipt of RTCP report block from remote side. |
404 * | 404 virtual void RegisterRtcpStatisticsCallback( |
405 * return -1 on failure else 0 | 405 RtcpStatisticsCallback* callback) = 0; |
406 */ | 406 virtual RtcpStatisticsCallback* GetRtcpStatisticsCallback() = 0; |
407 virtual int32_t SendRTCP(RTCPPacketType rtcpPacketType) = 0; | 407 // BWE feedback packets. |
408 | 408 virtual bool SendFeedbackPacket(const rtcp::TransportFeedback& packet) = 0; |
409 /* | 409 |
410 * Force a send of a RTCP packet with more than one packet type. | 410 // ************************************************************************** |
411 * periodic SR and RR are triggered via the process function | 411 // Audio |
412 * | 412 // ************************************************************************** |
413 * return -1 on failure else 0 | 413 |
414 */ | 414 // Sets audio packet size, used to determine when it's time to send a DTMF |
415 virtual int32_t SendCompoundRTCP( | 415 // packet in silence (CNG). |
416 const std::set<RTCPPacketType>& rtcpPacketTypes) = 0; | 416 // Returns -1 on failure else 0. |
417 | 417 virtual int32_t SetAudioPacketSize(uint16_t packet_size_samples) = 0; |
418 /* | 418 |
419 * Good state of RTP receiver inform sender | 419 // Sends a TelephoneEvent tone using RFC 2833 (4733). |
420 */ | 420 // Returns -1 on failure else 0. |
421 virtual int32_t SendRTCPReferencePictureSelection(uint64_t pictureID) = 0; | 421 virtual int32_t SendTelephoneEventOutband(uint8_t key, |
422 | 422 uint16_t time_ms, |
423 /* | 423 uint8_t level) = 0; |
424 * Send a RTCP Slice Loss Indication (SLI) | 424 |
425 * 6 least significant bits of pictureID | 425 // Sets payload type for Redundant Audio Data RFC 2198. |
426 */ | 426 // Returns -1 on failure else 0. |
427 virtual int32_t SendRTCPSliceLossIndication(uint8_t pictureID) = 0; | 427 virtual int32_t SetSendREDPayloadType(int8_t payload_type) = 0; |
428 | 428 |
429 /* | 429 // Get payload type for Redundant Audio Data RFC 2198. |
430 * Statistics of the amount of data sent | 430 // Returns -1 on failure else 0. |
431 * | 431 virtual int32_t SendREDPayloadType(int8_t* payload_type) const = 0; |
432 * return -1 on failure else 0 | 432 |
433 */ | 433 // Store the audio level in dBov for header-extension-for-audio-level- |
434 virtual int32_t DataCountersRTP( | 434 // indication. |
435 size_t* bytesSent, | 435 // This API shall be called before transmision of an RTP packet to ensure |
436 uint32_t* packetsSent) const = 0; | 436 // that the |level| part of the extended RTP header is updated. |
437 | 437 // return -1 on failure else 0. |
438 /* | 438 virtual int32_t SetAudioLevel(uint8_t level_dbov) = 0; |
439 * Get send statistics for the RTP and RTX stream. | 439 |
440 */ | 440 // ************************************************************************** |
441 virtual void GetSendStreamDataCounters( | 441 // Video |
442 StreamDataCounters* rtp_counters, | 442 // ************************************************************************** |
443 StreamDataCounters* rtx_counters) const = 0; | 443 |
444 | 444 // Turn on/off generic FEC. |
445 /* | 445 virtual void SetGenericFECStatus(bool enable, |
446 * Get packet loss statistics for the RTP stream. | 446 uint8_t payload_type_red, |
447 */ | 447 uint8_t payload_type_fec) = 0; |
448 virtual void GetRtpPacketLossStats( | 448 |
449 bool outgoing, | 449 // Get generic FEC setting. |
450 uint32_t ssrc, | 450 virtual void GenericFECStatus(bool* enable, |
451 struct RtpPacketLossStats* loss_stats) const = 0; | 451 uint8_t* payload_type_red, |
452 | 452 uint8_t* payload_type_fec) = 0; |
453 /* | 453 |
454 * Get received RTCP sender info | 454 virtual int32_t SetFecParameters(const FecProtectionParams* delta_params, |
455 * | 455 const FecProtectionParams* key_params) = 0; |
456 * return -1 on failure else 0 | 456 |
457 */ | 457 // Set method for requestion a new key frame. |
458 virtual int32_t RemoteRTCPStat(RTCPSenderInfo* senderInfo) = 0; | 458 // Returns -1 on failure else 0. |
459 | 459 virtual int32_t SetKeyFrameRequestMethod(KeyFrameRequestMethod method) = 0; |
460 /* | 460 |
461 * Get received RTCP report block | 461 // Sends a request for a keyframe. |
462 * | 462 // Returns -1 on failure else 0. |
463 * return -1 on failure else 0 | 463 virtual int32_t RequestKeyFrame() = 0; |
464 */ | |
465 virtual int32_t RemoteRTCPStat( | |
466 std::vector<RTCPReportBlock>* receiveBlocks) const = 0; | |
467 | |
468 /* | |
469 * (APP) Application specific data | |
470 * | |
471 * return -1 on failure else 0 | |
472 */ | |
473 virtual int32_t SetRTCPApplicationSpecificData(uint8_t subType, | |
474 uint32_t name, | |
475 const uint8_t* data, | |
476 uint16_t length) = 0; | |
477 /* | |
478 * (XR) VOIP metric | |
479 * | |
480 * return -1 on failure else 0 | |
481 */ | |
482 virtual int32_t SetRTCPVoIPMetrics( | |
483 const RTCPVoIPMetric* VoIPMetric) = 0; | |
484 | |
485 /* | |
486 * (XR) Receiver Reference Time Report | |
487 */ | |
488 virtual void SetRtcpXrRrtrStatus(bool enable) = 0; | |
489 | |
490 virtual bool RtcpXrRrtrStatus() const = 0; | |
491 | |
492 /* | |
493 * (REMB) Receiver Estimated Max Bitrate | |
494 */ | |
495 virtual bool REMB() const = 0; | |
496 | |
497 virtual void SetREMBStatus(bool enable) = 0; | |
498 | |
499 virtual void SetREMBData(uint32_t bitrate, | |
500 const std::vector<uint32_t>& ssrcs) = 0; | |
501 | |
502 /* | |
503 * (TMMBR) Temporary Max Media Bit Rate | |
504 */ | |
505 virtual bool TMMBR() const = 0; | |
506 | |
507 virtual void SetTMMBRStatus(bool enable) = 0; | |
508 | |
509 /* | |
510 * (NACK) | |
511 */ | |
512 | |
513 /* | |
514 * TODO(holmer): Propagate this API to VideoEngine. | |
515 * Returns the currently configured selective retransmission settings. | |
516 */ | |
517 virtual int SelectiveRetransmissions() const = 0; | |
518 | |
519 /* | |
520 * TODO(holmer): Propagate this API to VideoEngine. | |
521 * Sets the selective retransmission settings, which will decide which | |
522 * packets will be retransmitted if NACKed. Settings are constructed by | |
523 * combining the constants in enum RetransmissionMode with bitwise OR. | |
524 * All packets are retransmitted if kRetransmitAllPackets is set, while no | |
525 * packets are retransmitted if kRetransmitOff is set. | |
526 * By default all packets except FEC packets are retransmitted. For VP8 | |
527 * with temporal scalability only base layer packets are retransmitted. | |
528 * | |
529 * Returns -1 on failure, otherwise 0. | |
530 */ | |
531 virtual int SetSelectiveRetransmissions(uint8_t settings) = 0; | |
532 | |
533 /* | |
534 * Send a Negative acknowledgement packet | |
535 * | |
536 * return -1 on failure else 0 | |
537 */ | |
538 // TODO(philipel): Deprecate this and start using SendNack instead, | |
539 // mostly because we want a function that actually send | |
540 // NACK for the specified packets. | |
541 virtual int32_t SendNACK(const uint16_t* nackList, uint16_t size) = 0; | |
542 | |
543 /* | |
544 * Send NACK for the packets specified. | |
545 * | |
546 * Note: This assumes the caller keeps track of timing and doesn't rely on | |
547 * the RTP module to do this. | |
548 */ | |
549 virtual void SendNack(const std::vector<uint16_t>& sequence_numbers) = 0; | |
550 | |
551 /* | |
552 * Store the sent packets, needed to answer to a Negative acknowledgement | |
553 * requests | |
554 */ | |
555 virtual void SetStorePacketsStatus(bool enable, uint16_t numberToStore) = 0; | |
556 | |
557 // Returns true if the module is configured to store packets. | |
558 virtual bool StorePackets() const = 0; | |
559 | |
560 // Called on receipt of RTCP report block from remote side. | |
561 virtual void RegisterRtcpStatisticsCallback( | |
562 RtcpStatisticsCallback* callback) = 0; | |
563 virtual RtcpStatisticsCallback* | |
564 GetRtcpStatisticsCallback() = 0; | |
565 // BWE feedback packets. | |
566 virtual bool SendFeedbackPacket(const rtcp::TransportFeedback& packet) = 0; | |
567 | |
568 /************************************************************************** | |
569 * | |
570 * Audio | |
571 * | |
572 ***************************************************************************/ | |
573 | |
574 /* | |
575 * set audio packet size, used to determine when it's time to send a DTMF | |
576 * packet in silence (CNG) | |
577 * | |
578 * return -1 on failure else 0 | |
579 */ | |
580 virtual int32_t SetAudioPacketSize(uint16_t packetSizeSamples) = 0; | |
581 | |
582 /* | |
583 * Send a TelephoneEvent tone using RFC 2833 (4733) | |
584 * | |
585 * return -1 on failure else 0 | |
586 */ | |
587 virtual int32_t SendTelephoneEventOutband(uint8_t key, | |
588 uint16_t time_ms, | |
589 uint8_t level) = 0; | |
590 | |
591 /* | |
592 * Set payload type for Redundant Audio Data RFC 2198 | |
593 * | |
594 * return -1 on failure else 0 | |
595 */ | |
596 virtual int32_t SetSendREDPayloadType(int8_t payloadType) = 0; | |
597 | |
598 /* | |
599 * Get payload type for Redundant Audio Data RFC 2198 | |
600 * | |
601 * return -1 on failure else 0 | |
602 */ | |
603 virtual int32_t SendREDPayloadType(int8_t* payload_type) const = 0; | |
604 /* | |
605 * Store the audio level in dBov for header-extension-for-audio-level- | |
606 * indication. | |
607 * This API shall be called before transmision of an RTP packet to ensure | |
608 * that the |level| part of the extended RTP header is updated. | |
609 * | |
610 * return -1 on failure else 0. | |
611 */ | |
612 virtual int32_t SetAudioLevel(uint8_t level_dBov) = 0; | |
613 | |
614 /************************************************************************** | |
615 * | |
616 * Video | |
617 * | |
618 ***************************************************************************/ | |
619 | |
620 /* | |
621 * Turn on/off generic FEC | |
622 */ | |
623 virtual void SetGenericFECStatus(bool enable, | |
624 uint8_t payload_type_red, | |
625 uint8_t payload_type_fec) = 0; | |
626 | |
627 /* | |
628 * Get generic FEC setting | |
629 */ | |
630 virtual void GenericFECStatus(bool* enable, | |
631 uint8_t* payload_type_red, | |
632 uint8_t* payload_type_fec) = 0; | |
633 | |
634 virtual int32_t SetFecParameters( | |
635 const FecProtectionParams* delta_params, | |
636 const FecProtectionParams* key_params) = 0; | |
637 | |
638 /* | |
639 * Set method for requestion a new key frame | |
640 * | |
641 * return -1 on failure else 0 | |
642 */ | |
643 virtual int32_t SetKeyFrameRequestMethod(KeyFrameRequestMethod method) = 0; | |
644 | |
645 /* | |
646 * send a request for a keyframe | |
647 * | |
648 * return -1 on failure else 0 | |
649 */ | |
650 virtual int32_t RequestKeyFrame() = 0; | |
651 }; | 464 }; |
| 465 |
652 } // namespace webrtc | 466 } // namespace webrtc |
| 467 |
653 #endif // WEBRTC_MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_H_ | 468 #endif // WEBRTC_MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_H_ |
OLD | NEW |