10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2011, Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_APP_WEBRTC_PEERCONNECTIONFACTORY_H_ 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_APP_WEBRTC_PEERCONNECTIONFACTORY_H_ 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/mediastreaminterface.h" 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/peerconnectioninterface.h" 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/base/scoped_ptr.h" 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/base/thread.h" 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/session/media/channelmanager.h" 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace webrtc { 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass PeerConnectionFactory : public PeerConnectionFactoryInterface, 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public talk_base::MessageHandler { 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 435c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org virtual void SetOptions(const Options& options) { 445c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org options_ = options; 455c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 465c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::scoped_refptr<PeerConnectionInterface> 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreatePeerConnection( 4941c4db4baf4ecf1e3e5e91178534a2603b7dce87buildbot@webrtc.org const PeerConnectionInterface::RTCConfiguration& configuration, 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const MediaConstraintsInterface* constraints, 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PortAllocatorFactoryInterface* allocator_factory, 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DTLSIdentityServiceInterface* dtls_identity_service, 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PeerConnectionObserver* observer); 5441c4db4baf4ecf1e3e5e91178534a2603b7dce87buildbot@webrtc.org 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool Initialize(); 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::scoped_refptr<MediaStreamInterface> 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateLocalMediaStream(const std::string& label); 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::scoped_refptr<AudioSourceInterface> CreateAudioSource( 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const MediaConstraintsInterface* constraints); 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::scoped_refptr<VideoSourceInterface> CreateVideoSource( 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoCapturer* capturer, 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const MediaConstraintsInterface* constraints); 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::scoped_refptr<VideoTrackInterface> 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateVideoTrack(const std::string& id, 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoSourceInterface* video_source); 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::scoped_refptr<AudioTrackInterface> 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateAudioTrack(const std::string& id, 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioSourceInterface* audio_source); 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 751b5713169ff3f21791214c4500e5d775048c3ba9wu@webrtc.org virtual bool StartAecDump(talk_base::PlatformFile file); 76f89a403cd8db88001322bbb0765c4636fd123700wu@webrtc.org 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual cricket::ChannelManager* channel_manager(); 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::Thread* signaling_thread(); 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual talk_base::Thread* worker_thread(); 805c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org const Options& options() const { return options_; } 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PeerConnectionFactory(); 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PeerConnectionFactory( 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::Thread* worker_thread, 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::Thread* signaling_thread, 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioDeviceModule* default_adm, 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::WebRtcVideoEncoderFactory* video_encoder_factory, 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::WebRtcVideoDecoderFactory* video_decoder_factory); 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~PeerConnectionFactory(); 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool Initialize_s(); 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void Terminate_s(); 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_refptr<AudioSourceInterface> CreateAudioSource_s( 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const MediaConstraintsInterface* constraints); 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_refptr<VideoSourceInterface> CreateVideoSource_s( 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoCapturer* capturer, 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const MediaConstraintsInterface* constraints); 10041c4db4baf4ecf1e3e5e91178534a2603b7dce87buildbot@webrtc.org 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_refptr<PeerConnectionInterface> CreatePeerConnection_s( 10241c4db4baf4ecf1e3e5e91178534a2603b7dce87buildbot@webrtc.org const PeerConnectionInterface::RTCConfiguration& configuration, 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const MediaConstraintsInterface* constraints, 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PortAllocatorFactoryInterface* allocator_factory, 1055aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org DTLSIdentityServiceInterface* dtls_identity_service, 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PeerConnectionObserver* observer); 10741c4db4baf4ecf1e3e5e91178534a2603b7dce87buildbot@webrtc.org 1081b5713169ff3f21791214c4500e5d775048c3ba9wu@webrtc.org bool StartAecDump_s(talk_base::PlatformFile file); 109f89a403cd8db88001322bbb0765c4636fd123700wu@webrtc.org 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Implements talk_base::MessageHandler. 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnMessage(talk_base::Message* msg); 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool owns_ptrs_; 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::Thread* signaling_thread_; 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::Thread* worker_thread_; 1165c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org Options options_; 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_refptr<PortAllocatorFactoryInterface> allocator_factory_; 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // External Audio device used for audio playback. 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_refptr<AudioDeviceModule> default_adm_; 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_ptr<cricket::ChannelManager> channel_manager_; 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // External Video encoder factory. This can be NULL if the client has not 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // injected any. In that case, video engine will use the internal SW encoder. 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_ptr<cricket::WebRtcVideoEncoderFactory> 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video_encoder_factory_; 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // External Video decoder factory. This can be NULL if the client has not 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // injected any. In that case, video engine will use the internal SW decoder. 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::scoped_ptr<cricket::WebRtcVideoDecoderFactory> 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video_decoder_factory_; 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace webrtc 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_APP_WEBRTC_PEERCONNECTIONFACTORY_H_ 134