【Flutter】实现视频边播边缓存

2,438 阅读2分钟

一、前言

视频播放功能对于APP开发来说是非常常见的功能,为了进一步提升用户体验,我们需要有视频缓存功能,来助力流畅播放体验。

通过搜索,可以发现目前网络上开源的flutter相关的视频缓存库基本实现思路:

以上提到的库,在一定程度上能实现视频缓存功能,以及边下边播的功能,但是还是存在无法满足需求的问题。

  1. 预缓存视频
  2. 大视频文件分段下载和并发下载

为了解决以上问题,诞生了今天的主角: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);

四、demo下载

github.com/windows7lak…