WebRTC之PeerConnection的建立过程

基于第三方webrtc开源平台开发视频会议难度不是很大,主要是业务方面的问题。但是,一旦涉及核心的底层问题就需要阅读源代码,找出bug了,难度不小。

项目需要,分析了一下peerconnection的创建过程。

假设clientA,clientB分为为offer和answer.

  1. Offer端

pc =new RTCPeerConnection(null);

pc.onicecandidate=handleIceCandidate;

pc.onaddstream=handleRemoteStreamAdded;

pc.onremovestream=handleRemoteStreamRemoved;

pc.addStream(localStream);

pc.createOffer(setLocalAndSend,handleCreateOfferError);

function
handleIceCandidate(event){

//将本地产生的candidate发送给对方

sendMessage({

type:”candidate”;

candidate:event.candidate.candidate;

……;

});

}

function
setLocalAndSend(sdp){

pc.setLocalDescription(sdp);//设置本地sdp,完成设置后onicecandidate事件会调用。

sendMessage(sdp);//将offer发送给对方

}

当offer提供端接收到来自对方的answer时:
pc.setRemoteDescription(new RTCSessionDescription(message));

当offer端接收到来自对方的candidate时,pc.addIceCandidate(candidate);//将来自对方的candidate设置给本地

2.
Answer端的代码与offer端类似,红色部分代码不同

pc =new
RTCPeerConnection(null);

pc.onicecandidate=handleIceCandidate;

pc.onaddstream=handleRemoteStreamAdded;

pc.onremovestream=handleRemoteStreamRemoved;

pc.addStream(localStream);

注意区别:offer端是主动调用createOffer函数并将offer发送给对方。Answer端接受到offer后,才会创建peerConnection等一系列操作:

pc.setRemoteDescription(sdp);//设置接收到的远端offer

pc.createAnswer(setLocalAndSend,null,sdpConstraints);//创建answer并发送给对方。

setLocalAndSend中会设置本地sdp,完成设置后onicecandidate事件会调用。然后将candidate发送给对方,对方收到candidate后调用addIceCandidate函数完成peerconnection的创建。

对于onaddstream事件的调用时机,对于offer端,在接收到offer之后就可能onaddstream事件就被触发了。

时间: 2024-09-29 04:48:28

WebRTC之PeerConnection的建立过程的相关文章

PCM data flow - part 6: 声卡和PCM设备的建立过程

前面几章分析了Codec.Platform.Machine驱动的组成部分及其注册过程,这三者都是物理设备相关的,大家应该对音频物理链路有了一定的认知.接着分析音频驱动的中间层,由于这些并不是真正的物理设备,故我们称之为逻辑设备. PCM逻辑设备,我们又习惯称之为PCM中间层或pcm native,起着承上启下的作用:往上是与用户态接口的交互,实现音频数据在用户态和内核态之间的拷贝:往下是触发codec.platform.machine的操作函数,实现音频数据在dma_buffer<-> cpu

驱动学习之gpiolib的建立过程

1:gpiolib的学习重点 (1)gpiolib的建立过程:gpiolib和虚拟地址映射类似,也是需要一个建立 过程的,因此在学习的时候,我们需要明白gpiolib是什么时候建立的,建立函数在哪被调用的. (2)gpiolib的使用方法:申请.使用.释放 (3)gpiolib的架构:涉及哪些目录的哪些文件 2:什么是gpiolib,为什么需要使用gpiolib linux中从2.6.35以后就开始有gpiolib库了,gpiolib的作用是对所有的gpio实行统一管理,因为驱动在工作的时候,会

OSPF邻接建立过程

OSPF邻接建立过程

图解HTTPS建立过程

阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512)3. When I see you again(DES.AES.RSA.Base64.MD5加密原理介绍,代码实现) HTTPS建立过程相当复杂,下图为示意图,可以有整体认识,一般我们编程知道这些已足够. 如果你想仿照HTTPS实现类似加密,可以阅读下具

tcp/ip 建立过程

1. tcp /ip : 在osi网络参考模型中,它提供着可靠的传输服务/ 定义:传输控制协议 a:   tcp/ip 的建立过程,通过三次握手,和四次挥手来完成. 2. 何为三次握手? 首先在这假设,syn="m"   ,syn 就是客户端在向务端发送链接请求,服务端会收到这个syn的链接请求 包,客户端的状态为:syn_sent 第一次握手:当客户端给服务器发送syn(m)链接请求,等待服务器的确认,然后客户端的状态为 syn_sent 第二次握手:当服务端收到syn(m)的包的链

strongswan——IKE建立过程

strongswan的主进程为charon进程,负责IKE SA.IPSec SA建立.拆除.更新及其他相关的操作. charon进程默认通过socket-default插件与内核交互,用于IKE协议报文的收发.socket-default插件被编译为动态库,charon进程启动的时候,在初始化阶段动态加载.如下图 Socket-default通过poll机制阻塞等待内核收到的IKE协议报文.,如下图 如果使用的内核是裁剪过或二次开发的内核,要特别注意是否支持poll机制.比如说,如果仅支持se

【数通面试私房菜之BGP专题】第一期:BGP邻居建立过程

BGP邻居建立过程 BGP(Border Gateway Protocol)是一种用于自治系统(Autonomous System)之间的动态路由协议.BGP使用TCP作为其传输层协议(监听端口号为179). BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送: ? Open报文:用于建立BGP对等体连接.? Update报文:用于在对等体之间交换路由信息.? Notification报文:用于中断BGP连接.? Keepalive报文:用于保持

OSPF路由网络建立过程

发现邻居--选举DR/BDR--形成链路状态数据库--SPF算法--形成路由网络 在 发现邻居--选举DR/BDR 阶段路由器之间互相发送Hello报文,根据Hello包,每台路由器生成了基本的Datebase:然后根据优先级和RID在每一个网段选出一个DR/BDR:这个时候路由器处在two-way状态. 在 形成链路状态数据库--SPF算法--形成路由网络 过程中,首先互相发送DBD报文,互相交换Datebase,这个时候路由器处于Exstate状态:如果发现收到的Datebase和自己的有出

SSL协议会话建立过程解析

SSL协议 缩写 Secure SocketLayer,是一种制定的保证服务器和客户端安全通信的一种协议.最初是由 Netscape 在1996年发布,由于一些安全的原因SSL v1.0和SSL v2.0都没有公开,直到1996年的SSL v3.0.TLS是SSL v3.0的升级版,目前市面上所有的HTTPS都是用的是TLS,而不是SSL.本文主要分析和讲解TLS. HTTPS(Hyper TextTransfer Protocol over Secure Socket Layer),是一种基于