名称:PeerConnectionFactory
作用:创建PeerConnection及全局相关的变量
文件:pc\peerconnectionfactory.cc
核心成员变量及类型:
std::unique_ptr<cricket::ChannelManager> channel_manager_;
std::unique_ptr<rtc::BasicNetworkManager> default_network_manager_;
std::unique_ptr<rtc::BasicPacketSocketFactory> default_socket_factory_;
std::unique_ptr<cricket::MediaEngineInterface> media_engine_;
std::unique_ptr<webrtc::CallFactoryInterface> call_factory_;
std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory_;
创建方法:pc\createpeerconnectionfactory.cc
webrtc::CreatePeerConnectionFactory()
{
media_engine = cricket::WebRtcMediaEngineFactory::Create();
call_factory = CreateCallFactory();
event_log_factory = CreateRtcEventLogFactory();
return CreateModularPeerConnectionFactory();
}
创建过程:
webrtc::CreatePeerConnectionFactory() pc\createpeerconnectionfactory.cc
|
webrtc::CreateModularPeerConnectionFactory() pc\peerconnectionfactory.cc
|
webrtc::CreateModularPeerConnectionFactory(PeerConnectionFactoryDependencies dependencies) pc\peerconnectionfactory.cc
|
webrtc::PeerConnectionFactory::Initialize() pc\peerconnectionfactory.cc
CreateModularPeerConnectionFactory()用media_engine、call_factory及event_log_factory作为参数,最终调用到pc\peerconnectionfactory.cc中的CreateModularPeerConnection()函数,该函数内部主要逻辑为:
1 创建PeerConnectionFactory对象 并用传输的三个参数初始化
2 调用PeerConnectionFactory的Initialize()函数,该方法主要是用来创建网络管理器、socket工厂及通道管理器
PeerConnectionFactoryInterface *
CreateModularPeerConnectionFactory()
{
pc_factory = new PeerConnectionFactory();
pc_factory->Initialize();
return pc_factory;
}
bool PeerConnectionFactory::Initialize()
{
RTC_DCHECK(signaling_thread_->IsCurrent());
rtc::InitRandom(rtc::Time32());
default_network_manager_.reset(new rtc::BasicNetworkManager());
default_socket_factory_.reset(new rtc::BasicPacketSocketFactory(network_thread_));
channel_manager_ = absl::make_unique<cricket::ChannelManager>(std::move(media_engine_) ...);
channel_manager_->SetVideoRtxEnabled(true);
if (!channel_manager_->Init())
{
return false;
}
return true;
}
从上可以看到,PeerConnectionFactory的创建过程中主要是存储及创建一些全局相关的参数,如media_engine、defaulte_network_manager、default_socket_factory及channel_manager。注意其中media_engine又作为参数用来创建channel_manager,media_engine的创建准备在下一篇介绍一下。