Einrichten einer Streaming-Transkription - Amazon Transcribe

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Einrichten einer Streaming-Transkription

Dieser Abschnitt erweitert den Hauptabschnitt über Streaming. Es soll Informationen für Benutzer bereitstellen, die ihren Stream mit HTTP /2 oder WebSockets direkt einrichten möchten, anstatt mit einem AWS SDK. Die Informationen in diesem Abschnitt können auch verwendet werden, um Ihren eigenen zu erstellenSDK.

Wichtig

Wir empfehlen dringend, HTTP /2 und SDKs nicht WebSockets direkt zu verwenden. SDKssind die einfachste und zuverlässigste Methode zur Transkription von Datenströmen. Informationen zum Starten des Streamings mit einem AWS SDK finden Sie unter. Transkribieren mit den SDKs AWS

Die wichtigsten Komponenten für ein HTTP/2-Protokoll zum Streamen von Transkriptionsanfragen mit Amazon Transcribe sind:

  • Ein Header-Frame. Es enthält die HTTP /2-Header für Ihre Anfrage und eine Signatur im Autorisierungsheader, die als Startsignatur zum Signieren der Datenrahmen Amazon Transcribe verwendet wird.

  • Ein oder mehrere Nachrichtenframe(s) in Ereignisstromkodierung, der/die Metadaten und Roh-Audio-Bytes enthält/enthalten.

  • Ein Endframe. Hierbei handelt es sich um eine signierte Nachricht in der Ereignis-Stream-Kodierung mit einem leeren Text.

Anmerkung

Amazon Transcribe unterstützt nur einen Stream pro HTTP /2-Sitzung. Wenn Sie versuchen, mehrere Streams zu verwenden, schlägt Ihre Transkriptionsanfrage fehl.

  1. Hängen Sie die folgende Richtlinie an die IAM Rolle an, die die Anfrage stellt. Weitere Informationen finden Sie unter IAM Richtlinien hinzufügen.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "my-transcribe-http2-policy", "Effect": "Allow", "Action": "transcribe:StartStreamTranscription", "Resource": "*" } ] }
  2. Um die Sitzung zu starten, senden Sie eine HTTP /2-Anfrage an 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

    Zusätzliche Operationen und Parameter sind in der APIReferenz aufgeführt. Parameter, die allen AWS API Operationen gemeinsam sind, sind im Abschnitt Allgemeine Parameter aufgeführt.

    Amazon Transcribe sendet die folgende Antwort:

    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
  3. Erstellen Sie ein Audio-Ereignis, das Ihre Audiodaten enthält. Kombinieren Sie die in der folgenden Tabelle beschriebenen Headern mit einem Chunk von Audio-Bytes in einer ereigniskodierten Nachricht. Nutzen Sie einen Puffer im Rohbyteformat, um die Nutzlast für die Ereignisnachricht zu erstellen.

    Bytelänge des Header-Namens Header-Name (Zeichenfolge) Werttyp des Header Bytelänge der Wertzeichenfolge Wertezeichenfolge (UTF-8)
    13 :content-type 7 24 application/octet-stream
    11 :event-type 7 10 AudioEvent
    13 :message-type 7 5 event

    Die binären Daten in dieser Beispielanfrage sind base64-kodiert. Bei einer tatsächlichen Anfrage sind die Daten Rohbytes.

    :content-type: "application/vnd.amazon.eventstream" :event-type: "AudioEvent" :message-type: "event" UklGRjzxPQBXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YVTwPQAAAAAAAAAAAAAAAAD//wIA/f8EAA==
  4. Erstellen Sie eine Audionachricht, die Ihre Audiodaten enthält.

    1. Ihr Audionachrichten-Datenrahmen enthält Ereigniscodierungs-Header, die das aktuelle Datum und eine Signatur für den Audiochunk und das Audioereignis enthalten.

      Bytelänge des Header-Namens Header-Name (Zeichenfolge) Werttyp des Header Bytelänge der Wertzeichenfolge Wert
      16 :chunk-signature 6 variiert generierte Signatur
      5 :date 8 8 Zeitstempel

      Die binären Daten in dieser Anfrage sind base64-kodiert. Bei einer tatsächlichen Anfrage sind die Daten Rohbytes.

      :date: 2019-01-29T01:56:17.291Z :chunk-signature: signature AAAA0gAAAIKVoRFcTTcjb250ZW50LXR5cGUHABhhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0LOmV2ZW50LXR5 cGUHAApBdWRpb0V2ZW50DTptZXNzYWdlLXR5cGUHAAVldmVudAxDb256ZW50LVR5cGUHABphcHBsaWNhdGlv bi94LWFtei1qc29uLTEuMVJJRkY88T0AV0FWRWZtdCAQAAAAAQABAIA+AAAAfQAAAgAQAGRhdGFU8D0AAAAA AAAAAAAAAAAA//8CAP3/BAC7QLFf
    2. Konstruieren Sie eine zu signierende Zeichenfolge, wie unter Erstellen einer zu signierenden Zeichenfolge für Signature Version 4 beschrieben. Ihre Zeichenkette hat dieses Format:

      String stringToSign = "AWS4-HMAC-SHA256" + "\n" + DateTime + "\n" + Keypath + "\n" + Hex(priorSignature) + "\n" + HexHash(nonSignatureHeaders) + "\n" + HexHash(payload);
      • DateTime: Datum und Uhrzeit der Erstellung der Signatur. Das Format istYYYYMMDDTHHMMSSZ, wobei YYYY =Jahr, MM=Monat, DD=Tag, HH=Stunde, MM=Minute, SS=Sekunden und 'T' und 'Z' feste Zeichen sind. Weitere Informationen finden Sie unter Handhabung von Daten in Signature Version 4.

      • Keypath: Der Signaturbereich im Format date/region/service/aws4_request. Beispiel, 20220127/us-west-2/transcribe/aws4_request.

      • Hex: Eine Funktion, die Eingaben in eine hexadezimale Darstellung kodiert.

      • priorSignature: Die Signatur für den vorherigen Frame. Verwenden Sie die Signatur des Header-Frames für den ersten Datenframe.

      • HexHash: Eine Funktion, die zuerst einen SHA -256-Hash ihrer Eingabe erstellt und dann die Hex-Funktion verwendet, um den Hash zu kodieren.

      • nonSignatureHeaders: Der DateTime Header ist als Zeichenfolge kodiert.

      • payload: Der Byte-Puffer, der die Audio-Ereignisdaten enthält.

    3. Leiten Sie einen Signaturschlüssel von Ihrem AWS geheimen Zugriffsschlüssel ab und verwenden Sie ihn zum Signieren des. stringToSign Für ein höheres Maß an Schutz ist der abgeleitete Schlüssel spezifisch für das Datum, den Service und AWS-Region. Weitere Informationen finden Sie unter Berechnen der Signatur für AWS Signature Version 4.

      Stellen Sie sicher, dass Sie die Funktion GetSignatureKey implementieren, um Ihren Signaturschlüssel abzuleiten. Wenn Sie noch keinen Signaturschlüssel abgeleitet haben, lesen Sie den Abschnitt Beispiele für die Ableitung eines Signaturschlüssels für die Signature Version 4.

      String signature = HMACSHA256(derivedSigningKey, stringToSign);
      • HMACSHA256: Eine Funktion, die mithilfe der Hash-Funktion SHA -256 eine Signatur erstellt.

      • derivedSigningKey: Der Signaturschlüssel von Signature Version 4.

      • stringToSign: Die Zeichenfolge, die Sie für den Datenrahmen berechnet haben.

      Nachdem Sie die Signatur für den Data Frame berechnet haben, erstellen Sie einen Bytepuffer, der das Datum, die Signatur und die Nutzlast des Audioereignisses enthält. Senden Sie das Byte-Array zur Transkription an Amazon Transcribe .

  5. Um anzuzeigen, dass der Audiostream vollständig ist, senden Sie einen End-Frame (einen leeren Datenrahmen), der nur das Datum und die Signatur enthält. Sie konstruieren diesen Endframe auf die gleiche Weise wie einen Data Frame.

    Amazon Transcribe antwortet mit einem Stream von Transkriptionsereignissen, die an Ihre Anwendung gesendet werden. Diese Antwort ist Ereignisstreamkodiert. Sie enthält die Standardeinleitung und die folgenden Header:

    Bytelänge des Header-Namens Header-Name (Zeichenfolge) Werttyp des Header Bytelänge der Wertzeichenfolge Wertezeichenfolge (UTF-8)
    13 :content-type 7 16 application/json
    11 :event-type 7 15 TranscriptEvent
    13 :message-type 7 5 event

    Die Ereignisse werden im Rohbyteformat gesendet. In diesem Beispiel sind die Bytes base64-kodiert.

    AAAAUwAAAEP1RHpYBTpkYXRlCAAAAWiXUkMLEDpjaHVuay1zaWduYXR1cmUGACCt6Zy+uymwEK2SrLp/zVBI 5eGn83jdBwCaRUBJA+eaDafqjqI=

    Um die Transkriptionsergebnisse zu sehen, dekodieren Sie die rohen Bytes mit der Ereignisstreamkodierung.

    :content-type: "application/vnd.amazon.eventstream" :event-type: "TranscriptEvent" :message-type: "event" { "Transcript": { "Results": [ results ] } }
  6. Um Ihren Stream zu beenden, senden Sie ein leeres Audioereignis an Amazon Transcribe. Erstellen Sie das Audioereignis genau wie jedes andere (Ausnahme: leere Nutzlast). Signieren Sie das Ereignis und fügen Sie die Signatur wie folgt in den Header :chunk-signature ein:

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

