Add rtcp observers for media receiver to RtcpTransceiverImpl

Bug: webrtc:8239
Change-Id: I7b6735f2efb87e303d1b8076c965a751db4af250
Reviewed-on: https://webrtc-review.googlesource.com/31980
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21240}
This commit is contained in:
Danil Chapovalov
2017-12-13 12:26:17 +01:00
committed by Commit Bot
parent e97de91d39
commit 7ca9ae2e26
5 changed files with 322 additions and 18 deletions

View File

@ -19,8 +19,10 @@
#include "api/array_view.h"
#include "api/optional.h"
#include "modules/rtp_rtcp/source/rtcp_packet/common_header.h"
#include "modules/rtp_rtcp/source/rtcp_packet/dlrr.h"
#include "modules/rtp_rtcp/source/rtcp_packet/remb.h"
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.h"
#include "modules/rtp_rtcp/source/rtcp_packet/target_bitrate.h"
#include "modules/rtp_rtcp/source/rtcp_transceiver_config.h"
#include "rtc_base/constructormagic.h"
#include "rtc_base/weak_ptr.h"
@ -36,6 +38,11 @@ class RtcpTransceiverImpl {
explicit RtcpTransceiverImpl(const RtcpTransceiverConfig& config);
~RtcpTransceiverImpl();
void AddMediaReceiverObserver(uint32_t remote_ssrc,
MediaReceiverRtcpObserver* observer);
void RemoveMediaReceiverObserver(uint32_t remote_ssrc,
MediaReceiverRtcpObserver* observer);
void ReceivePacket(rtc::ArrayView<const uint8_t> packet, int64_t now_us);
void SendCompoundPacket();
@ -54,10 +61,16 @@ class RtcpTransceiverImpl {
void HandleReceivedPacket(const rtcp::CommonHeader& rtcp_packet_header,
int64_t now_us);
// Individual rtcp packet handlers.
void HandleBye(const rtcp::CommonHeader& rtcp_packet_header);
void HandleSenderReport(const rtcp::CommonHeader& rtcp_packet_header,
int64_t now_us);
void HandleExtendedReports(const rtcp::CommonHeader& rtcp_packet_header,
int64_t now_us);
// Extended Reports blocks handlers.
void HandleDlrr(const rtcp::Dlrr& dlrr, int64_t now_us);
void HandleTargetBitrate(const rtcp::TargetBitrate& target_bitrate,
uint32_t remote_ssrc);
void ReschedulePeriodicCompoundPackets();
void SchedulePeriodicCompoundPackets(int64_t delay_ms);
@ -73,6 +86,8 @@ class RtcpTransceiverImpl {
const RtcpTransceiverConfig config_;
rtc::Optional<rtcp::Remb> remb_;
// TODO(danilchap): Remove entries from remote_senders_ that are no longer
// needed.
std::map<uint32_t, RemoteSenderState> remote_senders_;
rtc::WeakPtrFactory<RtcpTransceiverImpl> ptr_factory_;