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 nicht mit einem SDK, sondern mit HTTP/2 oder WebSockets direkt einrichten möchten. AWS Die Informationen in diesem Abschnitt können auch zur Erstellung eines eigenen SDKs verwendet werden.

Wichtig

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

Die wichtigsten Komponenten eines HTTP/2-Protokolls 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. Senden Sie eine HTTP/2-Anfrage an Amazon Transcribe, um die Sitzung zu starten:

    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 API-Referenz aufgeführt. Parameter, die allen AWS -API-Operationen gemeinsam sind, werden 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 Wertzeichenfolge (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 ist JJJJMMTTTHHMMSSZ, wobei JJJJ=Jahr, MM=Monat, TT=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 aus Ihrem AWS geheimen Zugriffsschlüssel einen Signaturschlüssel ab und signieren Sie ihn damit. 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 SHA-256-Funktion eine Signatur erstellt.

      • derivedSigningKey: der Signature Version 4-Signaturschlüssel.

      • 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 Wertzeichenfolge (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 Wertzeichenfolge (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 vordefinierte URL in folgendem 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 API-Referenz aufgeführt. Parameter, die allen AWS -API-Operationen gemeinsam sind, werden im Abschnitt Allgemeine Parameter aufgeführt.

    Um die URL für Ihre Anfrage zu konstruieren und die Signature Version 4 zu erstellen, führen Sie die folgenden Schritte aus. 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 URL erstellt haben. 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 einen kanonischen URI, d. h. den Teil des URI, der zwischen der Domain und dem Abfrage-String liegt.

      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.

      • Fügen Sie keine URI-Kodierung für die nicht reservierten Zeichen durch, die von RFC 3986 definiert sind: A–Z, a–, 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. Zum Beispiel muss das Leerzeichen als %20 kodiert werden (schließen Sie kein „+“ ein, wie es einige Kodierungsschemata tun); erweiterte UTF-8-Zeichen müssen in der Form %XY%ZA%BC sein.

      • 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. Leiten Sie dazu einen Signaturschlüssel aus Ihrem AWS geheimen Zugriffsschlüssel ab. 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 SHA256 HMAC-Funktion dar, die Ergebnisse im Binärformat zurückgibt.

  5. Fügen Sie der Anfrage Signierinformationen hinzu und erstellen Sie die Anfrage-URL.

    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

    Zweitens: Erstellen Sie die URL für die Anfrage.

    request_url = endpoint + canonical_uri + "?" + canonical_querystring

    Verwenden Sie die Anfrage-URL mit Ihrer WebSocket Bibliothek, an die Sie die Anfrage richten möchten 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 Wertzeichenfolge (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 Wertzeichenfolge (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 eine JSON-Struktur, die die Transkriptionsergebnisse enthält.

Umgang mit WebSocket Streaming-Fehlern

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 Wertzeichenfolge (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 Handshake 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 Zugriffs- oder Geheimschlü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-Integer-CRC-Prüfsumme (Cyclic Redundancy Check). Die CRC-Prüfsumme der Nachricht gilt sowohl für den Prelude-Abschnitt als auch für den Datenbereich. Amazon Transcribe verwendet CRC32 (oft als GZIP bezeichnet CRC32), um beide zu berechnen. CRCs Weitere Informationen CRC32 dazu finden Sie in der GZIP-Dateiformatspezifikation 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.

  • Einleitungs-CRC: die 4-Byte-CRC-Prüfsumme des Einleitungsteils der Nachricht, mit Ausnahme der CRC selbst. Das Prelude hat einen von der Nachricht getrennten 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, die Schlüssel:Wert-Paare sind, wobei der Schlüssel eine UTF-8-Zeichenfolge ist. Header können in beliebiger Reihenfolge im „Header“-Teil der Nachricht erscheinen, und jeder Header darf nur einmal vorkommen.

  • Nutzlast: die zu transkribierenden Audioinhalte.

  • Nachrichten-CRC: die 4-Byte-CRC-Prüfsumme vom Beginn der Nachricht bis zum Beginn der Prüfsumme. Also alles in der Nachricht bis auf die CRC selbst.

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 – WAHR

    • 1 – FALSCH

    • 2 – BYTE

    • 3 – KURZ

    • 4 – INTEGER

    • 5 – LANG

    • 6 – BYTE ARRAY

    • 7 – Zeichenfolge

    • 8 – ZEITSTEMPEL

    • 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 Einrichten eines HTTP/2-Streams oder Einen WebSocket Stream einrichten.

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.