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的基本工作流程如下:
- 客户端发送请求: 客户端向STUN服务器发送一个STUN请求包,通常是通过UDP协议。
- STUN服务器响应: STUN服务器收到请求后,提取请求包中的源IP地址和端口,并将其返回给客户端作为响应。
- 客户端接收响应: 客户端接收到响应后,解析出其在公网中的IP地址和端口。这些信息可以用于P2P连接的建立。
通过STUN,WebRTC客户端能够知道自己的公网IP地址和端口,从而使得对端能够直接与其通信。
但是STUN并不是每次都能成为得为需要NAT的通话设备分配IP地址,打洞可能打不通,或者带宽不足以支撑发送媒体数据,这个时候就可以使用TURN来做数据转发。
TURN工作原理
与STUN不同,TURN不仅用于发现客户端的公网IP地址和端口,还实际参与数据传输。TURN服务器接收客户端的数据,并将其转发到目标客户端。这种方式确保了即使在最复杂的NAT和防火墙环境中,WebRTC通信仍然可以进行。这种方式的带宽由服务器承担
基本工作流程如下:
- 客户端发送请求: 客户端向STUN服务器发送一个STUN请求包,通常是通过UDP协议。
- STUN服务器响应: STUN服务器收到请求后,提取请求包中的源IP地址和端口,并将其返回给客户端作为响应。
- 客户端接收响应: 客户端接收到响应后,解析出其在公网中的IP地址和端口。这些信息可以用于P2P连接的建立。
通过STUN,WebRTC客户端能够知道自己的公网IP地址和端口,从而使得对端能够直接与其通信。
3.信令服务器
信令服务器在WebRTC中是一个关键组件,它负责在两个端点(如浏览器或应用程序)之间交换必要的连接信息(媒体协商信息,网络连接信息等等),以建立和维护实时通信会话。尽管信令服务器不参与实际的媒体数据传输,但它在连接建立过程中的作用至关重要。
信令服务器的主要功能
- 交换SDP(Session Description Protocol):
- Offer/Answer:当一个端点想要与另一个端点建立连接时,它会创建一个SDP offer,并通过信令服务器发送给另一个端点。另一个端点接收到offer后,生成一个SDP answer,并通过信令服务器返回给第一个端点。这些SDP消息包含了媒体类型、编解码器、带宽等信息,确保两端能够兼容通信。
- 交换ICE候选者:
- ICE候选者(Interactive Connectivity Establishment Candidates):为了建立P2P连接,双方需要交换多个网络候选者,以确定最佳的通信路径。信令服务器在这个过程中传递这些候选者信息。
- 传递控制消息:
- 通话控制:信令服务器也用于传递其他控制消息,如挂断、静音、解除静音等操作。
信令服务器的实现方式
信令服务器的实现并没有固定的标准,可以使用多种协议和技术。常见的实现方式包括:
- WebSocket:一种全双工通信协议,特别适合用于实时应用。WebRTC通常使用WebSocket来传递信令消息,因为它能够提供低延迟的双向通信。
- HTTP/HTTPS:虽然不如WebSocket实时,但可以用于简单的信令实现,特别是当实时性要求不高时。
- SIP(Session Initiation Protocol):一种用于启动、维护和终止实时会话的协议,常用于VoIP(网络电话)系统中。