事情本身不复杂,线索都在日志里。用讯飞开放平台的长语音转写,按文档把整段 20 分钟录音一次性 base64 提交,回调一直不来,控制台查到任务状态是 failed,错误码 10105,提示音频时长或大小超限。

第一反应是「回调地址要求公网可访问,内网地址收不到结果」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。单次提交的音频时长与体积都有硬上限。另一种情况是采样率不是 16k,服务端按错误参数解析。

还有一种情况,base64 后体积膨胀三分之一,超出请求体限制。

第一件事是把音频转成 16k 单声道 wav

ffmpeg -y -i long.mp3 -ar 16000 -ac 1 long.wav

随后按 5 分钟切片后逐片提交

ffmpeg -i long.wav -f segment -segment_time 300 -c copy seg_%02d.wav

然后用 curl 提交单片并打印业务码

curl -X POST "https://raasr.xfyun.cn/v2/api/upload" -F file=@seg_00.wav -F app_id=$APPID

等前面都确认过,再按偏移量合并分片结果

python -c "print([i*300 for i in range(4)])"

改完先别撤,确认这几项。每片都返回业务码 000000,合并后全文与录音内容一致,时间轴按 300 秒偏移对齐无空缺。

容易忽略的是,回调不通时不要反复重提,先确认公网地址和签名时间戳,重复提交只会把配额耗完。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189