What
WebRTC API 是一项实时通信技术,能够在网站或站点之间建立点对点链接(Perr-to-Perr),实现视频流或者音频流和其他任意数据的传输。
它即是 API 也是协议,WebRTC 协议是两个 WebRTC Agent 协商双向安全实时通信的一种规则。可以通过 WebRTC API 使用 WebRTC 协议。目前 WebRTC API 只有JavaScript 版本。
术语
关于 WebRTC 的一些概念和术语
- 开放标准
- 多种实现
- 在浏览器中使用
- 强制加密
- NAT 穿透
- 复用现有技术
- 拥塞控制
- 亚秒级延迟
实现步骤
- 信令
Signaling
- 链接
Connecting
- 安全加密
Securing
- 通信
Communicating
信令
WebRTC 用来显示点对点链接(Perr-to-Peer),链接两个点是建立通信的第一步。信令用于 Peer 在 WebRTC 服务中,找对与其相对应的 Perr。
信令用于引导呼叫,当 WebRTC Agent 启动时,帮助其找到与其通信的对方和要通信的内容。
信令使用一种现有的协议:SDP协议,两个 WebRTC Agent 交换的 SDP 所包含的信息有:
- Agent 可供外部访问的 IP 和端口
- Agent 希望发送多少路音频和视频流。
- Agent 支持哪些音频和视频编解码器。
- 连接时需要用到的值
uFrag/uPwd
- 加密传输时需要用到的值(证书指纹)
应用通常是不使用 WebRTC 本身来交换信令信息,在链接的 Peer
中,任何适合发送消息的架构均可被用于传递 SDP 信息,例如WebSocket、REST 或身份验证代理来解决客户端之间的 SDP 传递问题
协议
WebRTC 是一系列协议的集合,除了上面信令使用到 SDP 协议之外,还使用了其他的许多协议
- ICE协议:双向通信,交互式连接建立协议,ICE 允许在两个 Agent 之间建立链接,这些链接可以在同一网络上,也可以在世界的另端。ICE 是无需中央服务器即可建立直接连接的解决方案。
- DTLS协议: 基于 UDP 的 TLS 加密协议,用于保护基于 HTTPS 的安全通信
- SRTP协议:安全实时传输协议
- RTP协议:实时传输协议,进行音频/视频的数据传输,使用 SRTP 保护 RTP 数据包,从协商的 DTLS 会话中提取密钥,用来初始化 SRTP 会话。
- SCTP协议:流控制传输协议,使用 RTP 来哦交互用 SRTP 加密过的媒体数据,使用 SCTP 发送和接收那些用 DTLS 加密过的 DataChannel 消息。
从另一个角度看 WebRTC Agent,它只是许多不同协议的协调器
检测设备对 Trickle ICE 功能的支持
WebRTC P2P 穿透一般流程:
- 尝试直连
- 通过 STUN 服务器进行穿透
- 无法穿透则通过 TURN 服务器中转