

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

# Kinesis Video Streams 支持 API 和制作人库
<a name="how-it-works-kinesis-video-api-producer-sdk"></a>

Kinesis Vid APIs eo Streams 允许你创建和管理流，以及向流中读取或写入媒体数据。Kinesis Video Streams 控制台除了管理功能外，还支持直播 video-on-demand和播放。Kinesis Video Streams 还提供了一组制作者库，您可以在应用程序代码中使用这些库从媒体源提取数据并上传到您的 Kinesis 视频流。

**Topics**
+ [Kinesis Video Streams API](#how-it-works-kinesis-video-api)
+ [端点发现模式](#how-it-works-api-pattern)
+ [制作人库](#how-it-works-producer-sdk)

## Kinesis Video Streams API
<a name="how-it-works-kinesis-video-api"></a>

Kinesis Video Streams APIs 提供创建和管理 Kinesis Video Streams 的功能。它还 APIs 提供向流读取和写入媒体数据的功能，如下所示：
+ **制作人 API** — Kinesis Video Streams 提供了`PutMedia`一种将媒体数据写入 Kinesis 视频流的 API。在 `PutMedia` 请求中，创建者将发送一个媒体片段流。*片段* 是一系列独立帧。属于某个片段的帧不依赖其他片段中的任何帧。有关更多信息，请参阅 [PutMedia](API_dataplane_PutMedia.md)。

  当片段到达时，Kinesis Video Streams 会按递增顺序分配一个唯一的片段编号。它还将每个片段的制作方和服务器端时间戳存储为 Kinesis Video Streams 特有的元数据。
+ **消费**者 APIs-消费者可以使用以下内容 APIs 从流中获取数据：
  + `GetMedia` - 在使用此 API 时，使用者必须标识正在启动的片段。之后，API 将按照将片段添加到流中的顺序返回片段 (按照片段号的递增顺序)。片段中的媒体数据将打包成一个结构化格式，例如 [Matroska (MKV)](https://www.matroska.org/technical/specs/index.html)。有关更多信息，请参阅 [GetMedia](API_dataplane_GetMedia.md)。
**注意**  
`GetMedia` 了解片段所在位置 (存档到数据存储中或实时可用)。例如，如果 `GetMedia` 确定已存档正在启动的片段，则它会开始从数据存储返回片段。当它必须返回尚未存档的新片段时，会`GetMedia`切换到从内存流缓冲区读取片段。

    这是一个持续使用者的示例，它按照流提取片段的顺序处理片段。

    `GetMedia` 使视频处理应用程序能够先失败或落后，然后保持同步，而无需执行其他操作。通过使用 `GetMedia`，应用程序可以处理已存档到数据存储中的数据，并且在应用程序保持同步时，`GetMedia` 仍会在其到达时实时提供媒体数据。
  + `GetMediaFromFragmentList` (和 `ListFragments`) - 批处理应用程序被视为离线使用者。离线消费者可以选择通过组合`ListFragments`和来显式提取特定的媒体片段或视频范围`GetMediaFromFragmentList` APIs。 `ListFragments`并`GetMediaFromFragmentList`使应用程序能够识别特定时间范围或片段范围内的视频片段，然后按顺序或并行获取这些片段进行处理。此方法适用于 `MapReduce` 应用程序套件，该套件必须并行快速处理大量数据。

    例如，假设使用者需要处理一天的视频片段。使用者将执行以下操作：

    1. 通过调用 `ListFragments` API 并指定时间范围以获取片段列表，从而选择所需的片段集合。

       API 将返回指定时间范围的所有片段中的元数据。元数据提供诸如片段编号、制作方和服务器端时间戳等信息。

    1. 获取片段元数据列表并按任意顺序检索片段。例如，要处理当天的所有片段，使用者可以选择将列表拆分为子列表，让工作人员（例如，多个 Amazon EC2 实例）使用并行提取片段`GetMediaFromFragmentList`，然后并行处理它们。

下图显示了这些 API 调用期间片段和数据块的数据流。

![\[显示 API 调用期间片段和数据块的数据流的图\]](http://docs.aws.amazon.com/zh_cn/kinesisvideostreams/latest/dg/images/arch-20.png)


当创建者发送 `PutMedia` 请求时，它会在负载中发送媒体元数据，然后发送一系列媒体数据片段。收到数据后，Kinesis Video Streams 将传入的媒体数据存储为 Kinesis Video Streams 数据块。每个数据块均包含以下内容：
+ 媒体元数据的副本
+ 片段
+ Kinesis Video Streams 特有的元数据；例如，片段编号以及服务器端和制作人端的时间戳

当用户请求媒体元数据时，Kinesis Video Streams 会返回一个区块流，从您在请求中指定的片段编号开始。

如果您为流启用数据持久性，则在收到流中的片段后，Kinesis Video Streams 还会将该片段的副本保存到数据存储中。

## 端点发现模式
<a name="how-it-works-api-pattern"></a>

**控制平面 REST APIs**

要访问 [Kinesis Video Streams 控制平面 APIs](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html) REST，请使用 [Kinesis Video Streams 服务](https://docs.aws.amazon.com//general/latest/gr/akv.html#akv_region)端点。

**数据平面 REST APIs**

Kinesis Video Streams 使用[蜂窝](https://docs.aws.amazon.com//wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/what-is-a-cell-based-architecture.html)架构构建，可确保更好的扩展和流量隔离特性。由于每个流都映射到某个区域中的特定单元格，因此您的应用程序必须使用您的数据流已映射到的正确单元格专用端点。访问数据平面 REST 时 APIs，您需要自己管理和映射正确的端点。此过程，即端点发现模式，如下所述：

1. 端点发现模式从调用其中一个`GetEndpoints`操作开始。这些操作属于控制平面。

   1. 如果您正在检索[亚马逊 Kinesis Video Streams](API_Operations_Amazon_Kinesis_Video_Streams_Media.md)或[亚马逊 Kinesis Video Streams 存档媒体](API_Operations_Amazon_Kinesis_Video_Streams_Archived_Media.md)服务的终端节点，请使用[GetDataEndpoint](API_GetDataEndpoint.md)。

   1. 如果您正在检索[亚马逊 Kinesis 视频信令频道](API_Operations_Amazon_Kinesis_Video_Signaling_Channels.md)、或 [Kinesis 视频](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-websocket-apis.html)信号的终端节点[亚马逊 Kinesis 视频 WebRTC 存储](API_Operations_Amazon_Kinesis_Video_WebRTC_Storage.md)，请使用。[GetSignalingChannelEndpoint](API_GetSignalingChannelEndpoint.md)

1. 缓存并重用端点。

1. 如果缓存的端点不再起作用，请重新调用`GetEndpoints`以刷新终端节点。

## 制作人库
<a name="how-it-works-producer-sdk"></a>

创建 Kinesis 视频流后，就可以开始向该流发送数据了。在您的应用程序代码中，您可以使用这些库从媒体源提取数据并上传到您的 Kinesis 视频流。有关可用创建者库的更多信息，请参阅 [上传到 Kinesis Video Streams](producer-sdk.md)。