图解webrtc服务器和用户之间的通信

Published on
Reading time
8 min read
Authors

前言

最近在推特上看到一个看起来挺不错的通过 webRTC 传输文件的项目,所以就想了解一下webRTC是如何传输信息的。

WebRTC是如何传输信息的

  1. 连接信令服务器
  • 想象用户A和用户B都想在网上进行视频聊天。首先,他们各自通过网络连接到一个共同的信令服务器。这个服务器的作用是帮助他们交换设置通话所需的信息。
  1. 建立通话意图
  • 用户A决定发起一个聊天,于是在信令服务器上创建一个“房间”,或者加入一个已经存在的房间。
  • 信令服务器确认给用户A,房间已成功创建或加入。
  • 然后,用户B也加入了这个相同的房间。信令服务器同样确认给用户B加入成功,并通知用户A,用户B已经加入房间。
  1. 交换媒体配置
  • 用户A的设备分析自己的摄像头和麦克风设置,然后创建一个包含这些媒体信息的offer(提议)。这个offer包含了视频和音频的详细信息,比如使用哪种编解码器,分辨率有多少等。
  • 用户A把这个offer发送到信令服务器,服务器再转发给用户B。
  1. 响应和协商
  • 用户B收到offer后,根据自己的设备配置生成一个answer(应答),这个应答可能会接受用户A的提议,或者根据B的设备能力进行一些调整。
  • 用户B将这个answer发送回信令服务器,服务器再转发给用户A。
  1. 网络细节交换
  • 接下来,用户A和用户B开始交换所谓的ICE候选,这些是网络连接的具体信息,包括他们各自的网络地址和端口。这个信息帮助他们确定如何在互联网上直接连接到对方。
  • 信令服务器在这里起到中介的作用,帮助转发这些网络细节。
  1. 建立连接
  • 一旦双方都有了对方的网络细节,并且媒体配置协商完成,他们的设备就尝试直接连接。如果一切顺利,一个点对点的视频或音频通话就建立了。
  1. 进行通话
  • 现在,用户A和用户B可以直接通过他们的设备进行通话,数据不需要经过信令服务器,确保了通话的流畅和隐私。

流程图

信令服务器和ICE服务器的区别

信令服务器

信令服务器的主要功能是协调通信。在WebRTC中,虽然数据传输是直接在用户之间进行的(点对点),但在通信开始之前,用户设备之间需要交换一些信息,比如媒体的类型、数据格式、用户的IP地址等。这个过程称为信令。

信令服务器的作用包括:

  • 用户发现与会话管理:帮助用户发现对方并建立通信会话。
  • 信息交换:交换用于建立和管理通信会话的信息,如SDP描述(Session Description Protocol,会话描述协议)数据,这些数据描述了将要传输的媒体类型和参数。
  • 指令传输:传送控制指令,如开始通话、结束通话等。

信令过程对于建立连接是必须的,但WebRTC标准本身并不定义使用哪种信令协议,开发者可以选择合适的方式,如WebSocket、XMPP等。

信令服务器

ICE服务器

ICE(Interactive Connectivity Establishment)是一个框架,用来处理NAT穿透问题,以便在复杂的网络环境下建立可靠的点对点通信通道。ICE服务器帮助WebRTC应用发现最佳的网络路径(可能通过NAT和防火墙)来建立连接。

ICE服务器的主要组成部分包括:

  • STUN(Session Traversal Utilities for NAT)服务器:帮助客户端发现其公共IP地址和端口,以及NAT的类型。
  • TURN(Traversal Using Relays around NAT)服务器:如果点对点连接失败,TURN服务器将作为中继,帮助数据在两端之间传输。

ICE过程大致如下:

  • 客户端使用STUN服务器来了解自己的公网地址。
  • 如果直接的P2P连接不可行,客户端将使用TURN服务器作为数据传输的中继。
ICE服务器

总结来说,信令服务器主要用于在参与者之间交换必要的信息以建立连接,而ICE服务器则用于处理实际的网络连接,特别是在复杂的NAT环境下确保连接的建立。两者都是WebRTC实现点对点通信的重要组成部分。