Skip to content

WebRTC - 环境

在深入研究 WebRTC 应用开发之前,让我们先设置一个合适的编码环境。你需要一个好的文本编辑器或 集成开发环境(IDE - Integrated Development Environment)来编写 HTML、JavaScript 以及可能的服务器端代码(如 Node.js)。流行的选择包括 Visual Studio Code、WebStorm、Sublime Text 或 Atom。

WebRTC 开发的一个关键要求是需要一个 Web 服务器。浏览器会施加安全限制:getUserMedia()(用于获取摄像头/麦克风访问权限的 API)和其他敏感 API 通常要求通过 HTTPS 提供页面(尽管 localhost 通常是一个例外)。简单地通过 file:/// 协议打开 HTML 文件对许多 WebRTC 功能将无法工作。

Node.js 是一个流行的 JavaScript 运行时环境,非常适合在开发过程中构建信令服务器(Signaling Server)和提供静态文件服务。以下是设置方法:

  • **安装 Node.js:**推荐使用版本管理器,如 NVM (Node Version Manager)。请访问 NVM 的 GitHub 页面查看安装说明。安装 NVM 后,你可以运行 nvm install —lts 安装最新的 LTS (Long Term Support) 版本,然后运行 nvm use —lts 使用该版本。或者,也可以从 nodejs.org 下载安装包。
  • **验证安装:**打开你的终端或命令行提示符,输入 node -v 和 npm -v。这应该会显示已安装的 Node.js 和 npm (Node Package Manager) 的版本号。
  • **安装静态服务器:**为了提供你的 HTML 和 JavaScript 文件服务,你可以使用一个简单的基于 Node.js 的静态服务器。http-server 是一个不错的选择。使用以下命令全局安装它:npm install -g http-server。
  • **提供文件服务:**在终端中切换到你的项目目录(包含你的 index.html 和其他文件),然后运行:http-server。这会启动一个服务器,通常在 http://localhost:8080 地址上。然后你可以在浏览器中访问这个地址来访问你的文件。

要测试你的 Node.js 安装,你可以以交互模式运行它。打开你的终端并输入 node。这会启动 Node.js 的 REPL (Read-Eval-Print Loop)。你可以直接输入 JavaScript 命令:

> console.log('Node.js is working!');
Node.js is working!
undefined
> 2 + 2
4

你也可以执行 JavaScript 文件。创建一个名为 test.js 的文件,内容如下:

console.log('Testing Node.js from a file');

然后在你的终端中运行 node test.js。你应该会看到输出:Testing Node.js from a file。

为了构建信令服务器(WebRTC 需要但本身不提供),WebSockets 是一个常见的选择。ws 库是一个流行的基于 Node.js 的 WebSocket 实现。在你的项目目录中安装它,运行:npm install ws。

为了直接测试你的基于 WebSocket 的信令服务器,一个命令行 WebSocket 客户端,例如 wscat 会很有用。全局安装它:npm install -g wscat。

理解这些底层技术有助于掌握 WebRTC 的工作原理:

序号协议/概念与描述
1UDP (用户数据报协议 - User Datagram Protocol)
WebRTC 主要使用 UDP 进行媒体流传输(通过 SRTP),因为它无连接且延迟低于 TCP,这对实时通信至关重要。在某些配置下,TCP 可能用于数据通道或信令。
2SDP (会话描述协议 - Session Description Protocol)
SDP 是一种用于描述多媒体会话参数的格式。在 WebRTC 中,对等端交换 SDP 消息(作为 ‘offers’ 和 ‘answers’)来协商能力,例如编解码器、媒体格式和加密细节。
3ICE (交互式连接建立 - Interactive Connectivity Establishment)
ICE 是一个框架,使对等端能够发现连接路径,即使穿透 NAT 和防火墙也能实现。它使用 STUN 和 TURN 服务器。
4STUN (会话穿越NAT实用工具 - Session Traversal Utilities for NAT)
一种用于发现客户端的公共 IP 地址及其所在的 NAT 类型。适用于大多数 NAT 类型,但不是全部(例如,对称型 NAT)。
5TURN (中继穿越NAT - Traversal Using Relays around NAT)
当通过 STUN 的 P2P 直连失败时(例如,由于对称型 NAT 或限制性防火墙),TURN 服务器充当中继,转发对等端之间的媒体流。这确保了连接性,但会增加延迟和服务器成本。
6SCTP (流控制传输协议 - Stream Control Transmission Protocol)
WebRTC 数据通道使用 SCTP(封装在 DTLS 中,然后是 UDP)为对等端之间的数据传输提供可配置的可靠性和有序性。
7DTLS (数据报传输层安全 - Datagram Transport Layer Security)
用于保护所有 WebRTC 通信(通过 SRTP 的媒体和通过 SCTP 的数据通道)。DTLS 提供加密、认证和完整性,类似于 TLS,但适用于数据报协议。

在本章中,我们概述了如何使用 Node.js 设置一个基本的 WebRTC 开发环境。我们还探讨了基本协议和概念,如 UDP、SDP、ICE、STUN、TURN 和 SCTP,它们构成了 WebRTC 点对点通信能力的基础。深入理解这些技术将有助于你构建更复杂的 WebRTC 应用。