WebRTC简介

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。

WebRTC简介


WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。


WebRTC架构


9.png


颜色标识说明


(1)紫色部分是Web开发者API层;

(2)蓝色实线部分是面向浏览器厂商的API层

(3)蓝色虚线部分浏览器厂商可以自定义实现


架构组件介绍


(1) Your Web App


Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。


(2)Web API


面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用。


这些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类,详细的API说明可以看这里。


Network Stream API


MediaStream:MediaStream用来表示一个媒体数据流。


MediaStreamTrack在浏览器中表示一个媒体源。


RTCPeerConnection


RTCPeerConnection: 一个RTCPeerConnection对象允许用户在两个浏览器之间直接通讯。


RTCIceCandidate :表示一个ICE协议的候选者。


RTCIceServer:表示一个ICE Server。


Peer-to-peer Data API


DataChannel:数据通道( DataChannel)接口表示一个在两个节点之间的双向的数据通道 。


(3)WebRTC Native C++ API


本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。


(4)Transport / Session


传输/会话层


会话层组件采用了libjingle库的部分组件实现,无须使用xmpp/jingle协议


a. RTP Stack协议栈


Real Time Protocol


b. STUN/ICE


可以通过STUN和ICE组件来建立不同类型网络间的呼叫连接。


c. Session Management


一个抽象的会话层,提供会话建立和管理功能。该层协议留给应用开发者自定义实现。


重要API


WebRTC原生APIs文件是基于WebRTC规格书撰写而成,这些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类。


Network Stream API


  • MediaStream:MediaStream用来表示一个媒体数据流。
  • MediaStreamTrack在浏览器中表示一个媒体源。


RTCPeerConnection


  • RTCPeerConnection:一个RTCPeerConnection对象允许用户在两个浏览器之间直接通讯。
  • RTCIceCandidate:表示一个ICE协议的候选者。
  • RTCIceServer:表示一个ICE Server。


Peer-to-peer Data API


  • DataChannel:数据通道(DataChannel)接口表示一个在两个节点之间的双向的数据通道。


WebRTC协议介绍


ICE


发送对等方能够用于通信的方法。


ICE 提供了一个框架,通信对等方可以通过该框架发现和通信其公共 IP 地址,以便其他对等方可以访问它。


STUN


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


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


10.png


  • STUN 是一种通信协议工具,用于检测和遍历位于两个通信端点之间的路径中的网络地址转换器
  • STUN 消息在用户数据报协议(UDP) 数据包中发送。由于 UDP 不提供可靠的)传输,可靠性是通过应用程序控制的 STUN 请求的重传来实现的
  • STUN 与三种类型的 NAT 配合使用:全锥 NAT受限锥 NAT端口受限锥 NAT。在受限锥或端口受限锥 NAT 的情况下,客户端必须先向端点发送数据包,然后 NAT 才会允许从端点到客户端的数据包。STUN 不适用于大公司网络中常见的对称 NAT(也称为双向 NAT)。由于STUN 服务器的IP 地址与端点的IP 地址不同,在对称 NAT 情况下,STUN 服务器的 NAT 映射将与端点不同。TURN使用对称 NAT 提供更好的结果。


NAT


网络地址转换 (NAT)用于为您的设备提供公共 IP 地址。路由器将有一个公共 IP 地址,连接到路由器的每个设备都将有一个私有 IP 地址。请求将从设备的私有 IP 转换为具有唯一端口的路由器的公共 IP。这样一来,您就不需要为每台设备分配一个唯一的公共 IP,但仍然可以在 Internet 上找到它。


网络地址转换( NAT ) 是一种通过在数据包通过流量路由设备)传输时修改数据包IP 标头中网络地址信息来将 IP地址空间映射到另一个IP地址空间的方法。


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


  • 一对一:最简单的 NAT 类型提供 IP 地址的一对一转换。
  • 一对多:大多数网络地址转换器将多个私有主机映射到一个公开的 IP 地址。一对多 NAT 的额外好处之一是它是IPv4 地址耗尽的实用解决方案。即使是大型网络也可以使用单个公共 IP 地址连接到 Internet


TURN


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


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


11.png


SDP


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


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


SDP 规范纯粹是一种会话描述格式。它旨在根据需要分布在不同的传输协议上,包括SAPSIPRTSP。SDP 甚至可以通过电子邮件或作为 HTTP 负载传输


SDP offer


由代理发送的 SDP 消息,代理生成会话描述以创建或修改会话。它描述所需媒体通信的各个方面。


SDP answer


