阿里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<byte> _silenceSegments = new ArraySegment<byte>(_silenceByteData, 0, 32);

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值