Flutter video_player与chewie在iOS出现PlatformException加载失败求助
解决Flutter中video_player/chewie在iOS端加载视频失败的问题
1. 配置iOS ATS(App Transport Security)
如果视频URL是HTTP协议,iOS默认会拦截非HTTPS请求。需要在ios/Runner/Info.plist中添加配置:
<key>NSAppTransportSecurity</key> <dict> <!-- 全局允许非HTTPS请求(不推荐,仅临时测试用) --> <!-- <key>NSAllowsArbitraryLoads</key> <true/> --> <!-- 推荐:仅给视频域名开例外 --> <key>NSExceptionDomains</key> <dict> <key>你的视频域名.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>
2. 验证视频格式兼容性
iOS原生播放器仅支持有限的视频格式,优先使用H.264编码的MP4格式。如果是WebM等其他格式,iOS无法直接解码,需要更换视频源。
3. 修复初始化代码的异常处理与状态更新
你的初始化代码缺少错误捕获,且未正确触发UI更新。修改_initPlayer方法:
void _initPlayer() async { try { videoPlayerController = VideoPlayerController.network(widget.videoUrl); await videoPlayerController?.initialize(); // 初始化成功后更新状态,创建chewie控制器 setState(() { chewieController = ChewieController( showOptions: true, showControls: true, allowPlaybackSpeedChanging: true, playbackSpeeds: [0.50, 0.75, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 2.00], videoPlayerController: videoPlayerController!, autoPlay: true, looping: true, ); }); } catch (e) { log('视频初始化失败: $e', name: 'VideoError'); // 可在此添加错误提示逻辑 } }
必须通过setState触发UI更新,确保chewie控制器创建后能正确渲染;添加try-catch便于排查初始化阶段的问题。
4. 检查网络权限与URL可用性
- 在
Info.plist中添加网络权限描述:
<key>NSNetworkUsageDescription</key> <string>需要网络权限加载视频</string>
- 用iOS设备的Safari直接打开视频URL,确认能正常播放。如果无法访问,排查视频服务器的跨域、地区限制等问题。
5. 更新依赖包版本
确保video_player和chewie使用最新稳定版,修改pubspec.yaml后执行flutter pub get:
dependencies: flutter: sdk: flutter video_player: ^2.8.6 # 替换为最新稳定版 chewie: ^1.7.1 # 替换为最新稳定版
内容的提问来源于stack exchange,提问作者Deniz Durmaz
相关产品推荐
相关产品推荐

