

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

# 運作方式
<a name="kvswebrtc-how-it-works"></a>

Amazon Kinesis Video Streams with WebRTC 可在 Web 瀏覽器、行動裝置和其他支援 WebRTC 的應用程式之間進行即時視訊通訊。它提供安全且可擴展的基礎設施，用於建置影片串流應用程式、處理訊號、媒體串流等任務，以及與其他 AWS 服務的整合。本節說明 服務的基礎架構、元件和工作流程，協助解釋其設計原則和機制。

**Topics**
+ [重要概念](#how-kvswebrtc-concepts)
+ [技術概念](#how-webrtc-concepts)
+ [STUN、TURN 和 ICE 如何一起運作](#how-webrtc-components-interwork)
+ [元件](#how-kvswebrtc-works)

## 重要概念
<a name="how-kvswebrtc-concepts"></a>

以下是 Amazon Kinesis Video Streams with WebRTC 特有的關鍵術語和概念。

**訊號頻道**  
訊號頻道可讓應用程式交換訊號訊息，以探索、設定、控制和終止點對點連線。訊號訊息是兩個應用程式彼此交換以建立點對點連線的中繼資料。此中繼資料包括本機媒體資訊，例如媒體轉碼器和轉碼參數，以及兩個應用程式相互連線以進行即時串流可能使用的網路候選路徑。  
串流應用程式可以維持與訊號頻道之間的持續連線，並等待其他應用程式來連接它們。或者，只在需要即時串流媒體時才連線到訊號頻道。訊號頻道可讓應用程式採用一個主節點連線到多個檢視器的概念，在一對少數的模型中相互連線。啟動連線的應用程式負起主節點的責任，使用 `ConnectAsMaster` API 並等待檢視器。然後，最多 10 個應用程式可以負起檢視器的責任，叫用 `ConnectAsViewer` API 來連線到該訊號頻道。連線到訊號頻道後，主節點應用程式和檢視器應用程式可以互相傳送訊號訊息，以建立點對點連線來即時媒體串流。

**對等節點**  
設定為透過 Kinesis Video Streams with WebRTC 進行即時雙向串流的任何裝置或應用程式 （例如，行動或 Web 應用程式、網路攝影機、家用安全攝影機、嬰兒監視器等）。

**主**  
啟動連線並連線至訊號頻道的對等節點，能夠探索任何連接訊號頻道的檢視器並與之交換媒體。  
目前，一個訊號頻道只能有一個主節點。

**觀眾**  
連線至訊號頻道的對等節點，只能夠探索訊號頻道的主節點並與之交換媒體。檢視器無法透過給定的訊號頻道來探索其他檢視器或與之互動。一個訊號頻道最多可以有 10 個連線的檢視器。

## 技術概念
<a name="how-webrtc-concepts"></a>

當您開始使用 Kinesis Video Streams with WebRTC 時，您也可以從了解 WebRTC 技術包含的幾個相互關聯的通訊協定和 APIs 中受益。

**Session Traversal Utilities for NAT (STUN)**  
一種通訊協定，用來探索您的公有地址，並判斷路由器中會阻止直接連接對等節點的任何限制。

**Traversal Using Relays around NAT (TURN)**  
一種伺服器，可對 TURN 伺服器建立連線，並透過該伺服器轉送資訊，以避開對稱 NAT 限制。

**Session Description Protocol (SDP)**  
一種標準，描述連線的多媒體內容，例如解析度、格式，轉碼器、加密等，讓對等節點在資料開始傳輸時可以了解彼此。

**SDP 提議**  
由代理程式傳送的 SDP 訊息，以產生工作階段描述來建立或修改工作階段。描述所需媒體通訊的各方面。

**SDP 回答**  
由回答者傳送的 SDP 訊息，以回應來自提議者的提議。回答指出接受哪些方面。例如，是否接受提議中的所有音訊和視訊串流。

**互動式連線建立 (ICE)**  
允許 Web 瀏覽器與對等節點連接的框架。

**ICE 候選項**  
可供傳送端對等節點用來通訊的方法。

## STUN、TURN 和 ICE 如何一起運作
<a name="how-webrtc-components-interwork"></a>

假設有 A 和 B 兩個對等節點，兩者都使用 WebRTC 點對點雙向媒體串流 (例如，視頻聊天應用程式)。當 A 想打電話給 B 時會發生什麼情況？

為了連線至 B 的應用程式，A 的應用程式必須產生 SDP 提議。SDP 提議包含 A 的應用程式想建立的工作階段的相關資訊，包括使用什麼轉碼器、這是音訊還是視訊工作階段等。還包含 ICE 候選項清單，這是可供 B 的應用程式嘗試用來連線至 A 的 IP 和連接埠配對。

為了建置 ICE 候選項清單，A 的應用程式會向 STUN 伺服器提出一連串請求。伺服器傳回發出請求的公有 IP 地址和連接埠配對。A 的應用程式將每一對新增至 ICE 候選項清單，換句話說，收集 ICE 候選項。A 的應用程式一旦完成收集 ICE 候選項，就可以傳回 SDP。

接下來，A 的應用程式必須透過這些應用程式通訊的訊號頻道，將 SDP 傳送到 B 的應用程式。WebRTC 標準並未規定此交換的傳輸通訊協定。可以透過 HTTPS，安全 WebSocket 或任何其他通訊協定來執行。

現在，B 的應用程式必須產生 SDP 回答。B 的應用程式遵循 A 在上一步使用的相同步驟：收集 ICE 候選項等。然後，B 的應用程式需要將此 SDP 回答傳回至 A 的應用程式。

A 和 B 交換 SDPs之後，他們會執行一系列的連線檢查。在每個應用程式中，ICE 演算法採用在對方 SDP 中收到的清單中的候選 IP/連接埠配對，並將 STUN 請求傳送至此配對。如果另一個應用程式有所回應，則起源應用程序會認為檢查成功，並將該 IP/連接埠配對標示為有效的 ICE 候選項。

在所有 IP/連接埠配對上完成連線檢查後，應用程式會交涉並決定使用其中一個剩餘的有效配對。選取配對後，媒體就會開始在應用程式之間流動。

如果任一應用程式找不到通過連線檢查的 IP/連接埠配對，則會向 TURN 伺服器提出 STUN 請求，以取得媒體轉送地址。轉送位址是公有 IP 地址和連接埠，可轉送往返於應用程式收到的封包，以設定轉送地址。然後，此轉送地址會新增至候選項清單，並透過訊號頻道交換。

## 元件
<a name="how-kvswebrtc-works"></a>

Kinesis Video Streams with WebRTC 包含下列元件：
+ **控制平台**

  控制平面元件負責建立和維護 Kinesis Video Streams with WebRTC 訊號頻道。如需詳細資訊，請參閱 [Amazon Kinesis Video Streams API 參考](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html)。
+ **訊號**

  訊號元件管理 WebRTC 訊號端點，可讓應用程式彼此安全地連線，以進行點對點即時媒體串流。訊號元件包含 [Amazon Kinesis Video Signaling REST API](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Signaling_Channels.html) 和一組 [Websocket API](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-websocket-apis.html)。
+ **STUN**

  此元件管理 STUN 端點，當應用程式位於 NAT 或防火牆後方時，這些端點可讓應用程式探索其公有 IP 地址。
+ **TURN**

  此元件管理 TURN 端點，當應用程式無法點對點串流媒體時，這些端點可支援透過雲端轉送媒體。
+ **Kinesis Video Streams WebRTC 開發套件**

  這些是您可以在裝置和應用程式用戶端下載、安裝和設定的軟體程式庫，可讓具有 WebRTC 功能的攝影機 IoT 裝置進行低延遲的點對點媒體串流。這些SDKs也可讓 Android、iOS 和 Web 應用程式用戶端將 Kinesis Video Streams 與 WebRTC 訊號、TURN 和 STUN 功能與任何 WebRTC 相容的行動或 Web 播放器整合。
  + [Amazon Kinesis Video Streams with WebRTC SDK in C for embedded device](kvswebrtc-sdk-c.md)
  + [適用於 Web 應用程式的 JavaScript 中的 Amazon Kinesis Video Streams with WebRTC SDK WebRTC](kvswebrtc-sdk-js.md)
  + [適用於 Android 的 Amazon Kinesis Video Streams WebRTC 開發套件](kvswebrtc-sdk-android.md)
  + [適用於 iOS 的 Amazon Kinesis Video Streams WebRTC 開發套件](kvswebrtc-sdk-ios.md)