Watson Speech to Text原始音频通过WebSocket识别失败但HTTP接口正常
问题修复方案
报错unable to transcode data stream application/octet-stream -> audio/l16的本质是Watson服务端未接收到你声明的音频格式,默认把传入的音频识别为无格式二进制流,无法完成转码。可按以下步骤排查修复:
- 修复SDK参数传递bug:IBM Go SDK v2的
NewRecognizeUsingWebsocketOptions构造函数传入的content-type参数存在不生效的已知问题,HTTP接口会把格式放在请求头中正常识别,而WebSocket接口需要将格式声明放在初始JSON控制消息中,旧版本SDK不会把构造函数的content-type写入该消息,需要在构造配置项后显式调用SetContentType重新赋值:
recognizeUsingWebsocketOptions := service. NewRecognizeUsingWebsocketOptions(audio, "audio/mulaw;rate=8000;channels=1") // 新增此行强制设置音频格式 recognizeUsingWebsocketOptions.SetContentType("audio/mulaw;rate=8000;channels=1") recognizeUsingWebsocketOptions. SetModel("en-US_NarrowbandModel"). SetWordConfidence(true). SetSpeakerLabels(true). SetTimestamps(true)
- 重置音频文件指针:确认传递给接口的音频文件指针处于文件起始位置,避免读取到空内容:
import "io" // 需提前导入io包 audio, audioErr := os.Open("/opt/audioRaw.raw") if audioErr != nil { panic(audioErr) } // 新增重置指针逻辑 _, seekErr := audio.Seek(0, io.SeekStart) if seekErr != nil { panic(seekErr) }
- 升级依赖版本:更新相关SDK到最新版,规避旧版本的参数序列化bug:
go get -u github.com/IBM/go-sdk-core/v5@latest go get -u github.com/watson-developer-cloud/go-sdk/v2@latest
- 简化参数测试:如果修改后仍报错,可以先注释掉
SetSpeakerLabels、SetWordConfidence等额外配置,仅保留格式和模型参数测试基础转码功能,排除参数冲突问题。
内容的提问来源于stack exchange,提问作者ryan embgrets
相关产品推荐
相关产品推荐

