stats: add transportId to codec stats
BUG=webrtc:12181 Change-Id: Ib8e38f19ef2ddcb98455356087781f146af8c6b5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/193280 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Henrik Boström <hbos@webrtc.org> Commit-Queue: Henrik Boström <hbos@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32618}
This commit is contained in:
parent
a48515736d
commit
95157a054b
@ -115,6 +115,7 @@ class RTC_EXPORT RTCCodecStats final : public RTCStats {
|
|||||||
RTCCodecStats(const RTCCodecStats& other);
|
RTCCodecStats(const RTCCodecStats& other);
|
||||||
~RTCCodecStats() override;
|
~RTCCodecStats() override;
|
||||||
|
|
||||||
|
RTCStatsMember<std::string> transport_id;
|
||||||
RTCStatsMember<uint32_t> payload_type;
|
RTCStatsMember<uint32_t> payload_type;
|
||||||
RTCStatsMember<std::string> mime_type;
|
RTCStatsMember<std::string> mime_type;
|
||||||
RTCStatsMember<uint32_t> clock_rate;
|
RTCStatsMember<uint32_t> clock_rate;
|
||||||
|
|||||||
@ -228,6 +228,7 @@ double DoubleAudioLevelFromIntAudioLevel(int audio_level) {
|
|||||||
std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
|
std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
|
||||||
uint64_t timestamp_us,
|
uint64_t timestamp_us,
|
||||||
const std::string& mid,
|
const std::string& mid,
|
||||||
|
const std::string& transport_id,
|
||||||
bool inbound,
|
bool inbound,
|
||||||
const RtpCodecParameters& codec_params) {
|
const RtpCodecParameters& codec_params) {
|
||||||
RTC_DCHECK_GE(codec_params.payload_type, 0);
|
RTC_DCHECK_GE(codec_params.payload_type, 0);
|
||||||
@ -250,6 +251,7 @@ std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
|
|||||||
if (WriteFmtpParameters(codec_params.parameters, &fmtp)) {
|
if (WriteFmtpParameters(codec_params.parameters, &fmtp)) {
|
||||||
codec_stats->sdp_fmtp_line = fmtp.Release();
|
codec_stats->sdp_fmtp_line = fmtp.Release();
|
||||||
}
|
}
|
||||||
|
codec_stats->transport_id = transport_id;
|
||||||
return codec_stats;
|
return codec_stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1282,6 +1284,9 @@ void RTCStatsCollector::ProduceCodecStats_n(
|
|||||||
if (!stats.mid) {
|
if (!stats.mid) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
std::string transport_id = RTCTransportStatsIDFromTransportChannel(
|
||||||
|
*stats.transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP);
|
||||||
|
|
||||||
const cricket::VoiceMediaInfo* voice_media_info =
|
const cricket::VoiceMediaInfo* voice_media_info =
|
||||||
stats.track_media_info_map->voice_media_info();
|
stats.track_media_info_map->voice_media_info();
|
||||||
const cricket::VideoMediaInfo* video_media_info =
|
const cricket::VideoMediaInfo* video_media_info =
|
||||||
@ -1291,12 +1296,12 @@ void RTCStatsCollector::ProduceCodecStats_n(
|
|||||||
// Inbound
|
// Inbound
|
||||||
for (const auto& pair : voice_media_info->receive_codecs) {
|
for (const auto& pair : voice_media_info->receive_codecs) {
|
||||||
report->AddStats(CodecStatsFromRtpCodecParameters(
|
report->AddStats(CodecStatsFromRtpCodecParameters(
|
||||||
timestamp_us, *stats.mid, true, pair.second));
|
timestamp_us, *stats.mid, transport_id, true, pair.second));
|
||||||
}
|
}
|
||||||
// Outbound
|
// Outbound
|
||||||
for (const auto& pair : voice_media_info->send_codecs) {
|
for (const auto& pair : voice_media_info->send_codecs) {
|
||||||
report->AddStats(CodecStatsFromRtpCodecParameters(
|
report->AddStats(CodecStatsFromRtpCodecParameters(
|
||||||
timestamp_us, *stats.mid, false, pair.second));
|
timestamp_us, *stats.mid, transport_id, false, pair.second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Video
|
// Video
|
||||||
@ -1304,12 +1309,12 @@ void RTCStatsCollector::ProduceCodecStats_n(
|
|||||||
// Inbound
|
// Inbound
|
||||||
for (const auto& pair : video_media_info->receive_codecs) {
|
for (const auto& pair : video_media_info->receive_codecs) {
|
||||||
report->AddStats(CodecStatsFromRtpCodecParameters(
|
report->AddStats(CodecStatsFromRtpCodecParameters(
|
||||||
timestamp_us, *stats.mid, true, pair.second));
|
timestamp_us, *stats.mid, transport_id, true, pair.second));
|
||||||
}
|
}
|
||||||
// Outbound
|
// Outbound
|
||||||
for (const auto& pair : video_media_info->send_codecs) {
|
for (const auto& pair : video_media_info->send_codecs) {
|
||||||
report->AddStats(CodecStatsFromRtpCodecParameters(
|
report->AddStats(CodecStatsFromRtpCodecParameters(
|
||||||
timestamp_us, *stats.mid, false, pair.second));
|
timestamp_us, *stats.mid, transport_id, false, pair.second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -874,6 +874,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
|
|||||||
expected_inbound_audio_codec.clock_rate = 1337;
|
expected_inbound_audio_codec.clock_rate = 1337;
|
||||||
expected_inbound_audio_codec.channels = 1;
|
expected_inbound_audio_codec.channels = 1;
|
||||||
expected_inbound_audio_codec.sdp_fmtp_line = "minptime=10;useinbandfec=1";
|
expected_inbound_audio_codec.sdp_fmtp_line = "minptime=10;useinbandfec=1";
|
||||||
|
expected_inbound_audio_codec.transport_id = "RTCTransport_TransportName_1";
|
||||||
|
|
||||||
RTCCodecStats expected_outbound_audio_codec("RTCCodec_AudioMid_Outbound_2",
|
RTCCodecStats expected_outbound_audio_codec("RTCCodec_AudioMid_Outbound_2",
|
||||||
report->timestamp_us());
|
report->timestamp_us());
|
||||||
@ -881,6 +882,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
|
|||||||
expected_outbound_audio_codec.mime_type = "audio/isac";
|
expected_outbound_audio_codec.mime_type = "audio/isac";
|
||||||
expected_outbound_audio_codec.clock_rate = 1338;
|
expected_outbound_audio_codec.clock_rate = 1338;
|
||||||
expected_outbound_audio_codec.channels = 2;
|
expected_outbound_audio_codec.channels = 2;
|
||||||
|
expected_outbound_audio_codec.transport_id = "RTCTransport_TransportName_1";
|
||||||
|
|
||||||
RTCCodecStats expected_inbound_video_codec("RTCCodec_VideoMid_Inbound_3",
|
RTCCodecStats expected_inbound_video_codec("RTCCodec_VideoMid_Inbound_3",
|
||||||
report->timestamp_us());
|
report->timestamp_us());
|
||||||
@ -889,12 +891,14 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
|
|||||||
expected_inbound_video_codec.clock_rate = 1339;
|
expected_inbound_video_codec.clock_rate = 1339;
|
||||||
expected_inbound_video_codec.sdp_fmtp_line =
|
expected_inbound_video_codec.sdp_fmtp_line =
|
||||||
"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f";
|
"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f";
|
||||||
|
expected_inbound_video_codec.transport_id = "RTCTransport_TransportName_1";
|
||||||
|
|
||||||
RTCCodecStats expected_outbound_video_codec("RTCCodec_VideoMid_Outbound_4",
|
RTCCodecStats expected_outbound_video_codec("RTCCodec_VideoMid_Outbound_4",
|
||||||
report->timestamp_us());
|
report->timestamp_us());
|
||||||
expected_outbound_video_codec.payload_type = 4;
|
expected_outbound_video_codec.payload_type = 4;
|
||||||
expected_outbound_video_codec.mime_type = "video/VP8";
|
expected_outbound_video_codec.mime_type = "video/VP8";
|
||||||
expected_outbound_video_codec.clock_rate = 1340;
|
expected_outbound_video_codec.clock_rate = 1340;
|
||||||
|
expected_outbound_video_codec.transport_id = "RTCTransport_TransportName_1";
|
||||||
|
|
||||||
ASSERT_TRUE(report->Get(expected_inbound_audio_codec.id()));
|
ASSERT_TRUE(report->Get(expected_inbound_audio_codec.id()));
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
|
|||||||
@ -442,6 +442,8 @@ class RTCStatsReportVerifier {
|
|||||||
|
|
||||||
bool VerifyRTCCodecStats(const RTCCodecStats& codec) {
|
bool VerifyRTCCodecStats(const RTCCodecStats& codec) {
|
||||||
RTCStatsVerifier verifier(report_, &codec);
|
RTCStatsVerifier verifier(report_, &codec);
|
||||||
|
verifier.TestMemberIsIDReference(codec.transport_id,
|
||||||
|
RTCTransportStats::kType);
|
||||||
verifier.TestMemberIsDefined(codec.payload_type);
|
verifier.TestMemberIsDefined(codec.payload_type);
|
||||||
verifier.TestMemberIsDefined(codec.mime_type);
|
verifier.TestMemberIsDefined(codec.mime_type);
|
||||||
verifier.TestMemberIsPositive<uint32_t>(codec.clock_rate);
|
verifier.TestMemberIsPositive<uint32_t>(codec.clock_rate);
|
||||||
|
|||||||
@ -76,7 +76,8 @@ std::vector<const std::string*> GetStatsReferencedIds(const RTCStats& stats) {
|
|||||||
const auto& certificate = static_cast<const RTCCertificateStats&>(stats);
|
const auto& certificate = static_cast<const RTCCertificateStats&>(stats);
|
||||||
AddIdIfDefined(certificate.issuer_certificate_id, &neighbor_ids);
|
AddIdIfDefined(certificate.issuer_certificate_id, &neighbor_ids);
|
||||||
} else if (type == RTCCodecStats::kType) {
|
} else if (type == RTCCodecStats::kType) {
|
||||||
// RTCCodecStats does not have any neighbor references.
|
const auto& codec = static_cast<const RTCCodecStats&>(stats);
|
||||||
|
AddIdIfDefined(codec.transport_id, &neighbor_ids);
|
||||||
} else if (type == RTCDataChannelStats::kType) {
|
} else if (type == RTCDataChannelStats::kType) {
|
||||||
// RTCDataChannelStats does not have any neighbor references.
|
// RTCDataChannelStats does not have any neighbor references.
|
||||||
} else if (type == RTCIceCandidatePairStats::kType) {
|
} else if (type == RTCIceCandidatePairStats::kType) {
|
||||||
|
|||||||
@ -92,6 +92,7 @@ RTCCertificateStats::~RTCCertificateStats() {}
|
|||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
WEBRTC_RTCSTATS_IMPL(RTCCodecStats, RTCStats, "codec",
|
WEBRTC_RTCSTATS_IMPL(RTCCodecStats, RTCStats, "codec",
|
||||||
|
&transport_id,
|
||||||
&payload_type,
|
&payload_type,
|
||||||
&mime_type,
|
&mime_type,
|
||||||
&clock_rate,
|
&clock_rate,
|
||||||
@ -104,6 +105,7 @@ RTCCodecStats::RTCCodecStats(const std::string& id, int64_t timestamp_us)
|
|||||||
|
|
||||||
RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us)
|
RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us)
|
||||||
: RTCStats(std::move(id), timestamp_us),
|
: RTCStats(std::move(id), timestamp_us),
|
||||||
|
transport_id("transportId"),
|
||||||
payload_type("payloadType"),
|
payload_type("payloadType"),
|
||||||
mime_type("mimeType"),
|
mime_type("mimeType"),
|
||||||
clock_rate("clockRate"),
|
clock_rate("clockRate"),
|
||||||
@ -112,6 +114,7 @@ RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us)
|
|||||||
|
|
||||||
RTCCodecStats::RTCCodecStats(const RTCCodecStats& other)
|
RTCCodecStats::RTCCodecStats(const RTCCodecStats& other)
|
||||||
: RTCStats(other.id(), other.timestamp_us()),
|
: RTCStats(other.id(), other.timestamp_us()),
|
||||||
|
transport_id(other.transport_id),
|
||||||
payload_type(other.payload_type),
|
payload_type(other.payload_type),
|
||||||
mime_type(other.mime_type),
|
mime_type(other.mime_type),
|
||||||
clock_rate(other.clock_rate),
|
clock_rate(other.clock_rate),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user