随着WebRTC的出现以及浏览器处理实时点对点通信的能力不断增强,构建实时应用程序比以往任何时候都要容易。在这篇文章中,我们将看看SimpleWebRTC以及我们如何在实现WebRTC技术时使用该平台。我们还将看看其他可以帮助我们实现同样目标的替代方案。
如果你需要一些关于WebRTC和点对点通信的背景资料,我推荐你阅读《WebRTC的曙光》和《getUserMedia API简介》。
由于构建自定义WebRTC应用程序的复杂性,这不会是一个逐步构建的教程。相反,我们将看看建立你自己的可靠应用程序所需的库和服务器类型。我将提供完整的示例应用程序的链接,你可以在构建你的应用程序时参考。
我们的重点将主要放在SimpleWebRTC这个平台上。稍后,我们将简要介绍其他商业和开源的替代方案,它们可能会帮助你完成同样的任务。
什么是WebRTC
WebRTC(网络实时通信)是一个开源项目,它允许网络浏览器之间进行点对点的实时通信,通过网络传输实时视频、音频和数据流。现代桌面和移动浏览器,如谷歌浏览器、Mozilla Firefox、Safari、Opera和其他基于Chromium的浏览器已经原生实现了这项技术。这是一个好消息,因为用户不需要安装第三方插件或应用程序来访问该技术。
旧的浏览器版本和传统的浏览器,如IE浏览器,则不具备这种技术。用户将需要使用最新的浏览器。你可以查看支持的浏览器的完整列表。
各大浏览器对mdn-api__RTCPeerConnection功能的支持数据
2021年1月,WebRTC 1.0规范被万维网联盟从候选建议过渡到建议状态。考虑到该技术在10年前首次向公众发布,这是一个了不起的成就。
WebRTC规范涵盖了浏览器如何访问本地媒体设备,以及它们如何使用一套实时协议向浏览器传输媒体和通用应用程序数据。它通过一组JavaScript APIs来实现这一目标,这些APIs已经在前面链接的文章中有所介绍。该规范还确保所有通信都是加密的,不需要的第三方不能窃听数据流。
值得注意的是,WebRTC并没有涵盖所有的内容,比如信令,即在浏览器之间启动连接的过程。规范的这一部分被排除在外,以防止潜在的新技术的限制。第二个原因是,WebRTC主要是客户端技术,而诸如会话等问题最好用服务器技术处理。
网络浏览器的信令如何工作
WebRTC的定义是网络浏览器之间的点对点通信。现实情况是,大多数浏览器运行在NAT(网络地址转换)设备后面的计算机中,也可以选择防火墙。NAT设备,通常是一个路由器或调制解调器,允许拥有私人IP地址的计算机通过一个公共IP地址连接到互联网。
NAT设备保护个人电脑不被恶意用户通过互联网的IP地址直接利用。不幸的是,它也阻止了具有私人IP地址的设备通过互联网连接到另一个私人IP设备。
为了克服这一挑战,互联网工程任务组提出了**ICE(互动连接建立)**协议,允许私有IP计算机在公共网络上发现并连接到其他私有计算机。
这涉及到使用一个公共信令服务器,两个客户端都可以很容易地连接到该服务器。对等计算机连接到这个服务器,并使用它来交换数据源和汇所需的IP地址和端口。有了这些信息,他们就可以彼此建立直接的连接,并开始传输视频、音频和数据。
这里有一个动画演示。
图片来源:WebRTC信令
为了建立WebRTC信令,ICE框架要求你提供两种类型的服务器,详见下文。
1.STUN服务器
STUN(Session Traversal Utilities for NAT)服务器所做的正是我刚才所描述的。它只是为计算机提供一个交换联系信息的会议空间。一旦交换了信息,对等计算机之间就建立了连接,然后STUN服务器就不参与其余的对话了。
这里有一个在客户端运行的脚本例子,它允许浏览器通过STUN服务器启动连接。该脚本允许提供多个STUN服务器的URL,以防一个失败。
function createPeerConnection() {
myPeerConnection = new RTCPeerConnection({
iceServers: [
{
urls: "stun:stun.stunprotocol.org",
},
],
});
}
通过STUN服务器建立的连接是最理想和最经济的WebRTC通信类型。用户几乎不会产生任何运行成本。不幸的是,由于每个对等体使用的NAT设备的类型,对一些用户来说,连接可能无法建立。在这种情况下,ICE协议要求你提供一个后备方案,这是一个不同类型的信令服务器,称为TURN服务器。
2.TURN服务器
TURN (Traversal Using Relay NAT)服务器是STUN服务器的扩展。它与前者的不同之处在于,它处理整个通信会话。
基本上,在对等体之间建立连接后,它接收来自一个对等体的数据流并将其转发到另一个对等体,反之亦然。这种类型的通信更加昂贵,主机必须为运行TURN服务器所需的处理和带宽负荷付费。
下面是整个信令过程的图形描述,首先涉及STUN服务器,然后是TURN服务器作为回退。
图片来源:显示整个WebRTC过程的完整架构图。
构建一个自定义的视频聊天应用程序
虽然可以使用普通的JavaScript代码和免费的公共STUN服务器来建立自己的视频聊天解决方案,但不是每个人都能在你的平台上相互连接。如果你想为你的所有用户提供可靠的服务,使用TURN服务器是必须的。
如前所述,设置WebRTC平台可能很复杂。幸运的是,我们有多合一的商业平台,使建立一个WebRTC视频聊天应用程序变得轻而易举。现在让我们来看看SimpleWebRTC如何解除我们的负担。
什么是SimpleWebRTC
SimpleWebRTC是一个平台,它为开发者使用React构建和部署定制的实时应用程序提供了一个简单而经济的服务。具体来说,他们提供以下内容。
- SimpleWebRTC SDK:一个前端库
- 托管。STUN/TURN和SFU(Selective Forward Unit)服务器
- 技术支持
- 定制应用开发和WebRTC咨询服务
- 单一租户和企业内部基础设施
- Talky:一个完全由SimpleWebRTC构建的免费视频聊天应用程序
以下是他们帮助客户开发和推出的一些定制视频聊天项目的截图样本。
图片来源:Talky
图片来源:网络辅导应用
SimpleWebRTC平台提供的主要WebRTC服务包括。
- 视频、语音和屏幕共享的安全流媒体
- 端对端加密
- 支持多达30个并发用户
- 无限房间
在定价方面,他们提供以下计划。
- 小团体:最多6人,每月5美元起。
- 大组:最多30人,每月3美元起。
小型组计划的好处是比大型组计划有端到端的加密。在小团体计划中,60-80%的会话是点对点连接,媒体流从不接触服务器。这种类型的会议的带宽消耗是不收费的。
对于大型群组计划,流量通过一个称为SFU(选择性转发单元)**的服务器进行路由,在那里所有的数据流都被计量。
值得注意的是,大多数商业替代方案(我们将在后面简要介绍)都是按分钟收费。乍一看,它确实相当实惠。然而,你确实要为点对点的连接付费,而SimpleWebRTC是免费的。
继续阅读 在SitePoint上构建WebRTC视频聊天应用程序。