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

Azure Media Services 使用Blob SAS URL作为JobInput触发DownloadTransientError排查

故障原因排查及解决方案

核心故障原因

  • URL转义异常(最常见诱因)
    你代码中使用audio.AudioUrl.ToString()获取URL,C#的Uri.ToString()方法会自动解码已经编码的URL特殊字符(比如示例URL中的%2F会被还原为/、%3A会被还原为:),而SAS签名是基于原始编码后的完整URL生成的,转义字符被修改后会导致SAS签名校验失败,存储服务返回403拒绝访问,最终触发下载错误。
    你手动使用的简单URL没有经过编码,调用ToString()不会修改内容,因此可以正常执行。
  • SAS令牌有效性问题
    示例URL中的SAS到期时间se=2022-01-05已经过期,如果你使用的是提前生成存储在数据库中的SAS,需要确认提交任务时SAS仍在有效期内,且权限配置正确(sp=r读权限、sr=b对应Blob资源)。
  • 存储账户网络访问限制
    如果你的Blob存储账户配置了防火墙规则、仅允许指定虚拟网络/IP访问,需要确认Azure媒体服务的服务IP或服务标签已经添加到存储账户的允许访问列表中,否则媒体服务的下载请求会被拦截。
  • 特殊字符编码问题
    如果音频路径中包含中文、空格等非ASCII字符,未经过标准URL编码也会导致签名校验失败或资源定位错误。

解决方案

  1. 替换URL获取方式:不要使用Uri.ToString(),改为使用Uri.AbsoluteUri属性获取原始编码后的完整URL,修改代码如下:
var jobInput = new JobInputHttp(new[]
{
    audio.AudioUrl.AbsoluteUri // 替换ToString()为AbsoluteUri
});
  1. 动态生成有效期充足的SAS令牌:不要使用存储在数据库中长期有效的SAS,建议在提交编码任务前,针对目标Blob实时生成有效期大于任务总时长的SAS,避免过期问题。
  2. 调整存储账户网络配置:如果存储开启了访问限制,在存储账户的网络设置中添加AzureMediaServices服务标签到允许列表,或者设置存储账户允许所有网络访问临时验证问题是否解决。
  3. 验证URL可用性:提交任务前,可以先在无痕浏览器中访问生成的URL,确认可以正常下载音频文件,排除本身URL不可用的问题。

内容的提问来源于stack exchange,提问作者Artur Trapp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:36:05