diff --git a/api/stats/rtcstats_objects.h b/api/stats/rtcstats_objects.h index 2554ea07de..b73648acc4 100644 --- a/api/stats/rtcstats_objects.h +++ b/api/stats/rtcstats_objects.h @@ -516,7 +516,6 @@ class RTC_EXPORT RTCOutboundRTPStreamStats final : public RTCRTPStreamStats { RTCStatsMember bytes_sent; RTCStatsMember header_bytes_sent; RTCStatsMember retransmitted_bytes_sent; - // TODO(https://crbug.com/webrtc/13394): Also collect this metric for video. RTCStatsMember target_bitrate; RTCStatsMember frames_encoded; RTCStatsMember key_frames_encoded; diff --git a/media/base/media_channel.h b/media/base/media_channel.h index 57b488479b..986cb26261 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -391,7 +391,7 @@ struct MediaSenderInfo { // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-nackcount uint32_t nacks_rcvd = 0; // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-targetbitrate - double target_bitrate = 0.0; + absl::optional target_bitrate; int packets_lost = 0; float fraction_lost = 0.0f; int64_t rtt_ms = 0; diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index dc404dc13f..5651f5944c 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -2656,6 +2656,7 @@ WebRtcVideoChannel::WebRtcVideoSendStream::GetPerLayerVideoSenderInfos( common_info.quality_limitation_resolution_changes = stats.quality_limitation_resolution_changes; common_info.encoder_implementation_name = stats.encoder_implementation_name; + common_info.target_bitrate = stats.target_media_bitrate_bps; common_info.ssrc_groups = ssrc_groups_; common_info.frames = stats.frames; common_info.framerate_input = stats.input_frame_rate; diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc index c27533a9fe..8bcc72d4f8 100644 --- a/pc/rtc_stats_collector.cc +++ b/pc/rtc_stats_collector.cc @@ -646,8 +646,9 @@ void SetOutboundRTPStreamStatsFromVoiceSenderInfo( outbound_audio->mid = mid; outbound_audio->media_type = "audio"; outbound_audio->kind = "audio"; - if (voice_sender_info.target_bitrate > 0) { - outbound_audio->target_bitrate = voice_sender_info.target_bitrate; + if (voice_sender_info.target_bitrate && + *voice_sender_info.target_bitrate > 0) { + outbound_audio->target_bitrate = *voice_sender_info.target_bitrate; } if (voice_sender_info.codec_payload_type.has_value()) { auto codec_param_it = voice_media_info.send_codecs.find( @@ -689,6 +690,10 @@ void SetOutboundRTPStreamStatsFromVideoSenderInfo( static_cast(video_sender_info.plis_rcvd); if (video_sender_info.qp_sum) outbound_video->qp_sum = *video_sender_info.qp_sum; + if (video_sender_info.target_bitrate && + video_sender_info.target_bitrate > 0) { + outbound_video->target_bitrate = *video_sender_info.target_bitrate; + } outbound_video->frames_encoded = video_sender_info.frames_encoded; outbound_video->key_frames_encoded = video_sender_info.key_frames_encoded; outbound_video->total_encode_time = diff --git a/pc/rtc_stats_integrationtest.cc b/pc/rtc_stats_integrationtest.cc index 057bf0f1c1..e49f173366 100644 --- a/pc/rtc_stats_integrationtest.cc +++ b/pc/rtc_stats_integrationtest.cc @@ -956,6 +956,7 @@ class RTCStatsReportVerifier { outbound_stream.header_bytes_sent); verifier.TestMemberIsNonNegative( outbound_stream.retransmitted_bytes_sent); + verifier.TestMemberIsNonNegative(outbound_stream.target_bitrate); if (outbound_stream.kind.is_defined() && *outbound_stream.kind == "video") { verifier.TestMemberIsDefined(outbound_stream.frames_encoded); verifier.TestMemberIsDefined(outbound_stream.key_frames_encoded); @@ -990,7 +991,6 @@ class RTCStatsReportVerifier { verifier.TestMemberIsNonNegative(outbound_stream.frames_sent); verifier.TestMemberIsNonNegative( outbound_stream.huge_frames_sent); - verifier.TestMemberIsUndefined(outbound_stream.target_bitrate); verifier.MarkMemberTested(outbound_stream.rid, true); } else { verifier.TestMemberIsUndefined(outbound_stream.frames_encoded); @@ -1014,7 +1014,6 @@ class RTCStatsReportVerifier { verifier.TestMemberIsUndefined(outbound_stream.frame_width); verifier.TestMemberIsUndefined(outbound_stream.frames_sent); verifier.TestMemberIsUndefined(outbound_stream.huge_frames_sent); - verifier.TestMemberIsNonNegative(outbound_stream.target_bitrate); } return verifier.ExpectAllMembersSuccessfullyTested(); }