webrtc代码走读七 Client调用栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CrystalShaw/article/details/85597129

PASCAL wWinMain

->MainWnd::PreTranslateMessage

->MainWnd::OnDefaultAction

一、login流程

Conductor::StartLogin

->PeerConnectionClient::Connect

->PeerConnectionClient::DoConnect

二、发送消息给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

三、接收消息从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发送关闭命令

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

这样设计原因如下:

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

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

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/85597129