

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 工作原理
<a name="kvswebrtc-how-it-works"></a>

带有 WebRTC 的 Amazon Kinesis Video Streams 支持网络浏览器、移动设备和其他支持 WebRTC 的应用程序之间的实时视频通信。它为构建视频流应用程序、处理信号、媒体流以及与其他 AWS 服务集成等任务提供了安全且可扩展的基础架构。本节介绍服务的底层架构、组件和工作流程，帮助解释其设计原则和机制。

**Topics**
+ [重要概念](#how-kvswebrtc-concepts)
+ [技术概念](#how-webrtc-concepts)
+ [STUN、TURN 和 ICE 如何协同工作](#how-webrtc-components-interwork)
+ [组件](#how-kvswebrtc-works)

## 重要概念
<a name="how-kvswebrtc-concepts"></a>

以下是特定于 Amazon Kinesis Video Streams with WebRTC 的关键术语和概念。

**信令通道**  
一种资源，使应用程序能够通过交换信令消息来发现、设置、控制和终止 peer-to-peer连接。信令消息是两个应用程序相互交换以建立 peer-to-peer连接的元数据。此元数据包括媒体编解码器和编解码器参数等本地媒体信息，及两个应用程序互相连接以进行实时流式传输而可能使用的网络候选路径。  
流式传输应用程序可以与信令通道保持持续连接，并等待其他应用程序连接到它们。或者，只有当它们需要实时流媒体时，才能连接到信令通道。信号通道使用一个主站连接到多个查看器的概念，使应用程序能够在 one-to-few模型中相互连接。发起连接的应用程序使用 `ConnectAsMaster` API 承担主设备的责任，并等待查看器连接。然后，多达 10 个应用程序可以通过调用 `ConnectAsViewer` API 来承担查看器责任，以连接到该信令通道。在它们连接到信令通道后，主应用程序和查看器应用程序可以互相发送信令消息，以建立直播媒体 peer-to-peer流的连接。

**对等**  
任何配置为通过带有 WebRTC 的 Kinesis Video Streams 进行实时、双向直播的设备或应用程序（例如，移动或网络应用程序、网络摄像头、家庭安全摄像头、婴儿监视器等）。

**Master**  
发起连接并连接到信令通道的对等方，能够发现媒体并与任何信令通道的已连接查看器交换媒体。  
目前，一个信令通道只能有一个主设备。

**查看者**  
连接到信令通道的对等方只能通过信令通道的主设备发现和交换媒体。查看器无法通过给定的信令通道发现其他查看器或与其交互。一个信令通道最多可以有 10 个连接的查看器。

## 技术概念
<a name="how-webrtc-concepts"></a>

当你开始使用带有 WebRTC 的 Kinesis Video Streams 时，你还可以从学习几种相互关联的协议中受益，WebRTC 技术就是这些协议 APIs 的组成部分。

**NAT 的会话遍历实用工具 (STUN)**  
一种协议，用于发现您的公有地址并确定路由器中阻止与对等方直接连接的任何限制。

**使用中继绕过 NAT 的遍历 (TURN)**  
通过打开与 TURN 服务器的连接并通过该服务器中继所有信息来绕过对称 NAT 限制的服务器。

**会话描述协议（SDP）**  
一种描述连接的多媒体内容的标准，例如分辨率、格式、编解码器、加密等，以便一旦传输数据，两个对等方就可以相互理解。

**SDP 提议**  
由代理发送的 SDP 消息，代理生成会话描述以创建或修改会话。它描述所需媒体通信的各个方面。

**SDP 应答**  
应答者响应从提议人收到的提议而发送的 SDP 消息。应答指出了已接受的各个方面。例如，提议中的所有音频和视频流是否都被接受。

**交互式连接建立 (ICE)**  
允许您的 Web 浏览器与对等方连接的框架。

**ICE 候选项**  
发送对等方能够用于通信的方法。

## STUN、TURN 和 ICE 如何协同工作
<a name="how-webrtc-components-interwork"></a>

让我们来看看两个对等方 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 交换完毕后 SDPs，他们会执行一系列连通性检查。每个应用程序中的 ICE 算法从另一方的 SDP 中收到的列表中提取 IP/port 一对候选对，然后向其发送 STUN 请求。如果另一个应用程序返回了响应，则原始应用程序会认为检查成功，并将该 IP/port 对标记为有效的 ICE 候选对象。

完成所有 IP/port 配对的连通性检查后，应用程序进行协商并决定使用剩余的有效配对之一。当选择一个对时，媒体开始在应用程序之间流动。

如果其中一个应用程序找不到通过连接检查的 IP/port 配对，它们将向 TURN 服务器发出 STUN 请求以获取媒体中继地址。中继地址是一种公有 IP 地址和端口，用于将接收的数据包转发到应用程序或从应用程序中转发收到的数据包，以设置中继地址。然后，将该中继地址添加到候选项列表中，并通过信令通道进行交换。

## 组件
<a name="how-kvswebrtc-works"></a>

Kinesis Video Streams with WebRTC 包括以下组件：
+ **控制层面**

  控制面板组件负责创建和维护 Kinesis Video Streams with WebRTC 信令通道。有关更多信息，请参阅 [Amazon Kinesis Video Streams API 参考](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html)。
+ **正在发送信号**

  信令组件管理WebRTC信令端点，这些端点允许应用程序安全地相互连接以进行实时媒体流。 peer-to-peer[信令组件包括 [Amazon Kinesis 视频信令 APIs](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Signaling_Channels.html) REST 和一组 Websocket。 APIs](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-websocket-apis.html)
+ **STUN**

  此组件管理 STUN 终端节点，这些终端节点使应用程序能够在其位于 NAT 或防火墙后面时发现其公有 IP 地址。
+ **TURN**

  此组件管理 TURN 端点，当应用程序无法流式传输媒体时，这些端点允许通过云端进行媒体中继 peer-to-peer。
+ **Kinesis Video Streams Streams WebRTC SDKs**

  您可以在设备和应用程序客户端上下载、安装和配置这些软件库，使具有WebRTC功能的相机物联网设备能够进行低 peer-to-peer延迟的媒体流。它们 SDKs 还使安卓、iOS和网络应用程序客户端能够将Kinesis Video Streams与WebRTC信令、TURN和STUN功能与任何符合WebRTC标准的移动或网络播放器集成。
  + [亚马逊 Kinesis Video Streams 带有 WebRTC 开发工具包的 C 语言版本，适用于嵌入式设备](kvswebrtc-sdk-c.md)
  + [带有 WebRTC 开发工具包的 Amazon Kinesis Video Streams 适用于网络应用程序 JavaScript](kvswebrtc-sdk-js.md)
  + [适用于安卓的亚马逊 Kinesis Video Streams WebRTC SDK](kvswebrtc-sdk-android.md)
  + [适用于 iOS 的亚马逊 Kinesis Video Streams WebRTC SDK](kvswebrtc-sdk-ios.md)