WebRTC-Android 探索 - WebRTC 中名词解释

1,738 阅读3分钟

在《WebRTC-Android 探索 - 创建音视频通话程序的基本姿势》一文中提到了很多诸如 PeerConnection 的专业名词,对于这些名词笔者通过这篇文章来简要解释和总结这些名词。

PeerConnection

PeerConnection 是 WebRTC 中很重要的一部分,在所有端的 WebRTC 会话实现中第一步都是创建 PeerConnection,一个 PeerConnection 代表一个由本地计算机到远端的 WebRTC 连接。WebRTC 的初衷是为了打造一个无插件化的 P2P 媒体通信解决方案,这个方案的核心就是 PeerConnection。

SDP

SDP 的全称为 Session Description Protocol,即会话描述协议。WebRTC 使用 SDP 来协商会话的参数,比如一次会话有媒体格式和网络传输地址,具体可参考《WebRTC-Android 探索 - 创建 P2P 连接中的那些东西都是啥》中 SDP 部分。

WebRTC 通过 SDP 来进行会话参数协商,于是有了创建会话过程中的 Offer 和 Answer,Offer 和 Answer 都是 SDP。

Offer/Answer

由于一次通话过程中可能会出现能力不对等的情况,比如使用了对端不支持的媒体格式,所以需要通过 Offer 和 Answer 来进行协商,若达成一致即开始会话,若未达成一致即报错,比如在 Android 端的 SdpObserver 中是由相关错误回调的,若在此步回调错误即需要看下是否两端采用了不兼容的配置。

NAT

NAT 全称 Network Address Translation,中文为网络地址转换。因为 ip 数据包通过路由器或防火墙会重写来源 IP 地址或目的 IP 地址,比如家用路由器使用网络地址端口转换(NAPT), 它不仅改 ip,还修改 TCP 和 UDP 协议的端口号,这样就能让内网中的设备共用同一个外网 IP。举个例子,NAPT 维护一个类似下表的 NAT 表:

img

NAT 设备会根据 NAT 表对出去和进来的数据做修改,比如将 192.168.0.3:8888 发出去的封包改成120.132.92.21:9202,外部就认为他们是在和 120.132.92.21:9202 通信,同时 NAT 设备会把收到的封包的IP和端口改成对应内网地址再发给内网的主机,这样内部和外部就能双向通信了。

所以 WebRTC 通过 ICE 来进行一个内网穿透来进行网络地址转换。

ICE

ICE 是一个 NAT 穿透框架,可以整合 STUN、TURN(下文会提)等 NAT 穿透协议,然后在 SDP 中增加传输记录值(ip + 端口 + 协议),然后进行连通性测试,要连通了就可以进行传输媒体数据了。

STUN

STUN 是 NAT 穿透的一套工具,它提供获取内网连接到公网连接的映射关系的机制,如上面 NAT 示例,可以通过 STUN 服务器获得客户端的地址。

一个免费可用的 STUN 服务:stun:stun.l.google.com:19302

TURN

TURN 协议是 STUN 协议的扩展,允许一个 peer 端使用一个中继地址(relay address)即可和多个 peer 端进行通信,通过为每个 peer 端分配中继地址,其他 peer 端向一个 peer 端的中继地址发送数据,TURN 服务器即将数据转发给那个 peer 端。其实大部分时候都需要 TURN 服务器来中转,仅靠 STUN 打洞成功概率并不高。TURN 服务器可以获得客户端的地址和中继地址。

ICE Candidate

一个 ICE Candidate 其实就是一个传输地址记录值,比如记录了由 TURN 服务器提供的客户端地址和中继地址。ICE 框架会对每个 ICE Candidate 进行连接尝试,若要可以连通即可进行通信。

总结

这些名词在 WebRTC 开发中贯穿全程,对其有基本的了解是非常必要的。

笔者暂停 WebRTC 开发转去做 Android 系统及 UI 开发一年多,通过撰写这篇文章又能想起很多,所以适当对这部分内容总结对我是非常有帮助的。