你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

排查语音 SDK 问题

本文提供的信息可帮助你解决在使用语音 SDK 时可能遇到的问题。

错误:WebSocket 升级失败,出现身份验证错误 (403)

你的区域或服务可能有错误的终结点。 请检查 URI 以确保它正确无误。

此外,你的语音资源密钥或授权令牌可能存在问题。 有关更多信息,请参见下一节。

错误:HTTP 403 禁止访问或 HTTP 401 未授权

此错误通常是由身份验证问题导致的。 没有有效 Ocp-Apim-Subscription-KeyAuthorization 标头的连接请求将被拒绝,状态为 403 或 401。

  • 如果在使用资源密钥进行身份验证,则可能看到该错误的原因是:

    • 密钥丢失或无效
    • 你已超出资源的使用配额
  • 如果在使用授权令牌进行身份验证,则可能看到该错误的原因是:

    • 授权令牌无效
    • 授权令牌已过期

验证你的资源密钥

可以通过运行以下命令之一来验证你拥有有效的资源密钥。

注意

YOUR_RESOURCE_KEYYOUR_REGION 替换为你自己的资源密钥和关联区域。

  • PowerShell

    $FetchTokenHeader = @{
      'Content-type'='application/x-www-form-urlencoded'
      'Content-Length'= '0'
      'Ocp-Apim-Subscription-Key' = 'YOUR_RESOURCE_KEY'
    }
    $OAuthToken = Invoke-RestMethod -Method POST -Uri https://YOUR_REGION.api.cognitive.microsoft.com/sts/v1.0/issueToken -Headers $FetchTokenHeader
    $OAuthToken
    
  • cURL

    curl -v -X POST "https://YOUR_REGION.api.cognitive.microsoft.com/sts/v1.0/issueToken" -H "Ocp-Apim-Subscription-Key: YOUR_RESOURCE_KEY" -H "Content-type: application/x-www-form-urlencoded" -H "Content-Length: 0"
    

如果输入了有效的资源密钥,则该命令将返回授权令牌,否则将返回错误。

验证授权令牌

如果使用授权令牌进行身份验证,请运行以下命令之一以验证授权令牌是否仍然有效。 令牌的有效期为 10 分钟。

注意

YOUR_AUDIO_FILE 替换为预先录制的音频文件的路径。 将 YOUR_ACCESS_TOKEN 替换为上一步中返回的授权令牌。 将 YOUR_REGION 替换为正确的区域。

  • PowerShell

    $SpeechServiceURI =
    'https://YOUR_REGION.stt.speech.microsoft.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US'
    
    # $OAuthToken is the authorization token returned by the token service.
    $RecoRequestHeader = @{
      'Authorization' = 'Bearer '+ $OAuthToken
      'Transfer-Encoding' = 'chunked'
      'Content-type' = 'audio/wav; codec=audio/pcm; samplerate=16000'
    }
    
    # Read audio into byte array.
    $audioBytes = [System.IO.File]::ReadAllBytes("YOUR_AUDIO_FILE")
    
    $RecoResponse = Invoke-RestMethod -Method POST -Uri $SpeechServiceURI -Headers $RecoRequestHeader -Body $audioBytes
    
    # Show the result.
    $RecoResponse
    
  • cURL

    curl -v -X POST "https://YOUR_REGION.stt.speech.microsoft.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US" -H "Authorization: Bearer YOUR_ACCESS_TOKEN" -H "Transfer-Encoding: chunked" -H "Content-type: audio/wav; codec=audio/pcm; samplerate=16000" --data-binary @YOUR_AUDIO_FILE
    

如果输入了有效的授权令牌,则该命令将返回音频文件的听录,否则将返回错误。


错误:HTTP 400 错误请求

当请求正文包含无效的音频数据时,通常会发生此错误。 仅支持 WAV 格式。 此外,请检查请求的标头,以确保为 Content-TypeContent-Length 指定适当的值。

错误:HTTP 408 请求超时

出现该错误很可能是因为未将音频数据发送到服务。 此错误也可能是由网络问题所致。

响应中的“RecognitionStatus”是“InitialSilenceTimeout”

此问题通常是由音频数据引起的。 出现此错误的可能原因有:

  • 音频开头有一段很长的静音。 在这种情况下,该服务将在几秒钟后停止识别并返回 InitialSilenceTimeout

  • 音频使用了不受支持的编解码器格式,这导致音频数据被视为静音。

连接关闭或超时

Windows 11 上存在一个已知问题,该问题可能会影响某些类型的安全套接字层 (SSL) 和传输层安全性 (TLS) 连接。 这些连接可能会出现握手失败。 对于开发人员,受影响的连接可能会在单个输入缓冲区中发送多个帧,然后发送大小小于 5 个字节的部分帧。 如果连接失败,你的应用将收到“USP 错误”、“连接关闭”、“服务超时”或“SEC_E_ILLEGAL_MESSAGE”等错误。

有一个适用于 Windows 11 的带外更新可以解决这些问题。 可以按照以下说明手动安装此更新:

该问题始于 2022 年 10 月 12 日,应于 2022 年 11 月通过 Windows Update 解决。

后续步骤