Flutter加载本地视频遇MEDIA_ERR_SRC_NOT_SUPPORTED格式错误求助
解决Flutter Chewie加载本地视频出现MEDIA_ERR_SRC_NOT_SUPPORTED错误
以下是针对性的解决步骤:
1. 确认视频编码兼容性
MP4是容器格式,底层编码才是兼容关键。Flutter的video_player依赖平台原生播放器:
- Android依赖ExoPlayer,推荐编码:视频H.264(AVC)、音频AAC
- iOS依赖AVPlayer,支持编码与Android基本一致,但旧设备对H.265兼容性较差
可以用MediaInfo工具查看视频编码信息,若编码不兼容,用FFmpeg等工具转成H.264+AAC的标准MP4格式。
2. 检查pubspec.yaml资源配置
确保已正确声明视频资源路径,路径大小写严格匹配:
flutter: assets: - assets/images/IBT.mp4
修改后执行flutter pub get刷新资源。
3. 修复视频控制器初始化逻辑
当前代码未等待VideoPlayerController初始化完成就创建ChewieController,易导致加载失败。调整初始化逻辑:
class _ChewiePlayerWidgetState extends State<ChewiePlayerWidget> { late VideoPlayerController _controller; ChewieController? _chewieController; @override void initState() { super.initState(); _initVideoPlayer(); } Future<void> _initVideoPlayer() async { _controller = VideoPlayerController.asset('assets/images/IBT.mp4'); await _controller.initialize(); // 等待控制器初始化完成 setState(() { _chewieController = ChewieController( videoPlayerController: _controller, autoPlay: true, looping: true, aspectRatio: _controller.value.aspectRatio, // 使用视频原生比例 placeholder: Container(color: Colors.grey), errorBuilder: (context, errorMessage) { return Center( child: Text(errorMessage, style: TextStyle(color: Colors.white)), ); }, ); }); } @override void dispose() { _controller.dispose(); _chewieController?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return _chewieController != null ? Chewie(controller: _chewieController!) : Container(color: Colors.grey); // 初始化完成前显示占位 } }
4. 排查平台特定问题
- Android:确保项目
minSdkVersion不低于21(ExoPlayer对低版本系统支持有限) - iOS:无需额外配置Info.plist,但需保证视频编码符合AVPlayer要求
5. 测试基准视频
用已知兼容的H.264编码MP4测试视频替换当前文件,验证是否为视频本身的格式问题。
内容的提问来源于stack exchange,提问作者Harsh luhar
相关产品推荐
相关产品推荐

