

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Kinesis Video Streams API 和生產者程式庫支援
<a name="how-it-works-kinesis-video-api-producer-sdk"></a>

Kinesis Video Streams 提供 APIs，供您建立和管理串流，以及讀取或寫入串流的媒體資料。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 提供用於建立和管理 Kinesis Video Streams 的 APIs。它還提供 API，可讓您將媒體資料讀取和寫入到串流，如下所示：
+ **製作者 API** – Kinesis Video Streams 提供將媒體資料寫入 Kinesis 影片串流的 `PutMedia` 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` API，離線消費者可選擇明確擷取特定媒體片段或範圍的視訊。`ListFragments` 及 `GetMediaFromFragmentList` 可讓應用程式識別特定時間範圍內或片段範圍內的影片片段，然後依序或以平行處理方式擷取這些片段。這種方法是適用於 `MapReduce` 應用程式套件，也就是在必須快速地平行處理大量資料時。

    例如，假設一個消費者想要處理一天量的影片片段。消費者可執行以下操作：

    1. 呼叫 `ListFragments` API 並指定時間範圍來取得片段的清單，以選取所需的片段集合。

       API 會傳回在特定時間範圍內的所有片段的中繼資料。中繼資料提供片段編號、生產者端和伺服器端時間戳記等資訊。

    1. 使用片段中繼資料清單並以任何順序擷取片段。例如，若要處理當天的所有片段，消費者可以選擇將清單分割為子清單，並讓工作者 （例如多個 Amazon EC2 執行個體） 使用 平行擷取片段`GetMediaFromFragmentList`，並平行處理。

下圖顯示在這些 API 呼叫期間片段和區塊的資料流。

![圖表顯示在 API 呼叫期間片段和區塊的資料流](http://docs.aws.amazon.com/zh_tw/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 控制平面 REST APIs](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html)，請使用 [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. 如果您要擷取 [Amazon Kinesis Video Streams 媒體](API_Operations_Amazon_Kinesis_Video_Streams_Media.md)或 [Amazon Kinesis Video Streams 封存媒體](API_Operations_Amazon_Kinesis_Video_Streams_Archived_Media.md)服務的端點，請使用 [GetDataEndpoint](API_GetDataEndpoint.md)。

   1. 如果您要擷取 [Amazon Kinesis Video Signaling 頻道](API_Operations_Amazon_Kinesis_Video_Signaling_Channels.md)、 [Amazon Kinesis Video WebRTC 儲存體](API_Operations_Amazon_Kinesis_Video_WebRTC_Storage.md)或 [Kinesis Video Signaling](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-websocket-apis.html) 的端點，請使用 [GetSignalingChannelEndpoint](API_GetSignalingChannelEndpoint.md)。

1. 快取和重複使用端點。

1. 如果快取的端點無法再運作，請對 進行新的呼叫`GetEndpoints`以重新整理端點。

## 生產者程式庫
<a name="how-it-works-producer-sdk"></a>

建立 Kinesis 影片串流後，您可以開始將資料傳送至串流。在您的應用程式程式碼中，您可以使用這些程式庫從媒體來源擷取資料，並上傳至 Kinesis 影片串流。如需這些可用製作者資料庫的詳細資訊，請參閱 [上傳至 Kinesis Video Streams](producer-sdk.md)。