一、前言
视频播放功能对于APP开发来说是非常常见的功能,为了进一步提升用户体验,我们需要有视频缓存功能,来助力流畅播放体验。
通过搜索,可以发现目前网络上开源的flutter相关的视频缓存库基本实现思路:
- 在video_player的基础上进行二此开发,例如:cached_video_player_plus
- 基于原生播放器ExoPlayer和AVPlayer进行封装实现,如:better_player_plus
以上提到的库,在一定程度上能实现视频缓存功能,以及边下边播的功能,但是还是存在无法满足需求的问题。
- 预缓存视频
- 大视频文件分段下载和并发下载
为了解决以上问题,诞生了今天的主角:flutter_video_caching
二、简介
flutter_video_caching 是一个纯dart代码实现的视频缓存库,其支持的功能如下:
- 多格式支持:支持 m3u8 (HLS) 和 MP4 ,(其他格式未开可期)
- 内存与文件缓存:实现了 LRU (最近最少使用) 内存缓存策略,并结合本地文件缓存,有效减少网络请求,提升视频加载速度。
- 预缓存机制:支持提前下载视频片段,让连续播放更加流畅,为用户带来无缝的观看体验。
- 后台下载:使用 Isolate 实现多任务并行下载,不会阻塞 UI 线程,保证应用的流畅运行。
- 优先级调度:可以为下载任务设置优先级,优化资源分配,确保重要视频优先缓存。
三、使用方法
1. 添加引用
在 pubspec.yaml 中添加依赖
dependencies:
flutter_video_caching: 0.0.1
2. 初始化视频代理服务
import 'package:flutter_video_caching/flutter_video_caching.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
VideoProxy.init();
runApp(const HomeApp());
}
3. 使用 video_player 播放代理链接
playControl = VideoPlayerController.networkUrl(url.toLocalUri());
4. 预缓存视频(可选)
在合适的时机提前缓存视频,打开视频时,将直接从内存中加载视频,有更好的播放体验。
VideoCaching.precache(url);