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:

committed by
WebRTC LUCI CQ

parent
128addb1a2
commit
3455481554
@ -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;
|
||||
|
Reference in New Issue
Block a user