图解webrtc服务器和用户之间的通信
- Published on
- Reading time
- 8 min read
- Likes
前言
最近在推特上看到一个看起来挺不错的通过 webRTC 传输文件的项目,所以就想了解一下webRTC是如何传输信息的。
WebRTC是如何传输信息的
- 连接信令服务器:
- 想象用户A和用户B都想在网上进行视频聊天。首先,他们各自通过网络连接到一个共同的信令服务器。这个服务器的作用是帮助他们交换设置通话所需的信息。
- 建立通话意图:
- 用户A决定发起一个聊天,于是在信令服务器上创建一个“房间”,或者加入一个已经存在的房间。
- 信令服务器确认给用户A,房间已成功创建或加入。
- 然后,用户B也加入了这个相同的房间。信令服务器同样确认给用户B加入成功,并通知用户A,用户B已经加入房间。
- 交换媒体配置:
- 用户A的设备分析自己的摄像头和麦克风设置,然后创建一个包含这些媒体信息的offer(提议)。这个offer包含了视频和音频的详细信息,比如使用哪种编解码器,分辨率有多少等。
- 用户A把这个offer发送到信令服务器,服务器再转发给用户B。
- 响应和协商:
- 用户B收到offer后,根据自己的设备配置生成一个answer(应答),这个应答可能会接受用户A的提议,或者根据B的设备能力进行一些调整。
- 用户B将这个answer发送回信令服务器,服务器再转发给用户A。
- 网络细节交换:
- 接下来,用户A和用户B开始交换所谓的ICE候选,这些是网络连接的具体信息,包括他们各自的网络地址和端口。这个信息帮助他们确定如何在互联网上直接连接到对方。
- 信令服务器在这里起到中介的作用,帮助转发这些网络细节。
- 建立连接:
- 一旦双方都有了对方的网络细节,并且媒体配置协商完成,他们的设备就尝试直接连接。如果一切顺利,一个点对点的视频或音频通话就建立了。
- 进行通话:
- 现在,用户A和用户B可以直接通过他们的设备进行通话,数据不需要经过信令服务器,确保了通话的流畅和隐私。
流程图
sequenceDiagram participant A as 用户A participant S as 信令服务器 participant B as 用户B A->>S: 连接到信令服务器 B->>S: 连接到信令服务器 A->>S: 创建房间 S->>A: 确认房间创建 B->>S: 加入房间 S->>B: 确认加入房间 S->>A: 通知用户B加入 A->>A: 创建本地offer A->>S: 发送offer S->>B: 转发offer B->>B: 设置远程描述并创建answer B->>S: 发送answer S->>A: 转发answer A->>A: 设置远程描述 loop 发送和接收ICE候选 A->>S: 发送ICE候选 S->>B: 转发ICE候选 B->>S: 发送ICE候选 S->>A: 转发ICE候选 end A-->>B: 建立P2P连接 Note over A,B: 可能进行多次ICE候选交换 Note over 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服务器则用于处理实际的网络连接,特别是在复杂的NAT环境下确保连接的建立。两者都是WebRTC实现点对点通信的重要组成部分。
如未标记非原创,转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,未经站长允许不得对文章文字内容进行修改演绎,不得用于商业目的。
本文采用CC BY-NC-SA 4.0 - 非商业性使用 - 相同方式共享 4.0 国际进行许可。
本文采用CC BY-NC-SA 4.0 - 非商业性使用 - 相同方式共享 4.0 国际进行许可。