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(网络电话)系统中。
相关推荐
疯狂飙车的蜗牛17 分钟前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程1 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Michaelwubo2 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07132 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
好像是个likun3 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
LIKEYYLL4 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3215 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3215 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
cominglately5 小时前
centos单机部署seata
linux·运维·centos
CircleMouse5 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos