纵观过去几年 WebRTC 的发展和新兴 WebRTC 解决方案的前景,我们看到了相当多的以 WebRTC 为中心的 JavaScript (JS) 库。事实上,在浏览器供应商开始交付 WebRTC 实现后不久, WebRTC 信令库就满地开花了。
每个都在浏览器中提供一个 JavaScript API 表面,它提供补充 WebRTC 媒体服务的信号服务。如此丰富的选择引出了几个问题:
- JS库的真正目的是什么?
- 我需要一个 WebRTC 吗?
- 在评估 WebRTC 解决方案的这个组件时我应该考虑什么?
- 什么造就了一个好的 JS 库,什么造就了一个坏的 JS 库?
这些是我在自己对 WebRTC 的早期研究中遇到的烦人的问题。在这一点上,我当然没有亲身使用过所有的 WebRTC JS 库,但肯定尝试过不少。在这篇文章中,我将尝试解决这些问题,以及我对 WebRTC JS 库中的内容的看法。
快速入门
在我们跳入 WebRTC JS 库的一些选项之前,让我们为没有经验的人做一个快速的 Web 入门。首先,给定的 HTML5 网络应用程序通常由 3 个基本组件组成:HTML、CSS,当然还有 JavaScript。当您浏览到一个 URL 时,您的浏览器会吸收与该页面关联的所有 HTML、CSS 和 JavaScript 文件,并呈现它。HTML 和 CSS 用于呈现向用户(即 UI)显示的结构和样式。JavaScript 被加载到沙箱环境或虚拟机中,并为页面提供它的大脑。
页面的 HTML 和 CSS 在 JavaScript 沙箱中表示,称为文档对象模型或 DOM。通过与 DOM 交互,JavaScript 可以完全控制页面中的 HTML 和 CSS。它可以修改 DOM 以操纵 HTML 或 CSS 以在 UI 中创建动态变化,或者执行诸如检测鼠标移动和单击以执行功能之类的操作,甚至添加或删除页面上看到的元素。在 JavaScript 沙箱中补充 DOM 的还有许多其他内置 Web 对象。这包括诸如 Web Storage 之类的东西,它提供对本地系统磁盘的访问以存储数据,或者 Web Workers 允许应用程序在本地系统上分离出额外的处理线程。它包括用于将数据传入和传出浏览器的对象,即 HTTP 和 WebSockets。而且当然,正是在这个沙盒中,本地摄像头/麦克风的对象和 WebRTC peerConnection 存在。所有这些东西究竟如何协同工作,取决于随页面加载的 JavaScript。
JavaScript 库长期以来一直是 Web 的一部分,它们为复杂 Web 应用程序的开发提供了一种有效的扩展方式。JavaScript 任务可以分解成单独的文件或库,页面下载许多不同的实际 JavaScript 文件是很常见的,这些文件全部编译在一起以运行应用程序。Web 开发人员的主要 JavaScript 代码能够调用页面中所有其他文件提供的函数或方法,从而提供不同 JavaScript 块之间的交互。这基本上就是 JavaScript API 的创建方式。库提供的 JavaScript API 只是加载在同一沙箱中的 JavaScript 代码块之间的交互。 查询 是 Web 上更流行的库之一的一个很好的例子,它的 API 提供了许多函数来以巧妙的方式处理 DOM 操作,用于执行动画或动态页面更新等操作。
API 机制
显然,库提供的功能和方法的细节很重要。鉴于过多的 WebRTC JS 库,它们提供的 API 似乎也将非常多样化。但是,它们可能比您想象的更相似。实际上有许多函数对它们中的大多数都是通用的。以下是许多 WebRTC JavaScript 库的一些典型机制:
API技工 | 描述 |
---|---|
库的初始化 | 使用大多数 WebRTC JS 库都是从一种引导过程开始的,以对其进行实例化。这通常涉及调用某种形式的构造函数,以创建代表库提供的服务的 JavaScript 对象的实例。在此初始化期间,大多数库都需要将某种基本配置信息传递给 JS 库。例如,最终用户信息通常会提供给图书馆,因此它可以将身份附加到它可能设置的任何 WebRTC 会话。该最终用户信息可以由用户输入提供,也可以由存储在 Web 服务器中并在初始页面下载中发送的信息提供。 |
登记 | 库初始化后(有时与初始化一起),通常会发生某种注册功能。这可以用于确定与某处信令服务器的连接,并让服务知道用户已准备好接收入站信令消息。注册通常还涉及一些安全程序,以在连接回网络时提供用户和/或应用程序的身份验证。 |
创建和管理 WebRTC 会话 | 几乎所有的 JavaScript 库都提供了创建和管理 WebRTC 会话的方法。在大多数情况下,WebRTC JS 库将处理获取摄像头和麦克风 (getUserMedia) 并设置 peerConnection,使方法非常简单直接。虽然方法调用的语义可能因库而略有不同,但它们在实践中往往非常相似。通常,在进行此方法调用时,信息会传递到库以指示调用对象(被叫方),并且还会传递一些事件回调(更多关于下面的事件回调)。这种方法可能还需要交换一些关于即将建立的语音/视频媒体流的信息,以便它们可以附加到 DOM 中适当的音频/视频元素。会话建立后, |
事件回调 | 使用的各种事件回调被传递到 WebRTC JS 库。这些让开发人员指示 JavaScript 库在库内部发生异步事件时如何通知或“回调”开发人员的 JavaScript。常见事件往往是有关特定请求(即呼叫或注册)成功或失败的通知,或者图书馆收到入站呼叫或消息。当这些事件之一发生时,WebRTC JS 库会调用开发人员提供的任何函数,并提供事件回调。提供丰富回调集的 WebRTC JS 库向开发人员的应用程序公开更好的信息,包括 WebRTC 会话的状态,允许应用程序通知用户或记录正在发生的事情。 |
除了这些常见的 API 方法之外,许多库还提供了一些更高级的方法,这些方法可能特定于它们所代表的服务。例如,与会议服务相关的图书馆可能会提供围绕会议控制的额外方法,而电话服务可能会为 SMS 或 RCS 提供额外的方法,最后协作服务可能会提供额外的屏幕共享和文件传输方法。真正的区别可能在于 WebRTC JS 库提供的更高级的特定于服务的方法,因为用于初始化、注册、发起/接收调用和事件回调的高级 API 机制在大多数库中都非常相似。如果担心这些 API 的差异太大,ORCA.js ) 通过在 WebRTC JS 库 API 周围维护一些 JavaScript 包装器。
那么,WebRTC JS 库中有什么?
由于没有为 WebRTC 定义的信令协议,处理浏览器媒体引擎并提供信令服务的 JavaScript 库将保留下来。你认为 WebRTC JS 库的碎片化格局是好事还是坏事?虽然其中一些高级功能相似,但好的功能简单且可扩展,提供对大量信息的访问,并且有详细的文档记录。最重要的是,最适合您的是足够灵活以满足您的安全、体系结构和功能要求(无论它使用什么协议)。让我们知道在 WebRTC JS 库中什么对您很重要!
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/8282.html