webrtc 客户端peerconnection_client代码分析

文件作用

Peer_connection_client

主要用于信令的建立,sdp和candidate的交换,可以理解该类就是一个sip客户端,主要由该类调用conductor类中的函数,建立媒体流;推荐的做法是使用子节点sip类替换该类,不改动其架构。

继承了下面两个类:
class PeerConnectionClient : public sigslot::has_slots<>,
public rtc::MessageHandler
所以当服务器发过来的socket信号通过此函数回调,例如void PeerConnectionClient::OnRead(rtc::AsyncSocket* socket)以及PeerConnectionClient::OnHangingGetRead

读socket消息
通过PeerConnectionClient::OnRead与PeerConnectionClient::OnHangingGetRead

主要包括下面的函数:
void PeerConnectionClient::OnMessageFromPeer

Conductor类,
主要是封装了webrtc抽象出来的类,用于建立媒体流;该类是建立媒体连接的核心类。Conductor实现PeerConnection PeerConnectionObserver,MainWndCallback 等回调方法。
class Conductor
public webrtc::PeerConnectionObserver,
public webrtc::CreateSessionDescriptionObserver,
public PeerConnectionClientObserver,
public MainWndCallback

下面底层库PeerConnection:
class PeerConnection : public PeerConnectionInterface,
public IceObserver,
public rtc::MessageHandler,
public sigslot::has_slots<> {
Conductor实现了PeerConnection一些方法,例:void Conductor::OnAddStream
PeerConnection里面包括:PeerConnectionClientObserver* callback_; 通过此函数 会调用Conductor重载类。
例:PeerConnection::OnIceCandidate===>PeerConnectionClientObserver::OnIceCandidate===>Conductor::OnIceCandidate
回调了void Conductor::OnIceCandidate 其作用收到信息,然后把信息通过SendMessage(writer.write(jmessage))发送
通过main_wnd_->QueueUIThreadCallback(SEND_MESSAGE_TO_PEER, msg)放入队列中,然后
UIThreadCallback回调,进行消息的发送。

发送消息
bool MainWnd::PreTranslateMessage(MSG* msg)=> Conductor::UIThreadCallback回调,进行消息的发送。

主要包括下面的函数:
1.void PeerConnectionClient::OnMessageFromPeer ========>void Conductor::OnMessageFromPeer 主要实现的功能是解析SDP信息或者ICE信息,如果是sdp调用 peer_connection_->SetRemoteDescription,如果ICE信息

2.Conductor::OnIceCandidate
收到ice信息,并且准备发送SendMessage(writer.write(jmessage));。

3.Conductor::UIThreadCallback 前面队列准备的信息,通过此函数发送。

Main_wnd类,
界面的实现,注意其消息循环。

Main.cc文件,
该文件是启动类,注意,因为webrtc内部很多地方使用的是异步调用,依赖系统的主消息循环,所以必须参考该类的写法,最好不要使用基于mfc的框架,如果旧的界面库无法弃用,建议做成两个不同的进程,使用进程间通信来完成通信的建立。

猜你喜欢

转载自blog.csdn.net/bvngh3247/article/details/82024064