Add RequestKeyFrame with Pli to RtcpTransceiver
Add support for reduced size mode. Bug: webrtc:8239 Change-Id: I1d646f0d7848af6632c9204ce5b96ae24cfc0ad3 Reviewed-on: https://webrtc-review.googlesource.com/23681 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20812}
This commit is contained in:

committed by
Commit Bot

parent
de939432dc
commit
a7e418cd5f
@ -447,4 +447,69 @@ TEST(RtcpTransceiverImplTest,
|
||||
EXPECT_EQ(CompactNtpRttToMs(report_blocks[1].delay_since_last_sr()), 100);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, RequestKeyFrameWithPictureLossIndication) {
|
||||
const uint32_t kSenderSsrc = 1234;
|
||||
const uint32_t kRemoteSsrcs[] = {4321, 5321};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.RequestKeyFrame(kRemoteSsrcs);
|
||||
|
||||
// Expect a pli packet per ssrc in the sent single compound packet.
|
||||
EXPECT_EQ(rtcp_parser.pli()->num_packets(), 2);
|
||||
EXPECT_EQ(rtcp_parser.pli()->sender_ssrc(), kSenderSsrc);
|
||||
// test::RtcpPacketParser overwrites first pli packet with second one.
|
||||
EXPECT_EQ(rtcp_parser.pli()->media_ssrc(), kRemoteSsrcs[1]);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesCompoundPacket) {
|
||||
const uint32_t kRemoteSsrcs[] = {4321};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
// Turn periodic off to ensure sent rtcp packet is explicitly requested.
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
|
||||
config.rtcp_mode = webrtc::RtcpMode::kCompound;
|
||||
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.RequestKeyFrame(kRemoteSsrcs);
|
||||
|
||||
// Test sent packet is compound by expecting presense of receiver report.
|
||||
EXPECT_EQ(rtcp_parser.receiver_report()->num_packets(), 1);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, KeyFrameRequestCreatesReducedSizePacket) {
|
||||
const uint32_t kRemoteSsrcs[] = {4321};
|
||||
MockTransport outgoing_transport;
|
||||
RtcpTransceiverConfig config;
|
||||
// Turn periodic off to ensure sent rtcp packet is explicitly requested.
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
|
||||
config.rtcp_mode = webrtc::RtcpMode::kReducedSize;
|
||||
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
// Expect some rtcp packet is triggered by the RequestKeyFrame.
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
rtcp_transceiver.RequestKeyFrame(kRemoteSsrcs);
|
||||
|
||||
// Test sent packet is reduced size by expecting absense of receiver report.
|
||||
EXPECT_EQ(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
Reference in New Issue
Block a user