stats: implement fecSsrc on inbound-rtp
which is present if a fec mechanism like FlexFEC is negotiated spec change: https://github.com/w3c/webrtc-stats/pull/765 BUG=webrtc:15250 Change-Id: I7d71d49fab0153d734f22831e6684d2acfc647fb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/314981 Reviewed-by: Henrik Boström <hbos@webrtc.org> Commit-Queue: Philipp Hancke <phancke@microsoft.com> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40514}
This commit is contained in:
parent
b17806a4cf
commit
e2e04513e7
@ -250,6 +250,8 @@ class RTC_EXPORT RTCInboundRtpStreamStats final
|
||||
RTCStatsMember<uint64_t> fec_packets_received;
|
||||
RTCStatsMember<uint64_t> fec_bytes_received;
|
||||
RTCStatsMember<uint64_t> fec_packets_discarded;
|
||||
// Inbound FEC SSRC. Only present if a mechanism like FlexFEC is negotiated.
|
||||
RTCStatsMember<uint32_t> fec_ssrc;
|
||||
RTCStatsMember<uint64_t> bytes_received;
|
||||
RTCStatsMember<uint64_t> header_bytes_received;
|
||||
// Inbound RTX stats. Only defined when RTX is used and it is therefore
|
||||
|
||||
@ -681,6 +681,11 @@ CreateInboundRTPStreamStatsFromVideoReceiverInfo(
|
||||
if (ssrc_group.semantics == cricket::kFidSsrcGroupSemantics &&
|
||||
ssrc_group.ssrcs.size() == 2) {
|
||||
inbound_video->rtx_ssrc = ssrc_group.ssrcs[1];
|
||||
} else if (ssrc_group.semantics == cricket::kFecFrSsrcGroupSemantics &&
|
||||
ssrc_group.ssrcs.size() == 2) {
|
||||
// TODO(bugs.webrtc.org/15002): the ssrc-group might be >= 2 with
|
||||
// multistream support.
|
||||
inbound_video->fec_ssrc = ssrc_group.ssrcs[1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2370,6 +2370,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRtpStreamStats_Video) {
|
||||
video_media_info.receivers[0].fec_bytes_received = 54;
|
||||
video_media_info.receivers[0].ssrc_groups.push_back(
|
||||
{cricket::kFidSsrcGroupSemantics, {1, 4404}});
|
||||
video_media_info.receivers[0].ssrc_groups.push_back(
|
||||
{cricket::kFecFrSsrcGroupSemantics, {1, 5505}});
|
||||
|
||||
// Note: these two values intentionally differ,
|
||||
// only the decoded one should show up.
|
||||
@ -2437,6 +2439,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRtpStreamStats_Video) {
|
||||
expected_video.fec_packets_received = 32;
|
||||
expected_video.fec_bytes_received = 54;
|
||||
expected_video.rtx_ssrc = 4404;
|
||||
expected_video.fec_ssrc = 5505;
|
||||
|
||||
ASSERT_TRUE(report->Get(expected_video.id()));
|
||||
EXPECT_EQ(
|
||||
|
||||
@ -617,6 +617,7 @@ class RTCStatsReportVerifier {
|
||||
verifier.TestMemberIsUndefined(inbound_stream.fec_bytes_received);
|
||||
verifier.TestMemberIsUndefined(inbound_stream.fec_packets_received);
|
||||
verifier.TestMemberIsUndefined(inbound_stream.fec_packets_discarded);
|
||||
verifier.TestMemberIsUndefined(inbound_stream.fec_ssrc);
|
||||
}
|
||||
verifier.TestMemberIsNonNegative<uint64_t>(inbound_stream.bytes_received);
|
||||
verifier.TestMemberIsNonNegative<uint64_t>(
|
||||
@ -700,6 +701,7 @@ class RTCStatsReportVerifier {
|
||||
verifier.TestMemberIsUndefined(
|
||||
inbound_stream.retransmitted_bytes_received);
|
||||
verifier.TestMemberIsUndefined(inbound_stream.rtx_ssrc);
|
||||
verifier.TestMemberIsUndefined(inbound_stream.fec_ssrc);
|
||||
}
|
||||
|
||||
// Test runtime too short to get an estimate (at least two RTCP sender
|
||||
|
||||
@ -309,6 +309,7 @@ WEBRTC_RTCSTATS_IMPL(
|
||||
&fec_packets_received,
|
||||
&fec_bytes_received,
|
||||
&fec_packets_discarded,
|
||||
&fec_ssrc,
|
||||
&bytes_received,
|
||||
&header_bytes_received,
|
||||
&retransmitted_packets_received,
|
||||
@ -375,6 +376,7 @@ RTCInboundRtpStreamStats::RTCInboundRtpStreamStats(std::string id,
|
||||
fec_packets_received("fecPacketsReceived"),
|
||||
fec_bytes_received("fecBytesReceived"),
|
||||
fec_packets_discarded("fecPacketsDiscarded"),
|
||||
fec_ssrc("fecSsrc"),
|
||||
bytes_received("bytesReceived"),
|
||||
header_bytes_received("headerBytesReceived"),
|
||||
retransmitted_packets_received("retransmittedPacketsReceived"),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user