WebRTC通话原理(SDP、STUN、 TURN、 信令服务器)

文章目录

1.媒体协商

比如下面这个例子 A端与B端要想通信

  • A端视频采用VP8做解码,然后发送给B端,B端怎么解码?

  • B端视频采用VP9做解码,然后发送给A端,A端怎么解码?

所以要协商媒体信息

所以A端和B端要同时采用对方都支持的编码方式,如上图---使用H264进行解码

有一个专门的协议叫做信令服务器交换会话描述协议(SDP),用于交换连接信息和协调两个端点之间的通信。会话描述协议(SDP)是WebRTC信令过程中的核心部分,它描述了多媒体会话的细节。以下是关于SDP及其在信令过程中的作用的介绍:

SDP简介

SDP(Session Description Protocol)是一种用于描述多媒体会话的格式。它包含了会话的媒体类型、格式、传输协议和网络信息等。SDP在WebRTC中用于协商音视频通话的各种参数,确保两个端点可以兼容并顺利进行通信。

以协商编码格式为例:

媒体描述(m=) : 描述媒体类型(如音频、视频)、传输端口、传输协议和格式列表

复制代码
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 31

2.网络协商

彼此要了解对方的网络信息,这样才有可能找到一条相互通讯的链路

理想情况下:两台通信的电脑都有自己的私有公网地址,可以直接点对点通信

实际情况。我们的电脑都是在一个大的局域网里面,需要NAT(网络地址转换),如下所示,图画的比较简陋,实际情况往往不止一层NAT,可能是多层NAT

为了解决上述问题,需要用到STUN 和 TURN

STUN(Session Traversal Utilities for NAT)是一种用于解决NAT(Network Address Translation)穿越问题的网络协议。NAT通常在局域网和互联网之间进行IP地址转换,从而保护局域网的设备,但它也会导致直接P2P(点对点)通信的困难。STUN协议帮助WebRTC客户端发现其公网IP地址及其在NAT后的端口,从而使P2P通信得以实现。

STUN的工作原理

STUN服务器位于公网上,客户端通过它来确定自己的公网IP地址和端口。STUN的基本工作流程如下:

  1. 客户端发送请求: 客户端向STUN服务器发送一个STUN请求包,通常是通过UDP协议。
  2. STUN服务器响应: STUN服务器收到请求后,提取请求包中的源IP地址和端口,并将其返回给客户端作为响应。
  3. 客户端接收响应: 客户端接收到响应后,解析出其在公网中的IP地址和端口。这些信息可以用于P2P连接的建立。

通过STUN,WebRTC客户端能够知道自己的公网IP地址和端口,从而使得对端能够直接与其通信。

但是STUN并不是每次都能成为得为需要NAT的通话设备分配IP地址,打洞可能打不通,或者带宽不足以支撑发送媒体数据,这个时候就可以使用TURN来做数据转发

TURN工作原理

与STUN不同,TURN不仅用于发现客户端的公网IP地址和端口,还实际参与数据传输 。TURN服务器接收客户端的数据,并将其转发到目标客户端。这种方式确保了即使在最复杂的NAT和防火墙环境中,WebRTC通信仍然可以进行。这种方式的带宽由服务器承担

基本工作流程如下:

  1. 客户端发送请求: 客户端向STUN服务器发送一个STUN请求包,通常是通过UDP协议。
  2. STUN服务器响应: STUN服务器收到请求后,提取请求包中的源IP地址和端口,并将其返回给客户端作为响应。
  3. 客户端接收响应: 客户端接收到响应后,解析出其在公网中的IP地址和端口。这些信息可以用于P2P连接的建立。

通过STUN,WebRTC客户端能够知道自己的公网IP地址和端口,从而使得对端能够直接与其通信。

3.信令服务器

信令服务器在WebRTC中是一个关键组件,它负责在两个端点(如浏览器或应用程序)之间交换必要的连接信息(媒体协商信息,网络连接信息等等),以建立和维护实时通信会话。尽管信令服务器不参与实际的媒体数据传输,但它在连接建立过程中的作用至关重要。

信令服务器的主要功能

  1. 交换SDP(Session Description Protocol)
    • Offer/Answer:当一个端点想要与另一个端点建立连接时,它会创建一个SDP offer,并通过信令服务器发送给另一个端点。另一个端点接收到offer后,生成一个SDP answer,并通过信令服务器返回给第一个端点。这些SDP消息包含了媒体类型、编解码器、带宽等信息,确保两端能够兼容通信。
  2. 交换ICE候选者
    • ICE候选者(Interactive Connectivity Establishment Candidates):为了建立P2P连接,双方需要交换多个网络候选者,以确定最佳的通信路径。信令服务器在这个过程中传递这些候选者信息。
  3. 传递控制消息
    • 通话控制:信令服务器也用于传递其他控制消息,如挂断、静音、解除静音等操作。

信令服务器的实现方式

信令服务器的实现并没有固定的标准,可以使用多种协议和技术。常见的实现方式包括:

  • WebSocket:一种全双工通信协议,特别适合用于实时应用。WebRTC通常使用WebSocket来传递信令消息,因为它能够提供低延迟的双向通信。
  • HTTP/HTTPS:虽然不如WebSocket实时,但可以用于简单的信令实现,特别是当实时性要求不高时。
  • SIP(Session Initiation Protocol):一种用于启动、维护和终止实时会话的协议,常用于VoIP(网络电话)系统中。
相关推荐
有续技术20 分钟前
哈斯 (Haas) 机床 IP、端口号配置内容总结
运维·服务器
小张同学a.27 分钟前
LAMP架构2
linux·运维·网络·架构·负载均衡
千河殇 多想和她29 分钟前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
VortMall30 分钟前
出海引流运维双升级|VortMall微服务商城系统v1.3.12 升级更新
运维·微服务·facebook
心念枕惊31 分钟前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
躺不平的理查德42 分钟前
CMAKE备忘录
linux·运维·服务器
9624561 小时前
跨域与私有网络访问限制排查实录
运维·服务器·网络
发量惊人的中年网工1 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
乐维_lwops1 小时前
乐维社区“专家坐诊”第403期问答
运维·网络·监控系统·答疑·lerwee运维智能体
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP 实战笔记:BAPI_OUTB_DELIVERY_CONFIRM_DEC 详解——外向交货单过账的利器
运维·性能优化·sap·abap·经验交流