WEBRTC源码阅读 1 初识
流程
相关的流程在许多博客和官网上都能找到。简单来说,要通信的两端,每端有各自的媒体流、媒体轨和网络信息,它们通过WebRtc提供API,解决两个主要问题:
- 两端的IP可能隐藏在NAT后面,所以需要做NAT穿透,用到的协议有STUN或TURN。
- 两端需要进行媒体流信息协议的匹配,具体来说,可能一个媒体流对应一个媒体轨,也可能一个媒体流融合了多个媒体轨等复杂情况,所以两端应当需要“协商”决定。
所以,WebRtc引入了SDP作为信令,其中包含了网络信息和媒体信息,每端先根据自身情况,设定自身信息(SetLocal),再通过信令服务器,获得对端信息,并设置对端信息(SetRemote),最后建立p2p连接。
重要的定义
1. SDP(Session Description Protocol)
根据名字,可以直接将SDP翻译成“描述会话的协议”。那么什么是会话呢——一次电话、一次视频传输等都是一次会话,而要想完成上述功能,需要下面的信息:
- 两个通信媒介的网络传输地址
- 多媒体数据的传输格式
- 其他辅助信息
这些信息都需要第三方(服务器)帮助协商,协商完毕后就可以完成P2P的连接。图中的Answer和Offer都属于SDP,它们的具体分析会在后面的文章阐述(也不知道什么时候能看到)。
2. ICE(Interactive Connectivity Establishment)
英文定义:ICE is a technique used in computer networking to find ways for two computers to talk to each other as directly as possible in peer-to-peer networking.在WebRtc中使用STUN、TURN协议进行传输,它包含传输的地址和SDP协议(这儿的传输地址是指候选地址,见下面的ICE Candidate)。
3. ICE Candidate
一共有4种:
- 本机上的地址(host),若没有NAT,理论上该地址可以直接作为P2P的一端。
- STUN 看到的客户端地址——srlx
- TURN 看到的客户端地址——relayed
- 对端地址 prflx
不断匹配两端的候选地址,直到他们能够直接互通。