调用阿里云视频标签API需先开通服务并配置权限,使用指定域名和签名POST请求,传入OSS路径的ObjectKey,解析Data.Tags获取中文标签及置信度。

调用阿里云视频标签 API 需要先开通服务并获取凭证
阿里云的视频内容分析能力(如 VideoTag)不在免费默认开通列表里,直接调用会返回 InvalidAccessKeyId.NotFound 或 Forbidden.AccessDenied。必须手动进入「阿里云控制台 → 视频点播(VOD)或人工智能平台(PAI)→ 开通视频标签服务」,再在「AccessKey 管理」里确认你用的 AccessKeyId 和 AccessKeySecret 有 aliyunvod:ListVideoTag 或对应 ai.video.tag 权限。
- 别用主账号 AK,建议新建子用户并只授予最小权限:
AliyunVODFullAccess或自定义策略中明确包含vod:ListVideoTag - 接口域名不是通用
https://vod.cn-shanghai.aliyuncs.com,视频标签实际走的是 AI 类服务,生产环境用https://videotag.cn-shanghai.aliyuncs.com(地域需和你开通服务时选的一致) - PHP SDK 官方未单独封装
VideoTag,别搜AlibabaCloud\SDK\Videotag——目前得手写 HTTP 请求或复用AlibabaCloud\Client的通用 RPC 调用
用 PHP cURL 发起带签名的 POST 请求是最快落地方式
阿里云视频标签 API 不支持简单 GET,必须 POST JSON body,并在 Header 中携带 Authorization、Date、Content-MD5、Content-Type 四个签名字段。官方 PHP SDK 的签名逻辑藏在 AlibabaCloud\Client\Credentials\Providers\AccessKeyProvider 底层,但直接调用太重;更轻量的做法是抄官方文档里的 computeSignature 方法片段,自己算签名。
- 请求 URL 是
https://videotag.cn-shanghai.aliyuncs.com(注意不是 vod 域名) - POST body 示例:
{"ObjectKey":"example.mp4","MediaType":"video"},其中ObjectKey是 OSS 上视频的完整路径(非公网 URL),且该文件必须已在你绑定的 OSS Bucket 中,且 Bucket 与视频标签服务同地域 -
DateHeader 必须是 GMT 格式,用gmdate('D, d M Y H:i:s \G\M\T'),误差超过 15 分钟直接报InvalidTimestamp.Expired - 别漏掉
Content-MD5:对 JSON body 做base64_encode(md5($json, true)),否则返回MissingContentMD5
返回结果里 Tags 数组才是你要的分类标签
成功响应是 200 JSON,结构类似 {"RequestId":"xxx","Data":{"Tags":[{"Tag":"美食","Score":0.92},{"Tag":"烹饪","Score":0.87}]}}。注意不是所有字段都可用:Data 是外层包装,真正标签在 Data.Tags 下,每个元素含 Tag(中文标签名)和 Score(置信度,0~1)。低分值(如 )的标签大概率不准,建议过滤。
- 标签不固定长度,一次最多返回 20 个,但实际常用就 3~5 个高分值的
-
Tag字段是阿里云预训练模型输出的中文词,不是 ID,也不支持映射到你自己的分类体系——想对齐业务类目,得自己做关键词映射表 - 如果返回空数组
"Tags":[],常见原因是视频太短(ObjectKey 对应文件不存在/权限不足
异步轮询比同步等待更稳妥,尤其处理长视频
视频标签接口文档写的是「同步返回」,但实测超过 30 秒的视频经常超时或返回 TaskPending。阿里云后台其实是异步跑任务,推荐改用「提交任务 + 轮询结果」模式:先调 /jobs 提交,再用返回的 JobId 轮询 /jobs/{JobId},直到 Status 变成 Success。
立即学习“PHP免费学习笔记(深入)”;
- 轮询间隔别太密,建议 2~5 秒一次,避免触发频率限制(
Throttling错误) - 轮询超时设为 300 秒足够,阿里云对 10 分钟内视频通常 60 秒内出结果
- 别忽略
Status为Failed的情况,此时Message字段会说明原因,比如MediaFileNotExists或MediaFormatNotSupported(不支持 AV1 编码等)



















