OutdatedGuy / cached_video_player_plus

Original video_player plugin with the superpower of caching embedded in Android and iOS.
https://pub.dev/packages/cached_video_player_plus
BSD 3-Clause "New" or "Revised" License
21 stars 12 forks source link
cached-video caching

Cached Video Player Plus

The video_player plugin with the SUPER-POWER of caching using flutter_cache_manager.

pub package GitHub

GitHub issues GitHub issues closed


Getting Started

1. Add dependency

Add the cached_video_player_plus package to your pubspec.yaml file:

dependencies:
  cached_video_player_plus: ^3.0.3

2. Follow the installation instructions

Follow the installation instructions of video_player plugin.

3. Import the package

Import the cached_video_player_plus package into your Dart file:

import 'package:cached_video_player_plus/cached_video_player_plus.dart';

4. Using the package (Android, iOS & macOS)

If you are already using the video_player plugin

  1. Use the CachedVideoPlayerPlusController class instead of the VideoPlayerController.
  2. Use the CachedVideoPlayerPlus class instead of the VideoPlayer.
  3. Use the CachedVideoPlayerPlusValue class instead of the VideoPlayerValue.

If you are not using the video_player plugin

  1. Create a CachedVideoPlayerPlusController instance and initialize it.

    final controller = CachedVideoPlayerPlusController.networkUrl(
     Uri.parse(
       'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
     ),
     invalidateCacheIfOlderThan: const Duration(days: 69),
    )..initialize().then((value) async {
       controller.play();
       setState(() {});
     });
  2. Pass the controller to the CachedVideoPlayerPlus widget.

    CachedVideoPlayerPlus(controller),

    OR

    return Scaffold(
     body: Center(
       child: controller.value.isInitialized
           ? AspectRatio(
               aspectRatio: controller.value.aspectRatio,
               child: CachedVideoPlayerPlus(controller),
             )
           : const CircularProgressIndicator.adaptive(),
     ),
    );
  3. Caching is only supported if the CachedVideoPlayerPlusController initialization method is network() or networkUrl().

5. Using the package (Web)

The web platform does not support caching. So, the plugin will use the video_player plugin for the web platform.

However, to achieve caching on the web platform, you can use the workaround of defining Cache-Control headers in the httpHeaders parameter of the CachedVideoPlayerPlusController.network() method.

final controller = CachedVideoPlayerPlusController.networkUrl(
  Uri.parse(
    'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
  ),
  httpHeaders: {
    'Cache-Control': 'max-age=3600',
  },
)..initialize().then((value) async {
    controller.play();
    setState(() {});
  });

How does it work?

When the initialize() method is called, the package checks if the video file is cached or not. A video file is identified by its URL. If the video file is not cached, then it is downloaded and cached. If the video file is cached, then it is played from the cache.

If the cached video file is older than the specified invalidateCacheIfOlderThan parameter, then the cached video file is deleted and a new video file is downloaded and cached.

When cache of a video is not found, the video will be played from the network and will be cached in the background to be played from the cache the next time.

If you liked the package, then please give it a Like 👍🏼 and Star ⭐