Behandlung von HTTP /2-Streaming-Fehlern

Wenn bei der Verarbeitung Ihres Medienstreams ein Fehler auftritt, Amazon Transcribe sendet eine Ausnahmeantwort. Die Antwort ist Ereignis-Stream-kodiert.

Die Antwort enthält die Standardeinleitung und die folgenden Header:

Bytelänge des Header-Namens Header-Name (Zeichenfolge) Werttyp des Header Bytelänge der Wertzeichenfolge Wertezeichenfolge (UTF-8)
13 :content-type 7 16 application/json
11 :event-type 7 19 BadRequestException
13 :message-type 7 9 Ausnahme

Wenn die Ausnahmeantwort kodiert ist, enthält sie die folgenden Informationen:

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

Die wichtigsten Komponenten eines WebSocketProtokolls zum Streamen von Transkriptionsanfragen mit Amazon Transcribe sind:

  • Die Upgrade-Anforderung. Es enthält die Abfrageparameter für Ihre Anfrage und eine Signatur, die als Startsignatur zum Signieren der Datenrahmen Amazon Transcribe verwendet wird.

  • Ein oder mehrere Nachrichtenframe(s) in Ereignisstromkodierung, der/die Metadaten und Roh-Audio-Bytes enthält/enthalten.

  • Ein Endframe. Hierbei handelt es sich um eine signierte Nachricht in der Ereignis-Stream-Kodierung mit einem leeren Text.

Anmerkung

