

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

# 搭配 WebRTC 使用 Amazon Kinesis Video Streams 來擷取和存放媒體
<a name="webrtc-ingestion"></a>

Amazon Kinesis Video Streams 提供透過 WebRTC 即時將視訊和音訊串流至雲端的功能，以進行儲存、播放和分析處理。客戶可以使用增強型 WebRTC SDK 和雲端 APIs 來啟用即時串流，以及將媒體擷取至雲端。

若要開始使用，您可以在具有視訊感應器的任何安全攝影機或裝置上安裝 Amazon Kinesis Video Streams with [WebRTC SDK](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c/tree/Release-WebRTC-Streams-Ingestion-Public-Preview)，並使用我們的 [APIs](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html) 來啟用延遲低於 1 秒的媒體串流，以及在雲端中擷取和儲存。 AWS IoT 擷取後，您可以透過我們easy-to-use存取資料。 APIs Amazon Kinesis Video Streams 可讓您播放影片以進行即時和隨需檢視，並透過與 Amazon Rekognition Video 和 SageMaker AI 整合，快速建置利用電腦視覺和影片分析的應用程式。

**Topics**
+ [API 操作](#ingestion-apis)
+ [什麼是 Amazon Kinesis Video Streams with WebRTC 擷取和儲存？](getting-started-ingestion.md)
+ [建立訊號頻道](ingestion-create-channel.md)
+ [建立影片串流](ingestion-create-stream.md)
+ [授予許可](ingestion-grant-permission.md)
+ [設定目的地](configure-ingestion.md)
+ [擷取媒體](ingest-media.md)
+ [播放擷取的媒體](ingestion-view-media.md)
+ [連線至儲存工作階段](ingestion-initiate.md)
+ [對與儲存工作階段連線的問題進行故障診斷](troubleshoot-establish-storage.md)

## API 操作
<a name="ingestion-apis"></a>

使用下列 API 操作來設定 Amazon Kinesis Video Streams WebRTC 擷取：
+ [DescribeMappedResourceConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMappedResourceConfiguration.html)
+ [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html)
+ [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)
+ [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)
+ [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html)

# 什麼是 Amazon Kinesis Video Streams with WebRTC 擷取和儲存？
<a name="getting-started-ingestion"></a>

Amazon Kinesis Video Streams 提供透過 WebRTC 即時將視訊和音訊串流至雲端的功能，以進行儲存、播放和分析處理。本主題將提供step-by-step說明，以設定和使用我們的 WebRTC 開發套件和雲端 APIs，以啟用即時串流和媒體擷取至雲端。這些指示包括使用 AWS Command Line Interface 和 Kinesis Video Streams 主控台的指引。

首次將 Amazon Kinesis Video Streams 與 WebRTC 搭配使用之前，請參閱 [設定 AWS 帳戶](set-up-account.md)。

## 了解 WebRTC 擷取和儲存
<a name="understanding-ingestion"></a>

下列各節說明 Kinesis Video Streams with WebRTC 中可用的不同擷取和儲存選項。

**Topics**
+ [僅限主要參與者](#master-ptp-only)
+ [主要參與者和瀏覽者參與者一起](#master-viewer-ptp-together)

### 僅限主要參與者
<a name="master-ptp-only"></a>

主要參與者會先透過 使用 WebRTC 訊號連線至 Kinesis Video Streams[ConnectAsMaster](ConnectAsMaster.md)。接著，他們呼叫 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html) API，讓儲存工作階段啟動 WebRTC 連線。建立 WebRTC 連線後，會將媒體擷取至設定的 Kinesis 影片串流。

![\[顯示主參與者、儲存工作階段和串流之間 WebRTC 擷取流程的圖表。\]](http://docs.aws.amazon.com/zh_tw/kinesisvideostreams-webrtc-dg/latest/devguide/images/ingestion-flow.png)


### 主要參與者和瀏覽者參與者一起
<a name="master-viewer-ptp-together"></a>

觀眾參與者首先透過 使用 WebRTC 訊號連接到 Kinesis Video Streams[ConnectAsViewer](ConnectAsViewer.md)。接著，他們呼叫 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html) API，讓儲存工作階段啟動 WebRTC 連線。建立 WebRTC 連線後，只要主要參與者存在，來自主要參與者和所有檢視器參與者的合併媒體就會擷取至設定的 Kinesis 影片串流。

儲存工作階段會合併所有檢視器參與者的音訊，並將其轉送給主要參與者。檢視器參與者會從主要參與者接收合併媒體，並從儲存工作階段接收任何其他檢視器參與者的音訊。

![\[顯示主參與者、儲存工作階段、檢視器參與者和串流之間檢視器的 WebRTC 擷取流程圖表。\]](http://docs.aws.amazon.com/zh_tw/kinesisvideostreams-webrtc-dg/latest/devguide/images/ingestion-flow-with-viewer.png)


## 使用儲存工作階段建立 WebRTC 連線
<a name="ingestion-establish-connection"></a>

由於儲存工作階段位於 Amazon 網路內，因此儲存工作階段只會將 `relay`(`TURN`) 候選項目傳送給參與者。如果參與者的網路允許，則 `srflx`(`STUN`) 候選項目可用來連線至儲存工作階段。換言之，從參與者的角度來看，本機指定的 ICE 候選者可以是 `srflx`或 `relay`，而遠端 ICE 候選者一律是 `relay`。

若要最佳化連線時間，請勿將`host`候選項目傳送至儲存工作階段。儲存工作階段也`Trickle ICE`需要使用。

請參閱 [對與儲存工作階段連線的問題進行故障診斷](troubleshoot-establish-storage.md)以疑難排解儲存工作階段的連線問題。

# 建立訊號頻道
<a name="ingestion-create-channel"></a>

Kinesis Video Streams with WebRTC 訊號頻道有助於交換在 WebRTC 用戶端之間建立和維護peer-to-peer連線所需的訊號訊息。它處理工作階段描述協定 (SDP) 提供和回應工作階段參數的交涉，以及交換互動式連線建立 (ICE) 候選項目以取得網路資訊。

若要建立訊號頻道，請呼叫 [CreateSignalingChannel](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_CreateSignalingChannel.html) API。此頁面將示範如何使用 AWS 管理主控台 AWS CLI和其中一個 AWS SDKs 叫用該 API。

**重要**  
請記下頻道 ARN，您稍後會需要它。

------
#### [ AWS 管理主控台 ]

請執行下列操作：

1. 在 https：//[https://console.aws.amazon.com/kinesisvideo/home/\$1/signalingChannels](https://console.aws.amazon.com//kinesisvideo/home/#/signalingChannels) 開啟 **Kinesis Video Streams Signaling Channels** 主控台。

1. 選擇 **Create signaling channel (建立訊號頻道)**。

1. 在**建立新的訊號頻道**頁面上，輸入訊號頻道的名稱。

   將預設**Time-to-live(Ttl)** 值保留為 60 秒。

   選擇 **Create signaling channel (建立訊號頻道)**。

1. 建立訊號頻道後，請檢閱頻道詳細資訊頁面上的詳細資訊。

------
#### [ AWS CLI ]

確認您已安裝 AWS CLI 並設定 。如需詳細資訊，請參閱[「AWS Command Line Interface 使用者指南」](https://docs.aws.amazon.com//cli/latest/userguide/)。

如需安裝說明，請參閱[AWS Command Line Interface 《 使用者指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安裝後，使用登入資料和區域[設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，開啟已安裝並設定 AWS CLI 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

使用 執行下列 [Create-Signaling-Channel](https://docs.aws.amazon.com//cli/latest/reference/kinesisvideo/create-signaling-channel.html) 命令 AWS CLI：

```
aws kinesisvideo create-signaling-channel \
  --channel-name "YourChannelName" \
  --region "us-west-2"
```

回應如下所示：

```
{ 
    "ChannelARN": "arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123"
}
```

------
#### [ AWS SDK ]

此程式碼片段說明如何使用適用於 JavaScript 的 AWS SDK v2 建立 Kinesis Video Streams with WebRTC 訊號頻道。語法將與其他 AWS SDKs不同，但一般流程將相同。在 [GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/createSignalingChannel.js) 上檢視完整的程式碼範例。

建立 Kinesis Video Streams 用戶端。這是用來呼叫 `CreateSignalingChannel` API 的用戶端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用 用戶端呼叫 `CreateSignalingChannel` API。

```
const createSignalingChannelResponse = await kinesisVideoClient
    .createSignalingChannel({
        ChannelName: 'YourChannelName',
    })
    .promise();
```

列印回應。

```
console.log(createSignalingChannelResponse.ChannelARN);
```

具有此程式碼範例的即時網頁可在 [GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html) 上使用。輸入您的區域、 AWS 憑證和訊號頻道的名稱。

選取**建立頻道**。

------

# 建立影片串流
<a name="ingestion-create-stream"></a>

請依照這些程序建立將擷取媒體的串流。如果您已建立目的地串流，請略過此步驟。

**重要**  
WebRTC 擷取需要資料保留大於 0 的 Kinesis 影片串流。最短為 1 小時。

若要建立串流，請使用 AWS 管理主控台 AWS CLI、 或其中一個 AWS SDK 呼叫 [CreateStream](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_CreateStream.html) API。

**重要**  
請記下串流 ARN，稍後會需要它。

------
#### [ AWS 管理主控台 ]

請執行下列操作：

1. 開啟位於 https：//[https://console.aws.amazon.com/kinesisvideo/home/](https://console.aws.amazon.com//kinesisvideo/home/) 的 **Kinesis Video Streams** 主控台。

1. 在 **Video streams (影片串流)** 頁面上，選擇 **Create video stream (建立影片串流)**.

1. 在**建立新的影片串流**頁面上，輸入 `YourStreamName`做為串流名稱。保持選取**預設組態**按鈕。

   這會建立資料保留大於 0 的串流。

   選擇 **Create video stream (建立影片串流**。

1. Kinesis Video Streams 建立串流後，請檢閱`YourStreamName`頁面上的詳細資訊。

------
#### [ AWS CLI ]

確認您已安裝 AWS CLI 並設定 。如需詳細資訊，請參閱[「AWS Command Line Interface 使用者指南」](https://docs.aws.amazon.com//cli/latest/userguide/)。

如需安裝說明，請參閱[AWS Command Line Interface 《 使用者指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安裝後，使用登入資料和區域[設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，開啟已安裝並設定 AWS CLI 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

使用 執行下列`Create-Stream`命令 AWS CLI：

```
aws kinesisvideo create-stream \
  --stream-name "YourStreamName" \
  --data-retention-in-hours 24 \
  --region "us-west-2"
```

回應如下所示：

```
{
    "StreamARN": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/YourStreamName/1234567890123"
}
```

------
#### [ AWS SDK ]

此程式碼片段說明如何使用 AWS 適用於 JavaScript 的 SDK v2 建立 Kinesis 影片串流。語法將與其他 AWS SDKs不同，但一般流程將相同。在 [GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/createStream.js) 上檢視完整的程式碼範例。

建立 Kinesis Video Streams 用戶端。這是用來呼叫 [CreateStream](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_CreateStream.html) API 的用戶端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用 用戶端呼叫 `CreateStream` API。

```
const createStreamResponse = await kinesisVideoClient
    .createStream({
        StreamName: 'YourStreamName',
        DataRetentionInHours: 48,
    })
    .promise();
```

列印回應。

```
console.log(createStreamResponse.StreamARN);
```

具有此程式碼範例的即時網頁可在 [GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html) 上使用。輸入您的區域、 AWS 憑證和訊號頻道的名稱。

展開 **WebRTC 擷取和儲存**節點，輸入串流的名稱，然後選擇**建立串流**。彈出式視窗會詢問您要保留串流資料的時數。輸入大於 0 的值，然後選擇**建立串流**。

------

# 授予許可
<a name="ingestion-grant-permission"></a>

您必須將串流許可授予 IAM 角色，才能透過 WebRTC 在 Amazon Kinesis Video Streams 中擷取串流。

**注意**  
 服務角色是服務擔任的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)，可代您執行動作。IAM 管理員可以從 IAM 內建立、修改和刪除服務角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

主要和檢視器角色也必須具有 `DescribeStream`、 `GetDataEndpoint`和 `PutMedia`許可，才能將媒體擷取至 Kinesis Video Streams。

請參閱以下適用於主要參與者的範例 IAM 政策：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesisvideo:DescribeSignalingChannel",
        "kinesisvideo:DescribeMediaStorageConfiguration",
        "kinesisvideo:GetSignalingChannelEndpoint",
        "kinesisvideo:GetIceServerConfig",
        "kinesisvideo:ConnectAsMaster",
        "kinesisvideo:JoinStorageSession"
      ],
      "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:channel/SignalingChannelName/1234567890123"
    },
    {
      "Effect": "Allow",
      "Action": [
        "kinesisvideo:GetDataEndpoint",
        "kinesisvideo:DescribeStream",
        "kinesisvideo:PutMedia"
      ],
      "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/VideoStreamName/1234567890123"
    }
  ]
}
```

------

# 設定目的地
<a name="configure-ingestion"></a>

建立 Kinesis Video Streams 資源後，您需要告知訊號頻道要將其儲存到哪個串流。

如果您想要刪除訊號頻道或串流，您必須先將它們取消連結。請參閱 [取消連結訊號頻道和串流](#ingest-unlink)。

## 連結訊號頻道和串流
<a name="ingestion-link"></a>

使用 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html) API，並為您要連結的 Kinesis Video Streams 資源輸入 ARNs。

**重要**  
一旦`StorageStatus`啟用，就不會再發生對peer-to-peer（主要檢視者） 連線。對等直接連線至儲存工作階段。您必須呼叫 `JoinStorageSession` API 來觸發 SDP 優惠傳送，並在對等和儲存工作階段之間建立連線。

------
#### [ AWS 管理主控台 ]

**注意**  
Kinesis Video Streams 目前不支援此操作 AWS 管理主控台。

開啟 AWS CLI 已安裝並設定 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

遵循 AWS CLI 索引標籤中的指示。

------
#### [ AWS CLI ]

確認您已安裝 AWS CLI 並設定 。如需詳細資訊，請參閱[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/)文件。

如需安裝說明，請參閱[AWS Command Line Interface 《 使用者指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安裝後，使用登入資料和區域[設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，開啟已安裝並設定 AWS CLI 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

在 中執行 `Update-Media-Storage-Configuration`命令 AWS CLI：

```
aws kinesisvideo update-media-storage-configuration \
  --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
  --media-storage-configuration \
    StreamARN="arn:aws:kinesisvideo:us-west-2:123456789012:stream/YourStreamName/1234567890123",Status="ENABLED" \
  --region "us-west-2"
```

------
#### [ AWS SDK ]

此程式碼片段說明如何使用適用於 JavaScript 的 AWS SDK v2 設定訊號頻道，將媒體擷取至指定的 Kinesis 影片串流。語法將與其他 AWS SDKs不同，但一般流程將相同。在 [GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/updateMediaStorageConfiguration.js) 上檢視完整的程式碼範例。

建立 Kinesis Video Streams 用戶端。這是用來呼叫 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html) API 的用戶端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用 用戶端呼叫 `UpdateMediaStorageConfiguration` API。

```
await kinesisVideoClient
    .updateMediaStorageConfiguration({
        ChannelARN: 'YourChannelARN',
        MediaStorageConfiguration: {
            Status: 'ENABLED',
            StreamARN: 'YourStreamARN',
        },
    })
    .promise();
```

具有此程式碼範例的即時網頁可在 [GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html) 上使用。輸入您的區域、 AWS 憑證和訊號頻道的名稱。

展開 **WebRTC 擷取和儲存**節點，輸入串流的名稱，然後選擇**更新媒體儲存組態**。頻道會設定為將媒體擷取至指定的串流。

------

## 取消連結訊號頻道和串流
<a name="ingest-unlink"></a>

**重要**  
在訊號頻道或串流彼此取消連結之前，您無法將其刪除。

如果您不希望訊號頻道的媒體擷取到串流，請使用 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html) API 來取消連結 Kinesis Video Streams 資源。通道取消連結後，可以繼續直接peer-to-peer連線。

------
#### [ AWS 管理主控台 ]

**注意**  
Kinesis Video Streams 目前不支援此操作 AWS 管理主控台。

開啟 AWS CLI 已安裝並設定 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

遵循 AWS CLI 索引標籤中的指示。

------
#### [ AWS CLI ]

確認您已安裝 AWS CLI 並設定 。如需詳細資訊，請參閱[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/)文件。

如需安裝說明，請參閱[AWS Command Line Interface 《 使用者指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安裝後，使用登入資料和區域[設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，開啟 AWS CLI 已安裝並設定 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

在 中執行 `Update-Media-Storage-Configuration`命令 AWS CLI：

```
aws kinesisvideo update-media-storage-configuration \
  --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
  --media-storage-configuration \
    StreamARN="null",Status="DISABLED" \
  --region "us-west-2"
```

------
#### [ AWS SDK ]

此程式碼片段說明如何使用適用於 JavaScript 的 AWS SDK v2 設定訊號頻道，將媒體擷取至指定的 Kinesis 影片串流。語法將與其他 AWS SDKs不同，但一般流程將相同。在 [GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/updateMediaStorageConfiguration.js) 上檢視完整的程式碼範例。

建立 Kinesis Video Streams 用戶端。這是用來呼叫 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html) API 的用戶端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用 用戶端呼叫 `UpdateMediaStorageConfiguration` API。

```
await kinesisVideoClient
    .updateMediaStorageConfiguration({
        ChannelARN: 'YourChannelARN',
        MediaStorageConfiguration: {
            Status: 'DISABLED',
            StreamARN: 'null',
        },
    })
    .promise();
```

具有此程式碼範例的即時網頁可在 [GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html) 上使用。輸入您的區域、 AWS 憑證和訊號頻道的名稱。

展開 **WebRTC 擷取和儲存**節點，確認**串流名稱**欄位為空白，然後選擇**更新媒體儲存組態**。頻道將不再設定為將媒體擷取至指定的串流。

------

# 擷取媒體
<a name="ingest-media"></a>

有下列限制：
+ **工作階段持續時間：**一小時，最長
+ **訊號頻道：**每個已啟用儲存組態的帳戶最多 100 個

**Topics**
+ [從瀏覽器擷取媒體](#ingest-browser)
+ [從 WebRTC C SDK 擷取媒體](#ingest-webrtc-sdk)
+ [將檢視器新增至擷取工作階段](#ingest-add-viewers)

## 從瀏覽器擷取媒體
<a name="ingest-browser"></a>

**重要**  
Chrome 目前是唯一支援的瀏覽器。

1. 在 JavaScript [範例頁面](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)中開啟 Amazon Kinesis Video Streams with WebRTC SDK。

1. 請填妥下列資訊：
   + **KVS 端點** - 在**區域**欄位中，選取您的區域。

     例如 `us-west-2`。
   + **AWS 憑證**

     完成下列欄位：
     + **Access Key ID (存取金鑰 ID)**
     + **Secret Access Key (私密存取金鑰)**
     + **工作階段字符** - 範例應用程式支援臨時和長期登入資料。如果您使用長期 IAM 登入資料，請將此欄位保留空白。如需詳細資訊，請參閱 [IAM 中的臨時安全登入](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_temp.html)資料。
   + **訊號頻道** - 在**頻道名稱**欄位中，輸入您先前設定的訊號頻道名稱。如需詳細資訊，請參閱[設定目的地](configure-ingestion.md)。
   + **音軌** - 選取**傳送視訊**和**傳送音訊**。
   + **WebRTC 擷取和儲存** - 展開節點，然後選取**自動判斷擷取模式**。此選項可讓範例應用程式呼叫 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html) API，以判斷要在哪個模式下執行。

1. 選取**啟動主伺服器**。

   如果訊號頻道設定為使用 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html) API 擷取，則範例應用程式會在連線至訊號頻道以啟動 WebRTC 擷取工作流程後立即自動叫用 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html) API。

## 從 WebRTC C SDK 擷取媒體
<a name="ingest-webrtc-sdk"></a>

依照[Amazon Kinesis Video Streams with WebRTC SDK in C for embedded device](kvswebrtc-sdk-c.md)程序建置範例應用程式。

1. 使用 AWS 帳戶 登入資料設定您的環境：

   ```
   export AWS_ACCESS_KEY_ID=YourAccessKey
   export AWS_SECRET_ACCESS_KEY=YourSecretKey
   export AWS_DEFAULT_REGION=YourAWSRegion
   ```

   如果您使用的是暫時 AWS 登入資料，也請匯出工作階段字符：

   ```
   export AWS_SESSION_TOKEN=YourSessionToken
   ```

1. 執行範例：

   **主要範例**

   導覽至 `build` 資料夾，並使用「1」做為第二個引數。類型：

   ```
   ./samples/kvsWebrtcClientMaster channel-name 1
   ```

   **GStreamer 主要範例**

   導覽至 `build` 資料夾，並使用「audio-video-storage」做為第二個引數。類型：

   ```
   ./samples/kvsWebrtcClientMasterGstSample channel-name audio-video-storage testsrc
   ```

這會啟動 WebRTC 擷取。

**注意**  
您提供的訊號頻道必須設定為儲存。使用 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html) API 進行確認。

## 將檢視器新增至擷取工作階段
<a name="ingest-add-viewers"></a>

一旦訊號頻道進入 WebRTC 擷取模式，檢視器參與者就不會再直接連線至主要參與者。檢視器參與者會直接連線至儲存工作階段。檢視器參與者會收到主要參與者傳送的媒體，檢視器參與者可以將選用的音訊傳回給主要參與者。只要主要參與者連線至儲存工作階段，檢視器傳回的任何音訊都會傳送至連線至儲存工作階段並擷取至 Kinesis Video Stream 的所有其他對等。

有下列限制：
+ **檢視器數量上限：**3 
+ **檢視器參與者可以在沒有主要參與者的情況下連線到儲存工作階段的時間上限：**3 分鐘 

**重要**  
如果檢視器與儲存工作階段中斷連線 （關閉對等連線），其配額 （檢視器限制） 會維持 1 分鐘。在此 1 分鐘期間，檢視器可以使用相同的用戶端 ID 叫用此 API，以重新加入工作階段，而不需要額外的檢視器配額。1 分鐘後，會釋出檢視器配額，供其他檢視器加入。

**瀏覽器**

**重要**  
Chrome 是唯一支援的瀏覽器。

1. 在 JavaScript [範例頁面](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)的 Amazon Kinesis Video Streams with WebRTC SDK 中開啟另一個索引標籤。上一頁的所有資訊都會自動填入。如果沒有，請完成下列資訊：
   + **KVS 端點** - 在**區域**欄位中，選取您的區域。

     例如 `us-west-2`。
   + **AWS 憑證**

     完成下列欄位：
     + **Access Key ID (存取金鑰 ID)**
     + **Secret Access Key (私密存取金鑰)**
     + **工作階段字符** - 範例應用程式支援臨時和長期憑證。如果您使用長期 IAM 登入資料，請將此欄位保留空白。如需詳細資訊，請參閱 [IAM 中的臨時安全登入](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_temp.html)資料。
   + **訊號頻道** - 在**頻道名稱**欄位中，輸入您先前設定的訊號頻道名稱。如需詳細資訊，請參閱[設定目的地](configure-ingestion.md)。
   + **音軌** - 選取**傳送音訊**。請注意，如果已勾選**傳送視訊**，則選擇**啟動檢視器**時會自動取消勾選。
   + **WebRTC 擷取和儲存** - 展開節點，然後選取**自動判斷擷取模式**。此選項可讓範例應用程式呼叫 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html) API，以判斷要在哪個模式下執行。

1. 選取**啟動檢視器**。

   應用程式會在連線至訊號頻道後立即自動呼叫 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html) API，以觸發從工作階段傳送給檢視器的 SDP 優惠。

**注意**  
透過peer-to-peer WebRTC，檢視器參與者是控制對等，而主參與者是控制對等。在 WebRTC 擷取模式中，儲存工作階段現在是控制對等。連線至訊號並叫用 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html) 之後，檢視器將需要回應 SDP 優惠，並透過 WebRTC 建立與儲存工作階段的連線。

**注意**  
儲存工作階段只會傳送`TURN`候選項目。從參與者的觀點來指定 ICE 候選配對時，遠端候選一律為類型 `relay`。

# 播放擷取的媒體
<a name="ingestion-view-media"></a>

您可以在 主控台中檢視媒體資料，或使用 Hypertext Live Streaming (HLS) 建立從串流讀取媒體資料的應用程式，以取用媒體資料。

## 在 主控台中檢視媒體
<a name="ingestion-view-media-console"></a>

在另一個瀏覽器索引標籤中，開啟 AWS 管理主控台。在 Kinesis Video Streams Dashboard 中，選取[影片串流](https://us-west-2.console.aws.amazon.com/kinesisvideo/home?region=us-west-2#/streams)。

在串流清單中選取串流的名稱。如有必要，請使用搜尋列。

展開**媒體播放**區段。如果影片仍在上傳，則會顯示該影片。如果上傳已完成，請選取左雙箭頭。

## 使用 HLS 使用媒體資料
<a name="ingestion-consume-hls"></a>

您可以建立使用 HLS 從 Kinesis 影片串流取用資料的用戶端應用程式。如需有關建立使用 HLS 取用媒體資料的應用程式的資訊，請參閱 [Kinesis Video Streams 播放](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/how-playback.html)。

## 使用範例媒體檢視器應用程式檢視媒體
<a name="ingestion-view-application"></a>

Amazon Kinesis Video Streams 建立了媒體檢視器的範例網頁實作，能夠在 HLS 或 DASH 中播放 Kinesis Video Streams。您可以在 [GitHub](https://github.com/aws-samples/amazon-kinesis-video-streams-media-viewer) 上檢視原始程式碼，並嘗試使用[託管網頁](https://aws-samples.github.io/amazon-kinesis-video-streams-media-viewer/)。

1. 開啟 [Amazon Kinesis Video Streams Media Viewer](https://aws-samples.github.io/amazon-kinesis-video-streams-media-viewer/)。

1. 完成下列欄位：
   + **區域** - 選取 **us-west-2**。
   + **AWS 存取金鑰**
   + **AWS 私密金鑰**
   + **串流名稱**
   + **播放模式** - 選取**即時**。

1. 選取**開始播放**。

# 連線至儲存工作階段
<a name="ingestion-initiate"></a>

請依照這些程序建立儲存工作階段並啟動 WebRTC 連線程序。主要參與者應呼叫 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)。觀眾參與者應呼叫 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)。

這可讓儲存工作階段透過向透過 連線的主要參與者，或透過 連線的指定檢視器參與者發出訊號[ConnectAsMaster](ConnectAsMaster.md)，來傳送 SDP 優惠和 ICE 候選者[ConnectAsViewer](ConnectAsViewer.md)。

1. 取得訊號頻道的 ARN，因為它是下一個步驟所需的輸入。如果您已經知道 ARN，請繼續下一個步驟。

------
#### [ AWS 管理主控台 ]

   1. 開啟 [Kinesis Video Streams Signaling Channels 主控台](https://console.aws.amazon.com//kinesisvideo/home/#/signalingChannels)。

   1. 選擇訊號頻道的名稱。

   1. 在**訊號頻道資訊**索引標籤下，找到訊號頻道的 ARN。

------
#### [ AWS CLI ]

   確認您已安裝 AWS CLI 並設定 。如需詳細資訊，請參閱[「AWS Command Line Interface 使用者指南」](https://docs.aws.amazon.com//cli/latest/userguide/)。

   如需安裝說明，請參閱[AWS Command Line Interface 《 使用者指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安裝後，使用登入資料和區域[設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

   或者，開啟已安裝並設定 AWS CLI 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   使用 執行下列 [Describe-Signaling-Channel](https://docs.aws.amazon.com//cli/latest/reference/kinesisvideo/describe-signaling-channel.html) 命令 AWS CLI：

   ```
   aws kinesisvideo describe-signaling-channel \
     --channel-name "YourChannelName" \
   ```

   回應如下所示：

   ```
   {
       "ChannelInfo": {
           "ChannelName": "YourChannelName",
           "ChannelARN": "arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123",
           "ChannelType": "SINGLE_MASTER", 
           "ChannelStatus": "ACTIVE",
           "CreationTime": "2024-07-07T23:28:24.941000-07:00",
           "SingleMasterConfiguration": {
           "MessageTtlSeconds": 60
       },
       "Version": "Ws0fZvFGXzEpuZ2CE1s9"
       }
   }
   ```

   您可以在 `ChannelInfo` 物件中找到訊號頻道 ARN。

------
#### [ AWS SDK ]

   此程式碼片段說明如何使用適用於 JavaScript 的 AWS SDK v2 建立 Kinesis Video Streams with WebRTC 訊號頻道。語法將與其他 AWS SDKs 不同，但一般流程將相同。

   您可以檢視 [JoinStorageSession](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSession.js) 或 [JoinStorageSessionAsViewer](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSessionAsViewer.js) 的完整程式碼範例。

   建立 Kinesis Video Streams 用戶端。這用於呼叫 [DescribeSignalingChannel API](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeSignalingChannel.html)。

   ```
   const clientConfig = {
       accessKeyId: 'YourAccessKey',
       secretAccessKey: 'YourSecretKey',
       region: 'us-west-2'
   };
   const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
   ```

   使用 用戶端呼叫 `DescribeSignalingChannel` API。

   ```
   const describeSignalingChannelResponse = await kinesisVideoClient
       .describeSignalingChannel({
           ChannelName: 'YourChannelName',
       })
       .promise();
   ```

   儲存回應。

   ```
   const channelARN =
       describeSignalingChannelResponse.ChannelInfo.ChannelARN;
   ```

------

1. 取得 WEBRTC 端點。對於特定訊號頻道的 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html) 或 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html) 請求，必須向指定的端點提出。

------
#### [ AWS 管理主控台 ]

**注意**  
Kinesis Video Streams 目前不支援此操作 AWS 管理主控台。

   開啟 AWS CLI 已安裝並設定 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   遵循 AWS CLI 索引標籤中的指示。

------
#### [ AWS CLI ]

   確認您已安裝 AWS CLI 並設定 。如需詳細資訊，請參閱[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/)文件。

   如需安裝說明，請參閱[AWS Command Line Interface 《 使用者指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安裝後，使用登入資料和區域[設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

   或者，開啟已安裝並設定 AWS CLI 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   在 中執行 `Get-Signaling-Channel-Endpoint`命令 AWS CLI：

   ```
   aws kinesisvideo get-signaling-channel-endpoint \
     --channel-arn "arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123" \
     --single-master-channel-endpoint-configuration "Protocols=['WEBRTC'],Role=MASTER" \
     --region "us-west-2"
   ```

   回應看起來類似以下的內容。

   ```
   {
       "ResourceEndpointList": [
           {
               "Protocol": "WEBRTC",
               "ResourceEndpoint": "https://w-abcd1234.kinesisvideo.aws-region.amazonaws.com"
           } 
       ]
   }
   ```

------
#### [ AWS SDK ]

   此程式碼片段說明如何使用適用於 JavaScript 的 AWS SDK v2 呼叫 Kinesis Video Streams with WebRTC 訊號頻道的 `GetSignalingChannelEndpoint` API。語法將與其他 AWS SDKs不同，但一般流程將相同。檢視 [JoinStorageSession](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSession.js) 或 [JoinStorageSessionAsViewer](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSessionAsViewer.js) 的完整程式碼範例。

   建立 Kinesis Video Streams 用戶端。這是用來呼叫 [DescribeSignalingChannel API](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeSignalingChannel.html) 的用戶端。

   如果您先前已建立 Kinesis Video Streams 用戶端來呼叫 `DescribeSignalingChannel`，則可以重複使用相同的用戶端。

   ```
   const clientConfig = {
       accessKeyId: 'YourAccessKey',
       secretAccessKey: 'YourSecretKey',
       region: 'us-west-2'
   };
   const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
   ```

   使用 用戶端呼叫 `GetSignalingChannelEndpoint` API。

   ```
   const getSignalingChannelEndpointResponse = await kinesisVideoClient
       .getSignalingChannelEndpoint({
           ChannelARN: channelARN,
           SingleMasterChannelEndpointConfiguration: {
               Protocols: ['WEBRTC'],
               Role: 'MASTER',
           },
       })
       .promise();
   ```

   儲存回應：

   ```
   const webrtcEndpoint = getSignalingChannelEndpointResponse.ResourceEndpointList[0].ResourceEndpoint;
   ```

------

1. 使用頻道 ARN 和 WEBRTC 端點進行 API 呼叫。如果參與者透過 `ConnectAsMaster`或 WebSocket API 使用 WebRTC Signaling 正確連接到 Kinesis Video Streams，則 SDP 優惠和 ICE 候選訊息串流將沿著 WebSocket 從儲存工作階段傳送給參與者。 `ConnectAsViewer` WebSocket APIs

------
#### [ AWS 管理主控台 ]

**注意**  
Kinesis Video Streams 目前不支援此操作 AWS 管理主控台。

   開啟 AWS CLI 已安裝並設定 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   遵循 AWS CLI 索引標籤中的指示。

------
#### [ AWS CLI ]

   確認您已安裝 AWS CLI 並設定 。如需詳細資訊，請參閱[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/)文件。

   如需安裝說明，請參閱[AWS Command Line Interface 《 使用者指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安裝後，使用登入資料和區域[設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

   或者，開啟已安裝並設定 AWS CLI 的 AWS CloudShell 終端機。如需詳細資訊，請參閱 [AWS CloudShell 使用者指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

    AWS CLI 使用先前步驟中的頻道 ARN 和 WEBRTC 端點，在 中為主要參與者執行 `Join-Storage-Session`命令：

   ```
   aws kinesis-video-webrtc-storage join-storage-session \
     --endpoint-url https://w-abcd1234.kinesisvideo.us-west-2.amazonaws.com \
     --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
     --region "us-west-2"
   ```

   成功執行後，會傳回空的回應，而且不會列印任何內容。

   如果是瀏覽者參與者，請使用 之前的頻道 ARN 和 WEBRTC 端點，在 AWS CLI 中執行下列`Join-Storage-Session-As-Viewer`命令：

   ```
   aws kinesis-video-webrtc-storage join-storage-session-as-viewer \
     --endpoint-url https://w-abcd1234.kinesisvideo.us-west-2.amazonaws.com \
     --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
     --client-id "ExampleViewerClientID"
     --region "us-west-2"
   ```

   成功執行後，會傳回空的回應，而且不會列印任何內容。

------
#### [ AWS SDK ]

   此程式碼片段說明如何使用適用於 JavaScript 的 AWS SDK v2 呼叫 Kinesis Video Streams with WebRTC 訊號頻道的 `JoinStorageSession`或 `JoinStorageSessionAsViewer` API。語法將與其他 AWS SDKs 不同，但一般流程將相同。檢視 [JoinStorageSession](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSession.js) 或 [JoinStorageSessionAsViewer](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSessionAsViewer.js) 的完整程式碼範例。

   建立 Kinesis Video Streams WebRTC 儲存用戶端。這是用來呼叫 `JoinStorageSession`或 的用戶端，`JoinStorageSessionAsViewer`與先前步驟中建立的 Kinesis Video Streams 用戶端不同。

   ```
   const webrtcStorageClientConfig = {
       accessKeyId: 'YourAccessKey',
       secretAccessKey: 'YourSecretKey',
       region: 'us-west-2',
       endpoint: webrtcEndpoint
   };
   const kinesisVideoWebRTCStorageClient = new AWS.KinesisVideoWebRTCStorage(clientConfig);
   ```

   使用 用戶端呼叫主要參與者的 `JoinStorageSession` API。

   ```
   await kinesisVideoWebRTCStorageClient
       .joinStorageSession({
           channelArn: channelARN,
       })
       .promise();
   ```

   如果是瀏覽者參與者，請使用 用戶端呼叫 `JoinStorageSessionAsViewer` API。

   ```
   await kinesisVideoWebRTCStorageClient
       .joinStorageSessionAsViewer({
           channelArn: channelARN,
           clientId: "ExampleViewerClientID",
       })
       .promise();
   ```

   具有此程式碼範例的即時網頁可在 [GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html) 上取得。輸入您的區域、 AWS 憑證和訊號頻道的名稱。展開 **WebRTC 擷取和儲存**節點，然後取消核取**自動判斷擷取模式**。

   切換手動覆寫至 **ON**，然後選取**顯示按鈕以手動呼叫 JoinStorageSession API** 和/或**顯示按鈕以手動呼叫 JoinStorageSessionAsViewer API**。

   當您選取 **Start Master** 或 **Start Viewer** 時，在應用程式透過 `ConnectAsMaster`或 連線至訊號後`ConnectAsViewer`，會顯示一個按鈕，讓儲存工作階段啟動與對等的 WebRTC 連線，而不是在連線至訊號後立即呼叫 API 的應用程式。

------

# 對與儲存工作階段連線的問題進行故障診斷
<a name="troubleshoot-establish-storage"></a>

本節提供有關設定和設定錄製影片串流之儲存體相關問題的疑難排解指引。

**Topics**
+ [控制和控制對等](#troubleshoot-control-peers)
+ [檢閱支援的轉碼器](#troubleshoot-review-codecs)
+ [如果頻道未映射至串流， 也會擲回 400 InvalidArgumentException](#troubleshoot-channel-mapping)

## 控制和控制對等
<a name="troubleshoot-control-peers"></a>

在 WebRTC 中，控制對等會透過傳送 SDP 優惠來啟動與控制對等的連線。對於peer-to-peer工作階段，檢視器參與者會透過訊號傳送優惠給主要參與者，以啟動連線。連線至 WebRTC 擷取的儲存工作階段時，儲存工作階段是控制對等。對於主要參與者，他們仍然是受控參與者。不過，瀏覽者參與者會從控制切換到控制。

呼叫 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html) 或 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html) 時，所有參與者都必須以 SDP 答案回應，並使用儲存工作階段交換 ICE 候選者。

如需序列圖，請參閱了解 WebRTC 擷取和儲存。

**重要**  
從儲存工作階段收到的訊號訊息在 JSON 中沒有 senderClientId 欄位，這與peer-to-peer主控端不同，該主控端一律會接收具有 SDP 優惠和 ICE 候選項目的 senderClientId 欄位。

## 檢閱支援的轉碼器
<a name="troubleshoot-review-codecs"></a>

[傳送 SDP 答案](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/SendSdpAnswer.html)並將 [ICE 候選項目與儲存工作階段交換](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/SendIceCandidate.html)時，我們建議在訊息`correlationId`中包含 。在訊息`correlationId`中包含 可讓儲存工作階段傳回`statusResponse`訊息。這些訊息將包含輸入訊息`correlationId`的 ，可讓您追蹤 `statusResponse`所屬的訊息。這可讓您立即收到拒絕 SDP 答案原因的意見回饋。

如需 `correlationId` 和 `statusResponse` 的更多相關資訊，請參閱[非同步訊息接收](async-message-reception-api.md)。

儲存工作階段可能會拒絕 SDP 答案的一個常見原因是儲存工作階段無法接受答案中指定的轉碼器。範例`statusResponse`可能如下所示：

```
{
  "correlationId": "1700186220273",
  "errorType": "InvalidArgumentException",
  "statusCode": "400",
  "success": false
}
```

當您檢閱 SDP 答案內容時，請檢閱開頭為 的行，`a=rtpmap`並確認轉碼器符合儲存工作階段支援的轉碼器。以下是包含 opus 音訊和 VP8 影片的範例 SDP 答案程式碼片段。

```
...
a=rtpmap:111 opus/48000/2
...
a=rtpmap:120 VP8/90000
...
```

如需支援的轉碼器清單，請參閱 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)。

## 如果頻道未映射至串流， 也會擲回 400 InvalidArgumentException
<a name="troubleshoot-channel-mapping"></a>

### 檢閱收發器方向
<a name="troubleshoot-transceiver-directions"></a>

在 SDP 答案中，檢閱視訊和音訊收發器的方向性。SDP 中的行如下所示：

```
a=sendrecv
a=recvonly
```

對於主要參與者，有下列要求：
+ H.264 影片：僅傳送
+ Opus 音訊：sendonly 或 sendrecv

對於瀏覽者參與者，有下列要求：
+ H.264 影片：recvonly
+ Opus 音訊：recvonly 或 sendrecv

如果不符合服務需求，則在傳送答案時提供 correlationId 時，將會傳回具有 400 IllegalArgumentException 的 statusResponse。

使用 KVS 提供的 WebRTC 擷取範例應用程式時：
+ 主要參與者：確保已啟用「傳送視訊」和「傳送音訊」設定
+ 觀眾參與者：確保已停用「傳送影片」設定

### 檢閱 ICE 候選轉換
<a name="troubleshoot-ice-candidate-conversion"></a>

從 KVS Signaling SDK 接收 ICE 候選項目時，應用程式可能需要將字串轉換為 ICE 候選物件。

從儲存工作階段收到的 ICE 候選項目不包含 SDPMID 屬性，也不隨附 senderClientId。

檢閱您的應用程式邏輯，以將從遠端接收的 ICE 候選項目新增至應用程式的 RTCPeerConnection 物件。

### 檢閱 ICE 候選佇列邏輯
<a name="troubleshoot-ice-candidate-queuing"></a>

從儲存工作階段收到的所有 ICE 候選項目都需要透過 addIceCandidate API 新增至 RTCPeerConnection。

即使儲存工作階段在 ICE 候選者之前傳送 SDP 優惠，由於訊號訊息傳遞的非同步性質，應用程式可能會在收到優惠之前收到 ICE 候選者。

在這種情況下，您將需要實作暫時緩衝區來保留 ICE 候選項目。

KVS 範例應用程式中實作的邏輯如下：

1. 這些範例會維護 senderClientId 至其 RTCPeerConnection 的映射。

1. 這些範例會將 senderClientId 的另一個映射維護到待定的 Ice Candidates 清單。

1. 收到 ICE 候選項目時，請檢查 PeerConnection 映射。如果 PeerConnection 映射還沒有連線，請將其新增至待定清單。否則，請將 ICE 候選項目新增至 PeerConnection。

1. 收到優惠時，它會建立 RTCPeerConnection 並將其新增至 PeerConnection 映射。然後，從待定佇列將所有 ICE 候選項目新增至此 PeerConnection。