mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-27 04:35:34 +08:00
[feat] modify the implementation of rtx packet
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user