In RtcpTrasnceiver notify RtpStreamRtcpHandler on related report blocks

Bug: webrtc:8239
Change-Id: Ib914775020b5d889b68d1fe178a9fff6acbaeb8f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/257283
Reviewed-by: Emil Lundmark <lndmrk@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36398}
This commit is contained in:
Danil Chapovalov
2022-03-31 14:43:56 +02:00
committed by WebRTC LUCI CQ
parent 128addb1a2
commit 3455481554
4 changed files with 73 additions and 0 deletions

View File

@ -89,6 +89,10 @@ class MockRtpStreamRtcpHandler : public RtpStreamRtcpHandler {
(override));
MOCK_METHOD(void, OnFir, (uint32_t), (override));
MOCK_METHOD(void, OnPli, (uint32_t), (override));
MOCK_METHOD(void,
OnReportBlock,
(uint32_t, const rtcp::ReportBlock&),
(override));
private:
int num_calls_ = 0;
@ -1539,6 +1543,54 @@ TEST(RtcpTransceiverImplTest,
rtcp_transceiver.ReceivePacket(packet.Build(), receive_time);
}
TEST(RtcpTransceiverImplTest,
CallbackOnReportBlocksFromSenderAndReceiverReports) {
static constexpr uint32_t kRemoteSsrc = 5678;
// Has registered sender, report block attached to sender report.
static constexpr uint32_t kMediaSsrc1 = 1234;
// No registered sender, report block attached to receiver report.
// Such report block shouldn't prevent handling following report block.
static constexpr uint32_t kMediaSsrc2 = 1235;
// Has registered sender, no report block attached.
static constexpr uint32_t kMediaSsrc3 = 1236;
// Has registered sender, report block attached to receiver report.
static constexpr uint32_t kMediaSsrc4 = 1237;
MockNetworkLinkRtcpObserver link_observer;
RtcpTransceiverConfig config = DefaultTestConfig();
Timestamp receive_time = Timestamp::Seconds(5678);
RtcpTransceiverImpl rtcp_transceiver(config);
MockRtpStreamRtcpHandler local_stream1;
MockRtpStreamRtcpHandler local_stream3;
MockRtpStreamRtcpHandler local_stream4;
EXPECT_CALL(local_stream1, OnReportBlock(kRemoteSsrc, _));
EXPECT_CALL(local_stream3, OnReportBlock).Times(0);
EXPECT_CALL(local_stream4, OnReportBlock(kRemoteSsrc, _));
ASSERT_TRUE(rtcp_transceiver.AddMediaSender(kMediaSsrc1, &local_stream1));
ASSERT_TRUE(rtcp_transceiver.AddMediaSender(kMediaSsrc3, &local_stream3));
ASSERT_TRUE(rtcp_transceiver.AddMediaSender(kMediaSsrc4, &local_stream4));
// Assemble compound packet with multiple RTCP packets in it.
rtcp::CompoundPacket packet;
auto sr = std::make_unique<rtcp::SenderReport>();
sr->SetSenderSsrc(kRemoteSsrc);
std::vector<ReportBlock> rb(1);
rb[0].SetMediaSsrc(kMediaSsrc1);
sr->SetReportBlocks(std::move(rb));
packet.Append(std::move(sr));
auto rr = std::make_unique<rtcp::ReceiverReport>();
rr->SetSenderSsrc(kRemoteSsrc);
rb = std::vector<ReportBlock>(2);
rb[0].SetMediaSsrc(kMediaSsrc2);
rb[1].SetMediaSsrc(kMediaSsrc4);
rr->SetReportBlocks(std::move(rb));
packet.Append(std::move(rr));
rtcp_transceiver.ReceivePacket(packet.Build(), receive_time);
}
TEST(RtcpTransceiverImplTest, FailsToRegisterTwoSendersWithTheSameSsrc) {
RtcpTransceiverImpl rtcp_transceiver(DefaultTestConfig());
MockRtpStreamRtcpHandler sender1;