WebRTC(Web Real-Time Communication)(网页实时通信)是一个谷歌开源项目,它提供了一套标准API,使Web应用可以直接提供实时音视频通信功能,不再需要借助任何插件。
WebRTC的优点
- 跨平台:可以在Web、Android、iOS、Windows、MacOS、Linux环境下运行WebRTC应用
- 实时传输:传输速度快,延迟低,适合实时性要求较高的应用场景
- 音视频引擎:强大的音视频处理能力
- 免插件:不需要安装任何插件,打开浏览器即可使用
- 免费:虽然WebRTC技术已经较为成熟,集成了最佳的音视频引擎和十分先进的Codec,但仍是免费的
- 主流浏览器支持:包括Chrome、Safari、Firefox、Edge等
WebRTC的作用
音视频会议、在线教育、即时通信工具、游戏、人脸识别
WebRTC一对一通话原理
WebRTC由四部分组成,分别为两个WebRTC终端、一个信令服务器、一台中继服务器(STUN/TURN)和两个NAT,这是最经典的一对一通信架构。
通话过程需要三个主要步骤分别是:媒体协商、网络协商、建立连接。
媒体协商
首先两个客户端想要创建连接,一般来说需要有一个双方都能访问的服务器来帮助它们交换连接所需要的信息。这个服务器叫做信令服务器。
与服务器建立连接后,通信的双方就可以通过信令服务器彼此交换必要的信息了,比如告诉对方自己的外网IP地址和端口是多少等。
双方交换的媒体数据由SDP(Session Description Protocol,会话描述协议)描述
网络协商
在交换信息之前WebRTC终端还要与STUN/TURN服务器建立连接。这样做的目的是通过STUN/TURN服务器获得各自的外网IP地址和端口。
WebRTC终端拿到自己的外网IP地址和端口后,再通过信令服务器交换给对方。当彼此获得对方地址后,它们就可以尝试NAT穿越,进行P2P连接了。这个过程涉及NAT及ICE协议。
STUN
STUN是指简单UDP穿透NAT,这项技术允许位于NAT后的客户端找出自己的公网IP地址,以及查出自己位于哪种类型的NAT及NAT所绑定的Internet端口。
TURN
TURN是指使用中继穿透NAT,是STUN的一个扩展,主要添加了中继功能。
如果终端在进行NAT之后,在特定的情景下有可能使得终端无法和其他终端进行直接的通信,这时就需要将公网的服务器作为一个中继,对来往的数据进行转发。这个转发采用的协议就是TURN。
建立连接
- 连接双方通过第三方服务器即信令服务器来交换各自的SDP数据。
- 连接双方通过STUN协议从STUN服务器那里获取到自己的NAT结构、子网IP和公网IP、端口,即Candidate信息。
- 连接双方通过第三方服务器来交换各自的Candidate,如果连接双方在同一个NAT下,那它们仅通过内网Candidate就能建立起连接;如果它们处于不同NAT下,就需要通过STUN服务器识别出的公网Candidate进行通信。
- 如果仅通过STUN服务器发现的公网Candidate仍然无法建立连接,这就需要寻求TURN服务器提供的转发服务,然后将转发形式的Candidate共享。
来源地址:https://blog.csdn.net/qq_40850839/article/details/127891945