

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

# 設定串流轉錄
<a name="streaming-setting-up"></a>

本節擴充主要[串流傳輸](streaming.md)部分。它旨在為想要直接使用 HTTP/2 或 WebSockets 設定串流的使用者提供資訊，而不是使用 AWS SDK。本節中的資訊也可用於建置自己的 SDK。

**重要**  
我們強烈建議您使用 SDK，而不是直接使用 HTTP/2 和 WebSockets。SDK 是轉錄資料串流最簡單且最可靠的方法。若要使用 AWS SDK 開始串流，請參閱 [使用 AWS SDKs 轉錄](getting-started-sdk-streaming.md)。

## 設定 HTTP/2 串流
<a name="streaming-http2"></a>

使用 串流轉錄請求的 [HTTP/2 通訊協定](https://http2.github.io/)的關鍵元件 Amazon Transcribe 為：
+ 標頭框架。這包含請求的 HTTP/2 標頭，以及授權標頭中的簽章，以 Amazon Transcribe 做為種子簽章來簽署資料影格。
+ [事件串流編碼](#streaming-event-stream)中包含中繼資料和原始音訊位元組的一或多個訊息框架。
+ 結束框架。這是[事件串流編碼](#streaming-event-stream)中有空內文的簽章訊息。

**注意**  
Amazon Transcribe 每個 HTTP/2 工作階段僅支援一個串流。如果您嘗試使用多個串流，轉錄要求會失敗。

1. 將下列政策連接至發出請求 IAM 的角色。如需詳細資訊，請參閱[新增 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policy-api)。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "myTranscribeHttp2Policy",
               "Effect": "Allow",
               "Action": "transcribe:StartStreamTranscription",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 若要開始工作階段，請將 HTTP/2 請求傳送至 Amazon Transcribe。

   ```
   POST /stream-transcription HTTP/2
   host: transcribestreaming.us-west-2.amazonaws.com
   X-Amz-Target: com.amazonaws.transcribe.Transcribe.StartStreamTranscription
   Content-Type: application/vnd.amazon.eventstream
   X-Amz-Content-Sha256: string
   X-Amz-Date: YYYYMMDDTHHMMSSZ
   Authorization: AWS4-HMAC-SHA256 Credential=access-key/YYYYMMDD/us-west-2/transcribe/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-target;x-amz-security-token, Signature=string
   x-amzn-transcribe-language-code: en-US
   x-amzn-transcribe-media-encoding: flac
   x-amzn-transcribe-sample-rate: 16000
   transfer-encoding: chunked
   ```

   [《API 參考資料》](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_Reference.html)中列出其他操作和參數；所有 AWS API 操作的通用參數都會於[通用參數](https://docs.aws.amazon.com/transcribe/latest/APIReference/CommonParameters.html)一節列出。

   Amazon Transcribe 會傳送下列回應：

   ```
   HTTP/2.0 200
   x-amzn-transcribe-language-code: en-US
   x-amzn-transcribe-media-encoding: flac
   x-amzn-transcribe-sample-rate: 16000
   x-amzn-request-id: 8a08df7d-5998-48bf-a303-484355b4ab4e
   x-amzn-transcribe-session-id: b4526fcf-5eee-4361-8192-d1cb9e9d6887
   content-type: application/json
   ```

1. 建立包含音訊資料的音訊事件。將下表中所述的標頭與音訊位元組塊結合，成為事件編碼訊息。若要建立事件訊息的承載，請以原始位元組格式使用緩衝區。    
<a name="table-http2-frame-diagram-event-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/transcribe/latest/dg/streaming-setting-up.html)

   此範例請求中的二進位資料是以 base64 編碼。在實際請求中，資料是原始位元組。

   ```
   :content-type: "application/vnd.amazon.eventstream"
   :event-type: "AudioEvent"
   :message-type: "event"
   UklGRjzxPQBXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YVTwPQAAAAAAAAAAAAAAAAD//wIA/f8EAA==
   ```

1. 建立音訊訊息，其中包含您的音訊資料。

   1. 您的資訊訊息資料框架包含事件編碼標頭，其中包含目前日期，以及音訊區塊和音訊事件的簽章。    
<a name="table-http2-diagram-message-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/transcribe/latest/dg/streaming-setting-up.html)

      此請求中的二進位資料是以 base64 編碼。在實際請求中，資料是原始位元組。

      ```
      :date: 2019-01-29T01:56:17.291Z
      :chunk-signature: signature
      
      AAAA0gAAAIKVoRFcTTcjb250ZW50LXR5cGUHABhhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0LOmV2ZW50LXR5
      cGUHAApBdWRpb0V2ZW50DTptZXNzYWdlLXR5cGUHAAVldmVudAxDb256ZW50LVR5cGUHABphcHBsaWNhdGlv
      bi94LWFtei1qc29uLTEuMVJJRkY88T0AV0FWRWZtdCAQAAAAAQABAIA+AAAAfQAAAgAQAGRhdGFU8D0AAAAA
      AAAAAAAAAAAA//8CAP3/BAC7QLFf
      ```

   1. 如 [Signature 第 4 版中的建立字串以簽署](https://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html)所述，建構要簽署的字串。您的字串遵循以下格式：

      ```
      String stringToSign =
      "AWS4-HMAC-SHA256" +
      "\n" +
      DateTime +
      "\n" +
      Keypath +
      "\n" +
      Hex(priorSignature) +
      "\n" +
      HexHash(nonSignatureHeaders) +
      "\n" +
      HexHash(payload);
      ```
      + **DateTime**：建立簽名的日期和時間。格式為 YYYYMMDDTHHMMSSZ，其中 YYYY = 年，MM = 月，DD = 日，HH = 小時，MM = 分鐘，SS = 秒，而「T」和「Z」為固定字元。如需詳細資訊，請參閱 [Signature 第 4 版的處理日期](https://docs.aws.amazon.com/general/latest/gr/sigv4-date-handling.html)。
      + **Keypath**：格式 `date/region/service/aws4_request` 中的簽章範圍。例如 `20220127/us-west-2/transcribe/aws4_request`。
      + **Hex**：此函數會將其輸入編碼為十六進位表示法。
      + **priorSignature**：前一個框架的簽章。對於第一個資料框架，請使用標頭框架的簽章。
      + **HexHash**：此函數首先建立其輸入的 SHA-256 雜湊，然後使用 Hex 函數進行編碼雜湊。
      + **nonSignatureHeaders**：編碼為字串的 DateTime 標頭。
      + **payload**：包含音訊事件資料的位元組緩衝區。

   1. 從 AWS 私密存取金鑰衍生簽署金鑰，並使用它來簽署 `stringToSign`。為了提供更大程度的保護，衍生的金鑰有專屬的日期、服務和 AWS 區域。如需詳細資訊，請參閱 [AWS Signature 第 4 版的計算簽章](https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html)。

      確保您實作該 `GetSignatureKey` 函數以衍生出您的簽名密鑰。如果您尚未衍生出簽名密鑰，請參閱 [Signature 第 4 版中如何衍生簽名密鑰的範例](https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html)。

      ```
      String signature = HMACSHA256(derivedSigningKey, stringToSign);
      ```
      + **HMACSHA256**：此函數會使用 SHA-256 雜湊函數以建立簽章。
      + **derivedSigningKey**：Signature 第 4 版簽名金鑰。
      + **stringToSign**：您針對資料框架計算的字串。

      在計算資料框架的簽章之後，請建構位元組緩衝區，其中包含日期、簽章和音訊事件承載。將位元組陣列傳送到 Amazon Transcribe 以進行轉錄。

1. 若要指出音訊串流完成，請傳送結束框架 (空資料框架)，其中僅包含日期和簽章。您建構該結束框架的方式與您建構資料框架的方式相同。

   Amazon Transcribe 會以轉錄事件串流回應，並傳送到您的應用程式。該回應是以事件串流編碼。它包含標準序言和下列標頭。    
<a name="table-http2-frame-response-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/transcribe/latest/dg/streaming-setting-up.html)

   事件是以原始位元組格式傳送。在這個範例中，位元組是以 base64 編碼的。

   ```
   AAAAUwAAAEP1RHpYBTpkYXRlCAAAAWiXUkMLEDpjaHVuay1zaWduYXR1cmUGACCt6Zy+uymwEK2SrLp/zVBI
   5eGn83jdBwCaRUBJA+eaDafqjqI=
   ```

   若要查看轉錄結果，請使用事件串流編碼，將原始位元組解碼。

   ```
   :content-type: "application/vnd.amazon.eventstream"
   :event-type: "TranscriptEvent"
   :message-type: "event"
   
   {
       "Transcript":
           {
               "Results":
                   [
                       results
                   ]
           }
   }
   ```

1. 若要結束串流，請將空白音訊事件傳送至 Amazon Transcribe。建立與任何其他音訊事件完全相同的音訊事件，但具有空承載。簽署事件，並將簽章併入 `:chunk-signature` 標頭中，如下所示：

   ```
   :date: 2019-01-29T01:56:17.291Z
   :chunk-signature: signature
   ```

### 處理 HTTP/2 串流錯誤
<a name="http2-errors"></a>

如果在處理媒體串流時發生錯誤， 會 Amazon Transcribe 傳送例外狀況回應。回應是以事件串流編碼的。

回應包含標準序言和下列標頭：


| 標頭名稱位元組長度 | 標頭名稱 (字串) | 標頭值類型 | 值字串位元組長度 | 值字串 (UTF-8) | 
| --- | --- | --- | --- | --- | 
| 13 | :content-type | 7 | 16 | application/json | 
| 11 | :event-type | 7 | 19 | BadRequestException | 
| 13 | :message-type | 7 | 9 | 例外狀況 | 

當異常回應解碼時，它包含下列資訊：

```
:content-type: "application/vnd.amazon.eventstream"
:event-type: "BadRequestException"
:message-type: "exception"
                
Exception message
```

## 設定 WebSocket 串流
<a name="streaming-websocket"></a>

使用 串流轉錄請求的 [WebSocket 通訊協定](https://tools.ietf.org/html/rfc6455)的關鍵元件 Amazon Transcribe 為：
+ 升級請求。這包含請求的查詢參數，以及 Amazon Transcribe 使用 做為種子簽章來簽署資料影格的簽章。
+ [事件串流編碼](#streaming-event-stream)中包含中繼資料和原始音訊位元組的一或多個訊息框架。
+ 結束框架。這是[事件串流編碼](#streaming-event-stream)中有空內文的簽章訊息。

**注意**  
Amazon Transcribe 每個 WebSocket 工作階段僅支援一個串流。如果您嘗試使用多個串流，轉錄要求會失敗。

1. 將下列政策連接至發出請求 IAM 的角色。如需詳細資訊，請參閱[新增 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policy-api)。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "myTranscribeWebsocketPolicy",
               "Effect": "Allow",
               "Action": "transcribe:StartStreamTranscriptionWebSocket",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 若要開始工作階段，請以下列格式建立預先簽署的 URL。已加入分行符號以提高可讀性。

   ```
   GET wss://transcribestreaming.us-west-2.amazonaws.com:8443/stream-transcription-websocket?
   &X-Amz-Algorithm=AWS4-HMAC-SHA256
   &X-Amz-Credential=access-key%2FYYYYMMDD%2Fus-west-2%2Ftranscribe%2Faws4_request
   &X-Amz-Date=YYYYMMDDTHHMMSSZ
   &X-Amz-Expires=300
   &X-Amz-Security-Token=security-token
   &X-Amz-Signature=string
   &X-Amz-SignedHeaders=content-type%3Bhost%3Bx-amz-date
   &language-code=en-US
   &media-encoding=flac
   &sample-rate=16000
   ```
**注意**  
`X-Amz-Expires` 的最大值為 300(5 分鐘)。

   [《API 參考資料》](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_Reference.html)中列出其他操作和參數；所有 AWS API 操作的通用參數都會於[通用參數](https://docs.aws.amazon.com/transcribe/latest/APIReference/CommonParameters.html)一節列出。

   若要為請求建構 URL 及建立 [Signature 第 4 版簽章](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)，請參閱下列步驟。範例是虛擬程式碼。

   1. 建立正式請求。正式請求是其中包括來自您的請求的資訊的字串 (使用標準化格式)。這可確保 AWS 收到請求時，可以計算您為 URL 建立的相同簽章。如需詳細資訊，請參閱 [Signature 第 4 版的建立正式請求](https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html)。

      ```
      # HTTP verb
      method = "GET"
      # Service name
      service = "transcribe"
      # Region
      region = "us-west-2"
      # Amazon Transcribe streaming endpoint
      endpoint = "wss://transcribestreaming.us-west-2.amazonaws.com:8443"
      # Host
      host = "transcribestreaming.us-west-2.amazonaws.com:8443"
      # Date and time of request
      amz-date = YYYYMMDDTHHMMSSZ
      # Date without time for credential scope
      datestamp = YYYYMMDD
      ```

   1. 建立正式 URI，這是介於網域與查詢字串間的部分 URI。

      ```
      canonical_uri = "/stream-transcription-websocket"
      ```

   1. 建立正式標頭和已簽章標頭。請注意正式標頭中的結尾 `\n`。
      + 附加小寫標頭名稱，後面接著冒號 ( : )。
      + 為該標頭附加逗號分隔的值清單。不要在有多個值的標頭中排序值。
      + 附加新的一行 (`\n`)。

      ```
      canonical_headers = "host:" + host + "\n"
      signed_headers = "host"
      ```

   1. 演算法必須符合雜湊演算法。請使用 `SHA-256`。

      ```
      algorithm = "AWS4-HMAC-SHA256"
      ```

   1. 建立憑證的範圍，將衍生的金鑰範圍限定於提出請求的日期、 AWS 區域和服務。例如 `20220127/us-west-2/transcribe/aws4_request`。

      ```
      credential_scope = datestamp + "/" + region + "/" + service + "/" + "aws4_request"
      ```

   1. 建立正式查詢字串。查詢字串值必須是 URL 編碼並以名稱排序。
      + 依照字元字碼指標的參數名稱遞增排序。​具有重複名稱的參數應依數值排序。例如，以大寫字母 F 開頭的參數名稱，放在以小寫字母 b 開頭的參數名稱之前。
      + URI 編碼不能執行 RFC 3986 所定義的任何未預留字元：A-Z、a-z、0-9、連字號 (-)、底線 (\$1)、句點 ( . ) 和波狀符號 ( \$1 )。
      + 對所有其他含有 %XY 的字元執行百分比編碼，其中 X 和 Y 是十六進位字元 (0-9 和大寫 A-F)。例如，空間字元必須編碼為 %20 (而非像有些編碼結構描述那樣包含「\$1」)；延伸的 UTF-8 字元必須採用 %XY%ZA%BC 格式。
      + 對參數值中的任何等於 (=) 字元進行雙倍編碼。

      ```
      canonical_querystring  = "X-Amz-Algorithm=" + algorithm
      canonical_querystring += "&X-Amz-Credential="+ URI-encode(access key + "/" + credential_scope)
      canonical_querystring += "&X-Amz-Date=" + amz_date 
      canonical_querystring += "&X-Amz-Expires=300"
      canonical_querystring += "&X-Amz-Security-Token=" + token
      canonical_querystring += "&X-Amz-SignedHeaders=" + signed_headers
      canonical_querystring += "&language-code=en-US&media-encoding=flac&sample-rate=16000"
      ```

   1. 建立承載的雜湊。對於 `GET` 請求，承載為空字串。

      ```
      payload_hash = HashSHA256(("").Encode("utf-8")).HexDigest()
      ```

   1. 結合下列元素以建立正式請求。

      ```
      canonical_request = method + '\n' 
         + canonical_uri + '\n' 
         + canonical_querystring + '\n' 
         + canonical_headers + '\n' 
         + signed_headers + '\n' 
         + payload_hash
      ```

1. 建立要簽署的字串，其中包含有關您的請求的中繼資料。您在下一個步驟計算請求簽章時，使用此字串登入。如需詳細資訊，請參閱 [Signature 第 4 版的建立簽署字串](https://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html)。

   ```
   string_to_sign=algorithm + "\n"
      + amz_date + "\n"
      + credential_scope + "\n"
      + HashSHA256(canonical_request.Encode("utf-8")).HexDigest()
   ```

1. 計算簽章。若要這樣做，請從 AWS 私密存取金鑰衍生簽署金鑰。為了提供更大程度的保護，衍生的金鑰有專屬的日期、服務和 AWS 區域。您使用衍生的金鑰以簽署請求。如需詳細資訊，請參閱[計算 Signature 第 4 版的 AWS Signature](https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html)。

   確保您實作該 `GetSignatureKey` 函數以衍生出您的簽名密鑰。如果您尚未衍生出簽名密鑰，請參閱 [Signature 第 4 版中如何衍生簽名密鑰的範例](https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html)。

   ```
   #Create the signing key
   signing_key = GetSignatureKey(secret_key, datestamp, region, service)
                   
   # Sign the string_to_sign using the signing key
   signature = HMAC.new(signing_key, (string_to_sign).Encode("utf-8"), Sha256()).HexDigest
   ```

   函數 `HMAC(key, data)` 代表 HMAC-SHA256 函數，會以二進位格式傳回結果。

1. 將簽署資訊新增至請求並建立請求 URL。

   您計算簽章之後，請將簽章新增到查詢字串。如需詳細資，請參閱[新增簽章到請求](https://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html)。

   首先將身分驗證資訊新增到查詢字串。

   ```
   canonical_querystring += "&X-Amz-Signature=" + signature
   ```

   然後，為請求建立 URL。

   ```
   request_url = endpoint + canonical_uri + "?" + canonical_querystring
   ```

   使用請求 URL 與您的 WebSocket 程式庫，以便向 Amazon Transcribe提出請求。

1. 對 的請求 Amazon Transcribe 必須包含下列標頭。一般而言，這些標頭由您的 WebSocket 用戶端程式庫管理。

   ```
   Host: transcribestreaming.us-west-2.amazonaws.com:8443
   Connection: Upgrade
   Upgrade: websocket
   Origin: URI-of-WebSocket-client
   Sec-WebSocket-Version: 13
   Sec-WebSocket-Key: randomly-generated-string
   ```

1. 當 Amazon Transcribe 收到您的 WebSocket 請求時，它會以 WebSocket 升級回應來回應。一般而言，您的 WebSocket 程式庫會管理此回應，並設定通訊端以進行通訊 Amazon Transcribe。

   以下是 的回應 Amazon Transcribe。已加入分行符號以提高可讀性。

   ```
   HTTP/1.1 101 WebSocket Protocol Handshake
   
   Connection: upgrade
   Upgrade: websocket
   websocket-origin: wss://transcribestreaming.us-west-2.amazonaws.com:8443
   websocket-location: transcribestreaming.us-west-2.amazonaws.com:8443/stream-transcription-websocket?
   &X-Amz-Algorithm=AWS4-HMAC-SHA256
   &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20220208%2Fus-west-2%2Ftranscribe%2Faws4_request
   &X-Amz-Date=20220208T235959Z
   &X-Amz-Expires=300
   &X-Amz-Signature=Signature Version 4 signature
   &X-Amz-SignedHeaders=host
   &language-code=en-US
   &session-id=String
   &media-encoding=flac
   &sample-rate=16000
   x-amzn-RequestId: RequestId
   Strict-Transport-Security: max-age=31536000
   sec-websocket-accept: hash-of-the-Sec-WebSocket-Key-header
   ```

1. 提出 WebSocket 串流請求

   建立 WebSocket 連線後，用戶端即可開始傳送一系列音訊影格，每個影格都使用[事件串流編碼](#streaming-event-stream)。

   每個資料框架包含三個標頭並結合原始音訊位元組塊；下表描述這些標頭。    
<a name="table-websocket-frame-diagram-event-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/transcribe/latest/dg/streaming-setting-up.html)

1. 若要結束資料串流，請將空的音訊串流區塊傳送到事件串流編碼的訊息中。

   回應包含承載中的事件串流編碼的原始位元組。它包含標準序言和下列標頭。    
<a name="table-websocket-frame-response-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/transcribe/latest/dg/streaming-setting-up.html)

   您解碼二進位回應時，將獲得包含轉錄結果的 JSON 結構。

### 處理 WebSocket 串流錯誤
<a name="websocket-errors"></a>

如果在處理您的請求時發生例外狀況， 會 Amazon Transcribe 回應包含事件串流編碼回應的終端機 WebSocket 框架。該回應包含下表中所述的標頭；回應的內文包含描述性錯誤訊息。傳送例外狀況回應後， 會 Amazon Transcribe 傳送關閉影格。


| 標頭名稱位元組長度 | 標頭名稱 (字串) | 標頭值類型 | 值字串位元組長度 | 值字串 (UTF-8) | 
| --- | --- | --- | --- | --- | 
| 13 | :content-type | 7 | 16 | application/json | 
| 15 | :exception-type | 7 | 各有不同 | 各有不同，請參閱以下內容 | 
| 13 | :message-type | 7 | 9 | 例外狀況 | 

`exception-type` 標頭包含以下其中一個值。
+ `BadRequestException`：建立串流時發生用戶端錯誤，或串流資料時發生錯誤。請確定您的用戶端已準備好接受資料，並再次嘗試請求。
+ `InternalFailureException`：在與用戶端交握期間 Amazon Transcribe 發生問題。請再次嘗試您的請求。
+ `LimitExceededException`：用戶端超過並行串流限制。如需詳細資訊，請參閱[Amazon Transcribe 限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits-amazon-transcribe)。減少正在轉錄的串流數量。
+ `UnrecognizedClientException`：WebSocket 升級請求是以不正確的存取金鑰或私密金鑰簽署的。請確定您正確建立存取金鑰，並再次嘗試請求。

Amazon Transcribe 也可以傳回任何常見的服務錯誤。如需清單，請參閱[常見錯誤](https://docs.aws.amazon.com/transcribe/latest/APIReference/CommonErrors.html)。

## 事件串流編碼
<a name="streaming-event-stream"></a>

Amazon Transcribe 使用稱為事件串流編碼的格式進行串流轉錄。

事件串流編碼會在用戶端與伺服器之間提供雙向通訊。傳送至 Amazon Transcribe 串流服務的資料影格會以此格式編碼。的回應 Amazon Transcribe 也會使用此編碼。

每則訊息包含兩個部分：序言和資料。序言包含：

1. 訊息的總位元組長度

1. 所有標頭的合併位元組長度

資料區段包含：

1. 標頭

1. 酬載

每個區段以 4 位元組大端序整數循環冗餘校驗 (CRC) 總和結束。訊息 CRC 檢查總和適用於序言區段和資料區段。 Amazon Transcribe 使用 CRC32 (通常稱為 GZIP CRC32)，計算兩個 CRC。如需 CRC32 的詳細資訊，請參閱 [https://www.ietf.org/rfc/rfc1952.txt](https://www.ietf.org/rfc/rfc1952.txt)。

總訊息額外負荷 (包括序言和兩個檢查總和) 為 16 位元組。

下圖顯示構成訊息和標題的元件。每則訊息有多個標頭。

![\[訊息元件的示意圖，以及串流轉錄的標頭。\]](http://docs.aws.amazon.com/zh_tw/transcribe/latest/dg/images/frame-diagram-frame-overview.png)


每則訊息都包含下列元件：
+ **序言**：由兩個 4 位元組欄位組成，總數固定為 8 個位元組。
  + *前 4 個位元組*：這是整個訊息的大端序整數位元組長度，包括 4 位元組長度欄位。
  + *次 4 個位元組*：這是訊息「標頭」部分的大端序整數位元組長度，不含「標頭」長度欄位本身。
+ **序言 CRC**：訊息序言部分的 4 位元組 CRC 檢查總和，不含 CRC 本身。序言與訊息 CRC 有獨立的 CRC。這可確保 Amazon Transcribe 可以立即偵測損毀的位元組長度資訊，而不會造成錯誤，例如緩衝區溢位。
+ **標頭：**註釋訊息的中繼資料；例如訊息類型、訊息類型和內容類型。訊息有多個標頭，屬於 key:value 配對，其中鍵是 UTF-8 字串。標頭可以任何順序出現在訊息的標頭部分中，而且每個標頭只能出現一次。
+ **承載：**要轉錄的音訊內容。
+ **訊息 CRC：**從訊息開頭到檢查總和開頭的 4 位元組 CRC 檢查總和。亦即，訊息中的一切，但 CRC 本身除外。

標頭框架是串流轉錄的授權框架。 Amazon Transcribe 會使用授權標頭的值做為種子，為請求中的資料框架產生授權標頭鏈。

每個標頭都包含下列元件；每個框架有多個標頭。
+ **標頭名稱位元組長度：**標頭名稱的位元組長度。
+ **標頭名稱：**指出標頭類型的標頭名稱。如需有效值，請參閱下列框架描述。
+ **標頭值類型：**指出標頭值的數字。下列清單顯示標頭的可能值及其指示內容。
  + `0` – TRUE
  + `1` – FALSE
  + `2` – BYTE
  + `3` – SHORT
  + `4` – INTEGER
  + `5` – LONG
  + `6` – BYTE ARRAY
  + `7` – STRING
  + `8` – TIMESTAMP
  + `9` – UUID
+ **數值字串位元組長度**：標頭值字串的位元組長度。
+ **標頭值：**標頭字串的值。此欄位的有效值取決於標頭類型。請參閱 [設定 HTTP/2 串流](#streaming-http2) 或 [設定 WebSocket 串流](#streaming-websocket)，了解詳細資訊。

## 資料框架
<a name="streaming-data-frames"></a>

每個串流請求都包含一或多個資料框架。建立資料框架的步驟有二：

1. 結合原始音訊資料與中繼資料以建立您的請求的承載。

1. 結合承載與簽章來形成傳送到 Amazon Transcribe的事件訊息。

下圖顯示此運作方式。

![\[串流轉錄的資料框架元件。\]](http://docs.aws.amazon.com/zh_tw/transcribe/latest/dg/images/streaming10.png)
