You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在wit.ai中流式传输分片音频做语音识别?排查400错误

哥们,我帮你捋捋wit.ai流式转写时遇到的400错误问题,结合官方API的要求,你可以从这几个方面逐一排查:

排查wit.ai分片流式传输400错误的核心方向

一、先把音频格式的基础问题搞定

wit.ai对音频格式的要求特别严格,哪怕你转成了WAV,也得卡准参数:

  • 必须是16kHz采样率、单声道、16位PCM编码:这三个是硬要求,少一个都可能触发400。你可以用ffmpeg批量转换合规格式:
    ffmpeg -i 你的原WAV文件.wav -ar 16000 -ac 1 -sample_fmt s16 合规WAV文件.wav
    
  • 分片时长要卡准:单段音频不能超10秒,但也别太短(比如至少500毫秒),建议控制在5-9秒之间,避免触发API的边界校验错误。

二、HTTP请求头和传输逻辑别踩坑

你提到的Transfer-encoding是关键,这里有几个容易错的点:

  • 必须设置Transfer-Encoding: chunked,同时绝对不能加Content-Length头,这俩同时存在会直接导致400错误。
  • 确认Authorization头格式:Bearer {你的wit_access_token},检查token有没有过期、有没有开通Speech API的权限(别用错了其他服务的token)。
  • 分块传输要严格遵循HTTP规则:每块数据前要先发送十六进制的块长度,再发数据;最后要用0\r\n\r\n标记传输结束,不能直接断开连接。

三、代码逻辑的细节要抠

如果格式和请求头都没问题,那大概率是流式传输的代码逻辑有问题:

  • 先测单块请求:单独拿一片合规的5秒音频,用普通POST请求发送给API,看能不能正常返回结果。如果单块都报错,那问题出在音频或基础请求配置;如果单块正常,再排查流式传输的逻辑。
  • 别截断音频帧:分片时别单纯按字节数切割,要按音频帧的大小来分,不然切割到帧中间会导致音频损坏,API识别不了就返回400。
  • 不要提前断连接:所有分片数据发送完,再发送结束标记,中途断开连接会让API认为请求不完整,直接返回错误。

四、额外的API限制要留意

  • 检查速率限制:短时间内发太多分片可能触发限制,虽然通常是429错误,但极端情况下也可能表现为400,可以放慢传输速度试试。
  • 看响应体的错误详情:很多400错误会返回具体描述,比如invalid audio format或者chunk size too large,别只看状态码,把响应内容打出来看看,能直接定位问题。

给你贴个Python的核心逻辑参考(主要是流式传输的部分):

import requests
import os

wit_token = "你的wit_access_token"
audio_path = "合规的16kHz单声道WAV文件"
# 按字节分片,大概对应5-9秒音频(根据16kHz单声道16位PCM的码率计算)
chunk_size = 16000 * 2 * 7  

headers = {
    "Authorization": f"Bearer {wit_token}",
    "Content-Type": "audio/wav",
    "Transfer-Encoding": "chunked"
}

with open(audio_path, "rb") as f:
    with requests.post("https://api.wit.ai/speech", headers=headers, stream=True) as resp:
        while True:
            chunk = f.read(chunk_size)
            if not chunk:
                break
            # 发送分块数据
            resp.raw.write(f"{len(chunk):x}\r\n".encode() + chunk + b"\r\n")
            resp.raw.flush()
        # 发送结束标记
        resp.raw.write(b"0\r\n\r\n")
        resp.raw.flush()
        
        print("状态码:", resp.status_code)
        print("响应内容:", resp.json())

内容的提问来源于stack exchange,提问作者Surjya Narayana Padhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:32:10