3 回答

TA貢獻1799條經驗 獲得超6個贊
我聯系了 AWS 支持,他們現在建議盡可能使用 websockets 而不是 HTTP/2(博客文章在這里)
如果這適合您的用例,我強烈建議您查看新的示例存儲庫: https: //github.com/aws-samples/amazon-transcribe-websocket-static,它顯示了 JS 中基于瀏覽器的解決方案。
我還注意到該演示的作者在他的個人 Github 上有一個明確的例子: https: //github.com/brandonmwest/amazon-transcribe-websocket-express但我還沒有確認這是否有效。
感謝這些示例不是在 Python 中,但我認為使用 Websocket 客戶端而不是 HTTP/2 會更好(老實說,它仍然有點可怕:P)

TA貢獻1887條經驗 獲得超5個贊
嘗試不設置內容類型標頭,看看您得到什么響應。我正在嘗試做同樣的事情(但在 Ruby 中)并且“修復”了SerializationException
. 仍然無法讓它工作,但我現在有一個新的錯誤需要考慮:)
更新:我現在已經開始工作了。我的問題是簽名。如果同時傳遞了標頭host
和標頭,則在檢查簽名時,它們將與服務器端連接并被視為在服務器端,因此簽名永遠不會匹配。這在 AWS 方面似乎不是正確的行為,但在 Go 中它看起來不會成為您的問題。authority
,
host

TA貢獻1942條經驗 獲得超3個贊
我也在與 Node.js 作斗爭。文檔不清楚的是,在一個地方它說不應該Content-Type
是application/json
,但在其他地方,它使有效負載看起來應該編碼為application/vnd.amazon.eventstream
.?看起來有效負載應該仔細格式化為二進制格式而不是 JSON 對象,如下所示:
Amazon Transcribe 使用一種稱為事件流編碼的格式進行流式轉錄。這種格式使用描述每個事件內容的標頭信息對二進制數據進行編碼。您可以將此信息用于在不使用 Amazon Transcribe SDK 的情況下調用 Amazon Transcribe 終端節點的應用程序。Amazon Transcribe 使用 HTTP/2 協議進行流式轉錄。流式請求的關鍵組件是:
標題框架。這包含請求的 HTTP 標頭,以及授權標頭中的簽名,Amazon Transcribe 將其用作種子簽名來簽署以下數據幀。
事件流編碼中的一個或消息幀。該幀包含元數據和原始音頻字節。
結束幀。這是一個帶有空主體的事件流編碼中的簽名消息。

TA貢獻1963條經驗 獲得超6個贊
我對在節點 js 中將 AWS 轉錄服務與他們的 WebSocket API 一起使用有類似的要求。鑒于目前官方包中還沒有對此提供支持,我已經繼續編寫了一個名為 AWS-transcribe 的包,可以在此處找到。我希望這有幫助。
它提供了一個圍繞 WebSocket 的流接口,可以像下面的例子一樣使用
import { AwsTranscribe, StreamingClient } from "aws-transcribe"
const client = new AwsTranscribe({
// if these aren't provided, they will be taken from the environment
accessKeyId: "ACCESS KEY HERE",
secretAccessKey: "SECRET KEY HERE",
})
const transcribeStream = client
.createStreamingClient({
region: "eu-west-1",
sampleRate,
languageCode: "en-US",
})
// enums for returning the event names which the stream will emit
.on(StreamingClient.EVENTS.OPEN, () => console.log(`transcribe connection opened`))
.on(StreamingClient.EVENTS.ERROR, console.error)
.on(StreamingClient.EVENTS.CLOSE, () => console.log(`transcribe connection closed`))
.on(StreamingClient.EVENTS.DATA, (data) => {
const results = data.Transcript.Results
if (!results || results.length === 0) {
return
}
const result = results[0]
const final = !result.IsPartial
const prefix = final ? "recognized" : "recognizing"
const text = result.Alternatives[0].Transcript
console.log(`${prefix} text: ${text}`)
})
someStream.pipe(transcribeStream)
- 3 回答
- 0 關注
- 279 瀏覽
添加回答
舉報