diff --git a/call/rtx_receive_stream.cc b/call/rtx_receive_stream.cc index 3c8b53b8fd..9e4a41bc8f 100644 --- a/call/rtx_receive_stream.cc +++ b/call/rtx_receive_stream.cc @@ -64,6 +64,7 @@ void RtxReceiveStream::OnRtpPacket(const RtpPacketReceived& rtx_packet) { media_packet.SetSequenceNumber((payload[0] << 8) + payload[1]); media_packet.SetPayloadType(it->second); media_packet.set_recovered(true); + media_packet.set_arrival_time_ms(rtx_packet.arrival_time_ms()); // Skip the RTX header. rtc::ArrayView rtx_payload = payload.subview(kRtxHeaderSize); diff --git a/call/rtx_receive_stream_unittest.cc b/call/rtx_receive_stream_unittest.cc index 90027bbc48..75086fef9c 100644 --- a/call/rtx_receive_stream_unittest.cc +++ b/call/rtx_receive_stream_unittest.cc @@ -22,6 +22,7 @@ namespace webrtc { namespace { using ::testing::_; +using ::testing::Property; using ::testing::StrictMock; constexpr int kMediaPayloadType = 100; @@ -188,6 +189,17 @@ TEST(RtxReceiveStreamTest, CopiesRtpHeaderExtensions) { rtx_sink.OnRtpPacket(rtx_packet); } +TEST(RtxReceiveStreamTest, PropagatesArrivalTime) { + StrictMock media_sink; + RtxReceiveStream rtx_sink(&media_sink, PayloadTypeMapping(), kMediaSSRC); + RtpPacketReceived rtx_packet(nullptr); + EXPECT_TRUE(rtx_packet.Parse(rtc::ArrayView(kRtxPacket))); + rtx_packet.set_arrival_time_ms(123); + EXPECT_CALL(media_sink, + OnRtpPacket(Property(&RtpPacketReceived::arrival_time_ms, 123))); + rtx_sink.OnRtpPacket(rtx_packet); +} + TEST(RtxReceiveStreamTest, SupportsLargePacket) { StrictMock media_sink; RtxReceiveStream rtx_sink(&media_sink, PayloadTypeMapping(), kMediaSSRC);