go - 发送带有标题文本的二进制数据

标签 go websocket gorilla

我正在使用 Microsoft Bing 语音服务在 Golang 和 Gorilla WebSocket 中提供将语音转换为文本的服务。 供引用

https://learn.microsoft.com/en-us/azure/cognitive-services/speech/api-reference-rest/websocketprotocol

javascript 实现

https://github.com/Azure-Samples/SpeechToText-WebSockets-Javascript

这里我们需要发送文本数据以及带有标题的音频数据。 我能够发送文本数据,但无法发送带标题的音频二进制数据。

请建议我如何发送数据

谢谢 迪内什·古普塔

最佳答案

经过大量谷歌搜索后,我提出了以下解决方案,无论是好是坏。 请提供我可以改进的地方。

我为 header 创建了 2 个字节,然后是 header 字符串的长度,最后是缓冲数据的长度。代码如下:

import(
   "encoding/binary"
   "fmt"
   "time"
   "strings"
   "encoding/json"
)
func BufferToBytes(buffer *[]byte, requestId string) *[]byte{
   headersString := GetHeaders("audio", requestId, "audio/x-wav")
   headersString = strings.Replace(headersString, "\n", "\r\n", -1)
   headerInt8Array := []byte(headersString)
   payload := make([]byte,2)
   binary.BigEndian.PutUint16(payload, uint16(len(headerInt8Array)))//till 1st part
   t := make([]byte, len(headerInt8Array))
   for i := 0; i < len(headerInt8Array); i++ {
    t[i] = headerInt8Array[i];
   }
   payload = append(payload, t...)//till 2nd part
   payload = append(payload, *buffer...)//final part
   return &payload;
}

func GetHeaders(params... string) string{
    header := fmt.Sprintf("path: %s\n", params[0])
    header += fmt.Sprintf("x-requestid: %s\n",params[1])//request id
    header += fmt.Sprintf("x-timestamp: %s\n",GetTimestamp())// timestamp
    header += fmt.Sprintf("content-type: %s\n",params[2])////content type
    return header
}

func GetTimestamp() string {
   format := "2006-01-02T15:04:05.000Z"
   return time.Now().UTC().Format(format)
}

然后此数据被 MS bing 接受。

谢谢

关于go - 发送带有标题文本的二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51090206/

相关文章:

rest - 用 gorms 和 many2many 创造

go - 如何返回一个空的 io.Reader?

go - 模拟 Go Echo 上下文

websocket - 为什么我需要使用 daphne 进行反向代理?

file - Gorilla Golang Pathprefix 不提供文件

go - 在Golang中使用上下文超时停止运行功能

java - Play框架用java中的actor处理websocket

php - 如何访问 Ratchet php 周期性循环和客户端在应用程序内发送?

go - 使用 gob 在 Go 中编码 websockets

go - 如何使用 Gorilla Mux 在 GET 请求中进行可选查询?