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

调用Azure Speech to Text API处理Blob存储中音频文件时遭遇415不支持的媒体类型错误

调用Azure Speech to Text API处理Blob存储中音频文件时遭遇415不支持的媒体类型错误

从你的代码和报错信息来看,415错误的核心原因大概率是请求体的格式传递错误,再加上一个字段名的拼写问题,我来帮你逐一梳理并修正:

1. 错误使用data参数传递JSON请求体

在你的requests.post调用中,你用data参数传入了字典格式的请求内容,同时在headers里指定了Content-Type: application/json。但这里有个关键问题:当你用data传字典时,requests库默认会把它编码为application/x-www-form-urlencoded格式,而不是你期望的JSON格式。这就导致Azure的API收到了不符合要求的媒体类型,直接返回415错误。

正确的做法是改用json参数来传递这个字典,requests会自动帮你把字典序列化为JSON字符串,并且自动匹配Content-Type: application/json(当然你保留headers里的这个字段也没问题)。

2. 字段名大小写不符合API要求

你的请求体里写的是"ContentUrls",但Azure Speech批量转录API要求的字段名是**contentUrls**(首字母小写的驼峰命名)。字段名不匹配也会导致API无法正确解析请求内容,加重格式错误的问题。

修正后的代码示例

resp = requests.post(
    url, 
    json={  # 这里把data改成json参数
        "displayName": filename,
        "locale": "en-GB",
        "contentContainerUrl": container_uri,
        "contentUrls": [content_uri],  # 修正字段名为小写开头
        "properties": {
            "diarizationEnabled": False,
            "wordLevelTimestampsEnabled": False,
            "punctuationMode": "DictatedAndAutomatic",
            "profanityFilterMode": "Masked"
        }
    },
    headers={"Ocp-Apim-Subscription-Key": sub_key, "Content-Type": "application/json"}
)

额外需要检查的点

除了上面的核心修正,你还可以排查以下两个常见问题:

  • Blob文件的访问权限:如果你的存储容器是私有的,直接的Blob URL是无法被Azure Speech服务访问到的,你需要生成带SAS(共享访问签名)的URL,确保Speech服务有读取该Blob的权限。
  • 音频文件格式兼容性:虽然你尝试过转换格式,但要确认文件是否符合Speech服务的要求,比如WAV文件推荐使用PCM 16kHz、16位、单声道的编码格式,其他不支持的编码也可能导致后续处理失败(不过这不是当前415错误的直接原因)。

修正后再测试一下,应该能解决415的问题了。

备注:内容来源于stack exchange,提问作者user28741964

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:59:31