Implement recieving NACK in RtcpTranceiver

Bug: webrtc:8239
Change-Id: I41d6c3252bbffeab66ded7ed294f82134351541a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/254800
Reviewed-by: Emil Lundmark <lndmrk@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36254}
This commit is contained in:
Danil Chapovalov
2022-03-18 14:49:12 +01:00
committed by WebRTC LUCI CQ
parent 16af378884
commit ef6b028c92
4 changed files with 63 additions and 4 deletions

View File

@ -351,10 +351,34 @@ void RtcpTransceiverImpl::HandlePayloadSpecificFeedback(
void RtcpTransceiverImpl::HandleRtpFeedback(
const rtcp::CommonHeader& rtcp_packet_header,
Timestamp now) {
// Transport feedback is the only message handled right now.
if (rtcp_packet_header.fmt() !=
rtcp::TransportFeedback::kFeedbackMessageType ||
config_.network_link_observer == nullptr) {
switch (rtcp_packet_header.fmt()) {
case rtcp::Nack::kFeedbackMessageType:
HandleNack(rtcp_packet_header);
break;
case rtcp::TransportFeedback::kFeedbackMessageType:
HandleTransportFeedback(rtcp_packet_header, now);
break;
}
}
void RtcpTransceiverImpl::HandleNack(
const rtcp::CommonHeader& rtcp_packet_header) {
rtcp::Nack nack;
if (local_senders_.empty() || !nack.Parse(rtcp_packet_header)) {
return;
}
auto it = local_senders_by_ssrc_.find(nack.media_ssrc());
if (it != local_senders_by_ssrc_.end()) {
it->second->handler->OnNack(nack.sender_ssrc(), nack.packet_ids());
}
}
void RtcpTransceiverImpl::HandleTransportFeedback(
const rtcp::CommonHeader& rtcp_packet_header,
Timestamp now) {
RTC_DCHECK_EQ(rtcp_packet_header.fmt(),
rtcp::TransportFeedback::kFeedbackMessageType);
if (config_.network_link_observer == nullptr) {
return;
}
rtcp::TransportFeedback feedback;