mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Expose relative packet arrival delay metric in stats API.
The metric is non-standard and documented in: https://github.com/henbos/webrtc-provisional-stats/pull/14 Bug: webrtc:10333 Change-Id: Ie5b4bbad5b1e2c9104742931529bab8f48f51f8c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125861 Reviewed-by: Minyue Li <minyue@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26999}
This commit is contained in:
parent
67f862ea96
commit
232b3fda92
11 changed files with 24 additions and 0 deletions
|
@ -314,6 +314,7 @@ class RTC_EXPORT RTCMediaStreamTrackStats final : public RTCStats {
|
|||
// TODO(kuddai): Add description to standard. crbug.com/webrtc/10042
|
||||
RTCNonStandardStatsMember<uint64_t> jitter_buffer_flushes;
|
||||
RTCNonStandardStatsMember<uint64_t> delayed_packet_outage_samples;
|
||||
RTCNonStandardStatsMember<double> relative_packet_arrival_delay;
|
||||
// Non-standard video-only members.
|
||||
// https://henbos.github.io/webrtc-provisional-stats/#RTCVideoReceiverStats-dict*
|
||||
RTCNonStandardStatsMember<uint32_t> freeze_count;
|
||||
|
|
|
@ -221,6 +221,9 @@ webrtc::AudioReceiveStream::Stats AudioReceiveStream::GetStats() const {
|
|||
stats.preemptive_expand_rate = Q14ToFloat(ns.currentPreemptiveRate);
|
||||
stats.jitter_buffer_flushes = ns.packetBufferFlushes;
|
||||
stats.delayed_packet_outage_samples = ns.delayedPacketOutageSamples;
|
||||
stats.relative_packet_arrival_delay_seconds =
|
||||
static_cast<double>(ns.relativePacketArrivalDelayMs) /
|
||||
static_cast<double>(rtc::kNumMillisecsPerSec);
|
||||
|
||||
auto ds = channel_receive_->GetDecodingCallStatistics();
|
||||
stats.decoding_calls_to_silence_generator = ds.calls_to_silence_generator;
|
||||
|
|
|
@ -74,6 +74,7 @@ class AudioReceiveStream {
|
|||
int32_t decoding_muted_output = 0;
|
||||
int64_t capture_start_ntp_time_ms = 0;
|
||||
uint64_t jitter_buffer_flushes = 0;
|
||||
double relative_packet_arrival_delay_seconds = 0.0;
|
||||
};
|
||||
|
||||
struct Config {
|
||||
|
|
|
@ -487,6 +487,8 @@ struct VoiceReceiverInfo : public MediaReceiverInfo {
|
|||
uint64_t jitter_buffer_flushes = 0;
|
||||
// Number of samples expanded due to delayed packets.
|
||||
uint64_t delayed_packet_outage_samples = 0;
|
||||
// Arrival delay of received audio packets.
|
||||
double relative_packet_arrival_delay_seconds = 0.0;
|
||||
};
|
||||
|
||||
struct VideoSenderInfo : public MediaSenderInfo {
|
||||
|
|
|
@ -2278,6 +2278,8 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
|
|||
rinfo.decoding_muted_output = stats.decoding_muted_output;
|
||||
rinfo.capture_start_ntp_time_ms = stats.capture_start_ntp_time_ms;
|
||||
rinfo.jitter_buffer_flushes = stats.jitter_buffer_flushes;
|
||||
rinfo.relative_packet_arrival_delay_seconds =
|
||||
stats.relative_packet_arrival_delay_seconds;
|
||||
|
||||
info->receivers.push_back(rinfo);
|
||||
}
|
||||
|
|
|
@ -257,6 +257,8 @@ void AcmReceiver::GetNetworkStatistics(NetworkStatistics* acm_stat) {
|
|||
neteq_lifetime_stat.jitter_buffer_emitted_count;
|
||||
acm_stat->delayedPacketOutageSamples =
|
||||
neteq_lifetime_stat.delayed_packet_outage_samples;
|
||||
acm_stat->relativePacketArrivalDelayMs =
|
||||
neteq_lifetime_stat.relative_packet_arrival_delay_ms;
|
||||
|
||||
NetEqOperationsAndState neteq_operations_and_state =
|
||||
neteq_->GetOperationsAndState();
|
||||
|
|
|
@ -122,6 +122,8 @@ struct NetworkStatistics {
|
|||
uint64_t packetBufferFlushes;
|
||||
// number of samples expanded due to delayed packets
|
||||
uint64_t delayedPacketOutageSamples;
|
||||
// arrival delay of incoming packets
|
||||
uint64_t relativePacketArrivalDelayMs;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
|
|
@ -460,6 +460,8 @@ ProduceMediaStreamTrackStatsFromVoiceReceiverInfo(
|
|||
voice_receiver_info.jitter_buffer_flushes;
|
||||
audio_track_stats->delayed_packet_outage_samples =
|
||||
voice_receiver_info.delayed_packet_outage_samples;
|
||||
audio_track_stats->relative_packet_arrival_delay =
|
||||
voice_receiver_info.relative_packet_arrival_delay_seconds;
|
||||
return audio_track_stats;
|
||||
}
|
||||
|
||||
|
|
|
@ -1428,6 +1428,7 @@ TEST_F(RTCStatsCollectorTest,
|
|||
voice_receiver_info.jitter_buffer_emitted_count = 13;
|
||||
voice_receiver_info.jitter_buffer_flushes = 7;
|
||||
voice_receiver_info.delayed_packet_outage_samples = 15;
|
||||
voice_receiver_info.relative_packet_arrival_delay_seconds = 16;
|
||||
|
||||
stats_->CreateMockRtpSendersReceiversAndChannels(
|
||||
{}, {std::make_pair(remote_audio_track.get(), voice_receiver_info)}, {},
|
||||
|
@ -1464,6 +1465,7 @@ TEST_F(RTCStatsCollectorTest,
|
|||
expected_remote_audio_track.jitter_buffer_emitted_count = 13;
|
||||
expected_remote_audio_track.jitter_buffer_flushes = 7;
|
||||
expected_remote_audio_track.delayed_packet_outage_samples = 15;
|
||||
expected_remote_audio_track.relative_packet_arrival_delay = 16;
|
||||
ASSERT_TRUE(report->Get(expected_remote_audio_track.id()));
|
||||
EXPECT_EQ(expected_remote_audio_track,
|
||||
report->Get(expected_remote_audio_track.id())
|
||||
|
|
|
@ -652,6 +652,8 @@ class RTCStatsReportVerifier {
|
|||
media_stream_track.jitter_buffer_flushes);
|
||||
verifier.TestMemberIsNonNegative<uint64_t>(
|
||||
media_stream_track.delayed_packet_outage_samples);
|
||||
verifier.TestMemberIsNonNegative<double>(
|
||||
media_stream_track.relative_packet_arrival_delay);
|
||||
} else {
|
||||
verifier.TestMemberIsUndefined(media_stream_track.jitter_buffer_delay);
|
||||
verifier.TestMemberIsUndefined(
|
||||
|
@ -662,6 +664,8 @@ class RTCStatsReportVerifier {
|
|||
verifier.TestMemberIsUndefined(media_stream_track.jitter_buffer_flushes);
|
||||
verifier.TestMemberIsUndefined(
|
||||
media_stream_track.delayed_packet_outage_samples);
|
||||
verifier.TestMemberIsUndefined(
|
||||
media_stream_track.relative_packet_arrival_delay);
|
||||
}
|
||||
return verifier.ExpectAllMembersSuccessfullyTested();
|
||||
}
|
||||
|
|
|
@ -382,6 +382,7 @@ WEBRTC_RTCSTATS_IMPL(RTCMediaStreamTrackStats, RTCStats, "track",
|
|||
&concealment_events,
|
||||
&jitter_buffer_flushes,
|
||||
&delayed_packet_outage_samples,
|
||||
&relative_packet_arrival_delay,
|
||||
&freeze_count,
|
||||
&pause_count,
|
||||
&total_freezes_duration,
|
||||
|
@ -427,6 +428,7 @@ RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(std::string&& id,
|
|||
concealment_events("concealmentEvents"),
|
||||
jitter_buffer_flushes("jitterBufferFlushes"),
|
||||
delayed_packet_outage_samples("delayedPacketOutageSamples"),
|
||||
relative_packet_arrival_delay("relativePacketArrivalDelay"),
|
||||
freeze_count("freezeCount"),
|
||||
pause_count("pauseCount"),
|
||||
total_freezes_duration("totalFreezesDuration"),
|
||||
|
@ -468,6 +470,7 @@ RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
|
|||
concealment_events(other.concealment_events),
|
||||
jitter_buffer_flushes(other.jitter_buffer_flushes),
|
||||
delayed_packet_outage_samples(other.delayed_packet_outage_samples),
|
||||
relative_packet_arrival_delay(other.relative_packet_arrival_delay),
|
||||
freeze_count(other.freeze_count),
|
||||
pause_count(other.pause_count),
|
||||
total_freezes_duration(other.total_freezes_duration),
|
||||
|
|
Loading…
Reference in a new issue