

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

# 系統要求
<a name="kvswebrtc-requirements"></a>

本節涵蓋搭配 WebRTC 使用 Amazon Kinesis Video Streams 的基本系統需求，包括網路需求和環境。它也包含偵錯連線的相關資訊。

## 網路要求
<a name="networking-requirements"></a>

Kinesis Video Streams with WebRTC 訊號頻道服務端點的一般聯網需求如下：
+ 託管於 的端點的 HTTPS 呼叫 `https://*.kinesisvideo.{region}.amazonaws.com`
+ WebSocket 與端點的整合 `wss://*.kinesisvideo.{region}.amazonaws.com`
+ `STUN` 伺服器位於 `stun:stun.kinesisvideo.{aws-region}.amazonaws.com:443`
+ `TURN` 伺服器位於 `turn:_._.kinesisvideo.{aws-region}.amazonaws.com:443`和 `turns:_._.kinesisvideo.{aws-region}.amazonaws.com:443`

**注意**  
`STUN` 和 `TURN` 伺服器目前不支援 IPv6 地址。

在對等之間用作 RTCPeerConnection 一部分的通訊協定可以是 TCP 或 UDP 型。

大多數應用程式會決定每個peer-to-peer的 IP 地址，以及做為 ICE 候選項目交換的連接埠和通訊協定，嘗試建立直接的點對點連線。這些候選項目用於嘗試使用這些候選項目彼此連線。他們會嘗試每個配對，直到可以建立連線為止。

## 網路環境
<a name="network-environment"></a>

如果來自檢視器的訊息已傳送至主伺服器，且記錄`No valid ICE candidate`了 等日誌，則找不到有效的連線路由。如果防火牆防止直接連線，或無法連線網路，就可能會發生這種情況。

執行下列動作來疑難排解連線問題：
+ 如果您不是`TURN`在主端使用 ，請務必啟用 `TURN`。

  `TURN` 根據預設， 會在 C 開發套件中啟用。在 JavaScript 開發套件中，選取 NAT 周遊`TURN only`中的 `STUN/TURN`或 。
+ 對於受限的網路，例如企業網路，請嘗試其他可用的網路 （有線或無線）。

  如果您要連線至 VPN，請中斷與 VPN 的連線。

**注意**  
您可以忽略 Kinesis Video Streams TURN 伺服器傳回的 403 `Forbidden IP`錯誤。伺服器會拒絕包含 `localhost` IPs 的 ICE 候選配對，例如 `192.168.*`或 `10.0.0.*`。  
這可能會導致某些但不是全部的 ICE 候選配對失敗。

## 偵錯進行中連線
<a name="debug-ongoing-connection"></a>

有幾個領域可能會導致已建立、持續的 WebRTC 連線發生問題，但聯網是最常見的。

您可以將 `export AWS_KVS_LOG_LEVEL=1`設定為環境變數，從 SDK 確認 VERBOSE 層級日誌。

**注意**  
如果在分配的逾時內找不到候選配對，ICE 代理程式會傳回錯誤狀態 `0x5a00000d`。

如需日誌層級的詳細資訊，請參閱 [GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c/blob/master/README.md#setup-desired-log-level)。

```
export AWS_KVS_LOG_LEVEL=1
./kvsWebrtcClientMasterGstSample TestChannel
```

您將看到類似以下的日誌。您可以從這些日誌確認互動式連線建立 (ICE) 候選 (IP 地址和連接埠） 和選取的候選配對。

```
2023-02-13 05:57:16 DEBUG   iceAgentReadyStateSetup(): Selected pair w1UdV9fE+_/CuBel1pl, local candidate type: srflx. Round trip time 7 ms. Local candidate priority: 1694498815, ice candidate pair priority: 7240977859836116990
2023-02-13 05:57:16 INFO    onConnectionStateChange(): New connection state 3
2023-02-13 05:57:16 DEBUG   rtcPeerConnectionGetMetrics(): ICE local candidate Stats requested at 16762678365731494
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Local Candidate IP Address: XXX.XXX.XXX.XXX
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Local Candidate type: srflx
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Local Candidate port: 38563
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Local Candidate priority: 1694498815
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Local Candidate transport protocol: udp
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Local Candidate relay protocol: N/A
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Local Candidate Ice server source: stun.kinesisvideo.ap-northeast-1.amazonaws.com
2023-02-13 05:57:16 DEBUG   rtcPeerConnectionGetMetrics(): ICE remote candidate Stats requested at 16762678365732111
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Remote Candidate IP Address: XXX.XXX.XXX.XXX
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Remote Candidate type: srflx
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Remote Candidate port: 45867
2023-02-13 05:57:16 VERBOSE signalingClientGetCurrentState(): Signaling Client Get Current State
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Remote Candidate priority: 1685921535
2023-02-13 05:57:16 DEBUG   logSelectedIceCandidatesInformation(): Remote Candidate transport protocol: udp
```