Flutter iOS项目中Video Player无法播放.mp4文件问题
Flutter iOS端Video Player组件MP4播放异常、MOV正常的问题排查与解决
在Flutter iOS项目里用Video Player组件时,你可能会遇到这种情况:同样是视频,.mp4格式播不了,转成.MOV就正常了——核心问题出在iOS对MP4的编码格式有严格限制,不是所有MP4都能被系统原生的AVPlayer(Video Player底层依赖它)识别。
为什么会这样?
iOS的AVPlayer只认特定编码的MP4:
- 视频编码必须是H.264(Baseline/Main/High Profile)或H.265
- 音频编码必须是AAC-LC/HE-AAC/HE-AAC v2
如果你的MP4用了VP9、MP3这类非兼容编码,iOS就解码失败;而MOV格式通常默认用的是iOS兼容的编码组合,所以能正常播放。
快速排查步骤
用MediaInfo这类工具打开你的MP4文件,查看「视频编码」和「音频编码」字段,确认是否在iOS支持的范围内。
解决办法
1. 转码为符合iOS标准的MP4
没必要非得转成MOV,只要把MP4转成兼容编码就行。用ffmpeg的话,执行这条命令:
ffmpeg -i input.mp4 -c:v libx264 -profile:v main -c:a aac -b:a 128k output_ios_compatible.mp4
这条命令会把视频转成H.264 Main Profile,音频转成AAC,完全符合iOS的解码要求。
2. 替换为兼容的播放器插件
如果没法提前转码,可以试试第三方播放器,比如chewie(基于video_player封装,优化了兼容性),或者用flutter_ffmpeg做实时解码——不过后者会增加包体积,优先推荐转码方案。
额外注意
- 如果播放的是网络视频,要确保iOS项目的Info.plist里配置了
NSAppTransportSecurity,允许HTTP请求(或者直接用HTTPS地址),不然会被系统拦截。 - 本地视频要确认已经添加到iOS项目的资源中,并且在
pubspec.yaml里正确声明了资源路径。
内容的提问来源于stack exchange,提问作者Roshan Paladiya
相关产品推荐
相关产品推荐

