语音流直接对接Realtime API(端对端音频大模型)
直接把音频流输出给大模型,大模型返回音频流。
顶顶通提供了以下2个APP可对接任意音频输入输出(比如RTC)的语音大模型
cti_audio_stream 通过TCP推流和播放流,适合用于人机对话场景。
cti_unicast_start 通过旁路的方式UDP或者TCP推流和播放流,对接Realtime API 的同时还支持对通道进行放音操作。 适合于质检,机器人辅助场景。
通过TCP推流和播放流,适合用于人机对话场景
app: cti_audio_stream
参数 remote-ip:remote-port <native> <param>
- native 可选参数 如果不设置,流格式为 8000hz 16位,如果设置了,就是原始的音频格式, 如要要转换声音频率可以设置为 sendrate&recvrate,比如 16000&16000
- param 自定义参数
推流协议
- 前面4字节 引导数据长度 网络字节顺序
- 时间戳 8字节
- 引导数据
{"uuid":"","codec":"","rate":8000,"param":"自定义参数"} - 数据流
连接断开后会自动重连,并且重发引导数据。
返回的放音流需要和推流的编码一样,不需要引导数据。
缓存问题:
实现方式是每20ms,从tcp读取320字节(8000hz频率时),也就是每20ms从tcp读取20ms的声音。tcp默认接收缓冲区是操作系统设置的,监听端口时可以设置的,具体可用关键词SO_SNDBUF搜索。 建议设置为 1280 或者 5120 1280 /320*20也就是在8000hz时tcp会缓存80ms-400ms的声音。如果是阻塞模式超过部分调用tcp的send是会卡住的。比如大模型一次性返回了16K的声音数据,可以一次性发送20ms的,8000hz时也就是320字节。循环发送,如果要打断,只需要把未发送的声音丢去就可以。已经进入 tcp缓存区的声音还是会给播放了,可以通过修改tcp缓冲区,比如把接收缓冲区改成 1280 大小,这样tcp缓冲区的声音只有120毫秒。
旁路的方式UDP或者TCP推流和播放流,适合于质检,机器人辅助场景
app: cti_unicast_start 启动推流
参数 tcp|udp remote-ip remote-port <local-ip> <local-port> <play|mix> <sendrate> <recvrate> <param>
- tcp|udp 使用tcp还是udp协议推流
- remote-ip 远端 ip
- remote-port 远端端口,
- local-ip 本地IP,不设置用0.0.0.0
- local-port 本地端口,不设置用0,随机端口
- play|mix
- play 支持播放远端返回的流,发送方必须是远端IP和远端端口
- mix 把远端的流和本地放音混音
- sendrate 发送声音频率,0或空字符串 使用通话编码采样率
- recvrate 接收声音频率,0或空字符串 使用通话编码采样率
- param tcp传输时候的引导数据,具体请看cti_audio_stream说明,udp不使用这个参数
api: uuid_cti_unicast_start 启动推流
参数 uuid tcp|udp remote-ip remote-port <local-ip> <remote-ip> <play|mix> <sendrate> <recvrate> <param>
api: uuid_cti_unicast_stop 停止推流
参数 uuid