Amazon Transcribe unterstützt nur einen Stream pro WebSocket Sitzung. Wenn Sie versuchen, mehrere Streams zu verwenden, schlägt Ihre Transkriptionsanfrage fehl.

  1. Fügen Sie der IAM Rolle, die die Anfrage stellt, die folgende Richtlinie hinzu. Weitere Informationen finden Sie unter IAM Richtlinien hinzufügen.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "my-transcribe-websocket-policy", "Effect": "Allow", "Action": "transcribe:StartStreamTranscriptionWebSocket", "Resource": "*" } ] }
  2. Um die Sitzung zu starten, erstellen Sie eine vorsignierte Sitzung URL im folgenden Format. Für eine bessere Lesbarkeit werden Zeilenumbrüche hinzugefügt.

    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
    Anmerkung

    Der Höchstwert für X-Amz-Expires ist 300 (5 Minuten).

    Zusätzliche Operationen und Parameter sind in der APIReferenz aufgeführt. Parameter, die allen AWS API Operationen gemeinsam sind, sind im Abschnitt Allgemeine Parameter aufgeführt.

    Gehen Sie wie folgt vor, um die Signatur URL für Ihre Anfrage und die Signature Version 4-Signatur zu erstellen. Die Beispiele sind in Pseudocode.

    1. Erstellen Sie eine kanonische Anforderung. Eine kanonische Anfrage ist eine Zeichenfolge, die Informationen aus Ihrer Anfrage in einem standardisierten Format enthält. Dadurch wird sichergestellt, dass beim AWS Empfang der Anfrage dieselbe Signatur berechnet werden kann, die Sie für Ihre erstellt habenURL. Weitere Informationen finden Sie unter Erstellen eines kanonischen Antrags für Signature Version 4.

      # 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
    2. Erstellen Sie eine kanonische Zeichenfolge. URI Dabei handelt es sich um den Teil URI zwischen der Domain und der Abfragezeichenfolge.

      canonical_uri = "/stream-transcription-websocket"
    3. Erstellen Sie die kanonischen Header und signierten Header. Beachten Sie das abschließende \n in den kanonischen Headern.

      • Fügen Sie den Namen des Headers in Kleinbuchstaben gefolgt von einem Doppelpunkt ( : ) an.

      • Fügen Sie eine durch Komma getrennte Liste der Werte für diesen Header an. Sortieren Sie keine Werte in Headern, die mehrere Werte enthalten.

      • Eine neue Zeile anfügen (\n).

      canonical_headers = "host:" + host + "\n" signed_headers = "host"
    4. Gleichen Sie den Algorithmus mit dem Hash-Algorithmus ab. Verwenden Sie SHA-256.

      algorithm = "AWS4-HMAC-SHA256"
    5. Erstellen Sie den Berechtigungsbereich, der den abgeleiteten Schlüssel auf das Datum, AWS-Region und den Service ausdehnt. Beispiel, 20220127/us-west-2/transcribe/aws4_request.

      credential_scope = datestamp + "/" + region + "/" + service + "/" + "aws4_request"
    6. Erstellen Sie die kanonische Abfragezeichenfolge. Die Werte der Abfragezeichenfolge müssen URI -kodiert und nach Namen sortiert sein.

      • Sortieren Sie die Parameternamen nach Zeichencodepunkt in aufsteigender Reihenfolge. Parameter mit doppelten Namen sollten nach Wert sortiert werden. So wird beispielsweise ein Parametername, der mit dem Großbuchstaben F beginnt, einem Parameternamen, der mit dem Kleinbuchstaben b beginnt, vorangestellt.

      • URIKodieren Sie keines der nicht reservierten Zeichen, die RFC 3986 definiert: A-Z, a-z, 0-9, Bindestrich (-), Unterstrich (_), Punkt (.) und Tilde (~).

      • Versehen Sie alle anderen Zeichen mit Prozentcode (%XY), wobei X und Y für Hexadezimalzeichen, d. h. 0-9 und die Großbuchstaben A-F, stehen. Beispielsweise muss das Leerzeichen als %20 codiert sein (ohne '+', wie es bei einigen Kodierungsschemata der Fall ist); erweiterte -8 Zeichen müssen die Form %XY%ZA%BC haben. UTF

      • Doppelcodieren Sie alle gleich (=)-Zeichen in Parameterwerten.

      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"
    7. Erstellen Sie ein Hash der Nutzlast. Bei einer Anfrage an GET ist die Nutzlast eine leere Zeichenkette.

      payload_hash = HashSHA256(("").Encode("utf-8")).HexDigest()
    8. Kombinieren Sie die folgenden Elemente, um die kanonische Anfrage zu erstellen.

      canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash
  3. Erstellen Sie die zu signierende Zeichenkette, die Metainformationen über Ihre Anfrage enthält. Sie verwenden die zu signierende Zeichenfolge im nächsten Schritt, wenn Sie die Anforderungssignatur berechnen. Weitere Informationen finden Sie unter Erstellen einer zu signierenden Zeichenfolge für Signature Version 4.

    string_to_sign=algorithm + "\n" + amz_date + "\n" + credential_scope + "\n" + HashSHA256(canonical_request.Encode("utf-8")).HexDigest()
  4. Berechnen Sie die Signatur. Um dies zu tun, leiten Sie einen Signaturschlüssel von Ihrem geheimen Zugriffsschlüssel ab. AWS Für ein höheres Maß an Schutz ist der abgeleitete Schlüssel spezifisch für das Datum, den Service und AWS-Region. Verwenden Sie diesen abgeleiteten Schlüssel, um die Anfrage zu signieren. Weitere Informationen finden Sie unter AWS Signatur für Signaturversion 4 berechnen.

    Stellen Sie sicher, dass Sie die Funktion GetSignatureKey implementieren, um Ihren Signaturschlüssel abzuleiten. Wenn Sie noch keinen Signaturschlüssel abgeleitet haben, lesen Sie den Abschnitt Beispiele für die Ableitung eines Signaturschlüssels für die Signature Version 4.

    #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

    Die Funktion HMAC(key, data) stellt eine HMAC - SHA256 -Funktion dar, die Ergebnisse im Binärformat zurückgibt.

  5. Fügen Sie der Anfrage Signierungsinformationen hinzu und erstellen Sie die AnforderungURL.

    Nachdem Sie die Signatur berechnet haben, fügen Sie sie zur Abfragezeichenfolge hinzu. Weitere Informationen finden Sie unter Hinzufügen der Signatur zur Anfrage.

    Fügen Sie zunächst die Authentifizierungsinformationen in die Abfragezeichenfolge ein.

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

    Erstellen Sie anschließend die URL für die Anfrage.

    request_url = endpoint + canonical_uri + "?" + canonical_querystring

    Verwenden Sie die Anfrage URL zusammen mit Ihrer WebSocket Bibliothek, um die Anfrage zu stellen Amazon Transcribe.

  6. Die Anfrage an Amazon Transcribe muss die folgenden Header enthalten. In der Regel werden diese Header von Ihrer WebSocket Client-Bibliothek verwaltet.

    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
  7. Wenn Ihre Amazon Transcribe WebSocket Anfrage eingeht, antwortet sie mit einer WebSocket Upgrade-Antwort. In der Regel verwaltet Ihre WebSocket Bibliothek diese Antwort und richtet einen Socket für die Kommunikation mit ein Amazon Transcribe.

    Das Folgende ist die Antwort von Amazon Transcribe. Für eine bessere Lesbarkeit werden Zeilenumbrüche hinzugefügt.

    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
  8. Stellen Sie Ihre WebSocket Streaming-Anfrage.

    Nachdem die WebSocket Verbindung hergestellt wurde, kann der Client mit dem Senden einer Sequenz von Audioframes beginnen, die jeweils mithilfe der Event-Stream-Kodierung codiert sind.

    Jeder Datenrahmen enthält drei Header, die mit einem Teil der Rohdaten kombiniert werden; die folgende Tabelle beschreibt diese Header.

    Bytelänge des Header-Namens Header-Name (Zeichenfolge) Werttyp des Header Bytelänge der Wertzeichenfolge Wertezeichenfolge (UTF-8)
    13 :content-type 7 24 application/octet-stream
    11 :event-type 7 10 AudioEvent
    13 :message-type 7 5 event
  9. Um den Datenströmen zu beenden, senden Sie einen leeren Audiochunk in einer ereignisstromkodierten Nachricht.

    Die Antwort enthält Ereignis-Stream-kodierte Rohbytes in der Nutzlast. Sie enthält die Standardeinleitung und die folgenden Header:

    Bytelänge des Header-Namens Header-Name (Zeichenfolge) Werttyp des Header Bytelänge der Wertzeichenfolge Wertezeichenfolge (UTF-8)
    13 :content-type 7 16 application/json
    11 :event-type 7 15 TranscriptEvent
    13 :message-type 7 5 event

    Wenn Sie die binäre Antwort dekodieren, erhalten Sie am Ende eine JSON Struktur, die die Transkriptionsergebnisse enthält.

