mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
Set webrtc::PacketOptions.packet_id from
RtpPacketToSend::transport_sequence_number packed_id is set to be 64 bit to align with rtc::PacketOptions. packet_id is only set to RtpPacketToSend::transport_sequence_number if TransportSequenceNumber header extension is not used in order to not change current behaviour. Bug: webrtc:15368 Change-Id: Ia532714226421422bdb292f8dd34b175560e9dc6 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/344160 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Per Kjellander <perkj@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41950}
This commit is contained in:
parent
1cb32aa550
commit
ce2b49552e
3 changed files with 54 additions and 3 deletions
|
@ -25,9 +25,9 @@ struct PacketOptions {
|
|||
PacketOptions(const PacketOptions&);
|
||||
~PacketOptions();
|
||||
|
||||
// A 16 bits positive id. Negative ids are invalid and should be interpreted
|
||||
// Negative ids are invalid and should be interpreted
|
||||
// as packet_id not being set.
|
||||
int packet_id = -1;
|
||||
int64_t packet_id = -1;
|
||||
// Whether this is a retransmission of an earlier packet.
|
||||
bool is_retransmit = false;
|
||||
bool included_in_feedback = false;
|
||||
|
|
|
@ -253,13 +253,24 @@ void RtpSenderEgress::CompleteSendPacket(const Packet& compound_packet,
|
|||
// Downstream code actually uses this flag to distinguish between media and
|
||||
// everything else.
|
||||
options.is_retransmit = !is_media;
|
||||
|
||||
// Set Packet id from transport sequence number header extension if it is
|
||||
// used. The source of the header extension is
|
||||
// RtpPacketToSend::transport_sequence_number(), but the extension is only 16
|
||||
// bit and will wrap. We should be able to use the 64bit value as id, but in
|
||||
// order to not change behaviour we use the 16bit extension value if it is
|
||||
// used.
|
||||
absl::optional<uint16_t> packet_id =
|
||||
packet->GetExtension<TransportSequenceNumber>();
|
||||
if (packet_id.has_value()) {
|
||||
options.packet_id = *packet_id;
|
||||
options.included_in_feedback = true;
|
||||
options.included_in_allocation = true;
|
||||
AddPacketToTransportFeedback(*packet_id, *packet, pacing_info);
|
||||
} else if (packet->transport_sequence_number()) {
|
||||
options.packet_id = *packet->transport_sequence_number();
|
||||
}
|
||||
if (options.packet_id >= 0) {
|
||||
AddPacketToTransportFeedback(options.packet_id, *packet, pacing_info);
|
||||
}
|
||||
|
||||
if (packet->packet_type() != RtpPacketMediaType::kPadding &&
|
||||
|
|
|
@ -820,6 +820,46 @@ TEST_F(RtpSenderEgressTest, SendPacketSetsPacketOptions) {
|
|||
EXPECT_TRUE(transport_.last_packet()->options.is_retransmit);
|
||||
}
|
||||
|
||||
TEST_F(RtpSenderEgressTest, SendPacketSetsPacketOptionsIdFromExtension) {
|
||||
header_extensions_.RegisterByUri(kTransportSequenceNumberExtensionId,
|
||||
TransportSequenceNumber::Uri());
|
||||
RtpSenderEgress sender(DefaultConfig(), &packet_history_);
|
||||
|
||||
// 64-bit transport sequence number.
|
||||
const int64_t kTransportSequenceNumber = 0xFFFF000F;
|
||||
std::unique_ptr<RtpPacketToSend> packet = BuildRtpPacket();
|
||||
packet->set_transport_sequence_number(kTransportSequenceNumber);
|
||||
|
||||
EXPECT_CALL(send_packet_observer_, OnSendPacket);
|
||||
sender.SendPacket(std::move(packet), PacedPacketInfo());
|
||||
|
||||
ASSERT_TRUE(transport_.last_packet().has_value());
|
||||
EXPECT_EQ(
|
||||
transport_.last_packet()->packet.GetExtension<TransportSequenceNumber>(),
|
||||
kTransportSequenceNumber & 0xFFFF);
|
||||
PacketOptions packet_options = transport_.last_packet()->options;
|
||||
// 16 bit packet id.
|
||||
EXPECT_EQ(packet_options.packet_id, kTransportSequenceNumber & 0xFFFF);
|
||||
}
|
||||
|
||||
TEST_F(RtpSenderEgressTest,
|
||||
SendPacketSetsPacketOptionsIdFromRtpSendPacketIfNotUsingExtension) {
|
||||
RtpSenderEgress sender(DefaultConfig(), &packet_history_);
|
||||
// 64-bit transport sequence number.
|
||||
const int64_t kTransportSequenceNumber = 0xFFFF000F;
|
||||
std::unique_ptr<RtpPacketToSend> packet = BuildRtpPacket();
|
||||
packet->set_transport_sequence_number(kTransportSequenceNumber);
|
||||
|
||||
EXPECT_CALL(send_packet_observer_, OnSendPacket);
|
||||
sender.SendPacket(std::move(packet), PacedPacketInfo());
|
||||
|
||||
ASSERT_TRUE(transport_.last_packet().has_value());
|
||||
ASSERT_FALSE(
|
||||
transport_.last_packet()->packet.HasExtension<TransportSequenceNumber>());
|
||||
PacketOptions packet_options = transport_.last_packet()->options;
|
||||
EXPECT_EQ(packet_options.packet_id, kTransportSequenceNumber);
|
||||
}
|
||||
|
||||
TEST_F(RtpSenderEgressTest, SendPacketUpdatesStats) {
|
||||
const size_t kPayloadSize = 1000;
|
||||
|
||||
|
|
Loading…
Reference in a new issue