OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2017 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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 DestroyVideoChannel(); | 122 DestroyVideoChannel(); |
123 } | 123 } |
124 // Call must be destroyed on the worker thread. | 124 // Call must be destroyed on the worker thread. |
125 worker_thread_->Invoke<void>( | 125 worker_thread_->Invoke<void>( |
126 RTC_FROM_HERE, | 126 RTC_FROM_HERE, |
127 rtc::Bind(&RtpTransportControllerAdapter::Close_w, this)); | 127 rtc::Bind(&RtpTransportControllerAdapter::Close_w, this)); |
128 } | 128 } |
129 | 129 |
130 RTCErrorOr<std::unique_ptr<RtpTransportInterface>> | 130 RTCErrorOr<std::unique_ptr<RtpTransportInterface>> |
131 RtpTransportControllerAdapter::CreateProxiedRtpTransport( | 131 RtpTransportControllerAdapter::CreateProxiedRtpTransport( |
132 const RtcpParameters& rtcp_parameters, | 132 const RtpTransportParameters& parameters, |
133 PacketTransportInterface* rtp, | 133 PacketTransportInterface* rtp, |
134 PacketTransportInterface* rtcp) { | 134 PacketTransportInterface* rtcp) { |
135 auto result = | 135 auto result = RtpTransportAdapter::CreateProxied(parameters, rtp, rtcp, this); |
136 RtpTransportAdapter::CreateProxied(rtcp_parameters, rtp, rtcp, this); | |
137 if (result.ok()) { | 136 if (result.ok()) { |
138 transport_proxies_.push_back(result.value().get()); | 137 transport_proxies_.push_back(result.value().get()); |
139 transport_proxies_.back()->GetInternal()->SignalDestroyed.connect( | 138 transport_proxies_.back()->GetInternal()->SignalDestroyed.connect( |
140 this, &RtpTransportControllerAdapter::OnRtpTransportDestroyed); | 139 this, &RtpTransportControllerAdapter::OnRtpTransportDestroyed); |
141 } | 140 } |
142 return result; | 141 return result; |
143 } | 142 } |
144 | 143 |
145 RTCErrorOr<std::unique_ptr<SrtpTransportInterface>> | 144 RTCErrorOr<std::unique_ptr<SrtpTransportInterface>> |
146 RtpTransportControllerAdapter::CreateProxiedSrtpTransport( | 145 RtpTransportControllerAdapter::CreateProxiedSrtpTransport( |
147 const RtcpParameters& rtcp_parameters, | 146 const RtpTransportParameters& parameters, |
148 PacketTransportInterface* rtp, | 147 PacketTransportInterface* rtp, |
149 PacketTransportInterface* rtcp) { | 148 PacketTransportInterface* rtcp) { |
150 auto result = | 149 auto result = |
151 RtpTransportAdapter::CreateSrtpProxied(rtcp_parameters, rtp, rtcp, this); | 150 RtpTransportAdapter::CreateSrtpProxied(parameters, rtp, rtcp, this); |
152 if (result.ok()) { | 151 if (result.ok()) { |
153 transport_proxies_.push_back(result.value().get()); | 152 transport_proxies_.push_back(result.value().get()); |
154 transport_proxies_.back()->GetInternal()->SignalDestroyed.connect( | 153 transport_proxies_.back()->GetInternal()->SignalDestroyed.connect( |
155 this, &RtpTransportControllerAdapter::OnRtpTransportDestroyed); | 154 this, &RtpTransportControllerAdapter::OnRtpTransportDestroyed); |
156 } | 155 } |
157 return result; | 156 return result; |
158 } | 157 } |
159 | 158 |
160 RTCErrorOr<std::unique_ptr<OrtcRtpSenderInterface>> | 159 RTCErrorOr<std::unique_ptr<OrtcRtpSenderInterface>> |
161 RtpTransportControllerAdapter::CreateProxiedRtpSender( | 160 RtpTransportControllerAdapter::CreateProxiedRtpSender( |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 | 211 |
213 return OrtcRtpReceiverAdapter::CreateProxy(std::move(new_receiver)); | 212 return OrtcRtpReceiverAdapter::CreateProxy(std::move(new_receiver)); |
214 } | 213 } |
215 | 214 |
216 std::vector<RtpTransportInterface*> | 215 std::vector<RtpTransportInterface*> |
217 RtpTransportControllerAdapter::GetTransports() const { | 216 RtpTransportControllerAdapter::GetTransports() const { |
218 RTC_DCHECK_RUN_ON(signaling_thread_); | 217 RTC_DCHECK_RUN_ON(signaling_thread_); |
219 return transport_proxies_; | 218 return transport_proxies_; |
220 } | 219 } |
221 | 220 |
222 RTCError RtpTransportControllerAdapter::SetRtcpParameters( | 221 RTCError RtpTransportControllerAdapter::SetRtpTransportParameters( |
223 const RtcpParameters& parameters, | 222 const RtpTransportParameters& parameters, |
224 RtpTransportInterface* inner_transport) { | 223 RtpTransportInterface* inner_transport) { |
| 224 if ((video_channel_ != nullptr || voice_channel_ != nullptr || |
| 225 !transport_proxies_.empty()) && |
| 226 (parameters.keepalive != keepalive_)) { |
| 227 LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION, |
| 228 "Cannot change keep-alive settings after creating " |
| 229 "media streams or additional transports for the same " |
| 230 "transport controller."); |
| 231 } |
| 232 RTC_CHECK(call_->SetRtpKeepAliveConfig(parameters.keepalive)); |
225 do { | 233 do { |
226 if (inner_transport == inner_audio_transport_) { | 234 if (inner_transport == inner_audio_transport_) { |
227 CopyRtcpParametersToDescriptions(parameters, &local_audio_description_, | 235 CopyRtcpParametersToDescriptions(parameters.rtcp, |
| 236 &local_audio_description_, |
228 &remote_audio_description_); | 237 &remote_audio_description_); |
229 if (!voice_channel_->SetLocalContent(&local_audio_description_, | 238 if (!voice_channel_->SetLocalContent(&local_audio_description_, |
230 cricket::CA_OFFER, nullptr)) { | 239 cricket::CA_OFFER, nullptr)) { |
231 break; | 240 break; |
232 } | 241 } |
233 if (!voice_channel_->SetRemoteContent(&remote_audio_description_, | 242 if (!voice_channel_->SetRemoteContent(&remote_audio_description_, |
234 cricket::CA_ANSWER, nullptr)) { | 243 cricket::CA_ANSWER, nullptr)) { |
235 break; | 244 break; |
236 } | 245 } |
237 } else if (inner_transport == inner_video_transport_) { | 246 } else if (inner_transport == inner_video_transport_) { |
238 CopyRtcpParametersToDescriptions(parameters, &local_video_description_, | 247 CopyRtcpParametersToDescriptions(parameters.rtcp, |
| 248 &local_video_description_, |
239 &remote_video_description_); | 249 &remote_video_description_); |
240 if (!video_channel_->SetLocalContent(&local_video_description_, | 250 if (!video_channel_->SetLocalContent(&local_video_description_, |
241 cricket::CA_OFFER, nullptr)) { | 251 cricket::CA_OFFER, nullptr)) { |
242 break; | 252 break; |
243 } | 253 } |
244 if (!video_channel_->SetRemoteContent(&remote_video_description_, | 254 if (!video_channel_->SetRemoteContent(&remote_video_description_, |
245 cricket::CA_ANSWER, nullptr)) { | 255 cricket::CA_ANSWER, nullptr)) { |
246 break; | 256 break; |
247 } | 257 } |
248 } | 258 } |
(...skipping 14 matching lines...) Expand all Loading... |
263 return codecs_result.MoveError(); | 273 return codecs_result.MoveError(); |
264 } | 274 } |
265 | 275 |
266 auto extensions_result = | 276 auto extensions_result = |
267 ToCricketRtpHeaderExtensions(parameters.header_extensions); | 277 ToCricketRtpHeaderExtensions(parameters.header_extensions); |
268 if (!extensions_result.ok()) { | 278 if (!extensions_result.ok()) { |
269 return extensions_result.MoveError(); | 279 return extensions_result.MoveError(); |
270 } | 280 } |
271 | 281 |
272 auto stream_params_result = MakeSendStreamParamsVec( | 282 auto stream_params_result = MakeSendStreamParamsVec( |
273 parameters.encodings, inner_audio_transport_->GetRtcpParameters().cname, | 283 parameters.encodings, inner_audio_transport_->GetParameters().rtcp.cname, |
274 local_audio_description_); | 284 local_audio_description_); |
275 if (!stream_params_result.ok()) { | 285 if (!stream_params_result.ok()) { |
276 return stream_params_result.MoveError(); | 286 return stream_params_result.MoveError(); |
277 } | 287 } |
278 | 288 |
279 // Check that audio/video sender aren't using the same IDs to refer to | 289 // Check that audio/video sender aren't using the same IDs to refer to |
280 // different things, if they share the same transport. | 290 // different things, if they share the same transport. |
281 if (inner_audio_transport_ == inner_video_transport_) { | 291 if (inner_audio_transport_ == inner_video_transport_) { |
282 RTCError err = CheckForIdConflicts( | 292 RTCError err = CheckForIdConflicts( |
283 codecs_result.value(), extensions_result.value(), | 293 codecs_result.value(), extensions_result.value(), |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 return codecs_result.MoveError(); | 362 return codecs_result.MoveError(); |
353 } | 363 } |
354 | 364 |
355 auto extensions_result = | 365 auto extensions_result = |
356 ToCricketRtpHeaderExtensions(parameters.header_extensions); | 366 ToCricketRtpHeaderExtensions(parameters.header_extensions); |
357 if (!extensions_result.ok()) { | 367 if (!extensions_result.ok()) { |
358 return extensions_result.MoveError(); | 368 return extensions_result.MoveError(); |
359 } | 369 } |
360 | 370 |
361 auto stream_params_result = MakeSendStreamParamsVec( | 371 auto stream_params_result = MakeSendStreamParamsVec( |
362 parameters.encodings, inner_video_transport_->GetRtcpParameters().cname, | 372 parameters.encodings, inner_video_transport_->GetParameters().rtcp.cname, |
363 local_video_description_); | 373 local_video_description_); |
364 if (!stream_params_result.ok()) { | 374 if (!stream_params_result.ok()) { |
365 return stream_params_result.MoveError(); | 375 return stream_params_result.MoveError(); |
366 } | 376 } |
367 | 377 |
368 // Check that audio/video sender aren't using the same IDs to refer to | 378 // Check that audio/video sender aren't using the same IDs to refer to |
369 // different things, if they share the same transport. | 379 // different things, if they share the same transport. |
370 if (inner_audio_transport_ == inner_video_transport_) { | 380 if (inner_audio_transport_ == inner_video_transport_) { |
371 RTCError err = CheckForIdConflicts( | 381 RTCError err = CheckForIdConflicts( |
372 codecs_result.value(), extensions_result.value(), | 382 codecs_result.value(), extensions_result.value(), |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 "supported."); | 659 "supported."); |
650 } | 660 } |
651 RTCError err = MaybeSetCryptos(inner_transport, &local_audio_description_, | 661 RTCError err = MaybeSetCryptos(inner_transport, &local_audio_description_, |
652 &remote_audio_description_); | 662 &remote_audio_description_); |
653 if (!err.ok()) { | 663 if (!err.ok()) { |
654 return err; | 664 return err; |
655 } | 665 } |
656 // If setting new transport, extract its RTCP parameters and create voice | 666 // If setting new transport, extract its RTCP parameters and create voice |
657 // channel. | 667 // channel. |
658 if (!inner_audio_transport_) { | 668 if (!inner_audio_transport_) { |
659 CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(), | 669 CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp, |
660 &local_audio_description_, | 670 &local_audio_description_, |
661 &remote_audio_description_); | 671 &remote_audio_description_); |
662 inner_audio_transport_ = inner_transport; | 672 inner_audio_transport_ = inner_transport; |
663 CreateVoiceChannel(); | 673 CreateVoiceChannel(); |
664 } | 674 } |
665 have_audio_sender_ = true; | 675 have_audio_sender_ = true; |
666 sender->SignalDestroyed.connect( | 676 sender->SignalDestroyed.connect( |
667 this, &RtpTransportControllerAdapter::OnAudioSenderDestroyed); | 677 this, &RtpTransportControllerAdapter::OnAudioSenderDestroyed); |
668 return RTCError::OK(); | 678 return RTCError::OK(); |
669 } | 679 } |
(...skipping 14 matching lines...) Expand all Loading... |
684 "supported."); | 694 "supported."); |
685 } | 695 } |
686 RTCError err = MaybeSetCryptos(inner_transport, &local_video_description_, | 696 RTCError err = MaybeSetCryptos(inner_transport, &local_video_description_, |
687 &remote_video_description_); | 697 &remote_video_description_); |
688 if (!err.ok()) { | 698 if (!err.ok()) { |
689 return err; | 699 return err; |
690 } | 700 } |
691 // If setting new transport, extract its RTCP parameters and create video | 701 // If setting new transport, extract its RTCP parameters and create video |
692 // channel. | 702 // channel. |
693 if (!inner_video_transport_) { | 703 if (!inner_video_transport_) { |
694 CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(), | 704 CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp, |
695 &local_video_description_, | 705 &local_video_description_, |
696 &remote_video_description_); | 706 &remote_video_description_); |
697 inner_video_transport_ = inner_transport; | 707 inner_video_transport_ = inner_transport; |
698 CreateVideoChannel(); | 708 CreateVideoChannel(); |
699 } | 709 } |
700 have_video_sender_ = true; | 710 have_video_sender_ = true; |
701 sender->SignalDestroyed.connect( | 711 sender->SignalDestroyed.connect( |
702 this, &RtpTransportControllerAdapter::OnVideoSenderDestroyed); | 712 this, &RtpTransportControllerAdapter::OnVideoSenderDestroyed); |
703 return RTCError::OK(); | 713 return RTCError::OK(); |
704 } | 714 } |
(...skipping 14 matching lines...) Expand all Loading... |
719 "supported."); | 729 "supported."); |
720 } | 730 } |
721 RTCError err = MaybeSetCryptos(inner_transport, &local_audio_description_, | 731 RTCError err = MaybeSetCryptos(inner_transport, &local_audio_description_, |
722 &remote_audio_description_); | 732 &remote_audio_description_); |
723 if (!err.ok()) { | 733 if (!err.ok()) { |
724 return err; | 734 return err; |
725 } | 735 } |
726 // If setting new transport, extract its RTCP parameters and create voice | 736 // If setting new transport, extract its RTCP parameters and create voice |
727 // channel. | 737 // channel. |
728 if (!inner_audio_transport_) { | 738 if (!inner_audio_transport_) { |
729 CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(), | 739 CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp, |
730 &local_audio_description_, | 740 &local_audio_description_, |
731 &remote_audio_description_); | 741 &remote_audio_description_); |
732 inner_audio_transport_ = inner_transport; | 742 inner_audio_transport_ = inner_transport; |
733 CreateVoiceChannel(); | 743 CreateVoiceChannel(); |
734 } | 744 } |
735 have_audio_receiver_ = true; | 745 have_audio_receiver_ = true; |
736 receiver->SignalDestroyed.connect( | 746 receiver->SignalDestroyed.connect( |
737 this, &RtpTransportControllerAdapter::OnAudioReceiverDestroyed); | 747 this, &RtpTransportControllerAdapter::OnAudioReceiverDestroyed); |
738 return RTCError::OK(); | 748 return RTCError::OK(); |
739 } | 749 } |
(...skipping 14 matching lines...) Expand all Loading... |
754 "supported."); | 764 "supported."); |
755 } | 765 } |
756 RTCError err = MaybeSetCryptos(inner_transport, &local_video_description_, | 766 RTCError err = MaybeSetCryptos(inner_transport, &local_video_description_, |
757 &remote_video_description_); | 767 &remote_video_description_); |
758 if (!err.ok()) { | 768 if (!err.ok()) { |
759 return err; | 769 return err; |
760 } | 770 } |
761 // If setting new transport, extract its RTCP parameters and create video | 771 // If setting new transport, extract its RTCP parameters and create video |
762 // channel. | 772 // channel. |
763 if (!inner_video_transport_) { | 773 if (!inner_video_transport_) { |
764 CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(), | 774 CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp, |
765 &local_video_description_, | 775 &local_video_description_, |
766 &remote_video_description_); | 776 &remote_video_description_); |
767 inner_video_transport_ = inner_transport; | 777 inner_video_transport_ = inner_transport; |
768 CreateVideoChannel(); | 778 CreateVideoChannel(); |
769 } | 779 } |
770 have_video_receiver_ = true; | 780 have_video_receiver_ = true; |
771 receiver->SignalDestroyed.connect( | 781 receiver->SignalDestroyed.connect( |
772 this, &RtpTransportControllerAdapter::OnVideoReceiverDestroyed); | 782 this, &RtpTransportControllerAdapter::OnVideoReceiverDestroyed); |
773 return RTCError::OK(); | 783 return RTCError::OK(); |
774 } | 784 } |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 local_description->set_cryptos(cryptos); | 984 local_description->set_cryptos(cryptos); |
975 | 985 |
976 cryptos.clear(); | 986 cryptos.clear(); |
977 cryptos.push_back(*(rtp_transport->GetInternal()->send_key())); | 987 cryptos.push_back(*(rtp_transport->GetInternal()->send_key())); |
978 remote_description->set_cryptos(cryptos); | 988 remote_description->set_cryptos(cryptos); |
979 } | 989 } |
980 return RTCError::OK(); | 990 return RTCError::OK(); |
981 } | 991 } |
982 | 992 |
983 } // namespace webrtc | 993 } // namespace webrtc |
OLD | NEW |