diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc index d693a47263..6864a6bb6f 100644 --- a/audio/audio_receive_stream.cc +++ b/audio/audio_receive_stream.cc @@ -255,25 +255,35 @@ webrtc::AudioReceiveStreamInterface::Stats AudioReceiveStreamImpl::GetStats( webrtc::AudioReceiveStreamInterface::Stats stats; stats.remote_ssrc = remote_ssrc(); - webrtc::CallReceiveStatistics call_stats = - channel_receive_->GetRTCPStatistics(); auto receive_codec = channel_receive_->GetReceiveCodec(); if (receive_codec) { stats.codec_name = receive_codec->second.name; stats.codec_payload_type = receive_codec->first; - int clockrate_khz = receive_codec->second.clockrate_hz / 1000; - if (clockrate_khz > 0) { - stats.jitter_ms = call_stats.jitterSamples / clockrate_khz; - } } + + webrtc::CallReceiveStatistics call_stats = + channel_receive_->GetRTCPStatistics(); stats.payload_bytes_received = call_stats.payload_bytes_received; stats.header_and_padding_bytes_received = call_stats.header_and_padding_bytes_received; - stats.packets_received = call_stats.packetsReceived; - stats.packets_lost = call_stats.cumulativeLost; + stats.packets_received = call_stats.packets_received; + stats.packets_lost = call_stats.packets_lost; + stats.jitter_ms = call_stats.jitter_ms; stats.nacks_sent = call_stats.nacks_sent; - stats.capture_start_ntp_time_ms = call_stats.capture_start_ntp_time_ms_; + stats.capture_start_ntp_time_ms = call_stats.capture_start_ntp_time_ms; stats.last_packet_received = call_stats.last_packet_received; + stats.last_sender_report_timestamp = call_stats.last_sender_report_timestamp; + stats.last_sender_report_utc_timestamp = + call_stats.last_sender_report_utc_timestamp; + stats.last_sender_report_remote_utc_timestamp = + call_stats.last_sender_report_remote_utc_timestamp; + stats.sender_reports_packets_sent = call_stats.sender_reports_packets_sent; + stats.sender_reports_bytes_sent = call_stats.sender_reports_bytes_sent; + stats.sender_reports_reports_count = call_stats.sender_reports_reports_count; + stats.round_trip_time = call_stats.round_trip_time; + stats.round_trip_time_measurements = call_stats.round_trip_time_measurements; + stats.total_round_trip_time = call_stats.total_round_trip_time; + stats.delay_estimate_ms = channel_receive_->GetDelayEstimate(); stats.audio_level = channel_receive_->GetSpeechOutputLevelFullRange(); stats.total_output_energy = channel_receive_->GetTotalOutputEnergy(); @@ -332,18 +342,6 @@ webrtc::AudioReceiveStreamInterface::Stats AudioReceiveStreamImpl::GetStats( stats.decoding_plc_cng = ds.decoded_plc_cng; stats.decoding_muted_output = ds.decoded_muted_output; - stats.last_sender_report_timestamp = call_stats.last_sender_report_timestamp; - stats.last_sender_report_utc_timestamp = - call_stats.last_sender_report_utc_timestamp; - stats.last_sender_report_remote_utc_timestamp = - call_stats.last_sender_report_remote_utc_timestamp; - stats.sender_reports_packets_sent = call_stats.sender_reports_packets_sent; - stats.sender_reports_bytes_sent = call_stats.sender_reports_bytes_sent; - stats.sender_reports_reports_count = call_stats.sender_reports_reports_count; - stats.round_trip_time = call_stats.round_trip_time; - stats.round_trip_time_measurements = call_stats.round_trip_time_measurements; - stats.total_round_trip_time = call_stats.total_round_trip_time; - return stats; } diff --git a/audio/audio_receive_stream_unittest.cc b/audio/audio_receive_stream_unittest.cc index 0afda40733..032051085d 100644 --- a/audio/audio_receive_stream_unittest.cc +++ b/audio/audio_receive_stream_unittest.cc @@ -250,13 +250,11 @@ TEST(AudioReceiveStreamTest, GetStats) { EXPECT_EQ(kCallStats.payload_bytes_received, stats.payload_bytes_received); EXPECT_EQ(kCallStats.header_and_padding_bytes_received, stats.header_and_padding_bytes_received); - EXPECT_EQ(static_cast(kCallStats.packetsReceived), + EXPECT_EQ(static_cast(kCallStats.packets_received), stats.packets_received); - EXPECT_EQ(kCallStats.cumulativeLost, stats.packets_lost); + EXPECT_EQ(kCallStats.packets_lost, stats.packets_lost); EXPECT_EQ(kReceiveCodec.second.name, stats.codec_name); - EXPECT_EQ( - kCallStats.jitterSamples / (kReceiveCodec.second.clockrate_hz / 1000), - stats.jitter_ms); + EXPECT_EQ(kCallStats.jitter_ms, stats.jitter_ms); EXPECT_EQ(kNetworkStats.currentBufferSize, stats.jitter_buffer_ms); EXPECT_EQ(kNetworkStats.preferredBufferSize, stats.jitter_buffer_preferred_ms); @@ -320,7 +318,7 @@ TEST(AudioReceiveStreamTest, GetStats) { EXPECT_EQ(kAudioDecodeStats.decoded_plc_cng, stats.decoding_plc_cng); EXPECT_EQ(kAudioDecodeStats.decoded_muted_output, stats.decoding_muted_output); - EXPECT_EQ(kCallStats.capture_start_ntp_time_ms_, + EXPECT_EQ(kCallStats.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); EXPECT_EQ(kPlayoutNtpTimestampMs, stats.estimated_playout_ntp_timestamp_ms); recv_stream->UnregisterFromTransport(); diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc index ea4c912d28..43b7d3e4da 100644 --- a/audio/channel_receive.cc +++ b/audio/channel_receive.cc @@ -839,23 +839,17 @@ CallReceiveStatistics ChannelReceive::GetRTCPStatistics() const { rtp_stats = statistician->GetStats(); } - stats.cumulativeLost = rtp_stats.packets_lost; - stats.jitterSamples = rtp_stats.jitter; + stats.packets_lost = rtp_stats.packets_lost; + stats.jitter_ms = rtp_stats.interarrival_jitter.ms(); // Data counters. if (statistician) { stats.payload_bytes_received = rtp_stats.packet_counter.payload_bytes; - stats.header_and_padding_bytes_received = rtp_stats.packet_counter.header_bytes + rtp_stats.packet_counter.padding_bytes; - stats.packetsReceived = rtp_stats.packet_counter.packets; + stats.packets_received = rtp_stats.packet_counter.packets; stats.last_packet_received = rtp_stats.last_packet_received; - } else { - stats.payload_bytes_received = 0; - stats.header_and_padding_bytes_received = 0; - stats.packetsReceived = 0; - stats.last_packet_received = std::nullopt; } { @@ -866,7 +860,7 @@ CallReceiveStatistics ChannelReceive::GetRTCPStatistics() const { // Timestamps. { MutexLock lock(&ts_stats_lock_); - stats.capture_start_ntp_time_ms_ = capture_start_ntp_time_ms_; + stats.capture_start_ntp_time_ms = capture_start_ntp_time_ms_; } std::optional rtcp_sr_stats = diff --git a/audio/channel_receive.h b/audio/channel_receive.h index fbc7f1eea7..cb1953587c 100644 --- a/audio/channel_receive.h +++ b/audio/channel_receive.h @@ -50,15 +50,15 @@ class RtpPacketReceived; class RtpRtcp; struct CallReceiveStatistics { - int cumulativeLost; - unsigned int jitterSamples; + int packets_lost = 0; + uint32_t jitter_ms = 0; int64_t payload_bytes_received = 0; int64_t header_and_padding_bytes_received = 0; - int packetsReceived; + int packets_received = 0; uint32_t nacks_sent = 0; // The capture NTP time (in local timebase) of the first played out audio // frame. - int64_t capture_start_ntp_time_ms_; + int64_t capture_start_ntp_time_ms = 0; // The timestamp at which the last packet was received, i.e. the time of the // local clock when it was received - not the RTP timestamp of that packet. // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-lastpacketreceivedtimestamp @@ -77,7 +77,7 @@ struct CallReceiveStatistics { uint64_t sender_reports_reports_count = 0; std::optional round_trip_time; TimeDelta total_round_trip_time = TimeDelta::Zero(); - int round_trip_time_measurements; + int round_trip_time_measurements = 0; }; namespace voe { diff --git a/audio/channel_receive_unittest.cc b/audio/channel_receive_unittest.cc index 1c04fc98c9..289637c4e0 100644 --- a/audio/channel_receive_unittest.cc +++ b/audio/channel_receive_unittest.cc @@ -151,7 +151,7 @@ class ChannelReceiveTest : public Test { channel.OnRtpPacket(CreateRtpPacket()); channel.GetAudioFrameWithInfo(kSampleRateHz, &audio_frame); CallReceiveStatistics stats = channel.GetRTCPStatistics(); - return stats.capture_start_ntp_time_ms_; + return stats.capture_start_ntp_time_ms; } protected: