阿里SR Gateway:IDLE_TIMEOUT:Websocket session is idle for too long time

阿里SR在10秒内无数据流输入,SR会自动断开

sdk本身在请求建立链接后,长时间没有发送任何数据,超过10s后,服务端会返回40000004错误信息。

Gateway:IDLE_TIMEOUT:Websocket session is idle for too long time

解决办法:
发送一个空的无噪数据流:

waveInEvent.WaveFormat = new WaveFormat(16000, 16, 1)

sampleRate:采样率,表示每秒钟采集的样本数。
bitsPerSample:每个样本的位数,表示每个样本占用的位数。
channels:声道数,表示音频的声道数,可以是单声道(1)或立体声(2)。

一毫秒采了多少字节

采样率是指每秒钟采集的样本数,通常用赫兹(Hz)来表示。如果采样率为 16000 Hz,那么每秒钟会采集 16000 个样本。每个样本的位数是 16 位,也就是 2 个字节。因此,每秒钟采集的数据量为 16000 * 2 = 32000 字节。如果要计算每毫秒采集的数据量,可以将每秒钟采集的数据量除以 1000,即 32000 / 1000 = 32 字节。因此,每毫秒采集的数据量为 32 字节。

所以

private static readonly byte[] _silenceByteData = new byte[] {
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        };
private readonly ArraySegment _silenceSegments = new ArraySegment(_silenceByteData, 0, 32);

在发送数据的地方设置一个时间t1, 每次发送时间都更新该值
起一个任务,如果当前时间t2

当 t2 - t1 > 5秒,向接口发送一个1毫秒不会产生噪音的_silenceSegments 数据流

你可能感兴趣的:(gateway,websocket,网络协议)