[feat] implementation for nack generator module

This commit is contained in:
dijunkun
2025-02-13 17:24:18 +08:00
parent 1db57bfc76
commit 7b4bba4166
14 changed files with 303 additions and 88 deletions

View File

@@ -232,15 +232,19 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size,
LOG_INFO("Receiver report");
// valid = HandleReceiverReport(rtcp_block, rtcp_packet_info);
break;
case RtcpPacket::PAYLOAD_TYPE::TCC:
case RtpFeedback::kPacketType:
switch (rtcp_block.fmt()) {
case webrtc::rtcp::CongestionControlFeedback::kFeedbackMessageType:
valid = HandleCongestionControlFeedback(rtcp_block, rtcp_packet_info);
break;
case webrtc::rtcp::Nack::kFeedbackMessageType:
valid = HandleNack(rtcp_block, rtcp_packet_info);
break;
default:
break;
}
break;
// case rtcp::Psfb::kPacketType:
// switch (rtcp_block.fmt()) {
// case rtcp::Pli::kFeedbackMessageType:
@@ -314,6 +318,24 @@ bool IceTransport::HandleCongestionControlFeedback(
return true;
}
bool IceTransport::HandleNack(const webrtc::rtcp::CommonHeader &rtcp_block,
RtcpPacketInfo *rtcp_packet_info) {
webrtc::rtcp::Nack nack;
if (!nack.Parse(rtcp_block)) {
return false;
}
// uint32_t first_media_source_ssrc = nack.ssrc();
// if (first_media_source_ssrc == local_media_ssrc() ||
// registered_ssrcs_.contains(first_media_source_ssrc)) {
// rtcp_packet_info->nack.emplace(std::move(nack));
// }
LOG_INFO("Nack [{}]", nack.packet_ids().size());
return true;
}
int IceTransport::DestroyIceTransmission() {
LOG_INFO("[{}->{}] Destroy ice transmission", user_id_, remote_user_id_);
is_closed_ = true;