blob: 962b08c7c9973d29f0627a9991e8a947b1828084 [file] [log] [blame]
Seth Hampson845e8782018-03-02 11:34:10 -08001
henrike@webrtc.org28e20752013-07-10 00:45:36 +00002/*
kjellanderb24317b2016-02-10 07:54:43 -08003 * Copyright 2011 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00004 *
kjellanderb24317b2016-02-10 07:54:43 -08005 * Use of this source code is governed by a BSD-style license
6 * that can be found in the LICENSE file in the root of the source
7 * tree. An additional intellectual property rights grant can be found
8 * in the file PATENTS. All contributing project authors may
9 * be found in the AUTHORS file in the root of the source tree.
henrike@webrtc.org28e20752013-07-10 00:45:36 +000010 */
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +000011
Steve Anton10542f22019-01-11 09:11:00 -080012#ifndef PC_PEER_CONNECTION_FACTORY_H_
13#define PC_PEER_CONNECTION_FACTORY_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000014
kwibergd1fe2812016-04-27 06:47:29 -070015#include <memory>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000016#include <string>
17
Steve Anton10542f22019-01-11 09:11:00 -080018#include "api/media_stream_interface.h"
Steve Anton10542f22019-01-11 09:11:00 -080019#include "api/peer_connection_interface.h"
Mirko Bonadeid9708072019-01-25 20:26:48 +010020#include "api/scoped_refptr.h"
Niels Möller65f17ca2019-09-12 13:59:36 +020021#include "api/transport/media/media_transport_interface.h"
Steve Anton10542f22019-01-11 09:11:00 -080022#include "media/sctp/sctp_transport_internal.h"
23#include "pc/channel_manager.h"
24#include "rtc_base/rtc_certificate_generator.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020025#include "rtc_base/thread.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000026
deadbeef41b07982015-12-01 15:01:24 -080027namespace rtc {
28class BasicNetworkManager;
29class BasicPacketSocketFactory;
Yves Gerey665174f2018-06-19 15:03:05 +020030} // namespace rtc
deadbeef41b07982015-12-01 15:01:24 -080031
henrike@webrtc.org28e20752013-07-10 00:45:36 +000032namespace webrtc {
33
skvlad11a9cbf2016-10-07 11:53:05 -070034class RtcEventLog;
35
perkj@webrtc.org81134d02015-01-12 08:30:16 +000036class PeerConnectionFactory : public PeerConnectionFactoryInterface {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000037 public:
jbauchcb560652016-08-04 05:20:32 -070038 void SetOptions(const Options& options) override;
wu@webrtc.org97077a32013-10-25 21:18:33 +000039
Steve Anton36b29d12017-10-30 09:57:42 -070040 rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection(
htaa2a49d92016-03-04 02:51:39 -080041 const PeerConnectionInterface::RTCConfiguration& configuration,
kwibergd1fe2812016-04-27 06:47:29 -070042 std::unique_ptr<cricket::PortAllocator> allocator,
Henrik Boströmd03c23b2016-06-01 11:44:18 +020043 std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator,
htaa2a49d92016-03-04 02:51:39 -080044 PeerConnectionObserver* observer) override;
45
Benjamin Wright6f7e6d62018-05-02 13:46:31 -070046 rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection(
47 const PeerConnectionInterface::RTCConfiguration& configuration,
48 PeerConnectionDependencies dependencies) override;
49
henrike@webrtc.org28e20752013-07-10 00:45:36 +000050 bool Initialize();
51
Florent Castelli72b751a2018-06-28 14:09:33 +020052 RtpCapabilities GetRtpSenderCapabilities(
53 cricket::MediaType kind) const override;
54
55 RtpCapabilities GetRtpReceiverCapabilities(
56 cricket::MediaType kind) const override;
57
Seth Hampson845e8782018-03-02 11:34:10 -080058 rtc::scoped_refptr<MediaStreamInterface> CreateLocalMediaStream(
59 const std::string& stream_id) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000060
Steve Anton36b29d12017-10-30 09:57:42 -070061 rtc::scoped_refptr<AudioSourceInterface> CreateAudioSource(
htaa2a49d92016-03-04 02:51:39 -080062 const cricket::AudioOptions& options) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000063
perkja3ede6c2016-03-08 01:27:48 +010064 rtc::scoped_refptr<VideoTrackInterface> CreateVideoTrack(
65 const std::string& id,
66 VideoTrackSourceInterface* video_source) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000067
Yves Gerey665174f2018-06-19 15:03:05 +020068 rtc::scoped_refptr<AudioTrackInterface> CreateAudioTrack(
69 const std::string& id,
70 AudioSourceInterface* audio_source) override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000071
Niels Möllere8e4dc42019-06-11 14:04:16 +020072 bool StartAecDump(FILE* file, int64_t max_size_bytes) override;
ivoc797ef122015-10-22 03:25:41 -070073 void StopAecDump() override;
wu@webrtc.orga9890802013-12-13 00:21:03 +000074
Steve Antonda6c0952017-10-23 11:41:54 -070075 virtual std::unique_ptr<cricket::SctpTransportInternalFactory>
76 CreateSctpTransportInternalFactory();
77
nisseeaabdf62017-05-05 02:23:02 -070078 virtual cricket::ChannelManager* channel_manager();
Karl Wiberg4ae63472019-02-22 00:57:06 +010079
80 rtc::Thread* signaling_thread() {
81 // This method can be called on a different thread when the factory is
82 // created in CreatePeerConnectionFactory().
83 return signaling_thread_;
84 }
85 rtc::Thread* worker_thread() { return worker_thread_; }
86 rtc::Thread* network_thread() { return network_thread_; }
87
wu@webrtc.org97077a32013-10-25 21:18:33 +000088 const Options& options() const { return options_; }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000089
Piotr (Peter) Slatalae0c2e972018-10-08 09:43:21 -070090 MediaTransportFactory* media_transport_factory() {
91 return media_transport_factory_.get();
92 }
93
henrike@webrtc.org28e20752013-07-10 00:45:36 +000094 protected:
Danil Chapovalovf5258be2019-03-19 17:45:24 +010095 // This structure allows simple management of all new dependencies being added
96 // to the PeerConnectionFactory.
Benjamin Wright5234a492018-05-29 15:04:32 -070097 explicit PeerConnectionFactory(
98 PeerConnectionFactoryDependencies dependencies);
99
Harald Alvestrand19793842018-06-25 12:03:50 +0200100 // Hook to let testing framework insert actions between
101 // "new RTCPeerConnection" and "pc.Initialize"
102 virtual void ActionsBeforeInitializeForTesting(PeerConnectionInterface*) {}
103
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000104 virtual ~PeerConnectionFactory();
105
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000106 private:
Erik Språng662678d2019-11-15 17:18:52 +0100107 bool IsTrialEnabled(absl::string_view key) const;
108
eladalon248fd4f2017-09-06 05:18:15 -0700109 std::unique_ptr<RtcEventLog> CreateRtcEventLog_w();
zhihuang38ede132017-06-15 12:52:32 -0700110 std::unique_ptr<Call> CreateCall_w(RtcEventLog* event_log);
111
perkj@webrtc.org81134d02015-01-12 08:30:16 +0000112 bool wraps_current_thread_;
danilchape9021a32016-05-17 01:52:02 -0700113 rtc::Thread* network_thread_;
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +0000114 rtc::Thread* worker_thread_;
danilchape9021a32016-05-17 01:52:02 -0700115 rtc::Thread* signaling_thread_;
zhihuang38ede132017-06-15 12:52:32 -0700116 std::unique_ptr<rtc::Thread> owned_network_thread_;
117 std::unique_ptr<rtc::Thread> owned_worker_thread_;
Danil Chapovalov9435c612019-04-01 10:33:16 +0200118 const std::unique_ptr<TaskQueueFactory> task_queue_factory_;
wu@webrtc.org97077a32013-10-25 21:18:33 +0000119 Options options_;
kwibergd1fe2812016-04-27 06:47:29 -0700120 std::unique_ptr<cricket::ChannelManager> channel_manager_;
kwibergd1fe2812016-04-27 06:47:29 -0700121 std::unique_ptr<rtc::BasicNetworkManager> default_network_manager_;
122 std::unique_ptr<rtc::BasicPacketSocketFactory> default_socket_factory_;
zhihuang38ede132017-06-15 12:52:32 -0700123 std::unique_ptr<cricket::MediaEngineInterface> media_engine_;
124 std::unique_ptr<webrtc::CallFactoryInterface> call_factory_;
125 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory_;
Ying Wang0dd1b0a2018-02-20 12:50:27 +0100126 std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory_;
Ying Wang0810a7c2019-04-10 13:48:24 +0200127 std::unique_ptr<NetworkStatePredictorFactoryInterface>
128 network_state_predictor_factory_;
Sebastian Janssondfce03a2018-05-18 18:05:10 +0200129 std::unique_ptr<NetworkControllerFactoryInterface>
130 injected_network_controller_factory_;
Piotr (Peter) Slatalae0c2e972018-10-08 09:43:21 -0700131 std::unique_ptr<MediaTransportFactory> media_transport_factory_;
Ivo Creusenc3d1f9b2019-11-01 11:47:51 +0100132 std::unique_ptr<NetEqFactory> neteq_factory_;
Erik Språng662678d2019-11-15 17:18:52 +0100133 const std::unique_ptr<WebRtcKeyValueConfig> trials_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000134};
135
136} // namespace webrtc
137
Steve Anton10542f22019-01-11 09:11:00 -0800138#endif // PC_PEER_CONNECTION_FACTORY_H_