最近在使用image_picker插件获取本机相册时发现,选择完相册视频后会需要处理很久才会返回视频的路径,而且仅仅只针对.mov格式的视频才会这样,平时1秒内可以选择完成的视频现在需要30S以上
这个问题官方也有相关讨论
https://github.com/flutter/flutter/issues/176355
解决方案如下
从image_picker迁移到file_picker
1.导入库file_picker: ^10.3.6
2.获取对应文件,FileType.media表示选择系统相册,里面会包含图片跟视频,也可以单独设置video或者image
1 | final result = await FilePicker.platform.pickFiles( |
3.最终获取到的文件是未经压缩的图片或者视频,也正是没有压缩转码这种过程,所以可以快速选择完返回路径,这样获取的文件在上传时可能会遇到服务器不支持的格式,比如.mov的视频,无法通过video_player在安卓机上播放,.heic文件格式的图片服务器不支持。选择完成后需要单独处理一下,这里借助一下两个库video_compress: ^3.1.4flutter_image_compress: ^2.4.0
4.定义两个新方法分别处理图片和视频
1 | Future<File?> compressImage(File file) async { |
1 | Future<File?> compressVideo(File file) async { |
5.最终就可以得到通用的格式.jpg和.mp4了,速度也非常快