WebRTC学习进阶之路 --- 十六、源码分析之最核心的内容PeerConnection

本文深入分析WebRTC中PeerConnection的建立过程,包括核心类介绍、连接流程、CreatePeerConnection方法以及PeerConnectionFactory的数据成员和方法。通过Signaling Server、ICE服务器等,解释了P2P连接的建立步骤。
摘要由CSDN通过智能技术生成

WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274

本文我们来看WebRTC的核心通信模块PeerConnection,来看下酒精是如何为通信多方建立连接,提供通信机制的。

一、核心类整体介绍

看过前边文章的应该都已经知道,WebRTC的源码中api中的都是给应用层提供的内容,具体的实现都会放到内部的各个模块中去,PC的整个设计亦是如此:

api/peer_connection_interface.h  
PeerConnectionInterface PC对外提供的所有方法。使用时应用层都是通过创建该对象然后进行各个方法的应用。
PeerConnectionFactoryInterface PeerConnectionFactoryInterface是用于创建PeerConnection,MediaStream和MediaStreamTrack对象的工厂接口。通过CreatePeerConnection()创建PeerConnectionInterface。
pc/peer_connection_factory.h  
PeerConnectionFactory PeerConnectionFactory类提供了用于创建PeerConnection,MediaStream和MediaStreamTrack对象的工厂方法。PeerConnectionFactory继承于PeerConnectionFactoryInterface,做具体实现。
pc/peer_connection.h  
PeerConnection PeerConnection是PeerConnectionInterface API表面定义的PeerConnection对象的实现

二、建立连接的过程

WebRTC Peerconnection通信过程中的四种角色:

  • Signaling Server
  • ICE/TURN/STUN Server
  • Remote Peer
  • Local Peer

通信过程中的基本概念:

  • Room:Signaling Server使用Room的概念对同一组通信的peers进行配对管理,一个room中包含有1个或者多个peers。当没有peers存在时room销毁;当第一个peer连接到signaling server时执行create room动作,此时因为没有其他peers,建立room的这个peer不与其他节点建立P2P通信;其他peers随后加入room,加入room后会主动与room已经存在的peer建立连接;
  • Offer:主动与其他peer建立P2P链接的peer把自己的SDP信息整理好,通过signaling server转发给room里面的其他peer,这个SDP信息包就是Offer;
  • Answer:被动连接的Peer在收到signaling server转发的其他peer的offer信息以后,也把自己的SDP信息整理好,同样通过signaling server转发给主动连接它的peer,他自己的SDP信息包就是Answer;
  • IceCandidate:Peer与ICE/TURN/STUN Server直接建立连接,获取自己的NAT类型以及外网IP和端口,这些ICE/TURN/STUN Server返回的消息就是IceCandidate或者直接简称Candidate;
     

PeerConnection连接建立流程图:

å¨è¿éæå¥å¾çæè¿°

对于上图中描述的PeerConnection建立的完整流程进行以下说明(上图是以ClientA主动向ClientB发起连接为例):

  • 首先ClientA和ClientB均通过双向通信方式如WebSocket连接到Signaling Server上;
  • ClientA在本地首先通GetMedia访问本地的media接口和数据,并创建PeerConnection对象,调用其AddStream方法把本地的Media添加到PeerConnection对象中。对于ClientA而言,既可以在与Signaling Server建立连接之前就创建并初始化PeerConnection如阶段1,也可以在建立Signaling Server连接之后创建并初始化PeerConnection如阶段2;ClientB既可以在上图的1阶段也可以在2阶段做同样的事情,访问自己的本地接口并创建自己的PeerConnection对象。
  • 通信由ClientA发起,所以
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值