Index: webrtc/modules/pacing/packet_router.h |
diff --git a/webrtc/modules/pacing/packet_router.h b/webrtc/modules/pacing/packet_router.h |
index ffc0c1a59d3bc8f86ecea77aed4ac05d6ebe139d..ea05d45d77bb83351df303cbc8c4613319127d84 100644 |
--- a/webrtc/modules/pacing/packet_router.h |
+++ b/webrtc/modules/pacing/packet_router.h |
@@ -20,6 +20,7 @@ |
#include "webrtc/base/thread_checker.h" |
#include "webrtc/common_types.h" |
#include "webrtc/modules/pacing/paced_sender.h" |
+#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
namespace webrtc { |
@@ -35,7 +36,8 @@ class TransportFeedback; |
// (receiver report). For the latter case, we also keep track of the |
// receive modules. |
class PacketRouter : public PacedSender::PacketSender, |
- public TransportSequenceNumberAllocator { |
+ public TransportSequenceNumberAllocator, |
+ public RemoteBitrateObserver { |
public: |
PacketRouter(); |
virtual ~PacketRouter(); |
@@ -66,8 +68,20 @@ class PacketRouter : public PacedSender::PacketSender, |
void SetTransportWideSequenceNumber(uint16_t sequence_number); |
uint16_t AllocateSequenceNumber() override; |
+ // Called every time there is a new bitrate estimate for a receive channel |
+ // group. This call will trigger a new RTCP REMB packet if the bitrate |
+ // estimate has decreased or if no RTCP REMB packet has been sent for |
+ // a certain time interval. |
+ // Implements RtpReceiveBitrateUpdate. |
+ void OnReceiveBitrateChanged(const std::vector<uint32_t>& ssrcs, |
+ uint32_t bitrate_bps) override; |
+ |
+ // Send REMB feedback. |
+ virtual bool SendRemb(uint32_t bitrate_bps, |
+ const std::vector<uint32_t>& ssrcs); |
+ |
// Send transport feedback packet to send-side. |
- virtual bool SendFeedback(rtcp::TransportFeedback* packet); |
+ virtual bool SendTransportFeedback(rtcp::TransportFeedback* packet); |
private: |
rtc::ThreadChecker pacer_thread_checker_; |
@@ -75,6 +89,13 @@ class PacketRouter : public PacedSender::PacketSender, |
std::list<RtpRtcp*> rtp_send_modules_ GUARDED_BY(modules_crit_); |
std::vector<RtpRtcp*> rtp_receive_modules_ GUARDED_BY(modules_crit_); |
+ rtc::CriticalSection remb_crit_; |
+ // The last time a REMB was sent. |
+ int64_t last_remb_time_ms_ GUARDED_BY(remb_crit_); |
+ uint32_t last_send_bitrate_bps_ GUARDED_BY(remb_crit_); |
+ // The last bitrate update. |
+ uint32_t bitrate_bps_ GUARDED_BY(remb_crit_); |
+ |
volatile int transport_seq_; |
RTC_DISALLOW_COPY_AND_ASSIGN(PacketRouter); |