Umgang mit Streaming-Fehlern WebSocket

Wenn bei der Bearbeitung Ihrer Anfrage eine Ausnahme auftritt, Amazon Transcribe antwortet die Antwort mit einem WebSocket Terminalframe, der eine in einem Eventstream kodierte Antwort enthält. Diese Antwort enthält die in der folgenden Tabelle beschriebenen Header. Der Hauptteil der Antwort enthält eine beschreibende Fehlermeldung. Amazon Transcribe Sendet nach dem Senden der Ausnahmeantwort einen geschlossenen Frame.

Bytelänge des Header-Namens Header-Name (Zeichenfolge) Werttyp des Header Bytelänge der Wertzeichenfolge Wertezeichenfolge (UTF-8)
13 :content-type 7 16 application/json
15 :exception-type 7 variiert variiert, siehe unten
13 :message-type 7 9 Ausnahme

Der exception-type-Header enthält einen der folgenden Werte.

  • BadRequestException: Bei der Erstellung des Streams ist ein Client-Fehler aufgetreten, oder es ist ein Fehler beim Streaming von Daten aufgetreten. Stellen Sie sicher, dass Ihr Client bereit ist, Daten zu akzeptieren, und versuchen Sie es erneut.

  • InternalFailureException: Amazon Transcribe hatte ein Problem beim Handschlag mit dem Client. Versuchen Sie es erneut.

  • LimitExceededException: Der Client hat das Limit für gleichzeitige Streams überschritten. Weitere Informationen finden Sie unter Amazon Transcribe Limits. Reduzieren Sie die Anzahl der Streams, die Sie transkribieren.

  • UnrecognizedClientException: Die WebSocket Upgrade-Anfrage wurde mit einem falschen Zugriffsschlüssel oder geheimen Schlüssel signiert. Vergewissern Sie sich, dass Sie den Zugriffsschlüssel korrekt erstellt haben, und versuchen Sie Ihre Anfrage erneut.

