diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc index 2bac176aac..c838538b7a 100644 --- a/pc/rtc_stats_collector.cc +++ b/pc/rtc_stats_collector.cc @@ -2124,7 +2124,9 @@ void RTCStatsCollector::PrepareTransceiverStatsInfosAndCallStats_s_w_n() { } } - // Create the TrackMediaInfoMap for each transceiver stats object. + // Create the TrackMediaInfoMap for each transceiver stats object + // and keep track of whether we have at least one audio receiver. + bool has_audio_receiver = false; for (auto& stats : transceiver_stats_infos_) { auto transceiver = stats.transceiver; absl::optional voice_media_info; @@ -2159,10 +2161,14 @@ void RTCStatsCollector::PrepareTransceiverStatsInfosAndCallStats_s_w_n() { stats.track_media_info_map.Initialize(std::move(voice_media_info), std::move(video_media_info), senders, receivers); + if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) { + has_audio_receiver |= !receivers.empty(); + } } call_stats_ = pc_->GetCallStats(); - audio_device_stats_ = pc_->GetAudioDeviceStats(); + audio_device_stats_ = + has_audio_receiver ? pc_->GetAudioDeviceStats() : absl::nullopt; }); for (auto& stats : transceiver_stats_infos_) { diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc index 055be6fe99..00ac124901 100644 --- a/pc/rtc_stats_collector_unittest.cc +++ b/pc/rtc_stats_collector_unittest.cc @@ -2478,6 +2478,10 @@ TEST_F(RTCStatsCollectorTest, CollectRTCAudioPlayoutStats) { audio_device_stats.total_playout_delay_s = 5; pc_->SetAudioDeviceStats(audio_device_stats); + pc_->AddVoiceChannel("AudioMid", "TransportName", {}); + stats_->SetupRemoteTrackAndReceiver( + cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", "RemoteStreamId", 1); + rtc::scoped_refptr report = stats_->GetStatsReport(); auto stats_of_track_type = report->GetStatsOfType(); ASSERT_EQ(1U, stats_of_track_type.size());