stats: ensure rtx ssrc is associated with primary ssrc
BUG=webrtc:15529 Change-Id: I3623eede7fc7890677516d78f3ef7a89a287eb8a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/322221 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Philipp Hancke <phancke@microsoft.com> Reviewed-by: Henrik Boström <hbos@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40873}
This commit is contained in:
parent
3af8bfb34a
commit
13b5eb7c47
@ -924,6 +924,47 @@ TEST_F(PeerConnectionEncodingsIntegrationTest, VP9_TargetBitrate_StandardL1T3) {
|
|||||||
EXPECT_LE(target_bitrate.kbps(), kVp9ExpectedMaxBitrateForL1T3.kbps());
|
EXPECT_LE(target_bitrate.kbps(), kVp9ExpectedMaxBitrateForL1T3.kbps());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(PeerConnectionEncodingsIntegrationTest,
|
||||||
|
SimulcastProducesUniqueSsrcAndRtxSsrcs) {
|
||||||
|
rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
|
||||||
|
rtc::scoped_refptr<PeerConnectionTestWrapper> remote_pc_wrapper = CreatePc();
|
||||||
|
ExchangeIceCandidates(local_pc_wrapper, remote_pc_wrapper);
|
||||||
|
|
||||||
|
std::vector<cricket::SimulcastLayer> layers =
|
||||||
|
CreateLayers({"f", "h", "q"}, /*active=*/true);
|
||||||
|
rtc::scoped_refptr<RtpTransceiverInterface> transceiver =
|
||||||
|
AddTransceiverWithSimulcastLayers(local_pc_wrapper, remote_pc_wrapper,
|
||||||
|
layers);
|
||||||
|
std::vector<RtpCodecCapability> codecs =
|
||||||
|
GetCapabilitiesAndRestrictToCodec(local_pc_wrapper, "VP8");
|
||||||
|
transceiver->SetCodecPreferences(codecs);
|
||||||
|
|
||||||
|
NegotiateWithSimulcastTweaks(local_pc_wrapper, remote_pc_wrapper);
|
||||||
|
local_pc_wrapper->WaitForConnection();
|
||||||
|
remote_pc_wrapper->WaitForConnection();
|
||||||
|
|
||||||
|
// Wait until media is flowing on all three layers.
|
||||||
|
// Ramp up time is needed before all three layers are sending.
|
||||||
|
ASSERT_TRUE_WAIT(HasOutboundRtpBytesSent(local_pc_wrapper, 3u),
|
||||||
|
kLongTimeoutForRampingUp.ms());
|
||||||
|
// Verify SSRCs and RTX SSRCs.
|
||||||
|
rtc::scoped_refptr<const RTCStatsReport> report = GetStats(local_pc_wrapper);
|
||||||
|
std::vector<const RTCOutboundRtpStreamStats*> outbound_rtps =
|
||||||
|
report->GetStatsOfType<RTCOutboundRtpStreamStats>();
|
||||||
|
ASSERT_THAT(outbound_rtps, SizeIs(3u));
|
||||||
|
|
||||||
|
std::set<uint32_t> ssrcs;
|
||||||
|
std::set<uint32_t> rtx_ssrcs;
|
||||||
|
for (const auto& outbound_rtp : outbound_rtps) {
|
||||||
|
ASSERT_TRUE(outbound_rtp->ssrc.has_value());
|
||||||
|
ASSERT_TRUE(outbound_rtp->rtx_ssrc.has_value());
|
||||||
|
ssrcs.insert(*outbound_rtp->ssrc);
|
||||||
|
rtx_ssrcs.insert(*outbound_rtp->rtx_ssrc);
|
||||||
|
}
|
||||||
|
EXPECT_EQ(ssrcs.size(), 3u);
|
||||||
|
EXPECT_EQ(rtx_ssrcs.size(), 3u);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PeerConnectionEncodingsIntegrationTest,
|
TEST_F(PeerConnectionEncodingsIntegrationTest,
|
||||||
EncodingParameterCodecIsEmptyWhenCreatedAudio) {
|
EncodingParameterCodecIsEmptyWhenCreatedAudio) {
|
||||||
rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
|
rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
|
||||||
|
|||||||
@ -839,7 +839,8 @@ CreateOutboundRTPStreamStatsFromVideoSenderInfo(
|
|||||||
}
|
}
|
||||||
for (const auto& ssrc_group : video_sender_info.ssrc_groups) {
|
for (const auto& ssrc_group : video_sender_info.ssrc_groups) {
|
||||||
if (ssrc_group.semantics == cricket::kFidSsrcGroupSemantics &&
|
if (ssrc_group.semantics == cricket::kFidSsrcGroupSemantics &&
|
||||||
ssrc_group.ssrcs.size() == 2) {
|
ssrc_group.ssrcs.size() == 2 &&
|
||||||
|
video_sender_info.ssrc() == ssrc_group.ssrcs[0]) {
|
||||||
outbound_video->rtx_ssrc = ssrc_group.ssrcs[1];
|
outbound_video->rtx_ssrc = ssrc_group.ssrcs[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user