Amazon Transcribe kann auch alle gängigen Servicefehler zurückgeben. Eine Liste finden Sie unter Häufige Fehler.

Ereignis-Stream-Kodierung

Amazon Transcribe verwendet ein Format namens Event Stream Encoding für Streaming-Transkriptionen.

Die Ereignisstreamkodierung stellt eine bidirektionale Kommunikation zwischen einem Client und einem Server bereit. Datenframes, die an den Amazon Transcribe Streaming-Dienst gesendet werden, werden in diesem Format codiert. Die Antwort von verwendet Amazon Transcribe ebenfalls diese Kodierung.

Jede Nachricht besteht aus zwei Abschnitten: der Einleitung und den Daten. Die Einleitung setzt sich folgendermaßen zusammen:

  1. Die Byte-Länge der Nachricht

  2. Die kombinierte Bytelänge aller Header

Der Datenabschnitt setzt sich folgendermaßen zusammen:

  1. Überschriften

  2. Nutzlast

Jeder Abschnitt endet mit einer 4-Byte-Big-Endian-Ganzzahl-Prüfsumme für zyklische Redundanz (). CRC Die CRC Nachrichten-Prüfsumme gilt sowohl für den Prälude-Abschnitt als auch für den Datenbereich. Amazon Transcribe verwendet CRC32 (oft als GZIPCRC32) bezeichnet, um beide zu berechnen. CRCs Weitere Informationen zu CRC32 finden Sie in der GZIPDateiformatspezifikation Version 4.3.

Der gesamte Nachrichten-Overhead, einschließlich der Einleitung und beider Prüfsummen, beträgt 16 Bytes.

