| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2004--2011 Google Inc. | 3 * Copyright 2004--2011 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include <utility> | 30 #include <utility> |
| 31 | 31 |
| 32 #include "talk/app/webrtc/audiotrack.h" | 32 #include "talk/app/webrtc/audiotrack.h" |
| 33 #include "talk/app/webrtc/localaudiosource.h" | 33 #include "talk/app/webrtc/localaudiosource.h" |
| 34 #include "talk/app/webrtc/mediastream.h" | 34 #include "talk/app/webrtc/mediastream.h" |
| 35 #include "talk/app/webrtc/mediastreamproxy.h" | 35 #include "talk/app/webrtc/mediastreamproxy.h" |
| 36 #include "talk/app/webrtc/mediastreamtrackproxy.h" | 36 #include "talk/app/webrtc/mediastreamtrackproxy.h" |
| 37 #include "talk/app/webrtc/peerconnection.h" | 37 #include "talk/app/webrtc/peerconnection.h" |
| 38 #include "talk/app/webrtc/peerconnectionfactoryproxy.h" | 38 #include "talk/app/webrtc/peerconnectionfactoryproxy.h" |
| 39 #include "talk/app/webrtc/peerconnectionproxy.h" | 39 #include "talk/app/webrtc/peerconnectionproxy.h" |
| 40 #include "talk/app/webrtc/portallocatorfactory.h" | |
| 41 #include "talk/app/webrtc/videosource.h" | 40 #include "talk/app/webrtc/videosource.h" |
| 42 #include "talk/app/webrtc/videosourceproxy.h" | 41 #include "talk/app/webrtc/videosourceproxy.h" |
| 43 #include "talk/app/webrtc/videotrack.h" | 42 #include "talk/app/webrtc/videotrack.h" |
| 44 #include "talk/media/webrtc/webrtcmediaengine.h" | 43 #include "talk/media/webrtc/webrtcmediaengine.h" |
| 45 #include "talk/media/webrtc/webrtcvideodecoderfactory.h" | 44 #include "talk/media/webrtc/webrtcvideodecoderfactory.h" |
| 46 #include "talk/media/webrtc/webrtcvideoencoderfactory.h" | 45 #include "talk/media/webrtc/webrtcvideoencoderfactory.h" |
| 47 #include "webrtc/base/bind.h" | 46 #include "webrtc/base/bind.h" |
| 48 #include "webrtc/modules/audio_device/include/audio_device.h" | 47 #include "webrtc/modules/audio_device/include/audio_device.h" |
| 49 #include "webrtc/p2p/base/basicpacketsocketfactory.h" | 48 #include "webrtc/p2p/base/basicpacketsocketfactory.h" |
| 50 #include "webrtc/p2p/client/basicportallocator.h" | 49 #include "webrtc/p2p/client/basicportallocator.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 ASSERT(worker_thread != NULL); | 149 ASSERT(worker_thread != NULL); |
| 151 ASSERT(signaling_thread != NULL); | 150 ASSERT(signaling_thread != NULL); |
| 152 // TODO: Currently there is no way creating an external adm in | 151 // TODO: Currently there is no way creating an external adm in |
| 153 // libjingle source tree. So we can 't currently assert if this is NULL. | 152 // libjingle source tree. So we can 't currently assert if this is NULL. |
| 154 // ASSERT(default_adm != NULL); | 153 // ASSERT(default_adm != NULL); |
| 155 } | 154 } |
| 156 | 155 |
| 157 PeerConnectionFactory::~PeerConnectionFactory() { | 156 PeerConnectionFactory::~PeerConnectionFactory() { |
| 158 RTC_DCHECK(signaling_thread_->IsCurrent()); | 157 RTC_DCHECK(signaling_thread_->IsCurrent()); |
| 159 channel_manager_.reset(nullptr); | 158 channel_manager_.reset(nullptr); |
| 160 default_allocator_factory_ = nullptr; | |
| 161 | 159 |
| 162 // Make sure |worker_thread_| and |signaling_thread_| outlive | 160 // Make sure |worker_thread_| and |signaling_thread_| outlive |
| 163 // |dtls_identity_store_|, |default_socket_factory_| and | 161 // |dtls_identity_store_|, |default_socket_factory_| and |
| 164 // |default_network_manager_|. | 162 // |default_network_manager_|. |
| 165 dtls_identity_store_ = nullptr; | 163 dtls_identity_store_ = nullptr; |
| 166 default_socket_factory_ = nullptr; | 164 default_socket_factory_ = nullptr; |
| 167 default_network_manager_ = nullptr; | 165 default_network_manager_ = nullptr; |
| 168 | 166 |
| 169 if (owns_ptrs_) { | 167 if (owns_ptrs_) { |
| 170 if (wraps_current_thread_) | 168 if (wraps_current_thread_) |
| 171 rtc::ThreadManager::Instance()->UnwrapCurrentThread(); | 169 rtc::ThreadManager::Instance()->UnwrapCurrentThread(); |
| 172 delete worker_thread_; | 170 delete worker_thread_; |
| 173 } | 171 } |
| 174 } | 172 } |
| 175 | 173 |
| 176 bool PeerConnectionFactory::Initialize() { | 174 bool PeerConnectionFactory::Initialize() { |
| 177 RTC_DCHECK(signaling_thread_->IsCurrent()); | 175 RTC_DCHECK(signaling_thread_->IsCurrent()); |
| 178 rtc::InitRandom(rtc::Time()); | 176 rtc::InitRandom(rtc::Time()); |
| 179 | 177 |
| 180 default_allocator_factory_ = PortAllocatorFactory::Create(worker_thread_); | |
| 181 if (!default_allocator_factory_) { | |
| 182 return false; | |
| 183 } | |
| 184 | |
| 185 default_network_manager_.reset(new rtc::BasicNetworkManager()); | 178 default_network_manager_.reset(new rtc::BasicNetworkManager()); |
| 186 if (!default_network_manager_) { | 179 if (!default_network_manager_) { |
| 187 return false; | 180 return false; |
| 188 } | 181 } |
| 189 | 182 |
| 190 default_socket_factory_.reset( | 183 default_socket_factory_.reset( |
| 191 new rtc::BasicPacketSocketFactory(worker_thread_)); | 184 new rtc::BasicPacketSocketFactory(worker_thread_)); |
| 192 if (!default_socket_factory_) { | 185 if (!default_socket_factory_) { |
| 193 return false; | 186 return false; |
| 194 } | 187 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 | 242 |
| 250 void PeerConnectionFactory::StopRtcEventLog() { | 243 void PeerConnectionFactory::StopRtcEventLog() { |
| 251 RTC_DCHECK(signaling_thread_->IsCurrent()); | 244 RTC_DCHECK(signaling_thread_->IsCurrent()); |
| 252 channel_manager_->StopRtcEventLog(); | 245 channel_manager_->StopRtcEventLog(); |
| 253 } | 246 } |
| 254 | 247 |
| 255 rtc::scoped_refptr<PeerConnectionInterface> | 248 rtc::scoped_refptr<PeerConnectionInterface> |
| 256 PeerConnectionFactory::CreatePeerConnection( | 249 PeerConnectionFactory::CreatePeerConnection( |
| 257 const PeerConnectionInterface::RTCConfiguration& configuration, | 250 const PeerConnectionInterface::RTCConfiguration& configuration, |
| 258 const MediaConstraintsInterface* constraints, | 251 const MediaConstraintsInterface* constraints, |
| 259 PortAllocatorFactoryInterface* allocator_factory, | |
| 260 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | |
| 261 PeerConnectionObserver* observer) { | |
| 262 RTC_DCHECK(signaling_thread_->IsCurrent()); | |
| 263 RTC_DCHECK(allocator_factory || default_allocator_factory_); | |
| 264 | |
| 265 if (!dtls_identity_store.get()) { | |
| 266 // Because |pc|->Initialize takes ownership of the store we need a new | |
| 267 // wrapper object that can be deleted without deleting the underlying | |
| 268 // |dtls_identity_store_|, protecting it from being deleted multiple times. | |
| 269 dtls_identity_store.reset( | |
| 270 new DtlsIdentityStoreWrapper(dtls_identity_store_)); | |
| 271 } | |
| 272 | |
| 273 PortAllocatorFactoryInterface* chosen_allocator_factory = | |
| 274 allocator_factory ? allocator_factory : default_allocator_factory_.get(); | |
| 275 chosen_allocator_factory->SetNetworkIgnoreMask(options_.network_ignore_mask); | |
| 276 | |
| 277 rtc::scoped_refptr<PeerConnection> pc( | |
| 278 new rtc::RefCountedObject<PeerConnection>(this)); | |
| 279 if (!pc->Initialize(configuration, constraints, chosen_allocator_factory, | |
| 280 std::move(dtls_identity_store), observer)) { | |
| 281 return NULL; | |
| 282 } | |
| 283 return PeerConnectionProxy::Create(signaling_thread(), pc); | |
| 284 } | |
| 285 | |
| 286 rtc::scoped_refptr<PeerConnectionInterface> | |
| 287 PeerConnectionFactory::CreatePeerConnection( | |
| 288 const PeerConnectionInterface::RTCConfiguration& configuration, | |
| 289 const MediaConstraintsInterface* constraints, | |
| 290 rtc::scoped_ptr<cricket::PortAllocator> allocator, | 252 rtc::scoped_ptr<cricket::PortAllocator> allocator, |
| 291 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | 253 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, |
| 292 PeerConnectionObserver* observer) { | 254 PeerConnectionObserver* observer) { |
| 293 RTC_DCHECK(signaling_thread_->IsCurrent()); | 255 RTC_DCHECK(signaling_thread_->IsCurrent()); |
| 294 | 256 |
| 295 if (!dtls_identity_store.get()) { | 257 if (!dtls_identity_store.get()) { |
| 296 // Because |pc|->Initialize takes ownership of the store we need a new | 258 // Because |pc|->Initialize takes ownership of the store we need a new |
| 297 // wrapper object that can be deleted without deleting the underlying | 259 // wrapper object that can be deleted without deleting the underlying |
| 298 // |dtls_identity_store_|, protecting it from being deleted multiple times. | 260 // |dtls_identity_store_|, protecting it from being deleted multiple times. |
| 299 dtls_identity_store.reset( | 261 dtls_identity_store.reset( |
| 300 new DtlsIdentityStoreWrapper(dtls_identity_store_)); | 262 new DtlsIdentityStoreWrapper(dtls_identity_store_)); |
| 301 } | 263 } |
| 302 | 264 |
| 303 if (!allocator) { | 265 if (!allocator) { |
| 304 allocator.reset(new cricket::BasicPortAllocator( | 266 allocator.reset(new cricket::BasicPortAllocator( |
| 305 default_network_manager_.get(), default_socket_factory_.get())); | 267 default_network_manager_.get(), default_socket_factory_.get())); |
| 306 } | 268 } |
| 307 default_network_manager_->set_network_ignore_mask( | 269 allocator->SetNetworkIgnoreMask(options_.network_ignore_mask); |
| 308 options_.network_ignore_mask); | |
| 309 | 270 |
| 310 rtc::scoped_refptr<PeerConnection> pc( | 271 rtc::scoped_refptr<PeerConnection> pc( |
| 311 new rtc::RefCountedObject<PeerConnection>(this)); | 272 new rtc::RefCountedObject<PeerConnection>(this)); |
| 312 if (!pc->Initialize(configuration, constraints, std::move(allocator), | 273 if (!pc->Initialize(configuration, constraints, std::move(allocator), |
| 313 std::move(dtls_identity_store), observer)) { | 274 std::move(dtls_identity_store), observer)) { |
| 314 return nullptr; | 275 return nullptr; |
| 315 } | 276 } |
| 316 return PeerConnectionProxy::Create(signaling_thread(), pc); | 277 return PeerConnectionProxy::Create(signaling_thread(), pc); |
| 317 } | 278 } |
| 318 | 279 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 } | 321 } |
| 361 | 322 |
| 362 cricket::MediaEngineInterface* PeerConnectionFactory::CreateMediaEngine_w() { | 323 cricket::MediaEngineInterface* PeerConnectionFactory::CreateMediaEngine_w() { |
| 363 ASSERT(worker_thread_ == rtc::Thread::Current()); | 324 ASSERT(worker_thread_ == rtc::Thread::Current()); |
| 364 return cricket::WebRtcMediaEngineFactory::Create( | 325 return cricket::WebRtcMediaEngineFactory::Create( |
| 365 default_adm_.get(), video_encoder_factory_.get(), | 326 default_adm_.get(), video_encoder_factory_.get(), |
| 366 video_decoder_factory_.get()); | 327 video_decoder_factory_.get()); |
| 367 } | 328 } |
| 368 | 329 |
| 369 } // namespace webrtc | 330 } // namespace webrtc |
| OLD | NEW |