1 /* 2 * libjingle 3 * Copyright 2011 Google Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifndef TALK_APP_WEBRTC_PEERCONNECTIONFACTORY_H_ 29 #define TALK_APP_WEBRTC_PEERCONNECTIONFACTORY_H_ 30 31 #include <string> 32 33 #include "talk/app/webrtc/dtlsidentitystore.h" 34 #include "talk/app/webrtc/mediacontroller.h" 35 #include "talk/app/webrtc/mediastreaminterface.h" 36 #include "talk/app/webrtc/peerconnectioninterface.h" 37 #include "talk/session/media/channelmanager.h" 38 #include "webrtc/base/scoped_ptr.h" 39 #include "webrtc/base/scoped_ref_ptr.h" 40 #include "webrtc/base/thread.h" 41 42 namespace rtc { 43 class BasicNetworkManager; 44 class BasicPacketSocketFactory; 45 } 46 47 namespace webrtc { 48 49 typedef rtc::RefCountedObject<DtlsIdentityStoreImpl> 50 RefCountedDtlsIdentityStore; 51 52 class PeerConnectionFactory : public PeerConnectionFactoryInterface { 53 public: 54 virtual void SetOptions(const Options& options) { 55 options_ = options; 56 } 57 58 rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection( 59 const PeerConnectionInterface::RTCConfiguration& configuration, 60 const MediaConstraintsInterface* constraints, 61 rtc::scoped_ptr<cricket::PortAllocator> allocator, 62 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, 63 PeerConnectionObserver* observer) override; 64 65 bool Initialize(); 66 67 rtc::scoped_refptr<MediaStreamInterface> 68 CreateLocalMediaStream(const std::string& label) override; 69 70 rtc::scoped_refptr<AudioSourceInterface> CreateAudioSource( 71 const MediaConstraintsInterface* constraints) override; 72 73 rtc::scoped_refptr<VideoSourceInterface> CreateVideoSource( 74 cricket::VideoCapturer* capturer, 75 const MediaConstraintsInterface* constraints) override; 76 77 rtc::scoped_refptr<VideoTrackInterface> 78 CreateVideoTrack(const std::string& id, 79 VideoSourceInterface* video_source) override; 80 81 rtc::scoped_refptr<AudioTrackInterface> 82 CreateAudioTrack(const std::string& id, 83 AudioSourceInterface* audio_source) override; 84 85 bool StartAecDump(rtc::PlatformFile file) override; 86 void StopAecDump() override; 87 bool StartRtcEventLog(rtc::PlatformFile file) override; 88 void StopRtcEventLog() override; 89 90 virtual webrtc::MediaControllerInterface* CreateMediaController() const; 91 virtual rtc::Thread* signaling_thread(); 92 virtual rtc::Thread* worker_thread(); 93 const Options& options() const { return options_; } 94 95 protected: 96 PeerConnectionFactory(); 97 PeerConnectionFactory( 98 rtc::Thread* worker_thread, 99 rtc::Thread* signaling_thread, 100 AudioDeviceModule* default_adm, 101 cricket::WebRtcVideoEncoderFactory* video_encoder_factory, 102 cricket::WebRtcVideoDecoderFactory* video_decoder_factory); 103 virtual ~PeerConnectionFactory(); 104 105 private: 106 cricket::MediaEngineInterface* CreateMediaEngine_w(); 107 108 bool owns_ptrs_; 109 bool wraps_current_thread_; 110 rtc::Thread* signaling_thread_; 111 rtc::Thread* worker_thread_; 112 Options options_; 113 // External Audio device used for audio playback. 114 rtc::scoped_refptr<AudioDeviceModule> default_adm_; 115 rtc::scoped_ptr<cricket::ChannelManager> channel_manager_; 116 // External Video encoder factory. This can be NULL if the client has not 117 // injected any. In that case, video engine will use the internal SW encoder. 118 rtc::scoped_ptr<cricket::WebRtcVideoEncoderFactory> 119 video_encoder_factory_; 120 // External Video decoder factory. This can be NULL if the client has not 121 // injected any. In that case, video engine will use the internal SW decoder. 122 rtc::scoped_ptr<cricket::WebRtcVideoDecoderFactory> 123 video_decoder_factory_; 124 rtc::scoped_ptr<rtc::BasicNetworkManager> default_network_manager_; 125 rtc::scoped_ptr<rtc::BasicPacketSocketFactory> default_socket_factory_; 126 127 rtc::scoped_refptr<RefCountedDtlsIdentityStore> dtls_identity_store_; 128 }; 129 130 } // namespace webrtc 131 132 #endif // TALK_APP_WEBRTC_PEERCONNECTIONFACTORY_H_ 133