应答者响应从提议人收到的提议而发送的 SDP 消息。应答指出了已接受的各个方面。例如,提议中的所有音频和视频流是否都被接受。


STUN、TURN 和 ICE 如何协同工作


让我们来看看两个对等方 A 和 B 的情况,它们都使用 WebRTC 对等双向媒体流式传输(例如,视频聊天应用程序)。当 A 想打电话给 B 时会发生什么?


要连接到 B 的应用程序,A 的应用程序必须生成 SDP 提议。SDP 提议包含有关 A 的应用程序要建立的会话的信息,包括要使用的编解码器、这是音频会话还是视频会话等。它还包含 ICE 候选项列表,这些候选项是 B 的应用程序可以尝试用来连接到 A 的 IP 和端口对。


要构建 ICE 候选项列表,A 的应用程序向 STUN 服务器发出一系列请求。服务器返回发起请求的公有 IP 地址和端口对。A 的应用程序将每个对添加到 ICE 候选项列表中,换句话说,它收集 ICE 候选项。一旦 A 的应用程序完成收集 ICE 候选项,它可以返回 SDP。

接下来,A 的应用程序必须通过这些应用程序用于通信的信令通道将 SDP 传递给 B 的应用程序。WebRTC 标准中未指定用于此交换的传输协议。它可以通过 HTTPS、安全 WebSocket 或任何其他通信协议执行。


现在,B 的应用程序必须生成 SDP 应答。B 的应用程序遵循 A 在上一步中使用的相同步骤:收集 ICE 候选项等。然后,B 的应用程序需要将此 SDP 应答返回给 A 的应用程序。

晚于A 和 B 交换 SDP,然后执行一系列连接性检查。每个应用程序中的 ICE 算法从它在另一方的 SDP 中收到的列表中获取候选项 IP/端口对,并向其发送 STUN 请求。如果从另一个应用程序返回响应,发起方应用程序会认为检查成功,并将该 IP/端口对标记为有效的 ICE 候选项。


在所有 IP/端口对上完成连接性检查后,应用程序协商并决定使用剩余的有效对之一。当选择一个对时,媒体开始在应用程序之间流动。


如果其中一个应用程序找不到通过了连接性检查的 IP/端口对,它们将向 TURN 服务器发出 STUN 请求以获取媒体中继地址。中继地址是一种公有 IP 地址和端口,用于将接收的数据包转发到应用程序或从应用程序中转发收到的数据包,以设置中继地址。然后,将该中继地址添加到候选项列表中,并通过信令通道进行交换。


这里对WebRTC整体做一个总结备忘。


参考文档:


WebRTC


WebRTC协议介绍


如果你觉得文章还不错,可以给个"三连",文章同步到以下个人微信公众号[加班猿]


我是hackett,我们下期见

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
目录
相关文章
|
2月前
|
Web App开发 编解码 安全
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
172 1
|
5月前
|
Web App开发 前端开发
ZLMediaKit解决webrtc前端replaceTrack断流问题
ZLMediaKit解决webrtc前端replaceTrack断流问题
|
1月前
|
Web App开发 编解码 API
WebRTC简介及使用
WebRTC简介及使用
87 0
|
10月前
|
编解码 网络协议
一个RtspServer的设计与实现和RTSP2.0简介
一个RtspServer的设计与实现和RTSP2.0简介
430 0
|
12月前
|
Web App开发 编解码 安全
WebRTC的应用
WebRTC的应用
|
Web App开发 编解码 Linux
webRTC开篇
WebRTC系列
220 0
|
Web App开发 编解码 JavaScript
webRTC架构说明
WebRTC系列
156 0
|
Web App开发 编解码 安全
零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别等
本文主要分享了WebRTC的基本概念、关键技术术语(包括NAT、STUN、TURN、ICE、SDP 和信令),着重讲解了WebRTC是如何实现P2P通信以及WebRTC信令的作用,同时讨论了WebRTC在技术上的优势和劣势,最后还提供了一个简单的WebRTC Demo代码。
367 0
零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别等
|
Web App开发 人工智能 移动开发
什么是WebRTC
什么是WebRTC
250 0
|
Web App开发 编解码 网络性能优化
《WebRTC源码深入剖析》总结
我精心打造的新课 **《WebRTC源码深入剖析》** 终于更新完了!!!2021年年初,在完成了我的处女作《WebRTC音视频实时互动技术——原理、实战与源码分析》一书之后,我终于下定决心,出一部WebRTC源码分析的课程了...
《WebRTC源码深入剖析》总结

热门文章

最新文章