前言
本文简单的描述下PeerConnectionFactory类持有的数据成员,以及除了创建PeerConnection外还提供哪些能力,但不对这些方法进一步跟踪源码,留待以后。
PeerConnectionFactory的数据成员
bool wraps_current_thread_; // 信令线程是否Wrap而来
rtc::Thread* network_thread_; // 网络线程
rtc::Thread* worker_thread_; // 工作者线程
rtc::Thread* signaling_thread_; // 信令线程
std::unique_ptr<rtc::Thread> owned_network_thread_; // 持有网络线程
std::unique_ptr<rtc::Thread> owned_worker_thread_; // 持有工作者线程
Options options_; // 选项
std::unique_ptr<cricket::ChannelManager> channel_manager_; // 通道管理器
std::unique_ptr<rtc::BasicNetworkManager> default_network_manager_; // 网络管理器
std::unique_ptr<rtc::BasicPacketSocketFactory> default_socket_factory_; // Socket工厂
std::unique_ptr<cricket::MediaEngineInterface> media_engine_; // 媒体引擎
std::unique_ptr<webrtc::CallFactoryInterface> call_factory_; // Call工厂
std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory_; // EventLog工厂
std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory_; // Fec控制工厂
std::unique_ptr<NetworkControllerFactoryInterface> // 网络控制工厂
injected_network_controller_factory_;
std::unique_ptr<MediaTransportFactory> media_transport_factory_; // 媒体传输工厂
需要注意的有一点是:对于网络线程和工作者线程来说,不仅通过Thread* worker_thread_直接引用了工作者线程,同时std::unique_ptr<Thread> owned_worker_thread_持有了工作者线程。意味着工作者线程和网络线程的管理者是PeerConnectionFactory,由PeerConnectionFactory负责它们的生命周期,对象清理。
PeerConnectionFactory的方法
PeerConnectionFactory类的方法列举如下:
- CreatePeerConnection():创建PeerConnection;
- GetRtpSenderCapabilities():获取发送方能力,包括编解码,RTP扩展头,FEC策略;
- GetRtpReceiverCapabilities():获取接收方能力,与上方相同;
- CreateLocalMediaStream():创建本地媒体流MediaStream;
- CreateAudioSource():创建音频源;
- CreateVideoTrack():创建视频轨VideoTrack;
- CreateAudioTrack():创建音频轨AudioTrack;
- StartAecDump():开始dump回声消除的数据到本地文件;
- StopAecDump():停止dump
- CreateSctpTransportInternalFactory():创建SCTP协议的工厂类
其他的方法就不列举了,就是返回PeerConnectionFactory的数据成员。这些方法中,最重要的是CreatePeerConnection()方法了。另外就是创建媒体流,音频轨,视频轨,音频源这几个媒体相关的方法,通常在JS API中,这几个方法是PeerConnection的功能。并且如果要充分理解MediaStream,VideoTrack,AudioTrack,AudioSource的概念,可以参见之前写过的这篇文章:WebRTC本地媒体——媒体模型