[feat] modify the implementation of rtx packet

This commit is contained in:
dijunkun
2025-03-31 17:34:28 +08:00
parent 794d57eb40
commit f9717f8481
8 changed files with 166 additions and 17 deletions

View File

@@ -217,9 +217,16 @@ void RtpVideoReceiver::InsertRtpPacket(RtpPacket& rtp_packet) {
rtp_packet_h264->Build(rtp_packet.Buffer().data(), rtp_packet.Size())) {
rtp_packet_h264->GetFrameHeaderInfo();
if (rtp_packet.PayloadType() != rtp::PAYLOAD_TYPE::RTX) {
if (rtp_packet.PayloadType() == rtp::PAYLOAD_TYPE::RTX) {
receive_side_congestion_controller_.OnReceivedPacket(
rtp_packet_received, MediaType::VIDEO);
size_t osn_offset = rtp_packet.HeaderSize();
uint16_t osn = rtp_packet.Buffer().data()[osn_offset] << 8 |
rtp_packet.Buffer().data()[osn_offset + 1];
uint32_t abs_send_time = 0;
LOG_WARN("!!!!!!!!!!! osn = {}, abs {}", osn,
rtp_packet.GetAbsoluteSendTimestamp(&abs_send_time));
nack_->OnReceivedPacket(rtp_packet.SequenceNumber(), true);
} else {
nack_->OnReceivedPacket(rtp_packet.SequenceNumber(), false);

View File

@@ -49,6 +49,9 @@ void VideoChannelSend::OnSentRtpPacket(
if (packet->retransmitted_sequence_number()) {
rtp_packet_history_.MarkPacketAsSent(
*packet->retransmitted_sequence_number());
LOG_WARN("resend seq {}, original seq {} mark as sent",
packet->SequenceNumber(),
packet->retransmitted_sequence_number().value());
} else if (packet->PayloadType() != rtp::PAYLOAD_TYPE::H264 - 1) {
rtp_packet_history_.PutRtpPacket(std::move(packet), clock_->CurrentTime());
}
@@ -124,11 +127,17 @@ int32_t VideoChannelSend::ReSendPacket(uint16_t packet_id) {
retransmit_packet =
std::make_unique<webrtc::RtpPacketToSend>(stored_packet);
if (retransmit_packet) {
retransmit_packet->set_retransmitted_sequence_number(
stored_packet.SequenceNumber());
retransmit_packet->set_original_ssrc(stored_packet.Ssrc());
}
retransmit_packet->SetSsrc(rtx_ssrc_);
retransmit_packet->SetPayloadType(rtp::PAYLOAD_TYPE::RTX);
retransmit_packet->set_retransmitted_sequence_number(
stored_packet.SequenceNumber());
LOG_WARN(
"???????????? resend seq {}",
retransmit_packet->retransmitted_sequence_number().value());
retransmit_packet->set_original_ssrc(stored_packet.Ssrc());
retransmit_packet->BuildRtxPacket();
return retransmit_packet;
});
if (packet_size == 0) {
@@ -142,8 +151,6 @@ int32_t VideoChannelSend::ReSendPacket(uint16_t packet_id) {
return -1;
}
packet->SetSsrc(rtx_ssrc_);
packet->SetPayloadType(rtp::PAYLOAD_TYPE::RTX);
packet->set_packet_type(webrtc::RtpPacketMediaType::kRetransmission);
packet->set_fec_protect_packet(false);

View File

@@ -68,10 +68,7 @@ class PacketSenderImp : public PacketSender,
ssrc_seq_[packet->Ssrc()] = 1;
}
if (packet->packet_type().value() !=
webrtc::RtpPacketMediaType::kRetransmission) {
packet->UpdateSequenceNumber(ssrc_seq_[packet->Ssrc()]++);
}
packet->UpdateSequenceNumber(ssrc_seq_[packet->Ssrc()]++);
on_sent_packet_func_(std::move(packet));
}