Flutter中light_compressor无法压缩视频且播放卡顿问题排查
解决light_compressor视频未压缩及播放卡顿问题
核心问题分析
- 仅依赖
VideoQuality.very_low且关闭最低比特率检查,库的自动压缩逻辑可能未生成足够低的比特率,导致压缩无效。 - 播放卡顿多与编码兼容性、比特率波动或输出视频的码率/帧率设置不合理有关。
解决方案:手动指定比特率及优化参数
确实需要手动设置比特率来强制压缩效果,同时调整参数解决卡顿:
- 添加目标比特率配置
在AndroidConfig和IOSConfig中明确设置videoBitrate,根据原视频分辨率选择合适数值:
final dynamic compressedVid = await _lightCompressor.compressVideo( path: vid.path, isMinBitrateCheckEnabled: true, // 建议开启,避免比特率过低导致画质崩溃 videoQuality: VideoQuality.very_low, android: AndroidConfig( isSharedStorage: true, saveAt: SaveAt.Movies, videoBitrate: 500 * 1000, // 500kbps,可根据原视频调整 ), ios: IOSConfig( saveInGallery: true, videoBitrate: 500 * 1000, ), video: Video(videoName: "test-compressed.mp4"));
比特率参考:
- 720p视频:500-1000kbps
- 1080p视频:1000-2000kbps
- 优化编码兼容性
针对Android设备指定编码器类型,避免兼容性问题导致卡顿:
android: AndroidConfig( // ...其他参数 encoder: VideoEncoder.h264, // H.264兼容性更强 )
- 检查原视频属性
压缩前获取原视频的比特率、分辨率等信息,确保目标比特率低于原视频:
final videoInfo = await _lightCompressor.getVideoInfo(vid.path); print("原视频比特率:${videoInfo?.videoBitrate}");
只有目标比特率低于原视频,压缩才会生效。
- 确认存储权限
Android 30+需确保已正确申请MANAGE_EXTERNAL_STORAGE或媒体权限,避免压缩后的视频未正确写入导致读取卡顿。
验证步骤
- 对比原视频与输出视频的文件大小,确认压缩效果。
- 使用系统自带播放器测试压缩后的视频,排除第三方播放器的兼容性问题。
内容的提问来源于stack exchange,提问作者AhanR
相关产品推荐
相关产品推荐

