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 |