WebRTC协议简介

一、ICE

交互式连接建立(ICE)是允许您的Web浏览器与对等方连接的框架。 从对等A到对等B的直接连接根本无法工作有很多原因。 它需要绕过防火墙,以防止打开连接;如果在大多数情况下,您的设备没有公用IP地址,则为您提供一个唯一的地址;如果您的路由器不允许您直接与对等方连接,则需要通过服务器中继数据 。 ICE使用STUN和/或TURN服务器来完成此操作,如下所述。

 

 

二、STUN

NAT的会话遍历实用程序(STUN)(首字母缩写词为缩写)是一种协议,用于发现您的公共地址并确定路由器中可能阻止与对等方直接连接的任何限制。

客户端会将请求发送到Internet上的STUN服务器,服务器将使用客户端的公共地址以及客户端是否可以通过路由器NAT进行访问进行回复。

 

 

三、NAT

网络地址转换(NAT)用于为您的设备提供公共IP地址。 路由器将具有公用IP地址,并且连接到路由器的每个设备都将具有专用IP地址。 请求将通过唯一端口从设备的专用IP转换为路由器的公共IP。 这样,您无需为每个设备都使用唯一的公用IP,但仍可以在Internet上找到它。

某些路由器将限制谁可以连接到网络上的设备。 这可能意味着即使我们拥有STUN服务器找到的公共IP地址,也没有任何人可以创建连接。 在这种情况下,我们需要转向TURN。

 

 

四、TURN

一些使用NAT的路由器采用了称为“对称NAT”的限制。 这意味着路由器将只接受来自先前连接的对等方的连接。

使用围绕NAT(TURN)的中继进行遍历旨在通过打开与TURN服务器的连接并通过该服务器中继所有信息来绕过对称NAT限制。 您将与TURN服务器建立连接,并告诉所有对等方将数据包发送到服务器,然后将其转发给您。 显然这会带来一些开销,因此仅在没有其他选择时才使用。

 

 

五、SDP

会话描述协议(SDP)是用于描述连接的多媒体内容(例如分辨率,格式,编解码器,加密等)的标准,以便一旦数据传输,两个对等方就可以相互理解。 从本质上讲,这是描述内容的元数据,而不是媒体内容本身。

从技术上讲,SDP并不是真正的协议,而是一种用于描述在设备之间共享媒体的连接的数据格式。

记录SDP远远超出了本文档的范围。 但是,这里有几件事值得注意。

1、结构

SDP由一行或多行UTF-8文本组成,每行以一个字符的类型开头,后跟等号(“ =”),然后是包含值或描述的结构化文本,其格式取决于类型。 以给定字母开头的文本行通常称为“字母行”。 例如,提供媒体描述的行的类型为“ m”,因此这些行称为“ m行”。

2、更多关于SDP

要了解有关SDP的更多信息,请参见以下有用的资源:

 

### WebRTC 协议详解 #### 一、WebRTC 的传输层协议选择 WebRTC 主要依赖于 UDP 而不是 TCP 来实现实时音视频通信。这是因为虽然 TCP 提供了可靠的传输服务并确保数据的完整性和顺序性[^1],但在遇到网络拥塞或丢包的情况下,TCP 的重传机制会显著增加延迟,这对于实时应用来说是不可接受的。 相比之下,UDP 不提供可靠性保障,也不保证数据包按序到达,但这正是其优势所在——低延迟特性使得 UDP 更适合处理对时间敏感的数据流,如语音和视频通话中的媒体流[^3]。 #### 二、信令机制概述 值得注意的是,WebRTC 自身并不规定具体的信令协议;相反,它允许开发人员根据应用场景灵活选用不同的信令方案。常见的选项包括 WebSocket、HTTP 长轮询/SSE (Server-Sent Events),以及 SIP 和 XMPP 这样的专用通讯协议[^2]。这些信令方法主要用于交换必要的元数据信息,比如 SDP(Session Description Protocol),以便两端设备能够协商一致建立连接。 #### 三、RTP/RTCP 在 WebRTC 中的作用 为了有效地管理和优化多媒体流量,在 WebRTC 架构内部采用了 RTP(Real-time Transport Protocol)及其控制协议 RTCP (RTP Control Protocol)。其中,RTP 承担着实际承载音频视频编码后的比特流的任务,并通过特定字段标记每帧的时间戳、序列号等重要属性,从而支持接收端完成解码播放操作。与此同时,RTCP 则定期发送反馈报告给发送方,帮助监测当前链路质量状况,进而调整参数以维持最佳用户体验[^4]。 ```cpp // 示例:定义一个简单的 RTP 头部结构体 struct RtpHeader { uint8_t version : 2; // 版本号 uint8_t padding : 1; uint8_t extension : 1; uint8_t csrc_count : 4; uint8_t marker : 1; uint8_t payload_type : 7; uint16_t sequence_number; uint32_t timestamp; uint32_t ssrc; // 同步源标识符 }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值