WebRTC 原理
WebRTC 原理分析
假设A和B要建立视频通话,A为房间创建端,B为加入房间端:
- A通过
http
登录、获取其他服务器地址(做一些保存用户信息的操作,获取信令、stun
、turn
服务器地址等,非必要) - A和信令服务器建立
websocket
长连接 - A通过
websocket
向信令服务器注册(创建房间,记录房间号,等待B加入房间) - A创建本地视频,获取A的
sdp
信息 - B创建本地视频,获取B的
sdp
信息 - B发送本地
sdp
信息到信令服务器sendOffer
- B同时也在向stun(穿越)、turn(延时转发)服务器获取ice信息
- B发送ice信息到信令服务器(后续会和A交换3种信息,不再赘述)
- 信令服务器转发
sdp
、ice
信息到A(通过房间号辨别) - A将B的sdp信息设置到底层setRemoteDescription
- A添加B的ice信息
- A同时也在向stun(穿越)、turn(延时转发)服务器获取ice信息
- A发送ice信息到信令服务器(后续会和B交换3种信息,不再赘述)
- A发送本地sdp信息到信令服务器sendAnswer
- 信令服务器转发sdp信息到B
- B将A的sdp信息设置到底层setRemoteDescription
在交换sdp信息的同时,ice信息也在进行交换,通过交换ice信息,最终会选择一种合适的方式来建立连接(p2p或者基于turn服务器的延时转发通路)
信令服务器作用
- 浏览器之间交换建立通信的元数据(信令)必须通过服务器
- 为了穿越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客户端成功地穿透远程用户与网络之间可能存在的各类防火墙。