3 回答

TA貢獻1799條經(jīng)驗 獲得超6個贊
我聯(lián)系了 AWS 支持,他們現(xiàn)在建議盡可能使用 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條經(jīng)驗 獲得超5個贊
嘗試不設(shè)置內(nèi)容類型標頭,看看您得到什么響應(yīng)。我正在嘗試做同樣的事情(但在 Ruby 中)并且“修復(fù)”了SerializationException
. 仍然無法讓它工作,但我現(xiàn)在有一個新的錯誤需要考慮:)
更新:我現(xiàn)在已經(jīng)開始工作了。我的問題是簽名。如果同時傳遞了標頭host
和標頭,則在檢查簽名時,它們將與服務(wù)器端連接并被視為在服務(wù)器端,因此簽名永遠不會匹配。這在 AWS 方面似乎不是正確的行為,但在 Go 中它看起來不會成為您的問題。authority
,
host

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

TA貢獻1963條經(jīng)驗 獲得超6個贊
我對在節(jié)點 js 中將 AWS 轉(zhuǎn)錄服務(wù)與他們的 WebSocket API 一起使用有類似的要求。鑒于目前官方包中還沒有對此提供支持,我已經(jīng)繼續(xù)編寫了一個名為 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 關(guān)注
- 299 瀏覽
添加回答
舉報