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 c7b5e7bc7c..05447ac3bd 100644 --- a/video/rtp_video_stream_receiver2.cc +++ b/video/rtp_video_stream_receiver2.cc @@ -1062,6 +1062,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 48bcab157e..21f125ae2f 100644 --- a/video/rtp_video_stream_receiver2.h +++ b/video/rtp_video_stream_receiver2.h @@ -211,6 +211,12 @@ class RtpVideoStreamReceiver2 : public LossNotificationSender, absl::optional LastReceivedPacketMs() 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 ce96512795..be850834d6 100644 --- a/video/video_receive_stream2.cc +++ b/video/video_receive_stream2.cc @@ -597,6 +597,14 @@ VideoReceiveStreamInterface::Stats VideoReceiveStream2::GetStats() const { if (rtx_statistician) stats.total_bitrate_bps += rtx_statistician->BitrateReceived(); } + + // 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; } -- 2.34.1