webRTC是一个开源的,提供各种终端(浏览器,PC/Android/IOS客户端)实时音视频通信的项目
应用场景:
- 音视频通话,多人会议
- 桌面共享,协助
- 云游戏
- 直播,在线教育
端对端的通信,需要信令服务器+STUN/TURN服务器
信令服务器:用户终端之间交换信息的服务器,包括业务信息,媒体信息(SDP),网络信息(candidate),可以基于socket.io开发,也可以基于Janus开发
- 业务信息:A&B加入视频聊天,退出视频聊天,禁言等
- 媒体信息:对端的编解码器,音视频支持等,媒体协商
- 网络信息:外网IP和端口(局域网IP->NAT穿透->中转服务器)
STUN:Session Traversal Utilities for NAT,用户得到终端的外网IP/端口,让终端之间,尝试能否根据外网IP&端口直接通信,STUN并不是每次都能成功地为需要NAT的通话设备分配IP地址,如果分配失败,需要使用TURN做辅助
TURN:Traversal Using Relays around NAT,用于终端之间,无法直接P2P通信的时候,做一个中继服务。终端A把音视频传递给TURN服务器,终端B从TURN服务器读取A的音视频数据
两个协议整合到一起,是一个ICE框架(Interactive Connectivity Establishment交互联通建立方式),服务器也叫做ICE服务器
linux下的库libnice,基于库实现的linux服务程序,叫做coturn
服务器结构:

参考: