Implement recieving PLI in RtcpTranceiver

Bug: webrtc:8239
Change-Id: I99f818991f4a0edd8afa90044bcb1db7e4a478d9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/256105
Reviewed-by: Emil Lundmark <lndmrk@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36330}
This commit is contained in:
Danil Chapovalov
2022-03-18 17:48:57 +01:00
committed by WebRTC LUCI CQ
parent e5b2220650
commit 887754af75
4 changed files with 54 additions and 7 deletions

View File

@ -336,18 +336,40 @@ void RtcpTransceiverImpl::HandleReceiverReport(
void RtcpTransceiverImpl::HandlePayloadSpecificFeedback(
const rtcp::CommonHeader& rtcp_packet_header,
Timestamp now) {
// Remb is the only payload specific message handled right now.
if (rtcp_packet_header.fmt() != rtcp::Psfb::kAfbMessageType ||
config_.network_link_observer == nullptr) {
switch (rtcp_packet_header.fmt()) {
case rtcp::Pli::kFeedbackMessageType:
HandlePli(rtcp_packet_header);
break;
case rtcp::Psfb::kAfbMessageType:
HandleRemb(rtcp_packet_header, now);
break;
}
}
void RtcpTransceiverImpl::HandlePli(
const rtcp::CommonHeader& rtcp_packet_header) {
rtcp::Pli pli;
if (local_senders_.empty() || !pli.Parse(rtcp_packet_header)) {
return;
}
rtcp::Remb remb;
if (remb.Parse(rtcp_packet_header)) {
config_.network_link_observer->OnReceiverEstimatedMaxBitrate(
now, DataRate::BitsPerSec(remb.bitrate_bps()));
auto it = local_senders_by_ssrc_.find(pli.media_ssrc());
if (it != local_senders_by_ssrc_.end()) {
it->second->handler->OnPli(pli.sender_ssrc());
}
}
void RtcpTransceiverImpl::HandleRemb(
const rtcp::CommonHeader& rtcp_packet_header,
Timestamp now) {
rtcp::Remb remb;
if (config_.network_link_observer == nullptr ||
!remb.Parse(rtcp_packet_header)) {
return;
}
config_.network_link_observer->OnReceiverEstimatedMaxBitrate(
now, DataRate::BitsPerSec(remb.bitrate_bps()));
}
void RtcpTransceiverImpl::HandleRtpFeedback(
const rtcp::CommonHeader& rtcp_packet_header,
Timestamp now) {