# 前言

Web 实时通信(WebRTC)是一种新标准,使浏览器可以使用点对点的体系结构进行实时通信。 它是关于 HTML5 浏览器之间安全的,基于同意的音频/视频(和数据)点对点通信。 这是 Web 应用程序世界的一次颠覆性发展,因为它使 Web 开发人员首次无需专有插件即可构建实时多媒体应用程序。

WebRTC 汇集了两个历史上分开的阵营,它们分别与一方面的电信和另一方面的 Web 开发相关。 那些不是来自电信界的人可能会因要了解以了解与 Internet 上实时传输相关的所有特征和信息的大量信息而灰心。 另一方面,对于那些不了解 Web 编程领域(客户端和服务器端)最新发展的用户,将传统 VoIP 应用程序移动到浏览器可能会感到不舒服。

本书的目的是通过在最先进的实时通信协议之上为开发人员提供 WebRTC API 的示例学习描述,从而为这两个社区提供便利。 它的目标读者是异类读者,不仅是 Web 程序员,还包括对 Internet 协议和通信范例的内部运作有一定了解的实时应用程序架构师。 不同的读者可以在不同的位置进入本书。 他们将获得一些理论上的解释和方便的量身定制的练习集,他们可以对其进行适当的修改并将其应用于自己的项目。

首先,我们将以高度抽象的方式描述与 WebRTC 相关的整个开发周期。 然后,我们将与读者携手并进,构建一个完整的 WebRTC 应用程序。 我们将首先忽略所有与旨在进行通信的浏览器对之间的信令通道的构建有关的所有网络方面。

在第一个阶段,我们将说明如何编写代码以查询(并获得对)本地多媒体资源(如音频和视频设备)的访问,并在 HTML5 浏览器窗口中显示它们。 然后,我们将讨论如何将获得的媒体流与 PeerConnection 对象相关联,该对象表示与远程对等方的逻辑连接的抽象。 在这些第一步中,将不会实例化与远程对等方的实际通信通道。所有代码示例都将在单个节点上运行,并且只会帮助程序员熟悉 WebRTC API。

完成此阶段后,我们将简要讨论与建立正确的信令通道有关的各种选择,该通道允许两个对等方之间相互交换(和协商)有关实时多媒体会话的信息。 对于第二阶段,我们不可避免地需要看一下服务器端。有目的地使运行中的示例尽可能简单。它基本上将代表只针对WebRTC API的简单代码段,并保留与最终应用程序的外观相关的所有样式方面。

我们相信,读者将从书中提供的示例代码开始快速学习如何开发自己的用例。

# 章节简介

# 第1章 简介

涵盖了 VoIP(IP 语音)从独立功能转变为浏览器组件的原因。 它介绍了 WebRTC 中使用的现有 HTML5 功能,以及它们如何与实时通信的架构模型(即所谓的 “浏览器 RTC 梯形” )配合。

# 第2章 处理浏览器中的媒体

重点介绍允许客户端 Web 应用程序(通常以 HTML5 和 JavaScript 的混合编写)通过 WebRTC API 与 Web 浏览器进行交互的机制。 举例说明了如何查询浏览器功能,如何接收浏览器生成的通知以及如何应用浏览器 API 以便正确处理浏览器中的媒体。

# 第3章 构建浏览器 RTC 梯形图:本地视角

引入了 RTCPeerConnection API,其主要目的是通过为双向多媒体通信通道提供一个抽象来在浏览器对等之间来回传输流数据。

# 第4章 需要信令通道

重点在启用 WebRTC 的点对点之间创建额外点信令通道。 这样的信道在会话建立时证明是基本的,以便允许交换会话描述和网络可达性信息。

# 第5章 放在一起:拼凑出你的第一个 WebRTC 系统

通过提供一个完整的示例来结束 WebRTC 导览。 读者将学习如何使用前面各章中介绍的 API 功能从头开始创建基本而完整的 Web 实时通信系统。

# 第6章 WebRTC API 的高级功能简介

探索 WebRTC API 的高级方面并考虑未来。

# 本书中使用的约定

本书使用以下约定:

# 斜体

指示新的术语,URL,电子邮件地址,文件名和文件扩展名。

# 等宽字体

用于程序清单,以及在段落中用于引用程序元素,例如变量或函数名称,数据库,数据类型,环境变量,语句和关键字。

等宽粗体

显示应由用户直接输入的命令或其他文本。

# 等宽斜体

显示应由用户提供的值或由上下文确定的值替换的文本。

注:原版书使用了。不过本翻译并没有使用

建议

该元素表示提示或建议。

注意

此元素表示一般注释。

警告

此元素表示警告或注意。

# 使用代码示例

代码在 https://github.com/spromano/WebRTC_Book