WebRTC之PeerConnection的建立过程

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

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

假设clientAclientB分为为offeranswer.

  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设置给本地


2Answer端的代码与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事件就被触发了。

 

转载于:https://www.cnblogs.com/cther/p/myPeerConnection.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebRTC(Web Real-Time Communication)是一个开源项目,它提供了在浏览器中实现实时音视频通信的技术。下面是对WebRTC源码的简要分析: WebRTC源码主要分为以下几个模块: 1. 信令(Signaling)模块:负责建立和维护通信的连接。它使用WebSocket或者其他协议进行通信,包括传输SDP(Session Description Protocol)和ICE(Interactive Connectivity Establishment)信息。 2. 媒体(Media)模块:处理音视频数据的采集、编码、解码和传输。媒体模块使用WebRTC提供的API,通过WebRTCPeerConnection建立点对点的媒体通信。 3. 网络(Networking)模块:处理网络传输相关的功能,例如NAT穿越、ICE候选地址的收集和选择、STUN和TURN服务器的使用等。 4. 安全(Security)模块:处理加密和身份验证相关的功能,确保通信过程的安全性和隐私性。 5. SDP解析(SDP Parsing)模块:解析和生成SDP信息,SDP包含了关于媒体会话的描述和参数。 6. ICE代理(ICE Agent)模块:负责管理ICE协议的运行,处理候选地址的收集和选择,以及NAT穿越等功能。 7. RTP/RTCP模块:处理音视频的实时传输协议(RTP)和实时传输控制协议(RTCP),包括数据包的发送和接收、丢包恢复、拥塞控制等。 8. 编解码器(Codec)模块:负责音视频数据的编码和解码,WebRTC支持一系列开源编解码器,如VP8、VP9、H.264等。 这些模块之间相互协作,实现了基于浏览器的实时音视频通信。WebRTC的源码使用C++语言编写,涉及到了底层的网络和媒体处理,同时也提供了一系列的API供开发者使用。 请注意,由于WebRTC源码较为庞大,这里只是简要地介绍了主要模块,实际的源码分析需要深入研究和阅读源码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值