文章

Webrtc

Webrtc

运行模式

  1. P2P模式

    在客户端之间直接建立媒体数据链接,避免使用服务器转发数据媒体

  2. SFU模式

  3. MCU模式

拓扑结构

  • Signaling Server:用于实现房间、用户的管理,以及WebSocket长连接消息;前者基于GoogleApp Engine的Python SDK实现,后者基于Golang实现
  • ICE Server:用于下发STUN/TURN Server的url、用户名、密码信息,只是一个简单的NodeJS程序
  • TURN Server:ICE协议里的TURN Server,供客户端获取公网IP,也能提供媒体数据中转服务

通话过程

音视频通话步骤

  1. 发起端创建本地PC对象,并创建Offer
  2. 发起端通过Signaling Server(HTTP服务),把Offer送到应答端
  3. 应答端创建本地PC对象,把发起段的Offer设置给PC,然后获得Answer
  4. 应答端通过Signaling Server(长连接)把Answer发给发起端
  5. 发起端把应答端的Answer设置给PC
  6. 两端都收集本地PC的ICE Candidate(包括访问TURN Server),通过Signaling Server(长连接)发送给对端,对端把ICE Candidate设置给本地的PC
  7. 两端开始建立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建立连接,选中最优的那条连接作为配对结果进行通话

其他

  1. 封装 libdatachannel Android 库
    1. libdatachannel编译
    2. libc++ shared.so
  2. Hack Webrtc
  3. RFC 3551
  4. RFC 6184
  5. RFC 3551
  6. WebRTC学习指南
本文由作者按照 CC BY 4.0 进行授权