Das folgende Diagramm zeigt die Komponenten, aus denen eine Nachricht und ein Header bestehen. Pro Nachricht gibt es mehrere Header.

Schematische Darstellung der Bestandteile einer Nachricht und eines Headers für eine Streaming-Transkription.

Jede Nachricht enthält die folgenden Komponenten:

  • Prelude: Besteht aus zwei 4-Byte-Feldern, also insgesamt 8 Byte.

    • Die ersten 4 Bytes: Die Big-Endian-Integer-Byte-Länge der gesamten Nachricht, einschließlich dieses 4-Byte-Längenfeldes.

    • Zweite 4 Bytes: Die Big-Endian-Integer-Byte-Länge des „Header"-Teils der Nachricht, mit Ausnahme des „Header"-Längenfelds selbst.

  • Präludium CRC: Die CRC 4-Byte-Prüfsumme für den Präludenteil der Nachricht, ohne den Teil selbst. CRC Das Präludium hat ein von der Nachricht getrenntes Zeichen. CRC CRC Dadurch wird sichergestellt, dass beschädigte Informationen mit Bytelänge sofort erkannt werden Amazon Transcribe können, ohne dass es zu Fehlern wie Pufferüberläufen kommt.

  • Header: Metadaten, die die Nachricht annotieren, z. B. Nachrichtentyp und Inhaltstyp. Nachrichten haben mehrere Header, bei denen es sich um Schlüssel/Wert-Paare handelt, wobei der Schlüssel eine Zeichenfolge mit -8 ist. UTF Header können in beliebiger Reihenfolge im „Header“-Teil der Nachricht erscheinen, und jeder Header darf nur einmal vorkommen.

  • Nutzlast: die zu transkribierenden Audioinhalte.

  • Nachricht CRC: Die CRC 4-Byte-Prüfsumme vom Beginn der Nachricht bis zum Anfang der Prüfsumme. Das heißt, alles in der Nachricht außer der Nachricht selbst. CRC

Der Header-Frame ist der Autorisierungs-Frame für die Streaming-Transkription. Amazon Transcribe verwendet den Wert des Autorisierungsheaders als Ausgangswert für die Generierung einer Kette von Autorisierungsheadern für die Datenframes in der Anfrage.

Jeder Header enthält die folgenden Komponenten; es gibt mehrere Header pro Frame.

  • Byte-Länge des Header-Namens: die Byte-Länge des Header-Namens.

  • Header-Name: Der Name des Headers, der den Header-Typ angibt. Gültige Werte finden Sie in den folgenden Frame-Beschreibungen.

  • Typ des Header-Werts: Eine Zahl, die den Header-Wert angibt. Die folgende Liste zeigt die möglichen Werte für den Header und was sie bedeuten.

    • 0 – TRUE

    • 1 – FALSE

    • 2 – BYTE

    • 3 – SHORT

    • 4 – INTEGER

    • 5 – LONG

    • 6 – BYTE ARRAY

    • 7 – STRING

    • 8 – TIMESTAMP

    • 9 – UUID

  • Byte-Länge der Wertzeichenfolge: die Byte-Länge der Header-Wertzeichenfolge.

  • Header-Wert: der Wert der Header-Zeichenfolge. Gültige Werte für dieses Feld sind vom Header-Typ abhängig. Weitere Informationen finden Sie unter Einen HTTP /2-Stream einrichten oder Einen Stream einrichten WebSocket .

Datenframes

Jede Streaming-Anfrage enthält einen oder mehrere Data Frames. Zum Erstellen eines Datenframes sind die folgenden zwei Schritte erforderlich:

  1. Kombinieren Sie Audio-Rohdaten mit Metadaten, um die Nutzdaten Ihrer Anfrage zu erstellen.

  2. Kombinieren Sie die Nutzlast mit einer Signatur, um die Ereignisnachricht zu erstellen, die an Amazon Transcribe gesendet wird.

In der folgenden Abbildung ist diese Funktionsweise dargestellt.

Die Komponenten eines Data Frames für eine Streaming-Transkription.