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 9ca9a6f8e1..af6e573d92 100644 --- a/video/rtp_video_stream_receiver2.cc +++ b/video/rtp_video_stream_receiver2.cc @@ -1111,6 +1111,16 @@ std::optional RtpVideoStreamReceiver2::LastReceivedKeyframePacketMs() return std::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); +} + std::optional RtpVideoStreamReceiver2::GetSenderReportStats() const { RTC_DCHECK_RUN_ON(&packet_sequence_checker_); diff --git a/video/rtp_video_stream_receiver2.h b/video/rtp_video_stream_receiver2.h index 34b00dfa1a..92047391e7 100644 --- a/video/rtp_video_stream_receiver2.h +++ b/video/rtp_video_stream_receiver2.h @@ -213,6 +213,12 @@ class RtpVideoStreamReceiver2 : public LossNotificationSender, std::optional GetSenderReportStats() 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 3bf561f33a..b9d0983af0 100644 --- a/video/video_receive_stream2.cc +++ b/video/video_receive_stream2.cc @@ -581,6 +581,14 @@ VideoReceiveStreamInterface::Stats VideoReceiveStream2::GetStats() const { stats.sender_reports_bytes_sent = rtcp_sr_stats->bytes_sent; stats.sender_reports_reports_count = rtcp_sr_stats->reports_count; } + + // 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; }