Flutter Pod Player异常:videoQuality不能为空问题求助
解决方案:videoQuality cannot be empty 异常处理
异常原因
刚上传到Vimeo的视频尚未完成转码流程,Vimeo还未生成不同清晰度的视频流,导致pod_player无法获取到可用的视频质量列表,触发该异常。同时旧版本pod_player(0.1.0)对这种转码中场景的容错处理不足,进一步加剧了问题。
具体解决步骤
- 等待视频转码完成:Vimeo上传视频后需要根据视频大小花费一定时间完成转码,转码完成后才会生成1080p、720p等多清晰度播放流,此时再加载视频即可避免错误。测试阶段可先用已完成转码的Vimeo视频验证功能。
- 调整PodPlayer配置:暂时移除
videoQualityPriority配置,让播放器自动选择当前可用的视频质量,适配转码中的临时状态:podPlayerConfig: const PodPlayerConfig( autoPlay: false, isLooping: false, // 移除videoQualityPriority,由播放器自动适配可用质量 ), - 检查视频权限设置:确认Vimeo视频的隐私设置为「公开」或权限允许你的应用访问,私有未授权的视频可能无法获取到质量信息,导致异常。
- 升级pod_player版本:0.1.0属于早期版本,后续版本大概率修复了转码中视频的处理逻辑,建议在
pubspec.yaml中更新依赖到最新稳定版:dependencies: pod_player: ^latest_version # 替换为当前最新版本号 - 添加异常捕获与重试机制:在初始化逻辑中捕获该异常,延迟后重试,适配视频转码的时间差:
Future<void> videoPlayerInit() async { if (podPlayerController != null) return; podPlayerController = PodPlayerController( playVideoFrom: PlayVideoFrom.vimeo( selectedTrainer!.vimeo!, videoPlayerOptions: VideoPlayerOptions( allowBackgroundPlayback: true, ), ), podPlayerConfig: const PodPlayerConfig( autoPlay: false, isLooping: false, videoQualityPriority: [1080, 720, 480, 360], ), ); try { await podPlayerController!.initialise(); videoPlayerReady = true; } catch (e) { if (e.toString().contains('videoQuality cannot be empty')) { // 延迟3秒后重试,可根据实际情况调整时长 await Future.delayed(const Duration(seconds: 3)); await videoPlayerInit(); } else { rethrow; } } }
内容的提问来源于stack exchange,提问作者Muhammed Furkan Yüceal
相关产品推荐
相关产品推荐

