

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

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

本节介绍将 Amazon Kinesis Video Streams 与 WebRTC 配合使用的基本系统要求，包括网络要求和环境。它还包括有关调试连接的信息。

## 联网要求
<a name="networking-requirements"></a>

Kinesis Video Streams with WebRTC 的信令服务端点的一般网络要求是：
+ HTTPS 调用托管在 `https://*.kinesisvideo.{region}.amazonaws.com` 的端点
+ WebSocket 与端点集成 `wss://*.kinesisvideo.{region}.amazonaws.com`
+ 位于 `stun:stun.kinesisvideo.{aws-region}.amazonaws.com:443` 的 `STUN` 服务器
+ 位于 `turn:_._.kinesisvideo.{aws-region}.amazonaws.com:443` 和 `turns:_._.kinesisvideo.{aws-region}.amazonaws.com:443` 的 `TURN` 服务器

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

作为 RTCPeer连接的一部分，对等体之间使用的协议可以基于 TCP 或 UDP。

大多数应用程序都试图通过确定每个对等体的 IP 地址以及要作为 ICE 候选交换的端口和协议来建立直接 peer-to-peer连接。这些候选项用于尝试使用这些候选项相互连接。他们将尝试每一对，直到可以建立连接。

## 网络环境
<a name="network-environment"></a>

如果已将来自查看器的消息发送到主设备并记录了诸如 `No valid ICE candidate` 之类的日志，则未找到有效的连接路由。如果有防火墙阻止直接连接，或网络无法访问，则可能会发生这种情况。

要解决连接问题，请执行以下操作：
+ 如果您不在主设备端使用 `TURN`，请务必启用 `TURN`。

  `TURN` 在 C SDK 中默认处于启用状态。在 JavaScript SDK 中，`TURN only`在 NAT 遍历中选择`STUN/TURN`或。
+ 对于受限的网络，例如企业网络，请尝试其他可用的网络（有线或无线网络）。

  如果您正在连接 VPN，请断开连接。

**注意**  
您可以忽略 Kinesis Video Streams TURN 服务器返回的 403 `Forbidden IP` 错误。服务器拒绝包含`localhost` IPs`192.168.*`或之类的 ICE 候选对`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
```