From 634a777b9d1719d6b5f6d7a2dab38faaf198d35b Mon Sep 17 00:00:00 2001 From: Ilya Nikolaevskiy Date: Wed, 4 Apr 2018 16:33:49 +0200 Subject: [PATCH] Add RRTR parameter to media engine and pass it to video receive stream This allows clients to enable Receiver reference time reports via PeerConnection. RRTR is not enabled by default but can be added to SDP string. Bug: webrtc:9108 Change-Id: I851f0d65152875bf115553a851b839f83e3d241e Reviewed-on: https://webrtc-review.googlesource.com/66861 Reviewed-by: Taylor Brandstetter Commit-Queue: Ilya Nikolaevskiy Cr-Commit-Position: refs/heads/master@{#22767} --- media/base/codec.cc | 5 +++++ media/base/codec.h | 1 + media/base/mediaconstants.cc | 1 + media/base/mediaconstants.h | 3 +++ media/engine/webrtcvideoengine.cc | 1 + 5 files changed, 11 insertions(+) diff --git a/media/base/codec.cc b/media/base/codec.cc index f5a71cced0..cb2a8fc3df 100644 --- a/media/base/codec.cc +++ b/media/base/codec.cc @@ -346,6 +346,11 @@ bool HasRemb(const Codec& codec) { FeedbackParam(kRtcpFbParamRemb, kParamValueEmpty)); } +bool HasRrtr(const Codec& codec) { + return codec.HasFeedbackParam( + FeedbackParam(kRtcpFbParamRrtr, kParamValueEmpty)); +} + bool HasTransportCc(const Codec& codec) { return codec.HasFeedbackParam( FeedbackParam(kRtcpFbParamTransportCc, kParamValueEmpty)); diff --git a/media/base/codec.h b/media/base/codec.h index a49fe4b278..30844c7120 100644 --- a/media/base/codec.h +++ b/media/base/codec.h @@ -250,6 +250,7 @@ bool CodecNamesEq(const std::string& name1, const std::string& name2); bool CodecNamesEq(const char* name1, const char* name2); bool HasNack(const Codec& codec); bool HasRemb(const Codec& codec); +bool HasRrtr(const Codec& codec); bool HasTransportCc(const Codec& codec); // Returns the first codec in |supported_codecs| that matches |codec|, or // nullptr if no codec matches. diff --git a/media/base/mediaconstants.cc b/media/base/mediaconstants.cc index abc4e0c1b9..de21d04a25 100644 --- a/media/base/mediaconstants.cc +++ b/media/base/mediaconstants.cc @@ -86,6 +86,7 @@ const char kRtcpFbParamTransportCc[] = "transport-cc"; const char kRtcpFbParamCcm[] = "ccm"; const char kRtcpFbCcmParamFir[] = "fir"; +const char kRtcpFbParamRrtr[] = "rrtr"; const char kCodecParamMaxBitrate[] = "x-google-max-bitrate"; const char kCodecParamMinBitrate[] = "x-google-min-bitrate"; const char kCodecParamStartBitrate[] = "x-google-start-bitrate"; diff --git a/media/base/mediaconstants.h b/media/base/mediaconstants.h index 72edd89e20..14c49baf72 100644 --- a/media/base/mediaconstants.h +++ b/media/base/mediaconstants.h @@ -101,6 +101,9 @@ extern const char kRtcpFbParamTransportCc[]; // ccm submessages according to RFC 5104 extern const char kRtcpFbParamCcm[]; extern const char kRtcpFbCcmParamFir[]; +// Receiver reference time report +// https://tools.ietf.org/html/rfc3611 section 4.4 +extern const char kRtcpFbParamRrtr[]; // Google specific parameters extern const char kCodecParamMaxBitrate[]; extern const char kCodecParamMinBitrate[]; diff --git a/media/engine/webrtcvideoengine.cc b/media/engine/webrtcvideoengine.cc index 3cf72cf732..375eb4db32 100644 --- a/media/engine/webrtcvideoengine.cc +++ b/media/engine/webrtcvideoengine.cc @@ -2290,6 +2290,7 @@ void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs( config_.rtp.red_payload_type = codec.ulpfec.red_payload_type; config_.rtp.nack.rtp_history_ms = HasNack(codec.codec) ? kNackHistoryMs : 0; + config_.rtp.rtcp_xr.receiver_reference_time_report = HasRrtr(codec.codec); if (codec.ulpfec.red_rtx_payload_type != -1) { config_.rtp .rtx_associated_payload_types[codec.ulpfec.red_rtx_payload_type] =