通过 HTTP/2 使用 Amazon Transcribe 医疗直播 - Amazon Transcribe
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过 HTTP/2 使用 Amazon Transcribe 医疗直播

Amazon Transcribe 医疗使用名为事件流编码用于流媒体转录。此格式对二进制数据进行编码,其中包含用于描述每个事件的内容的标头信息。有关更多信息,请参阅事件流编码。您可以将此信息用于调用 Amazon Transcribe Medical 终端节点的应用程序,而不必使用 Amazon Transcribe Medical 开发工具包。

当 Amazon Transcribe Medical 使用HTTP/2 协议对于流式处理医疗转录,流式处理医疗请求的关键组件包括:

  • 标头帧。这包含请求的 HTTP/2 标头和authorization标头,Amazon Transcribe Medical 将使用该标头作为种子签名来签署以下数据帧。

  • 事件流编码中的一个或多个消息帧。这些帧包含元数据和原始音频字节。

  • 结束帧。这是事件流编码中正文为空的已签名消息。

流请求

要发出流式处理请求,请使用StartMedicalStreamTranscriptionAPI。

标头帧

标题帧是直播转录的授权帧。Amazon Transcribe 医疗使用authorization标头作为种子,这样可以为请求中的数据帧生成授权标头链。

必需的标头

向 Amazon Transcribe Medical 发送的请求的标头帧需要以下 HTTP/2 标头。

POST /stream-transcription HTTP/2.0 host: transcribestreaming.region.amazonaws.com authorization: Generated value content-type: application/vnd.amazon.eventstream x-amz-target: com.amazonaws.transcribe.Transcribe.StartStreamTranscription x-amz-content-sha256: streaming-med-AWS4-HMAC-SHA256-EVENTS x-amz-date: Date x-amzn-transcribe-language-code: en-US x-amzn-transcribe-media-encoding: media encoding x-amzn-transcribe-sample-rate: Sample rate transfer-encoding: chunked

在请求中,对 hostauthorizationx-amz-date 标头使用以下值:

有关特定于 Amazon Transcribe Medical 的标头的更多信息,请参阅StartMedicalStreamTranscriptionAPI。

数据帧

每个请求都包含一个或多个数据帧。数据帧使用事件流编码。编码支持客户端和服务器之间的双向数据传输。

创建数据帧有两个步骤:

  1. 将原始音频数据与元数据组合以创建请求负载。

  2. 将负载与签名组合以构成将发送到 Amazon Transcribe Medical 的事件消息。

下图显示了如何执行此操作。作品。

创建音频事件

要创建发送到 Amazon Transcribe Medical 的消息,请创建音频事件。将下表中描述的标头与音频字节区块一起组合到事件编码的消息。

要创建事件消息负载,请按照原始字节格式使用缓冲区。

创建消息

使用发送到 Amazon Transcribe Medical 的音频事件负载创建数据帧。数据帧包含事件编码标头,这些标头包含音频区块和音频事件的当前日期和签名。要向 Amazon Transcribe Medical 指示音频流已完成,请发送仅包含日期的空数据帧。和签名。

要为数据帧创建签名,请先创建待签字符串,然后计算事件的签名。按照如下方式构造待签字符串。

String stringToSign = "AWS4-HMAC-SHA256-PAYLOAD" + "\n" + DATE + "\n" + KEYPATH + "\n" + Hex(priorSignature) + "\n" + HexHash(nonSignatureHeaders) + "\n" + HexHash(payload);
  • DATE:采用协调世界时 (UTC) 和 ISO 8601 格式的当前日期和时间。请勿在日期中包含毫秒。例如,20190127T223754Z 为 2019 年 1 月 27 日的 22:37:54。

  • KEYPATH:采用 date/region/service/aws4_request 格式的签名范围。例如 20190127/us-east-1/transcribe/aws4_request

  • priorSignature:上一帧的签名。对于第一个数据帧,请使用标头帧的签名。

  • nonSignatureHeaders:编码为字符串的 DATE 标头。

  • payload:包含音频事件数据的字节缓冲区。

  • Hex:一个将其输入编码为十六进制表示形式的函数。

  • HexHash:一个函数,该函数首先为其输入创建一个 SHA-256 哈希,然后使用 Hex 函数将此哈希编码。

在构造待签字符串后,使用您为签名版本 4 派生的密钥为其签名,如下所示。有关详细信息,请参阅。说明如何为 Signature 版本 4 派生签名密钥的示例中的Amazon Web Services 常规参考.

String signature = HMACSHA256(derivedSigningKey, stringToSign);
  • HMACSHA256:一个使用 SHA-256 哈希函数创建签名的函数。

  • derivedSigningKey:签名版本 4 签名密钥。

  • stringToSign:您为数据帧计算得到的字符串。

在计算数据帧的签名后,构造一个包含日期、签名和音频事件负载的字节缓冲区。将字节数组发送到 Amazon Transcribe Medical 以进行转录。

End frame (结束帧)

要指示音频流已完成,请向 Amazon Transcribe Medical 发送终端帧。结束帧 是负载为空的数据帧。构造结束帧的方式与构造数据帧的方式相同。

流响应

还将使用事件流编码发送来自 Amazon Transcribe Medical 的响应。使用此信息对来自的响应进行解码。StartMedicalStreamTranscriptionAPI。

转录响应

转录响应是经过事件流编码的。它包含标准前导信息以及以下标头。

有关详细信息,请参阅 事件流编码

响应经过解码后,将包含以下信息:

:content-type: "application/json" :event-type: "TranscriptEvent" :message-type: "event" JSON transcription information

有关 Amazon Transcribe Medical 返回的 JSON 结构的示例,请参阅。通过 HTTP/2 使用 Amazon Transcribe 医疗直播.

异常响应

如果处理转录流时出错,则 Amazon Transcribe Medical 会发送异常响应。响应是经过事件流编码的。有关详细信息,请参阅 事件流编码

此响应包含标准前导信息和关注标题.

异常响应解码后将包含以下信息。

:content-type: "application/json" :event-type: "BadRequestException" :message-type: "exception" Exception message

示例请求和响应

下面是一个端到端的流式转录请求示例。在此示例中,二进制数据表示为 base64 编码的字符串。在实际响应中,数据为原始字节。

第 1 步:使用 Amazon Transcribe 医疗开始会话

要启动会话,请向 Amazon Transcribe Medical 发送 HTTP/2 请求。

POST /stream-transcription HTTP/2.0 host: transcribestreaming.region.amazonaws.com authorization: Generated value content-type: application/vnd.amazon.eventstream x-amz-content-sha256: streaming-med-AWS4-HMAC-SHA256-EVENTS x-amz-date: Date x-amzn-transcribe-language-code: en-US x-amzn-transcribe-media-encoding: Media encoding x-amzn-transcribe-sample-rate: Sample rate transfer-encoding: chunked

第 2 步:向 Amazon Transcribe Medical 发送身份验证

Amazon Transcribe Medical 会发送以下响应。

HTTP/2.0 200 x-amzn-transcribe-language-code: en-US x-amzn-transcribe-sample-rate: Sample rate x-amzn-request-id: 8a08df7d-5998-48bf-a303-484355b4ab4e x-amzn-transcribe-session-id: b4526fcf-5eee-4361-8192-d1cb9e9d6887 x-amzn-transcribe-media-encoding: pcm x-amzn-RequestId: 8a08df7d-5998-48bf-a303-484355b4ab4e content-type: application/vnd.amazon.eventstream

第 3 步:创建音频事件

创建一个音频事件,其中包含要发送的音频数据。有关详细信息,请参阅 事件流编码。此请求中的二进制数据是经过 base64 编码的。在实际请求中,数据为原始字节。

:content-type: "application/octet-stream" :event-type: "AudioEvent" :message-type: "event" UklGRjzxPQBXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YVTwPQAAAAAAAAAAAAAAAAD//wIA/f8EAA==

第 4 步:创建音频事件消息

创建一个音频消息,其中包含发送到 Amazon Transcribe Medical 的音频数据。有关详细信息,请参阅 事件流编码。此示例中的音频事件数据是经过 base64 编码的。在实际请求中,数据为原始字节。

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

第 5 步:使用 Amazon Transcribe 医疗的回复

Amazon Transcribe Medical 会创建发送到您的应用程序的转录事件流。这些事件采用原始字节格式发送。在此示例中,字节是经过 base64 编码的。

Amazon Transcribe Medical 会发送以下响应。

AAAAUwAAAEP1RHpYBTpkYXRlCAAAAWiXUkMLEDpjaHVuay1zaWduYXR1cmUGACCt6Zy+uymwEK2SrLp/zVBI 5eGn83jdBwCaRUBJA+eaDafqjqI=

要查看转录结果,请使用事件流编码对原始字节进行解码。

:event-type: "TranscriptEvent" :content-type: "application/json" :message-type: "event" {"Transcript":{"Results":[results]}}

有关 Amazon Transcribe Medical 返回的 JSON 结构的示例,请参阅。事件流编码.

第 6 步:结束转录流

最后,向 Amazon Transcribe Medical 发送空音频事件以结束转录流。完全像创建任何其他音频事件一样,创建负载为空的音频事件。在事件中签名并将此签名包括在:chunk-signature标题,如下所示。

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