当前位置: 首页 > Web前端 > HTML

WebRTC客户端主要流程分析

时间:2023-03-28 13:23:42 HTML

通信流程由于WebRTC规范没有包含信令协议,所以支持WebRTC的OWT、mediasoup等开源项目在两端建立连接的过程中,信令逻辑是不同的的沟通。但是,一般来说,它的传播过程必然包括以下几个过程。发起者创建一个本地PeerConnection并创建一个Offer。发起者通过信令服务器向响应者发送Offer。应答端创建本地PeerConnection,将发起者的offer置入PeerConnection中,获取Answer。应答端通过信令服务器向发起方发送Answer。发起者将响应段的Answer设置为PeerConnection。两端收集本端PeerConnection的ICECandidate,通过信令服务器发送给对方。对方收到ICECandidate后,设置到本地的PeerConnection。两端音视频通道建立成功,开始接收音视频数据。如果这个进程在局域网中,可以通过一定的方式直接与对端建立信令通道,不需要信令服务器就可以直接建立P2P音视频通道。在这个过程中可以理解一些概念。PeerConnection:WebRTC最初是为浏览器中的P2P媒体通信而设计的,所以它的核心接口类是PeerConnection,简称PC。Offer,Answer:都属于SDP。SDP是一种会话描述协议,用于描述会话的多媒体数据格式等配置信息。通信双方交换SDP的目的是协商一个双方都支持的会话配置。ICE:一种NAT穿越协议,使用STUN和TURN协议完成工作。ICE会在SDP中添加传输地址信息,然后对其进行连通性测试。测试成功后,即可用于传输媒体数据。ICECandidate:ICE传输地址信息,包括host、srflx、relayed、prflx。核心进程WebRTC支持的客户端系统有iOS、Mac、Android、Windows和Linux。两端的代码不同,但核心API的调用过程是相似的。因此,只要掌握了整体的调用流程,就可以顺藤摸瓜地查看每一端的详细代码。这里总结一下调用的关键步骤:全局初始化。创建一个PeerConnectionFactory。通过PeerConnectionFactory接口创建PeerConnection。创建捕获器。通过PeerConnectionFactory接口创建Source和Track。通过PeerConnection接口创建一个Transceiver。创建Offer和Answer,将它们设置为PeerConnection,并相互交换。相互交换ICECandidates,通过ICECandidate回调接受对等的ICECandidates,并设置到PeerConnection。P2P连接的状态可以通过PeerConnection的状态回调函数(Windows端的OnIceConnectionChange)来监听。其中,可以理解WebRTC中的几个重要概念:Capturer:视频数据采集,包括摄像头、屏幕、视频文件等。Source:数据源,数据来自Capturer或者其他,然后将数据传递给Track。Track:媒体数据交换的载体。Sink:Track数据的消费者,远程视频的本地预览和渲染都是Sink。收发器:负责发送和接收媒体数据。以发送和接收视频数据为例,发送端的Capturer采集视频数据交给Source,然后Source发送给本地Track,然后本地Track中的数据被分成两部分channels,一个给本地Sink预览,一个给Transceiver发送给Receiving端。接收端的Track接收到数据后,将其发送给接收端的Sink进行渲染。