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

本文详细解析了WebRTC在客户端的登录流程、发送及接收消息的机制。重点介绍了PeerConnectionClient如何通过两个socket与服务器通讯,分别处理主动发起的SDP信令和接收对端Client的SDP信令。

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_,会出现处理不过来异常。

 

 

 

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值