共计 3910 个字符,预计需要花费 10 分钟才能阅读完成。
title: WebRTC 简介
categories:[WebRTC]
tags:[音视频编程]
date: 2021/12/09
作者:hackett
微信公众号:加班猿
WebRTC 简介
WebRTC (Web Real-Time Communications) 是一项实时通信技术,它容许网络应用或者站点,在不借助两头媒介的状况下,建设浏览器之间点对点(Peer-to-Peer)的连贯,实现视频流和(或)音频流或者其余任意数据的传输。WebRTC 蕴含的这些规范使用户在无需装置任何插件或者第三方的软件的状况下,创立点对点(Peer-to-Peer)的数据分享和电话会议成为可能。
WebRTC 架构
色彩标识阐明
(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 拜访。
- 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 服务器的连贯,并通知所有对等方将数据包发送到服务器,而后该服务器将转发给您。这显然会带来一些开销,因而只有在没有其余抉择的状况下才会应用它。
SDP
会话形容协定 (SDP)是用于形容连贯的多媒体内容(例如分辨率、格局、编解码器、加密等)的规范,以便在数据传输后单方能够相互理解。这本质上是形容内容的元数据,而不是媒体内容自身。
那么,从技术上讲,SDP 并不是真正的协定,而是一种用于形容设施之间共享媒体的连贯的数据格式。
SDP 标准纯正是一种会话形容格局。它旨在依据须要散布在不同的传输协定上,包含 SAP、SIP 和 RTSP。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 整体做一个总结备忘。
如果你感觉文章还不错,能够给个 ”三连 “,文章同步到以下集体微信公众号[ 加班猿]
我是hackett,咱们下期见
参考文档:
WebRTC
WebRTC 协定介绍