Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |