

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ストリーミング文字起こしの設定
<a name="streaming-setting-up"></a>

このセクションでは、メインの[ストリーミング](streaming.md)セクションをさらに詳しく説明します。これは、 AWS SDK ではなく HTTP/2 または WebSockets でストリームを直接セットアップするユーザー向けに情報を提供することを目的としています。このセクションの情報は、独自の SDK の構築にも使用できます。

**重要**  
HTTP/2 や WebSocket を直接使用するのではなく、SDK を使用することを強くおすすめします。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)の 1 つ以上のメッセージフレーム。
+ 終了フレーム。空の本文を持つ[イベントストリームエンコーディング](#streaming-event-stream)の署名付きメッセージです。

**注記**  
Amazon Transcribe は、HTTP/2 セッションごとに 1 つのストリームのみをサポートします。複数のストリーミングを使用しようとすると、文字起こしリクエストは失敗します。

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. 音声データを含む音声イベントを作成します。以下の表に示すヘッダを、イベントエンコードされたメッセージの音声バイトのチャンクと組み合わせます。イベントメッセージのペイロードを作成するには、raw バイト形式のバッファを使用します。    
<a name="table-http2-frame-diagram-event-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/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/ja_jp/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. 「[署名バージョン 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 で、YYY = 年、MM = 月、DD = 日、HH = 時間、MM = 分、SS = 秒、「T」と 「Z」は固定文字です。詳細については、「[署名バージョン 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**: 入力を 16 進数にエンコードする関数。
      + **priorSignature**: 前回のフレームの署名。最初のデータフレームで、ヘッダーフレームの署名を使用します。
      + **HexHash**: 最初にその入力の SHA-256 ハッシュを作成し、次に Hex 関数を使用してハッシュをエンコードする関数。
      + **nonSignatureHeaders**: 文字列としてエンコードされた DateTime ヘッダー。
      + **payload**: 音声イベントデータを含むバイトバッファ。

   1.  AWS シークレットアクセスキーから署名キーを取得し、それを使用して に署名します`stringToSign`。保護レベルを高めるために、派生キーは日付、サービス、 AWS リージョンに固有になっています。詳細については、「[AWS署名バージョン 4 の署名を計算する](https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html)」を参照してください。

      `GetSignatureKey` 関数を実装して署名キーを取得します。まだ署名キーを取得していない場合は、「[署名バージョン 4 の署名キーを取得する方法の例](https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html)」を参照してください。

      ```
      String signature = HMACSHA256(derivedSigningKey, stringToSign);
      ```
      + **HMACSHA256**: SHA-256 ハッシュ関数を使って署名を作成する関数。
      + **derivedSigningKey**: 署名バージョン 4 の署名キー。
      + **stringToSign**: データフレーム用に計算した文字列。

      データフレームの署名を計算したら、日付、署名、および音声イベントペイロードを含むバイトバッファを構築します。文字起こし用にバイト配列を Amazon Transcribe に送信します。

1. 音声ストリームが完了したことを示すには、日付と署名のみを含む空のデータ終了フレームを送信します。データフレームを構築するのと同じ方法で、この終了フレームを構築します。

   Amazon Transcribe は、アプリケーションに送信される文字起こしイベントのストリームで応答します。このレスポンスはイベントストリームでエンコードされます。また、標準の prelude と以下のヘッダーが含まれます。    
<a name="table-http2-frame-response-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/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 を送信します。レスポンスはイベントストリームでエンコードされます。

レスポンスには、標準の prelude と以下のヘッダーが含まれます。


| ヘッダー名のバイト長 | ヘッダー名 (文字列) | ヘッダー値の型 | 値の文字列のバイト長 | 値の文字列 (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)の 1 つ以上のメッセージフレーム。
+ 終了フレーム。空の本文を持つ[イベントストリームエンコーディング](#streaming-event-stream)の署名付きメッセージです。

**注記**  
Amazon Transcribe はWebSocket セッションごとに 1 つのストリームのみをサポートします。複数のストリーミングを使用しようとすると、文字起こしリクエストは失敗します。

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 を作成し、[署名バージョン 4 の署名](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)を作成するには、以下の手順を参照してください。例は擬似コードで示しています。

   1. 正規リクエストを作成します。正規は、リクエストからの情報を標準化された形式で含む文字列です。これにより、 がリクエスト AWS を受け取ると、URL に対して作成したのと同じ署名を計算できます。詳細については、「[署名バージョン 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. 正規クエリ文字列を作成します。クエリ文字列値は、URI エンコードされ、名前順にソートされている必要があります。
      + パラメータ名を文字コードポイントで昇順にソートします。名前が重複しているパラメータは、値でソートする必要があります。たとえば、大文字 F で始まるパラメータ名は、小文字 b で始まるパラメータ名より前に置きます。
      + RFC 3986 が定義する非予約文字である A～Z、a～z、0～9、ハイフン (-)、アンダースコア ( \$1 )、ピリオド ( . )、およびチルド (～) を、URI がエンコードすることはありません。
      + 他のすべての文字についても、%XY によるパーセントエンコードが必要です。X および Y には 16 進数文字 (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. リクエストについてのメタ情報が含まれる署名する文字列を作成します。次のステップでリクエストの署名を計算するときに、文字列を使用してサインインします。詳細については、「[署名バージョン 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 リージョンに固有になっています。派生キーを使用して、リクエストに署名します。詳細については、[「署名バージョン 4 AWS の署名を計算する](https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html)」を参照してください。

   `GetSignatureKey` 関数を実装して署名キーを取得します。まだ署名キーを取得していない場合は、「[署名バージョン 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-SHA 256 関数を表します。

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
   ```

   WebSocket ライブラリでリクエスト URL を使用して、 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. が WebSocket リクエスト Amazon Transcribe を受信すると、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)を使用してエンコードされます。

   各データフレームには、未加工の音声バイトのチャンクと組み合わせた 3 つのヘッダーが含まれています。以下の表はこれらのヘッダーについて説明したものです。    
<a name="table-websocket-frame-diagram-event-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/transcribe/latest/dg/streaming-setting-up.html)

1. データストリームを終了するには、空の音声チャンクをイベントストリームでエンコードされたメッセージで送信します。

   レスポンスには、イベントストリームでエンコードされた raw バイトがペイロードに含まれています。また、標準の prelude と以下のヘッダーが含まれます。    
<a name="table-websocket-frame-response-headers"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/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 | varies | varies、以下を参照してください | 
| 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 もこのエンコードを使用します。

各メッセージは、prelude と data の 2 つのセクションで構成されています。prelude の構成要素は以下のとおりです。

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)」を参照してください。

合計メッセージオーバーヘッド (prelude と両方のチェックサムを含む) は 16 バイトです。

次の図は、メッセージとヘッダーを構成するコンポーネントを示します。メッセージごとに複数のヘッダーがあります。

![\[ストリーミング文字起こしのメッセージとヘッダーの構成要素の図。\]](http://docs.aws.amazon.com/ja_jp/transcribe/latest/dg/images/frame-diagram-frame-overview.png)


各メッセージには、以下のコンポーネントが含まれます。
+ **Prelude**: 2 つの 4 バイトのフィールドで構成され、合計は 8 バイトに固定されています。
  + *最初の 4 バイト*: メッセージ全体のビッグエンディアン整数バイト長です (4 バイト長のフィールド自体を含む)。
  + *次の 4 バイト* メッセージのヘッダー部分のビッグエンディアン整数バイト長 (ヘッダー長フィールド自体を除く)。
+ **Prelude CRC:** メッセージの prelude 部分の 4 バイト CRC チェックサム (CRC 自体を除く)。prelude にはメッセージ CRC とは別の CRC があります。これにより、 Amazon Transcribe はバッファのオーバーランなどのエラーを発生させることなく、破損したバイト長情報をすぐに検出できます。
+ **ヘッダー**: メッセージタイプ、コンテンツタイプなど、メッセージに注釈を付けるメタデータ。メッセージにはキーと値のペアである複数のヘッダーがあり、キーは 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 つ以上のデータフレームが含まれています。データフレームを作成するには 2 つのステップがあります。

1. 未加工の音声データとメタデータを組み合わせて、リクエストのペイロードを作成します。

1. ペイロードを署名と組み合わせて、 Amazon Transcribeに送信されるイベントメッセージを形成します。

この 仕組み を以下に示します。

![\[ストリーミング文字起こしのデータフレームのコンポーネント。\]](http://docs.aws.amazon.com/ja_jp/transcribe/latest/dg/images/streaming10.png)
