[fix] fix receiver report building and parsing

This commit is contained in:
dijunkun
2025-03-04 11:17:19 +08:00
parent fba5993866
commit ebfeaf4754
15 changed files with 140 additions and 60 deletions

View File

@@ -230,8 +230,7 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size,
// received_blocks[rtcp_packet_info->remote_ssrc].sender_report = true;
break;
case RtcpPacket::RtcpPayloadType::RR:
LOG_INFO("Receiver report");
// valid = HandleReceiverReport(rtcp_block, rtcp_packet_info);
valid = HandleReceiverReport(rtcp_block, rtcp_packet_info);
break;
case RtpFeedback::kPacketType:
switch (rtcp_block.fmt()) {
@@ -313,6 +312,19 @@ bool IceTransport::HandleSenderReport(const RtcpCommonHeader &rtcp_block,
return true;
}
bool IceTransport::HandleReceiverReport(const RtcpCommonHeader &rtcp_block,
RtcpPacketInfo *rtcp_packet_info) {
ReceiverReport receiver_report;
if (!receiver_report.Parse(rtcp_block)) {
return false;
}
if (ice_transport_controller_) {
ice_transport_controller_->OnReceiverReport(receiver_report);
}
return true;
}
bool IceTransport::HandleCongestionControlFeedback(
const RtcpCommonHeader &rtcp_block, RtcpPacketInfo *rtcp_packet_info) {
webrtc::rtcp::CongestionControlFeedback feedback;

View File

@@ -133,6 +133,9 @@ class IceTransport {
bool HandleSenderReport(const RtcpCommonHeader &rtcp_block,
RtcpPacketInfo *rtcp_packet_info);
bool HandleReceiverReport(const RtcpCommonHeader &rtcp_block,
RtcpPacketInfo *rtcp_packet_info);
bool HandleCongestionControlFeedback(const RtcpCommonHeader &rtcp_block,
RtcpPacketInfo *rtcp_packet_info);

View File

@@ -338,6 +338,13 @@ void IceTransportController::OnSenderReport(const SenderReport& sender_report) {
data_channel_receive_->OnSenderReport(sender_report);
}
void IceTransportController::OnReceiverReport(
const ReceiverReport& receiver_report) {
video_channel_send_->OnReceiverReport(receiver_report);
audio_channel_send_->OnReceiverReport(receiver_report);
data_channel_send_->OnReceiverReport(receiver_report);
}
void IceTransportController::OnCongestionControlFeedback(
const webrtc::rtcp::CongestionControlFeedback& feedback) {
std::optional<webrtc::TransportPacketsFeedback> feedback_msg =

View File

@@ -62,6 +62,7 @@ class IceTransportController
public:
void OnSenderReport(const SenderReport &sender_report);
void OnReceiverReport(const ReceiverReport& receiver_report);
void OnCongestionControlFeedback(
const webrtc::rtcp::CongestionControlFeedback &feedback);