From: "Byron Campen [:bwc]" Date: Fri, 12 Mar 2021 08:55:00 -0600 Subject: Bug 1654112 - libwebrtc modification: Surface video RTCP SR stats again. r=ng libwebrtc has stopped surfacing these, and Chromium does not support these stats at all. Differential Revision: https://phabricator.services.mozilla.com/D108674 Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/edac9d01a9ac7594f4b22708a4690753638ca32c --- video/rtp_video_stream_receiver2.cc | 10 ++++++++++ video/rtp_video_stream_receiver2.h | 6 ++++++ video/video_receive_stream2.cc | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/video/rtp_video_stream_receiver2.cc b/video/rtp_video_stream_receiver2.cc index a3cfd903f4..63642c5f2a 100644 --- a/video/rtp_video_stream_receiver2.cc +++ b/video/rtp_video_stream_receiver2.cc @@ -1067,6 +1067,16 @@ absl::optional RtpVideoStreamReceiver2::LastReceivedKeyframePacketMs() return absl::nullopt; } +// Mozilla modification: VideoReceiveStream2 and friends do not surface RTCP +// stats at all, and even on the most recent libwebrtc code there does not +// seem to be any support for these stats right now. So, we hack this in. +void RtpVideoStreamReceiver2::RemoteRTCPSenderInfo( + uint32_t* packet_count, uint32_t* octet_count, + int64_t* ntp_timestamp_ms) const { + RTC_DCHECK_RUN_ON(&worker_task_checker_); + rtp_rtcp_->RemoteRTCPSenderInfo(packet_count, octet_count, ntp_timestamp_ms); +} + void RtpVideoStreamReceiver2::ManageFrame( std::unique_ptr frame) { RTC_DCHECK_RUN_ON(&packet_sequence_checker_); diff --git a/video/rtp_video_stream_receiver2.h b/video/rtp_video_stream_receiver2.h index d436aa38a7..4a93e53356 100644 --- a/video/rtp_video_stream_receiver2.h +++ b/video/rtp_video_stream_receiver2.h @@ -209,6 +209,12 @@ class RtpVideoStreamReceiver2 : public LossNotificationSender, absl::optional LastReceivedFrameRtpTimestamp() const; absl::optional LastReceivedKeyframePacketMs() const; + // Mozilla modification: VideoReceiveStream2 and friends do not surface RTCP + // stats at all, and even on the most recent libwebrtc code there does not + // seem to be any support for these stats right now. So, we hack this in. + void RemoteRTCPSenderInfo(uint32_t* packet_count, uint32_t* octet_count, + int64_t* ntp_timestamp_ms) const; + private: // Implements RtpVideoFrameReceiver. void ManageFrame(std::unique_ptr frame) override; diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc index 7d307c6d2c..03d3d7ce2f 100644 --- a/video/video_receive_stream2.cc +++ b/video/video_receive_stream2.cc @@ -568,6 +568,14 @@ VideoReceiveStreamInterface::Stats VideoReceiveStream2::GetStats() const { stats.rtx_rtp_stats = rtx_statistician->GetStats(); } } + + // Mozilla modification: VideoReceiveStream2 and friends do not surface RTCP + // stats at all, and even on the most recent libwebrtc code there does not + // seem to be any support for these stats right now. So, we hack this in. + rtp_video_stream_receiver_.RemoteRTCPSenderInfo( + &stats.rtcp_sender_packets_sent, &stats.rtcp_sender_octets_sent, + &stats.rtcp_sender_ntp_timestamp_ms); + return stats; }