Track microphone levels, short reads and PCM buffer drops. Report audio queue admission separately from TLS writes, expose server replies and ACKs before filtering, and capture per-round counters before timeouts. Add diagnostic regression coverage and support POSIX hosts in WSS tests.
4.3 KiB
对话无回复诊断日志
设备端新增四类日志,按 round、session、单调运行时间关联。诊断不调整对话协议、VAD 阈值或回复等待时限。
| 标记 | 内容 | 可以缩小的范围 |
|---|---|---|
MIC-DIAG |
录音打开结果及句柄、读取返回值/字节数、全零帧、峰值/平均绝对幅值、录音事件、PCM 缓冲写入丢失 | 区分未取得 PCM、全零输入、已有音频但没有通过 VAD、音频交给编码器前丢失 |
VOICE-TX |
认证消息入队结果;START/END 的序号、类型、字节数、返回值和入队耗时;音频入队失败 | 区分请求未入队、内存分配失败、正常提交发送队列 |
WSS-IO |
实际 TLS 写入结果、累计写入次数和字节;TLS 错误码、部分写入进度和重试;实际接收字节;关闭时的累计收发及未消费接收字节 | 区分入队后未完成写入、对端关闭、收到字节但应用层未获得完整消息 |
VOICE-RX |
接收文本长度、前 192 字节、当前会话、是否通过会话准入检查;二进制消息计数 | 显示 START_ACK/END_ACK、未知回复、被准入检查丢弃的消息。二进制消息仍沿用原有忽略行为 |
VOICE-DIAG |
START/END 入队后的摘要、超时断开前和断开回调时的摘要 | 汇总入队成功/失败数、音频载荷字节、文本/二进制消息数、ACK 次数、末次收包距今时长和回复等待时长 |
拾音统计按一次录音累计,每秒及停止时输出。peak/mean_abs 是 16 位有符号 PCM 的绝对幅值,不是分贝;zero 统计有效读取长度内全部为零的帧。short 包括零长度以及所有非 640 字节的读取。PCM 写入不足或失败计入 ring_drops,同时记录丢失字节数。录音 tick 回调不打印,其他重复事件限频。
VOICE-TX ret=0 只代表入队成功。queue_bytes 只计成功入队的音频载荷,不含自定义包头、WebSocket 帧头、认证和控制消息。WSS-IO tx_bytes 是传给传输层并成功返回的明文字节数,含握手/帧头,不能与 queue_bytes 直接比较;TLS 失败时已写出的部分字节由 tls_write_failed/tls_write_timeout 的 sent 单独报告。正常写入首条和每 50 次打印一次,实际接收前 20 次及每 50 次打印,断开时输出累计值。tick/elapsed_ticks 使用 RTOS tick,其他带 ms 的字段使用单调毫秒。
start_ack/end_ack 按收到的文本子串统计,包含被准入检查拒绝的消息;它们不是对当前 session 的服务端确认保证。应结合 VOICE-RX 原文中的会话标识判断归属。若服务端协议不发送 ACK,ACK 为零本身不代表失败。accepted=1 表示通过外层会话准入检查,后续仍可能因 OTA、打断状态、URL 或 session 校验而未播放。文本仅保留前 192 字节,原有错误消息完整分块日志继续保留。
复现时保留开机到失败后第二次对话结束的完整串口日志。推荐按以下顺序判断:
MIC-DIAG检查读取长度、返回值和电平,结合既有 FVAD 语音确认日志判断拾音与 VAD。VOICE-TX检查 START、音频、END 入队;queue_fail和ring_drops应为零。WSS-IO检查实际写入是否失败,关闭时是否有接收字节和残留未消费数据。VOICE-RX检查 ACK、未知错误文本、被拒绝的回复或二进制数据。timeout-before-disconnect检查wait_ms。wait=2是等待回复,wait=1是无语音,wait=3是 END 入队失败。response表示现有业务逻辑已接收可用音频 URL,不等同于收到任意文本或 TTS_START。
即使 TLS 写入成功,也不能证明服务器应用收到完整录音。若已经看到归属正确的 END_ACK,却没有后续 TTS,优先按 session 查服务端识别和生成链路;若没有 ACK,也需要结合服务端接收记录判断。设备单侧日志不能完全区分服务端未处理、网络中断和回复延迟。
本机验证:python3 tools/test_voice_diag.py、python3 tools/test_conversation_timeout.py、python3 tools/test_wss_io.py、python3 tools/test_wss_receive.py。诊断测试直接编译实际函数并注入录音、缓冲区、队列及收包结果;不替代目标固件构建及设备实测。