Webrtc
Webrtc
运行模式
P2P模式
在客户端之间直接建立媒体数据链接,避免使用服务器转发数据媒体
SFU模式
MCU模式
拓扑结构
- Signaling Server:用于实现房间、用户的管理,以及WebSocket长连接消息;前者基于GoogleApp Engine的Python SDK实现,后者基于Golang实现
- ICE Server:用于下发STUN/TURN Server的url、用户名、密码信息,只是一个简单的NodeJS程序
- TURN Server:ICE协议里的TURN Server,供客户端获取公网IP,也能提供媒体数据中转服务
通话过程
- 发起端创建本地PC对象,并创建Offer
- 发起端通过Signaling Server(HTTP服务),把Offer送到应答端
- 应答端创建本地PC对象,把发起段的Offer设置给PC,然后获得Answer
- 应答端通过Signaling Server(长连接)把Answer发给发起端
- 发起端把应答端的Answer设置给PC
- 两端都收集本地PC的ICE Candidate(包括访问TURN Server),通过Signaling Server(长连接)发送给对端,对端把ICE Candidate设置给本地的PC
- 两端开始建立P2P的Socket,并收发音视频数据
名词
PeerConnection
- P2P媒体通信解决方案
Offer、Answer和SDP
- Offer和Answer都属于SDP(Session Description Protocol)
- 会话发起者先提出Offer,其他参与者再根据Offer给出Answer
ICE
- 用于UDP媒体传输的NAT穿透协议,会利用STUN/TURN协议完成工作
- ICE会在SDP中增加传输地址记录纸(IP+port+协议),然后对其进行连通性测试
STUN
- NAT穿透的一套工具,提供获取一个内网连接(IP+port)对应的公网连接映射关系的机制
TURN
- TURN是STUN协议的一个扩展,通过TURN Server中转进行数据转发
ICE Candidate
可能有以下4种值
- host :客户端从本机网络接口上获取的地址
- srflx : STUN Server看到的该客户端的地址
- relayed: TURN Server为该客户端分配的中继地址
- prflx : 连通性测试过程中,在来自对方的数据报文里看到的地址
host优先级最高,relay优先级最低
当Peer Initiator(发起者)收到answerSDP之后会进行ICE流程,在answerSDP中可能包含多条ICE candidates(候选服务器)信息,测试WebRTC会分别和这些candidates建立连接,选中最优的那条连接作为配对结果进行通话
其他
- 封装 libdatachannel Android 库
- libdatachannel编译
- libc++ shared.so
- Hack Webrtc
- RFC 3551
- RFC 6184
- RFC 3551
- WebRTC学习指南
本文由作者按照 CC BY 4.0 进行授权