Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 1713493003: Enabling rtcp-rsize negotiation and fixing some issues with it. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 } 809 }
810 810
811 if (changed_params.options) 811 if (changed_params.options)
812 send_params_.options.SetAll(*changed_params.options); 812 send_params_.options.SetAll(*changed_params.options);
813 813
814 { 814 {
815 rtc::CritScope stream_lock(&stream_crit_); 815 rtc::CritScope stream_lock(&stream_crit_);
816 for (auto& kv : send_streams_) { 816 for (auto& kv : send_streams_) {
817 kv.second->SetSendParameters(changed_params); 817 kv.second->SetSendParameters(changed_params);
818 } 818 }
819 if (changed_params.codec) { 819 if (changed_params.codec || changed_params.rtcp_mode) {
820 // Update receive feedback parameters from new codec. 820 // Update receive feedback parameters from new codec or RTCP mode.
821 LOG(LS_INFO) 821 LOG(LS_INFO)
822 << "SetFeedbackOptions on all the receive streams because the send " 822 << "SetFeedbackOptions on all the receive streams because the send "
823 "codec has changed."; 823 "codec or RTCP mode has changed.";
824 for (auto& kv : receive_streams_) { 824 for (auto& kv : receive_streams_) {
825 RTC_DCHECK(kv.second != nullptr); 825 RTC_DCHECK(kv.second != nullptr);
826 kv.second->SetFeedbackParameters(HasNack(send_codec_->codec), 826 kv.second->SetFeedbackParameters(
827 HasRemb(send_codec_->codec), 827 HasNack(send_codec_->codec), HasRemb(send_codec_->codec),
828 HasTransportCc(send_codec_->codec)); 828 HasTransportCc(send_codec_->codec),
829 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize
830 : webrtc::RtcpMode::kCompound);
829 } 831 }
830 } 832 }
831 } 833 }
832 send_params_ = params; 834 send_params_ = params;
833 return true; 835 return true;
834 } 836 }
835 837
836 bool WebRtcVideoChannel2::GetChangedRecvParameters( 838 bool WebRtcVideoChannel2::GetChangedRecvParameters(
837 const VideoRecvParameters& params, 839 const VideoRecvParameters& params,
838 ChangedRecvParameters* changed_params) const { 840 ChangedRecvParameters* changed_params) const {
(...skipping 24 matching lines...) Expand all
863 } 865 }
864 866
865 // Handle RTP header extensions. 867 // Handle RTP header extensions.
866 std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions( 868 std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
867 params.extensions, webrtc::RtpExtension::IsSupportedForVideo, false); 869 params.extensions, webrtc::RtpExtension::IsSupportedForVideo, false);
868 if (filtered_extensions != recv_rtp_extensions_) { 870 if (filtered_extensions != recv_rtp_extensions_) {
869 changed_params->rtp_header_extensions = 871 changed_params->rtp_header_extensions =
870 rtc::Optional<std::vector<webrtc::RtpExtension>>(filtered_extensions); 872 rtc::Optional<std::vector<webrtc::RtpExtension>>(filtered_extensions);
871 } 873 }
872 874
873 // Handle RTCP mode.
874 if (params.rtcp.reduced_size != recv_params_.rtcp.reduced_size) {
875 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>(
876 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize
877 : webrtc::RtcpMode::kCompound);
878 }
879
880 return true; 875 return true;
881 } 876 }
882 877
883 bool WebRtcVideoChannel2::SetRecvParameters(const VideoRecvParameters& params) { 878 bool WebRtcVideoChannel2::SetRecvParameters(const VideoRecvParameters& params) {
884 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvParameters"); 879 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvParameters");
885 LOG(LS_INFO) << "SetRecvParameters: " << params.ToString(); 880 LOG(LS_INFO) << "SetRecvParameters: " << params.ToString();
886 ChangedRecvParameters changed_params; 881 ChangedRecvParameters changed_params;
887 if (!GetChangedRecvParameters(params, &changed_params)) { 882 if (!GetChangedRecvParameters(params, &changed_params)) {
888 return false; 883 return false;
889 } 884 }
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 1135
1141 void WebRtcVideoChannel2::ConfigureReceiverRtp( 1136 void WebRtcVideoChannel2::ConfigureReceiverRtp(
1142 webrtc::VideoReceiveStream::Config* config, 1137 webrtc::VideoReceiveStream::Config* config,
1143 const StreamParams& sp) const { 1138 const StreamParams& sp) const {
1144 uint32_t ssrc = sp.first_ssrc(); 1139 uint32_t ssrc = sp.first_ssrc();
1145 1140
1146 config->rtp.remote_ssrc = ssrc; 1141 config->rtp.remote_ssrc = ssrc;
1147 config->rtp.local_ssrc = rtcp_receiver_report_ssrc_; 1142 config->rtp.local_ssrc = rtcp_receiver_report_ssrc_;
1148 1143
1149 config->rtp.extensions = recv_rtp_extensions_; 1144 config->rtp.extensions = recv_rtp_extensions_;
1150 config->rtp.rtcp_mode = recv_params_.rtcp.reduced_size 1145 // Whether or not the receive stream sends reduced size RTCP is determined
1146 // by the send params.
1147 config->rtp.rtcp_mode = send_params_.rtcp.reduced_size
1151 ? webrtc::RtcpMode::kReducedSize 1148 ? webrtc::RtcpMode::kReducedSize
1152 : webrtc::RtcpMode::kCompound; 1149 : webrtc::RtcpMode::kCompound;
pthatcher1 2016/02/19 07:24:21 I really don't like the idea that the send paramet
pbos-webrtc 2016/02/19 15:57:39 But SetRemoteDescription determines whether the se
1153 1150
1154 // TODO(pbos): This protection is against setting the same local ssrc as 1151 // TODO(pbos): This protection is against setting the same local ssrc as
1155 // remote which is not permitted by the lower-level API. RTCP requires a 1152 // remote which is not permitted by the lower-level API. RTCP requires a
1156 // corresponding sender SSRC. Figure out what to do when we don't have 1153 // corresponding sender SSRC. Figure out what to do when we don't have
1157 // (receive-only) or know a good local SSRC. 1154 // (receive-only) or know a good local SSRC.
1158 if (config->rtp.remote_ssrc == config->rtp.local_ssrc) { 1155 if (config->rtp.remote_ssrc == config->rtp.local_ssrc) {
1159 if (config->rtp.local_ssrc != kDefaultRtcpReceiverReportSsrc) { 1156 if (config->rtp.local_ssrc != kDefaultRtcpReceiverReportSsrc) {
1160 config->rtp.local_ssrc = kDefaultRtcpReceiverReportSsrc; 1157 config->rtp.local_ssrc = kDefaultRtcpReceiverReportSsrc;
1161 } else { 1158 } else {
1162 config->rtp.local_ssrc = kDefaultRtcpReceiverReportSsrc + 1; 1159 config->rtp.local_ssrc = kDefaultRtcpReceiverReportSsrc + 1;
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after
2224 config_.rtp.local_ssrc = local_ssrc; 2221 config_.rtp.local_ssrc = local_ssrc;
2225 LOG(LS_INFO) 2222 LOG(LS_INFO)
2226 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc=" 2223 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc="
2227 << local_ssrc; 2224 << local_ssrc;
2228 RecreateWebRtcStream(); 2225 RecreateWebRtcStream();
2229 } 2226 }
2230 2227
2231 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFeedbackParameters( 2228 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFeedbackParameters(
2232 bool nack_enabled, 2229 bool nack_enabled,
2233 bool remb_enabled, 2230 bool remb_enabled,
2234 bool transport_cc_enabled) { 2231 bool transport_cc_enabled,
2232 webrtc::RtcpMode rtcp_mode) {
2235 int nack_history_ms = nack_enabled ? kNackHistoryMs : 0; 2233 int nack_history_ms = nack_enabled ? kNackHistoryMs : 0;
2236 if (config_.rtp.nack.rtp_history_ms == nack_history_ms && 2234 if (config_.rtp.nack.rtp_history_ms == nack_history_ms &&
2237 config_.rtp.remb == remb_enabled && 2235 config_.rtp.remb == remb_enabled &&
2238 config_.rtp.transport_cc == transport_cc_enabled) { 2236 config_.rtp.transport_cc == transport_cc_enabled &&
2237 config_.rtp.rtcp_mode == rtcp_mode) {
2239 LOG(LS_INFO) 2238 LOG(LS_INFO)
2240 << "Ignoring call to SetFeedbackParameters because parameters are " 2239 << "Ignoring call to SetFeedbackParameters because parameters are "
2241 "unchanged; nack=" 2240 "unchanged; nack="
2242 << nack_enabled << ", remb=" << remb_enabled 2241 << nack_enabled << ", remb=" << remb_enabled
2243 << ", transport_cc=" << transport_cc_enabled; 2242 << ", transport_cc=" << transport_cc_enabled;
2244 return; 2243 return;
2245 } 2244 }
2246 config_.rtp.remb = remb_enabled; 2245 config_.rtp.remb = remb_enabled;
2247 config_.rtp.nack.rtp_history_ms = nack_history_ms; 2246 config_.rtp.nack.rtp_history_ms = nack_history_ms;
2248 config_.rtp.transport_cc = transport_cc_enabled; 2247 config_.rtp.transport_cc = transport_cc_enabled;
2248 config_.rtp.rtcp_mode = rtcp_mode;
2249 LOG(LS_INFO) 2249 LOG(LS_INFO)
2250 << "RecreateWebRtcStream (recv) because of SetFeedbackParameters; nack=" 2250 << "RecreateWebRtcStream (recv) because of SetFeedbackParameters; nack="
2251 << nack_enabled << ", remb=" << remb_enabled 2251 << nack_enabled << ", remb=" << remb_enabled
2252 << ", transport_cc=" << transport_cc_enabled; 2252 << ", transport_cc=" << transport_cc_enabled;
2253 RecreateWebRtcStream(); 2253 RecreateWebRtcStream();
2254 } 2254 }
2255 2255
2256 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvParameters( 2256 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvParameters(
2257 const ChangedRecvParameters& params) { 2257 const ChangedRecvParameters& params) {
2258 bool needs_recreation = false; 2258 bool needs_recreation = false;
2259 std::vector<AllocatedDecoder> old_decoders; 2259 std::vector<AllocatedDecoder> old_decoders;
2260 if (params.codec_settings) { 2260 if (params.codec_settings) {
2261 ConfigureCodecs(*params.codec_settings, &old_decoders); 2261 ConfigureCodecs(*params.codec_settings, &old_decoders);
2262 needs_recreation = true; 2262 needs_recreation = true;
2263 } 2263 }
2264 if (params.rtp_header_extensions) { 2264 if (params.rtp_header_extensions) {
2265 config_.rtp.extensions = *params.rtp_header_extensions; 2265 config_.rtp.extensions = *params.rtp_header_extensions;
2266 needs_recreation = true; 2266 needs_recreation = true;
2267 } 2267 }
2268 if (params.rtcp_mode) {
2269 config_.rtp.rtcp_mode = *params.rtcp_mode;
2270 needs_recreation = true;
2271 }
2272 if (needs_recreation) { 2268 if (needs_recreation) {
2273 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRecvParameters"; 2269 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRecvParameters";
2274 RecreateWebRtcStream(); 2270 RecreateWebRtcStream();
2275 ClearDecoders(&old_decoders); 2271 ClearDecoders(&old_decoders);
2276 } 2272 }
2277 } 2273 }
2278 2274
2279 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::RecreateWebRtcStream() { 2275 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::RecreateWebRtcStream() {
2280 if (stream_ != NULL) { 2276 if (stream_ != NULL) {
2281 call_->DestroyVideoReceiveStream(stream_); 2277 call_->DestroyVideoReceiveStream(stream_);
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
2504 rtx_mapping[video_codecs[i].codec.id] != 2500 rtx_mapping[video_codecs[i].codec.id] !=
2505 fec_settings.red_payload_type) { 2501 fec_settings.red_payload_type) {
2506 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2502 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2507 } 2503 }
2508 } 2504 }
2509 2505
2510 return video_codecs; 2506 return video_codecs;
2511 } 2507 }
2512 2508
2513 } // namespace cricket 2509 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/modules/rtp_rtcp/source/rtcp_receiver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698