WebRTC 原理分析

假设A和B要建立视频通话,A为房间创建端,B为加入房间端:

  1. A通过 http 登录、获取其他服务器地址(做一些保存用户信息的操作,获取信令、stunturn服务器地址等,非必要)
  2. A和信令服务器建立 websocket 长连接
  3. A通过 websocket 向信令服务器注册(创建房间,记录房间号,等待B加入房间)
  4. A创建本地视频,获取A的 sdp 信息
  5. B创建本地视频,获取B的 sdp 信息
  6. B发送本地 sdp 信息到信令服务器 sendOffer
    1. B同时也在向stun(穿越)、turn(延时转发)服务器获取ice信息
    2. B发送ice信息到信令服务器(后续会和A交换3种信息,不再赘述)
  7. 信令服务器转发 sdpice 信息到A(通过房间号辨别)
  8. A将B的sdp信息设置到底层setRemoteDescription
    1. A添加B的ice信息
    2. A同时也在向stun(穿越)、turn(延时转发)服务器获取ice信息
    3. A发送ice信息到信令服务器(后续会和B交换3种信息,不再赘述)
  9. A发送本地sdp信息到信令服务器sendAnswer
  10. 信令服务器转发sdp信息到B
  11. B将A的sdp信息设置到底层setRemoteDescription

在交换sdp信息的同时,ice信息也在进行交换,通过交换ice信息,最终会选择一种合适的方式来建立连接(p2p或者基于turn服务器的延时转发通路)

信令服务器作用

  1. 浏览器之间交换建立通信的元数据(信令)必须通过服务器
  2. 为了穿越NAT和防火墙

名词

STUN

STUN (Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。

TURN

TURN 协议允许 NAT 或者防火墙后面的对象可以通过 TCP 或者 UDP 接收到数据。

SDP

SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP协议是也是基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围。SDP 不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现.

ICE

ICE (互动式连接建立) 由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。该技术可以让基于SIP的VoIP客户端成功地穿透远程用户与网络之间可能存在的各类防火墙。