webrtc代码走读十(Client调用栈)

PASCAL wWinMain

->MainWnd::PreTranslateMessage

webrtc代码走读十(Client调用栈)_第1张图片

->MainWnd::OnDefaultAction

webrtc代码走读十(Client调用栈)_第2张图片

一、login流程

Conductor::StartLogin

->PeerConnectionClient::Connect

->PeerConnectionClient::DoConnect

webrtc代码走读十(Client调用栈)_第3张图片

二、发送消息给Server

Conductor::ConnectToPeer

该函数还初始化CreatePeerConnection、AddStreams。

->PeerConnection::CreateOffer

->WebRtcSession::CreateOffer

->WebRtcSessionDescriptionFactory::CreateOffer

->WebRtcSessionDescriptionFactory::SetCertificate

->WebRtcSessionDescriptionFactory::InternalCreateOffer

->WebRtcSessionDescriptionFactory::PostCreateSessionDescriptionSucceeded(MSG_CREATE_SESSIONDESCRIPTION_SUCCESS消息)

->WebRtcSessionDescriptionFactory::OnMessage

->Conductor::OnSuccess

->Conductor::SendMessage(SEND_MESSAGE_TO_PEER消息)

->PeerConnectionClient::SendToPeer

webrtc代码走读十(Client调用栈)_第4张图片

三、接收消息从server

control_socket_->SignalReadEvent.connect(this,&PeerConnectionClient::OnRead);
hanging_get_->SignalReadEvent.connect(this,&PeerConnectionClient::OnHangingGetRead);

->ReadIntoBuffer

->ParseServerResponse等

说明:

Client端使用两个socket与Server通讯:control_socket_、hanging_get_。

1、control_socket_负责login、主动发起的sdp信令。

2、hanging_get_负责接收peer端经过server转发给本端的sdp。

该demo里面的一条SDP对应一个SOCK_STREAM。也就是传输完一条SDP信令,关闭一次SOCK_STREAM。下次再有数据要传,就重新打开。

server侧的DataSocket::Send发送关闭命令

webrtc代码走读十(Client调用栈)_第5张图片

Client侧的PeerConnectionClient::ReadIntoBuffer受理关闭请求

webrtc代码走读十(Client调用栈)_第6张图片

这样设计原因如下:

1、NAT的session生命期时间不固定,之前建立好的链接,可能被随时切断。所以当网络报文发送不是十分密集的情况下,一个交互关闭一次SOCK_STREAM,比较安全。

2、定义两个control_socket_、hanging_get_原因:control_socket_仅负责收发client发起的SDP信令。hanging_get_仅负责对端Client通过Server转发过来的SDP信令。这两种信令有可能在同一时间处理,若仅使用一个control_socket_,会出现处理不过来异常。

 

 

 

 

你可能感兴趣的:(webrtc,webrtc代码走读)