Flutter Android集成Vimeo API时progressive字段突然缺失求助
Vimeo API返回progressive字段缺失的原因及解决办法
可能的原因
- API字段选择规则变更:Vimeo API的
fields参数要求显式指定嵌套字段。你之前仅指定play,旧版本API可能默认返回play下的所有子字段,但现在仅返回默认的status字段,需要明确声明play.progressive才能获取播放链接数组。 - Access Token权限不足:你的access token可能缺少
video_files权限范围,该权限是获取视频播放链接的必要条件。即使你是Vimeo Plus会员,权限配置错误也会导致无法返回progressive字段。 - 视频权限设置变更:目标视频的隐私设置或播放权限被修改(比如从公开改为私有,或限制了播放来源),导致API不再返回直接播放链接。
解决办法
1. 修正API请求的fields参数
修改请求URL,显式指定需要的嵌套字段,确保play.progressive被包含:
final apiUrl = Uri.parse('https://api.vimeo.com/videos/$videoId?fields=play.progressive,play.status,name,pictures');
这样API会返回包含progressive数组的完整play对象。
2. 验证Access Token权限
检查你的Vimeo access token是否包含video_files权限:
- 登录Vimeo开发者控制台,查看token的权限范围。
- 如果缺少该权限,重新生成包含
video_files(以及对应视频权限,如public或private)的access token。
3. 增加代码容错处理
即使API返回的progressive字段为空,也要避免应用崩溃。在解析逻辑中添加空值判断,并做降级处理:
// 提取视频URLs部分修改为 final play = vimeoVideo.play; if (play != null) { final progressive = play.progressive; if (progressive != null && progressive.isNotEmpty) { for (final video in progressive) { // 原逻辑 final qualityString = video.rendition; final quality = qualityString?.toVimeoVideoQuality() ?? VimeoVideoQuality.unknown; final urlStr = video.link; if (quality != VimeoVideoQuality.unknown && urlStr != null) { videoURLs[quality] = Uri.parse(urlStr); } } } else { // 处理无播放链接的情况,比如记录日志或提示用户 Logger().w('No progressive playback links available for video $videoId'); // 可选:抛出自定义异常 // throw Exception('Video playback links unavailable'); } }
4. 检查视频权限设置
确认目标视频的隐私设置允许通过API获取播放链接:
- 登录Vimeo后台,查看视频的“隐私”设置,确保允许API访问(比如设置为“任何人”或特定域名/用户)。
内容的提问来源于stack exchange,提问作者PARANJAY
相关产品推荐
相关产品推荐

