WebRTC PeerConnection中的3个state

webrtc是一个实时通讯技术,很简单的应用在web浏览器中应用实时通讯技术,包括音视频通话。在使用webrtc技术时,浏览器端都已经基本封装好,只要调用相应的api,就可实现简单的通话,其中一个主要对象就是RTCPeerConnection 支持音频和视频媒体数据通信。本文我们就分享一下一套完整的对等通信是如何实现的。

WebRTC PeerConnection中的3个state

webrtc::PeerConnectionObserver接口类中有三个虚函数OnSignalingChange()、OnIceGatheringChange()、OnIceConnectionChange()用于传递PeerConnection中的状态信息。

SignalingStat

enum SignalingState {
	kStable,                 //  "stable"
	kHaveLocalOffer,         //  "have-local-offer"
 	kHaveLocalPrAnswer,      //  "have-remote-offer"
	kHaveRemoteOffer,        //  "have-local-pranswer"
	kHaveRemotePrAnswer,     //  "have-remote-pranswer"
	kClosed,                 //  "closed"
};

“stable”:没有进行中的SDP交换。要么是刚刚创建,还没有开始SDP交换;要么是协商已经完成,连接成功建立。

“have-local-offer”:已经创建了本地提案,并成功的调用了SetLocalDescription()。

“have-remote-offer”:收到了对端的提案,并成功的调用了SetRemoteDescription()。

“have-local-pranswer”:已经创建了本地应答,并成功的调用了SetLocalDescription()。

“have-remote-pranswer”:收到了对端的提案,并成功的调用了SetRemoteDescription()。

“closed”:连接已关闭

C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

WebRTC PeerConnection中的3个state

IceGatheringState

enum IceGatheringState {
  kIceGatheringNew = 0,       //  "new"
  kIceGatheringGathering,     //  "gathering"
  kIceGatheringComplete,      //  "complete"
};

“new”:刚刚创建,还没有开始收集ICE候选者信息。

“gathering”:正在收集ICE候选者信息

“complete”:完成了ICE候选者信息的收集,已经向对等端发送了ICE候选者结束标识。

IceConnectionState

enum IceConnectionState {
    kIceConnectionNew,              //  "new"
    kIceConnectionChecking,         //  "checking"
    kIceConnectionConnected,        //  "connected"
    kIceConnectionCompleted,        //  "completed"
    kIceConnectionFailed,           //  "failed"
    kIceConnectionDisconnected,     //  "disconnected"
    kIceConnectionClosed,           //  "closed"
};

“new”:正在收集候选地址,或者正在等待对端返回ICE候选者地址。

“checking”:收到了对等端返回的ICE候选者地址,正在进行配对。

“connected”:找到了一条可用的网络连接。为了找到一条更优的网络路径,仍会继续进行ICE候选者地址收集和配对。

“completed”:结束了ICE候选者地址的收集,并从对端收到没有更多ICE候选者地址的指令,最终执行配对过程,成功找到了可用的网络连接。

“failed”:网络连接中断,这是一个可恢复的短暂状态,在弱网环境可能会频繁触发。

“disconnected”:完成了ICE候选者收集,但是因为没有成功连通的候选者对导致配置失败。除非ICE重启,否则该状态不会恢复,同时该状态不会导致DTLS传输层关闭。

“closed”:连接已关闭,不再响应STUN请求。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章