Google Speech-To-Text流式识别返回无效JSON及音频超时问题求助
C#中Google流式语音识别对接Twilio通话时的JSON解析异常问题
我在C#中使用Google Speech Recognition的流式/实时识别功能(非预录制音频文件),流式音频来自Twilio电话通话。90%的情况下功能运行正常,但偶尔会出现Google返回的Payload无法解析JSON的错误。
错误1:不完整的JSON Payload
捕获到的错误JSON内容如下:
{"event":"media","sequenceNumber":"12","media":{"track":"inbound","chunk":"11","timestamp":"309", "payload":"//////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////
该JSON未正确终止,payload值仅为大量斜杠。
错误2:Google WebSocket超时异常
大约10秒后,在Google WebSocket的“start”事件期间会触发另一个异常:
Grpc.Core.RpcException: Status(StatusCode="OutOfRange", Detail="Audio Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time."
实际电话通话中并无明显间隙,且每个Google语音识别WebSocket会话仅持续数秒(Twilio发起请求、建立WebSocket连接、Google监听用户的“YES”或“NO”并转录,重复该流程若干次)。
相关C#代码片段
private async Task ProcessAudioStream_English(AspNetWebSocketContext context) { string jsonData = ""; //NEW - for debugging/exception catching try { WebSocket webSocket = context.WebSocket; string streamSid = null; var buffer = new byte[1024 * 4]; var receiveResult = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); var _speechRecognitionService = new GoogleSpeechRecognition(); string lang = "en-US"; Debug.WriteLine($"Language: {lang}"); while (!receiveResult.CloseStatus.HasValue) { jsonData = Encoding.UTF8.GetString(buffer, 0, receiveResult.Count); var jsonDocument = JsonDocument.Parse(jsonData); //<--sometime has invalid JSON
我最初怀疑缓冲区大小(1024*4)过小,但上述出错的JSON长度仅为265,显然并非此原因。请问为何Google Speech Recognition(流式)偶尔会返回此类包含大量斜杠的不完整JSON?
内容的提问来源于stack exchange,提问作者Ted Krapf
相关产品推荐
相关产品推荐

