blob: 38a9bf03053d9a3ad1b0489b58248b35498543be [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
pwestin@webrtc.orgf6bb77a2012-01-24 17:16:59 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_RTP_RTCP_SOURCE_RTP_RTCP_IMPL_H_
12#define MODULES_RTP_RTCP_SOURCE_RTP_RTCP_IMPL_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
Yves Gerey988cc082018-10-23 12:03:01 +020014#include <stddef.h>
15#include <stdint.h>
Jonas Olssona4d87372019-07-05 19:08:33 +020016
nisse14adba72017-03-20 03:52:39 -070017#include <memory>
danilchapb8b6fbb2015-12-10 05:05:27 -080018#include <set>
Steve Anton296a0ce2018-03-22 15:17:27 -070019#include <string>
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000020#include <vector>
niklase@google.com470e71d2011-07-07 08:21:25 +000021
Ali Tofighd14e8892022-05-13 11:42:16 +020022#include "absl/strings/string_view.h"
Danil Chapovalovd264df52018-06-14 12:59:38 +020023#include "absl/types/optional.h"
Yves Gerey988cc082018-10-23 12:03:01 +020024#include "api/rtp_headers.h"
Erik Språngeeaa8f92018-05-17 12:35:56 +020025#include "api/video/video_bitrate_allocation.h"
Yves Gerey988cc082018-10-23 12:03:01 +020026#include "modules/include/module_fec_types.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020027#include "modules/rtp_rtcp/include/rtp_rtcp.h"
Yves Gerey988cc082018-10-23 12:03:01 +020028#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" // RTCPPacketType
Tomas Gunnarsson593e6a42020-06-07 22:32:31 +020029#include "modules/rtp_rtcp/source/deprecated/deprecated_rtp_sender_egress.h"
Erik Språngbfcfe032021-08-04 14:45:32 +020030#include "modules/rtp_rtcp/source/packet_sequencer.h"
Yves Gerey988cc082018-10-23 12:03:01 +020031#include "modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020032#include "modules/rtp_rtcp/source/rtcp_receiver.h"
33#include "modules/rtp_rtcp/source/rtcp_sender.h"
Erik Språng77b75292019-10-28 15:51:36 +010034#include "modules/rtp_rtcp/source/rtp_packet_history.h"
Erik Språng9c771c22019-06-17 16:31:53 +020035#include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020036#include "modules/rtp_rtcp/source/rtp_sender.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020037#include "rtc_base/gtest_prod_util.h"
Markus Handellf7303e62020-07-09 01:34:42 +020038#include "rtc_base/synchronization/mutex.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000039
niklase@google.com470e71d2011-07-07 08:21:25 +000040namespace webrtc {
41
Yves Gerey988cc082018-10-23 12:03:01 +020042class Clock;
43struct PacedPacketInfo;
44struct RTPVideoHeader;
45
Florent Castellia30f8822022-10-31 18:47:06 +010046#pragma clang diagnostic push
47#pragma clang diagnostic ignored "-Wdeprecated-declarations"
48class ABSL_DEPRECATED("") ModuleRtpRtcpImpl
49 : public RtpRtcp,
50 public RTCPReceiver::ModuleRtpRtcp {
51#pragma clang diagnostic pop
pwestin@webrtc.org2853dde2012-05-11 11:08:54 +000052 public:
Tomas Gunnarssonf25761d2020-06-03 22:55:33 +020053 explicit ModuleRtpRtcpImpl(
54 const RtpRtcpInterface::Configuration& configuration);
Danil Chapovalov2a5ce2b2018-02-07 09:38:31 +010055 ~ModuleRtpRtcpImpl() override;
niklase@google.com470e71d2011-07-07 08:21:25 +000056
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000057 // Process any pending tasks such as timeouts.
pbosa26ac922016-02-25 04:50:01 -080058 void Process() override;
niklase@google.com470e71d2011-07-07 08:21:25 +000059
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000060 // Receiver part.
niklase@google.com470e71d2011-07-07 08:21:25 +000061
stefan@webrtc.orga5cb98c2013-05-29 12:12:51 +000062 // Called when we receive an RTCP packet.
nisse479d3d72017-09-13 07:53:37 -070063 void IncomingRtcpPacket(const uint8_t* incoming_packet,
64 size_t incoming_packet_length) override;
Harald Alvestrand1f206b82023-02-01 11:12:46 +000065 void IncomingRtcpPacket(rtc::ArrayView<const uint8_t> packet) override {
66 IncomingRtcpPacket(packet.data(), packet.size());
67 }
pwestin@webrtc.org1da1ce02011-10-13 15:19:55 +000068
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000069 void SetRemoteSSRC(uint32_t ssrc) override;
Tommi08be9ba2021-06-15 23:01:57 +020070 void SetLocalSsrc(uint32_t ssrc) override;
wu@webrtc.org822fbd82013-08-15 23:38:54 +000071
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000072 // Sender part.
Niels Möller5fe95102019-03-04 16:49:25 +010073 void RegisterSendPayloadFrequency(int payload_type,
74 int payload_frequency) override;
Peter Boström8b79b072016-02-26 16:31:37 +010075
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000076 int32_t DeRegisterSendPayload(int8_t payload_type) override;
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +000077
Johannes Kron9190b822018-10-29 11:22:05 +010078 void SetExtmapAllowMixed(bool extmap_allow_mixed) override;
79
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000080 // Register RTP header extension.
Sebastian Janssonf39c8152019-10-14 17:32:21 +020081 void RegisterRtpHeaderExtension(absl::string_view uri, int id) override;
Sebastian Janssonf39c8152019-10-14 17:32:21 +020082 void DeregisterSendRtpHeaderExtension(absl::string_view uri) override;
niklase@google.com470e71d2011-07-07 08:21:25 +000083
Mirko Bonadei999a72a2019-07-12 17:33:46 +000084 bool SupportsPadding() const override;
85 bool SupportsRtxPayloadPadding() const override;
stefan53b6cc32017-02-03 08:13:57 -080086
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000087 // Get start timestamp.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000088 uint32_t StartTimestamp() const override;
niklase@google.com470e71d2011-07-07 08:21:25 +000089
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000090 // Configure start timestamp, default is a random number.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000091 void SetStartTimestamp(uint32_t timestamp) override;
niklase@google.com470e71d2011-07-07 08:21:25 +000092
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000093 uint16_t SequenceNumber() const override;
niklase@google.com470e71d2011-07-07 08:21:25 +000094
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +000095 // Set SequenceNumber, default is a random number.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000096 void SetSequenceNumber(uint16_t seq) override;
niklase@google.com470e71d2011-07-07 08:21:25 +000097
Per83d09102016-04-15 14:59:13 +020098 void SetRtpState(const RtpState& rtp_state) override;
99 void SetRtxState(const RtpState& rtp_state) override;
100 RtpState GetRtpState() const override;
101 RtpState GetRtxState() const override;
pbos@webrtc.org2bb1bda2014-07-07 13:06:48 +0000102
Ivo Creusen8c40d512021-07-13 12:53:22 +0000103 void SetNonSenderRttMeasurement(bool enabled) override {}
104
Erik Språng6841d252019-10-15 14:29:11 +0200105 uint32_t SSRC() const override { return rtcp_sender_.SSRC(); }
niklase@google.com470e71d2011-07-07 08:21:25 +0000106
Ali Tofighd14e8892022-05-13 11:42:16 +0200107 void SetMid(absl::string_view mid) override;
Steve Anton296a0ce2018-03-22 15:17:27 -0700108
henrik.lundin@webrtc.org1972ff82014-09-11 06:20:28 +0000109 RTCPSender::FeedbackState GetFeedbackState();
niklase@google.com470e71d2011-07-07 08:21:25 +0000110
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000111 void SetRtxSendStatus(int mode) override;
112 int RtxSendStatus() const override;
Erik Språngc06aef22019-10-17 13:02:27 +0200113 absl::optional<uint32_t> RtxSsrc() const override;
mflodman@webrtc.org9f5ebb52013-04-12 14:55:46 +0000114
Shao Changbine62202f2015-04-21 20:24:50 +0800115 void SetRtxSendPayloadType(int payload_type,
116 int associated_payload_type) override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000117
Danil Chapovalovd264df52018-06-14 12:59:38 +0200118 absl::optional<uint32_t> FlexfecSsrc() const override;
brandtr9dfff292016-11-14 05:14:50 -0800119
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000120 // Sends kRtcpByeCode when going from true to false.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000121 int32_t SetSendingStatus(bool sending) override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000122
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000123 bool Sending() const override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000124
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000125 // Drops or relays media packets.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000126 void SetSendingMediaStatus(bool sending) override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000127
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000128 bool SendingMedia() const override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000129
Erik Språng1e51a382019-12-11 16:47:09 +0100130 bool IsAudioConfigured() const override;
131
Sebastian Jansson1bca65b2018-10-10 09:58:08 +0200132 void SetAsPartOfAllocation(bool part_of_allocation) override;
133
Niels Möller5fe95102019-03-04 16:49:25 +0100134 bool OnSendingRtpFrame(uint32_t timestamp,
135 int64_t capture_time_ms,
136 int payload_type,
137 bool force_sender_report) override;
138
Erik Språng9c771c22019-06-17 16:31:53 +0200139 bool TrySendPacket(RtpPacketToSend* packet,
140 const PacedPacketInfo& pacing_info) override;
141
Erik Språng1d50cb62020-07-02 17:41:32 +0200142 void SetFecProtectionParams(const FecProtectionParams& delta_params,
143 const FecProtectionParams& key_params) override;
144
145 std::vector<std::unique_ptr<RtpPacketToSend>> FetchFecPackets() override;
146
Erik Språng50459492022-09-08 16:53:06 +0200147 void OnAbortedRetransmissions(
148 rtc::ArrayView<const uint16_t> sequence_numbers) override;
149
Erik Språnga9229042019-10-24 12:39:32 +0200150 void OnPacketsAcknowledged(
151 rtc::ArrayView<const uint16_t> sequence_numbers) override;
stefan@webrtc.org0a3c1472013-12-05 14:05:07 +0000152
Erik Språngf6468d22019-07-05 16:53:43 +0200153 std::vector<std::unique_ptr<RtpPacketToSend>> GeneratePadding(
154 size_t target_size_bytes) override;
Erik Språng478cb462019-06-26 15:49:27 +0200155
Erik Språng3663f942020-02-07 10:05:15 +0100156 std::vector<RtpSequenceNumberMap::Info> GetSentRtpPacketInfos(
157 rtc::ArrayView<const uint16_t> sequence_numbers) const override;
158
Erik Språng04e1bab2020-05-07 18:18:32 +0200159 size_t ExpectedPerPacketOverhead() const override;
160
Erik Språngb6bbdeb2021-08-13 16:12:41 +0200161 void OnPacketSendingThreadSwitched() override;
162
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000163 // RTCP part.
niklase@google.com470e71d2011-07-07 08:21:25 +0000164
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000165 // Get RTCP status.
pbosda903ea2015-10-02 02:36:56 -0700166 RtcpMode RTCP() const override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000167
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000168 // Configure RTCP status i.e on/off.
pbosda903ea2015-10-02 02:36:56 -0700169 void SetRTCPStatus(RtcpMode method) override;
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000170
171 // Set RTCP CName.
Ali Tofighd14e8892022-05-13 11:42:16 +0200172 int32_t SetCNAME(absl::string_view c_name) override;
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000173
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000174 // Get remote NTP.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000175 int32_t RemoteNTP(uint32_t* received_ntp_secs,
176 uint32_t* received_ntp_frac,
177 uint32_t* rtcp_arrival_time_secs,
178 uint32_t* rtcp_arrival_time_frac,
179 uint32_t* rtcp_timestamp) const override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000180
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000181 // Get RoundTripTime.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000182 int32_t RTT(uint32_t remote_ssrc,
183 int64_t* rtt,
184 int64_t* avg_rtt,
185 int64_t* min_rtt,
186 int64_t* max_rtt) const override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000187
Niels Möller5fe95102019-03-04 16:49:25 +0100188 int64_t ExpectedRetransmissionTimeMs() const override;
189
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000190 // Force a send of an RTCP packet.
191 // Normal SR and RR are triggered via the process function.
Erik Språng242e22b2015-05-11 10:17:43 +0200192 int32_t SendRTCP(RTCPPacketType rtcpPacketType) override;
193
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000194 void GetSendStreamDataCounters(
asapersson@webrtc.org97d04892014-12-09 09:47:53 +0000195 StreamDataCounters* rtp_counters,
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000196 StreamDataCounters* rtx_counters) const override;
asapersson@webrtc.org97d04892014-12-09 09:47:53 +0000197
Henrik Boström6e436d12019-05-27 12:19:33 +0200198 // A snapshot of the most recent Report Block with additional data of
199 // interest to statistics. Used to implement RTCRemoteInboundRtpStreamStats.
200 // Within this list, the ReportBlockData::RTCPReportBlock::source_ssrc(),
201 // which is the SSRC of the corresponding outbound RTP stream, is unique.
202 std::vector<ReportBlockData> GetLatestReportBlockData() const override;
Alessio Bazzicabc1c93d2021-03-12 17:45:26 +0100203 absl::optional<SenderReportStats> GetSenderReportStats() const override;
Ivo Creusen2562cf02021-09-03 14:51:22 +0000204 // Round trip time statistics computed from the XR block contained in the last
205 // report.
206 absl::optional<NonSenderRttStats> GetNonSenderRttStats() const override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000207
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000208 // (REMB) Receiver Estimated Max Bitrate.
Danil Chapovalov1de4b622017-12-13 13:35:10 +0100209 void SetRemb(int64_t bitrate_bps, std::vector<uint32_t> ssrcs) override;
Danil Chapovalov51e21aa2017-10-10 17:46:26 +0200210 void UnsetRemb() override;
pwestin@webrtc.org741da942011-09-20 13:52:04 +0000211
danilchap59cb2bd2016-08-29 11:08:47 -0700212 void SetTmmbn(std::vector<rtcp::TmmbItem> bounding_set) override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000213
nisse284542b2017-01-10 08:58:32 -0800214 size_t MaxRtpPacketSize() const override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000215
nisse284542b2017-01-10 08:58:32 -0800216 void SetMaxRtpPacketSize(size_t max_packet_size) override;
michaelt79e05882016-11-08 02:50:09 -0800217
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000218 // (NACK) Negative acknowledgment part.
niklase@google.com470e71d2011-07-07 08:21:25 +0000219
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000220 // Send a Negative acknowledgment packet.
philipel83f831a2016-03-12 03:30:23 -0800221 // TODO(philipel): Deprecate SendNACK and use SendNack instead.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000222 int32_t SendNACK(const uint16_t* nack_list, uint16_t size) override;
stefan@webrtc.org6a4bef42011-12-22 12:52:41 +0000223
philipel83f831a2016-03-12 03:30:23 -0800224 void SendNack(const std::vector<uint16_t>& sequence_numbers) override;
225
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000226 // Store the sent packets, needed to answer to a negative acknowledgment
227 // requests.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +0000228 void SetStorePacketsStatus(bool enable, uint16_t number_to_store) override;
niklase@google.com470e71d2011-07-07 08:21:25 +0000229
Per Kjellander16999812019-10-10 12:57:28 +0200230 void SendCombinedRtcpPacket(
231 std::vector<std::unique_ptr<rtcp::RtcpPacket>> rtcp_packets) override;
232
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000233 // Video part.
Elad Alon7d6a4c02019-02-25 13:00:51 +0100234 int32_t SendLossNotification(uint16_t last_decoded_seq_num,
235 uint16_t last_received_seq_num,
Elad Alone86af2c2019-06-03 14:37:50 +0200236 bool decodability_flag,
237 bool buffering_allowed) override;
Elad Alon7d6a4c02019-02-25 13:00:51 +0100238
Erik Språngbf46cfe2020-05-11 18:22:02 +0200239 RtpSendRates GetSendRates() const override;
240
danilchap59cb2bd2016-08-29 11:08:47 -0700241 void OnReceivedNack(
242 const std::vector<uint16_t>& nack_sequence_numbers) override;
243 void OnReceivedRtcpReportBlocks(
244 const ReportBlockList& report_blocks) override;
245 void OnRequestSendReport() override;
henrike@webrtc.orgf5da4da2012-02-15 23:54:59 +0000246
Erik Språng566124a2018-04-23 12:32:22 +0200247 void SetVideoBitrateAllocation(
248 const VideoBitrateAllocation& bitrate) override;
sprang5e38c962016-12-01 05:18:09 -0800249
Niels Möller5fe95102019-03-04 16:49:25 +0100250 RTPSender* RtpSender() override;
251 const RTPSender* RtpSender() const override;
252
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000253 protected:
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000254 bool UpdateRTCPReceiveInformationTimers();
niklase@google.com470e71d2011-07-07 08:21:25 +0000255
Erik Språng77b75292019-10-28 15:51:36 +0100256 RTPSender* rtp_sender() {
Erik Språng9cdc9cc2019-10-28 18:24:32 +0100257 return rtp_sender_ ? &rtp_sender_->packet_generator : nullptr;
Erik Språng77b75292019-10-28 15:51:36 +0100258 }
259 const RTPSender* rtp_sender() const {
Erik Språng9cdc9cc2019-10-28 18:24:32 +0100260 return rtp_sender_ ? &rtp_sender_->packet_generator : nullptr;
Erik Språng77b75292019-10-28 15:51:36 +0100261 }
nissea33c62e2017-03-14 00:49:45 -0700262
263 RTCPSender* rtcp_sender() { return &rtcp_sender_; }
264 const RTCPSender* rtcp_sender() const { return &rtcp_sender_; }
265
266 RTCPReceiver* rtcp_receiver() { return &rtcp_receiver_; }
267 const RTCPReceiver* rtcp_receiver() const { return &rtcp_receiver_; }
268
Tomas Gunnarsson79ca92d2020-06-18 17:30:15 +0200269 void SetMediaHasBeenSent(bool media_has_been_sent) {
270 rtp_sender_->packet_sender.SetMediaHasBeenSent(media_has_been_sent);
271 }
272
Sebastian Janssonaa01f272019-01-30 11:28:59 +0100273 Clock* clock() const { return clock_; }
nissea33c62e2017-03-14 00:49:45 -0700274
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000275 private:
asapersson@webrtc.orge7b1e112013-12-16 14:40:36 +0000276 FRIEND_TEST_ALL_PREFIXES(RtpRtcpImplTest, Rtt);
asapersson@webrtc.org1ae1d0c2013-11-20 12:46:11 +0000277 FRIEND_TEST_ALL_PREFIXES(RtpRtcpImplTest, RttForReceiverOnly);
niklase@google.com470e71d2011-07-07 08:21:25 +0000278
Erik Språng77b75292019-10-28 15:51:36 +0100279 struct RtpSenderContext {
Tomas Gunnarssonf25761d2020-06-03 22:55:33 +0200280 explicit RtpSenderContext(const RtpRtcpInterface::Configuration& config);
Erik Språng77b75292019-10-28 15:51:36 +0100281 // Storage of packets, for retransmissions and padding, if applicable.
Erik Språng9cdc9cc2019-10-28 18:24:32 +0100282 RtpPacketHistory packet_history;
Erik Språngbfcfe032021-08-04 14:45:32 +0200283 // Handles sequence number assignment and padding timestamp generation.
Erik Språng5f1d4062021-08-12 11:34:03 +0200284 mutable Mutex sequencer_mutex;
285 PacketSequencer sequencer_ RTC_GUARDED_BY(sequencer_mutex);
Erik Språng77b75292019-10-28 15:51:36 +0100286 // Handles final time timestamping/stats/etc and handover to Transport.
Tomas Gunnarsson593e6a42020-06-07 22:32:31 +0200287 DEPRECATED_RtpSenderEgress packet_sender;
Erik Språng77b75292019-10-28 15:51:36 +0100288 // If no paced sender configured, this class will be used to pass packets
Artem Titov913cfa72021-07-28 23:57:33 +0200289 // from `packet_generator_` to `packet_sender_`.
Tomas Gunnarsson593e6a42020-06-07 22:32:31 +0200290 DEPRECATED_RtpSenderEgress::NonPacedPacketSender non_paced_sender;
Erik Språng77b75292019-10-28 15:51:36 +0100291 // Handles creation of RTP packets to be sent.
Erik Språng9cdc9cc2019-10-28 18:24:32 +0100292 RTPSender packet_generator;
Erik Språng77b75292019-10-28 15:51:36 +0100293 };
294
pkasting@chromium.org16825b12015-01-12 21:51:21 +0000295 void set_rtt_ms(int64_t rtt_ms);
296 int64_t rtt_ms() const;
asapersson@webrtc.org1ae1d0c2013-11-20 12:46:11 +0000297
asapersson@webrtc.orgba8138b2014-12-08 13:29:02 +0000298 bool TimeToSendFullNackList(int64_t now) const;
299
Niels Mölleraf6ea0c2020-11-20 12:21:21 +0100300 // Returns true if the module is configured to store packets.
301 bool StorePackets() const;
302
303 // Returns current Receiver Reference Time Report (RTTR) status.
304 bool RtcpXrRrtrStatus() const;
305
Erik Språng77b75292019-10-28 15:51:36 +0100306 std::unique_ptr<RtpSenderContext> rtp_sender_;
307
nisse150708e2017-03-16 05:02:53 -0700308 RTCPSender rtcp_sender_;
309 RTCPReceiver rtcp_receiver_;
310
Sebastian Janssonaa01f272019-01-30 11:28:59 +0100311 Clock* const clock_;
nisse150708e2017-03-16 05:02:53 -0700312
asapersson@webrtc.org9ffd8fe2015-01-21 08:22:50 +0000313 int64_t last_bitrate_process_time_;
314 int64_t last_rtt_process_time_;
315 uint16_t packet_overhead_;
niklase@google.com470e71d2011-07-07 08:21:25 +0000316
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000317 // Send side
Danil Chapovalov9eb6ce12017-12-15 12:25:01 +0100318 int64_t nack_last_time_sent_full_ms_;
asapersson@webrtc.orgba8138b2014-12-08 13:29:02 +0000319 uint16_t nack_last_seq_number_sent_;
stefan@webrtc.org9354cc92012-06-07 08:10:14 +0000320
Tommi5f223652018-03-26 13:28:26 +0200321 RtcpRttStats* const rtt_stats_;
asapersson@webrtc.org1ae1d0c2013-11-20 12:46:11 +0000322
323 // The processed RTT from RtcpRttStats.
Markus Handellf7303e62020-07-09 01:34:42 +0200324 mutable Mutex mutex_rtt_;
Niels Möllercd982132020-11-26 16:19:56 +0100325 int64_t rtt_ms_ RTC_GUARDED_BY(mutex_rtt_);
niklase@google.com470e71d2011-07-07 08:21:25 +0000326};
phoglund@webrtc.orgacfdd962013-01-16 10:27:33 +0000327
328} // namespace webrtc
329
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200330#endif // MODULES_RTP_RTCP_SOURCE_RTP_RTCP_IMPL_H_