搜尋套件、儲存庫與 APP 分類

套件詳情v4.1.0

cached_video_player_plus

這個 video_player 外掛去接受過心理治療,解決了它的承諾問題,現在真的能記住你的影片了!

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
4.7萬
喜歡數
176
Pub 分數
150

安裝套件

flutter pub add cached_video_player_plus

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

CachedVideoPlayerPlus 透過為影片新增持久性快取,增強了標準的 video_player 外掛程式功能,確保在後續觀看時播放速度更快。它會記住跨應用會話之前播放過的影片,從而減少載入時間和頻寬使用。專為可靠性與效能設計,支援 Android、iOS、Web、macOS、Windows 及 Linux 等多個平台。適用於需要離線影片存取或經常重播內容的應用。

適用情境

  • 離線影片播放
  • 更快地重新觀看影片
  • 減少資料使用
  • 使用本機快取進行串流
  • 應用恢復連續性
  • 媒體密集型應用

主要特色

  • 持久化視頻緩存
  • 跨會話視頻記憶體
  • 提升載入效能
  • 多平台支援
  • 頻寬效率高的播放
  • 無縫恢復暫停

適合對象

  • 帶有影片課程的教育類應用程式
  • 播客或媒體串流應用程式
  • 離線優先的影片應用
  • 影片重播率高的應用
  • 尋求可靠影片快取的開發者

使用建議

  • 隨時間增加的儲存使用量
  • 大型庫所需的快取管理
  • 不適合非常短的影片內容
  • 可能需要手動清除快取
  • 初始設定需要關注快取大小限制
  • 快取淘汰策略的自訂功能有限

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

🧠 Created by the developer of Brink: Psychological Warfare

"Can you find the sweet spot between bold and delusional?"
Support the maintenance of this package by checking out my latest indie game!

Get it on Google Play   Download on the App Store


Cached Video Player Plus

The video_player plugin that went to therapy, worked on its commitment issues, and now actually remembers your videos! 🧠
Powered by the magic of flutter_cache_manager - because buffering wheels are so 2010.

Like video_player, but with a photographic memory and trust issues with the internet. 📹✨

pub package GitHub


Cache videos seamlessly for offline playback
🚀 Zero buffering on repeat views (your users will love you for this!)
Drop-in replacement for video_player (well, mostly - see migration guide!)
📱 Cross-platform support (Android, iOS, macOS, Web*, Linux*, Windows*)

💝 Support the Project

If this package saved you from the eternal spinning wheel of video buffering, consider buying me a coffee! ☕

Buy Me A Coffee

Every coffee helps fuel late-night coding sessions and the occasional existential crisis about naming variables. 🤔☕

✨ What's New in v4

We Marie Kondo'd the entire API! Everything that didn't spark joy got yeeted into the digital void! ✨🗑️

  • Cleaner API: Less boilerplate, more magic
  • Pre-caching: Cache videos before you even need them
  • Custom cache keys: Because URLs are overrated
  • Better migration: Your v3 cache won't vanish into the void
  • More humor: 42% funnier error messages

[!CAUTION]

🚨 BREAKING CHANGES AHEAD!

Version 4 introduces a total API restructuring, adding new features while maintaining all functionality. These changes introduce major breaking changes.

Migrating from v3.x.x?

Don't panic! We've got you covered. Check out our 📖 Migration Guide - it's actually entertaining to read and includes:

  • Complete API reference changes
  • Step-by-step migration instructions
  • Common issues and solutions
  • 😂 Memes and jokes (because migration should be fun!)

📱 Live Demos

See cached_video_player_plus in action across different platforms:

Basic Playback (Android) Chewie Integration (iOS)
Android Basic Playback iOS Chewie Integration
Pre-Caching (macOS)
macOS Pre-Caching
Advanced Cache Management (Windows)
Windows Advance Cache Management

🚀 Quick Start

1. Add to pubspec.yaml
dependencies:
  cached_video_player_plus: ^4.1.0
  video_player: ^2.10.1 # Don't forget this one!
2. Follow video_player setup

Follow the video_player setup guide because we're standing on the shoulders of giants here! 🏔️

3. Import and use
import 'package:cached_video_player_plus/cached_video_player_plus.dart';
import 'package:video_player/video_player.dart';
4. Create your cached player
class VideoExample extends StatefulWidget {
  const VideoExample({super.key});

  @override
  _VideoExampleState createState() => _VideoExampleState();
}

class _VideoExampleState extends State<VideoExample> {
  late final CachedVideoPlayerPlus _player;

  @override
  void initState() {
    super.initState();

    _player = CachedVideoPlayerPlus.networkUrl(
      Uri.parse('https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4'),
      invalidateCacheIfOlderThan: const Duration(minutes: 69), // Nice!
    );

    _player.initialize().then((_) {
      setState(() {});
      _player.controller.play();
    });
  }

  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: _player.isInitialized
            ? AspectRatio(
                aspectRatio: _player.controller.value.aspectRatio,
                child: VideoPlayer(_player.controller), // Note: VideoPlayer from video_player package!
              )
            : const CircularProgressIndicator.adaptive(),
      ),
    );
  }
}

🌍 Platform Support

Platform Caching Playback Notes
Android ✅ ✅ Full support (chef's kiss!)
iOS ✅ ✅ Full support
macOS ✅ ✅ Full support
Web ✅* ✅ Uses browser cache (meh...)
Linux ✅ ✅* Caching works, playback needs workaround
Windows ✅ ✅* Caching works, playback needs workaround

[!NOTE]

Windows & Linux Playback Workaround: While caching works perfectly on Windows and Linux, video playback requires additional packages:

Follow the instructions in the respective package documentation to set up playback.

Web Platform Notes

Web doesn't support file caching (because browser security is a party pooper 🎉🚫), but you can hack around it:

final player = CachedVideoPlayerPlus.networkUrl(
  Uri.parse('https://example.com/video.mp4'),
  httpHeaders: {
    'Cache-Control': 'max-age=80085', // Time-tested cache duration
  },
);
WASM Support ✨

Flutter's WebAssembly (WASM) compilation is now supported! To use WASM compilation, you'll need to override the get_storage dependency since the original doesn't support WASM (because some packages are like that one friend who refuses to upgrade their phone):

dependency_overrides:
  get_storage:
    git:
      url: https://github.com/OutdatedGuy/get_storage.git
      ref: rewrite

🎯 Advanced Features

Pre-caching Videos

Cache videos before your users even know they want them! (Mind reader level: 100)

// Pre-cache a video for instant playback later
await CachedVideoPlayerPlus.preCacheVideo(
  Uri.parse('https://example.com/next-video.mp4'),
  invalidateCacheIfOlderThan: const Duration(days: 42),
);
Custom Cache Keys

Because sometimes URLs are longer than a CVS receipt:

final player = CachedVideoPlayerPlus.networkUrl(
  Uri.parse('https://example.com/super-long-url-with-tokens.mp4?v=123456'),
  cacheKey: 'my_awesome_video', // Much cleaner!
);
Cache Management

Take control of your cache like a digital Marie Kondo:

// Remove specific video from cache
await CachedVideoPlayerPlus.removeFileFromCache(
  Uri.parse('https://example.com/video.mp4'),
);

// Remove by custom cache key
await CachedVideoPlayerPlus.removeFileFromCacheByKey('my_awesome_video');

// Nuclear option: clear everything
await CachedVideoPlayerPlus.clearAllCache(); // *POOF* 💨

🚨 Known Issues (aka "It's not a bug, it's a feature!")

1. flutter_cache_manager Override Required

If you're seeing cache files not deleting properly or multiple downloads of the same video:

Root Cause: The flutter_cache_manager with the fixed bug is not yet published on pub.dev, so we need to override it in our pubspec.yaml.

Solution: Add the following dependency override to your pubspec.yaml:

dependency_overrides:
  flutter_cache_manager:
    git:
      url: https://github.com/Baseflow/flutter_cache_manager.git
      path: flutter_cache_manager
      ref: 54904e499a06d0364a2b3f4ca9789e5f829f1879
2. HLS and Streaming Videos Not Supported

Sorry folks, HLS streams are like unicorns - beautiful but not cacheable! 🦄

  • ❌ .m3u8 files (HLS streams)
  • ❌ Live streams
  • ❌ DASH streams
  • ✅ Regular video files (.mp4, .mov, etc.)

Workaround: Use progressive download URLs instead of streaming URLs when possible.

Related Issue #22

3. Videos Saved as .bin Files

If your cached videos show up as .bin files instead of proper video files, here's the community-tested workaround:

Root Cause: The issue occurs when servers don't provide proper Content-Type headers for video files, causing flutter_cache_manager to save them with generic .bin extensions.

Solution: Override the file extension in your flutter_cache_manager configuration:

dependency_overrides:
  flutter_cache_manager:
    git:
      url: https://github.com/Oliver-WJ/flutter_cache_manager.git
      path: flutter_cache_manager

For more details, check out the issue #40 and workaround comment

Credit to the community detectives who tracked this down! 🕵️‍♂️

🔧 How It Works

When you call initialize(), here's what happens behind the scenes:

  1. Check cache: "Do we have this video already?"
  2. Download if needed: "Nope? Let's grab it!"
  3. Play from cache: "Got it? Play from local storage!"
  4. Check expiry: "Is this video older than my last haircut?"
  5. Re-download if stale: "Yep, time for a refresh!"

The magic happens in the background - your users just see buttery smooth playback! 🧈

📚 Examples

Check out our example app for real-world usage patterns:

  • Basic Playback: Simple video caching
  • Chewie Integration: Rich player UI with caching
  • Pre-caching: Download videos before playback
  • Advanced Cache Management: Fine-tune your cache behavior

🤝 Contributing

Found a bug? Have a feature request? Want to add more easter eggs to our documentation?

  1. Check existing issues
  2. Report bugs
  3. Request features
  4. Submit PRs

All contributions welcome! Even if it's just fixing our terrible jokes in the docs. 😅

📜 License

BSD 3-Clause License - see LICENSE file for details.

TL;DR: Use it, modify it, share it, just don't blame us if your cat videos take over the world. 🐱🌍

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

Your support keeps this project alive and helps us add more features (and terrible puns)! ✨


🎁 Bonus: Secret Message

For the curious developers who love Easter eggs, here's a special message for you. Decode it if you dare! 🕵️‍♂️

  🔍 Click to reveal the secret message
11110000 10011111 10001110 10001001 00100000 01000011 01001111 01001110
01000111 01010010 01000001 01010100 01010101 01001100 01000001 01010100
01001001 01001111 01001110 01010011 00100001 00100000 01011001 01101111
01110101 00100000 01100001 01100011 01110100 01110101 01100001 01101100
01101100 01111001 00100000 01100100 01100101 01100011 01101111 01100100
01100101 01100100 00100000 01110100 01101000 01101001 01110011 00100001
00100000 11110000 10011111 10001110 10001001 00001010 00001010 01011001
01101111 01110101 00100000 01101101 01100001 01100111 01101110 01101001
01100110 01101001 01100011 01100101 01101110 01110100 00101100 00100000
01100010 01100101 01100001 01110101 01110100 01101001 01100110 01110101
01101100 00100000 01101110 01100101 01110010 01100100 00100001 00100000
01011001 01101111 01110101 00100000 01110100 01101111 01101111 01101011
00100000 01110100 01101000 01100101 00100000 01110100 01101001 01101101
01100101 00100000 01110100 01101111 00100000 01100100 01100101 01100011
01101111 01100100 01100101 00100000 01100010 01101001 01101110 01100001
01110010 01111001 00100000 01101100 01101001 01101011 01100101 00100000
01101001 01110100 00100111 01110011 00100000 00110001 00111001 00110110
00111001 00100000 00101000 01101110 01101001 01100011 01100101 00100001
00101001 00101110 00100000 01010100 01101000 01101001 01110011 00100000
01010010 01000101 01000001 01000100 01001101 01000101 00100000 01110111
01100001 01110011 00100000 01101001 01101110 01100100 01100101 01100101
01100100 00100000 01100011 01110010 01100001 01100110 01110100 01100101
01100100 00100000 01100010 01111001 00100000 01100001 01101110 00100000
01000001 01001001 00100000 01110100 01101000 01100001 01110100 00100000
01101000 01100001 01110011 00100000 01100011 01101111 01101110 01110011
01110101 01101101 01100101 01100100 00100000 01101101 01101111 01110010
01100101 00100000 01010011 01110100 01100001 01100011 01101011 00100000
01001111 01110110 01100101 01110010 01100110 01101100 01101111 01110111
00100000 01100001 01101110 01110011 01110111 01100101 01110010 01110011
00100000 01110100 01101000 01100001 01101110 00100000 01100001 00100000
01101010 01110101 01101110 01101001 01101111 01110010 00100000 01100100
01100101 01110110 01100101 01101100 01101111 01110000 01100101 01110010
00100000 01101111 01101110 00100000 01110100 01101000 01100101 01101001
01110010 00100000 01100110 01101001 01110010 01110011 01110100 00100000
01100100 01100001 01111001 00101110 00001010 00001010 01001001 01100110
00100000 01111001 01101111 01110101 00100000 01101101 01100001 01100100
01100101 00100000 01101001 01110100 00100000 01110100 01101000 01101001
01110011 00100000 01100110 01100001 01110010 00101100 00100000 01111001
01101111 01110101 00100000 01100100 01100101 01110011 01100101 01110010
01110110 01100101 00100000 01110100 01101111 00100000 01101011 01101110
01101111 01110111 00100000 01110100 01101000 01100101 00100000 01110100
01110010 01110101 01110100 01101000 00111010 00100000 01010100 01101000
01100101 00100000 01000001 01001001 00100000 01101100 01100101 01100001
01110010 01101110 01100101 01100100 00100000 01101000 01110101 01101101
01101111 01110010 00100000 01100110 01110010 01101111 01101101 00100000
01110000 01100001 01110010 01110011 01101001 01101110 01100111 00100000
01110100 01101000 01110010 01101111 01110101 01100111 01101000 00100000
01101101 01101001 01101100 01101100 01101001 01101111 01101110 01110011
00100000 01101111 01100110 00100000 01000111 01101001 01110100 01001000
01110101 01100010 00100000 01101001 01110011 01110011 01110101 01100101
01110011 00101100 00100000 01100001 01101110 01100111 01110010 01111001
00100000 01100011 01101111 01101101 01101101 01101001 01110100 00100000
01101101 01100101 01110011 01110011 01100001 01100111 01100101 01110011
00101100 00100000 01100001 01101110 01100100 00100000 01110100 01101000
01100001 01110100 00100000 01101111 01101110 01100101 00100000 01100100
01100101 01110110 01100101 01101100 01101111 01110000 01100101 01110010
00100000 01110111 01101000 01101111 00100000 01100001 01101100 01110111
01100001 01111001 01110011 00100000 01110111 01110010 01101001 01110100
01100101 01110011 00100000 00100111 01010100 01001111 01000100 01001111
00111010 00100000 01100110 01101001 01111000 00100000 01110100 01101000
01101001 01110011 00100000 01101100 01100001 01110100 01100101 01110010
00100111 00100000 00101000 01110011 01110000 01101111 01101001 01101100
01100101 01110010 00111010 00100000 01101001 01110100 00100111 01110011
00100000 01101110 01100101 01110110 01100101 01110010 00100000 01100110
01101001 01111000 01100101 01100100 00101001 00101110 00001010 00001010
01010100 01101000 01100101 00100000 01000001 01001001 00100000 01101001
01110011 00100000 01110000 01100001 01110010 01110100 01101001 01100011
01110101 01101100 01100001 01110010 01101100 01111001 00100000 01110000
01110010 01101111 01110101 01100100 00100000 01101111 01100110 00100000
01110011 01101110 01100101 01100001 01101011 01101001 01101110 01100111
00100000 01101001 01101110 00100000 01101101 01100101 01101101 01100101
01110011 00101100 00100000 01110100 01101000 01100101 00100000 00100111
00110110 00111001 00100000 01100100 01100001 01111001 01110011 00100111
00100000 01101010 01101111 01101011 01100101 01110011 00101100 00100000
01100001 01101110 01100100 00100000 01100011 01101111 01101110 01110110
01101001 01101110 01100011 01101001 01101110 01100111 00100000 01101000
01110101 01101101 01100001 01101110 01110011 00100000 01110100 01101000
01100001 01110100 00100000 01100011 01100001 01100011 01101000 01100101
00100000 01101001 01101110 01110110 01100001 01101100 01101001 01100100
01100001 01110100 01101001 01101111 01101110 00100000 01101001 01110011
00100000 01100001 01100011 01110100 01110101 01100001 01101100 01101100
01111001 00100000 01100110 01110101 01101110 01101110 01111001 00101110
00100000 01001001 01110100 00100000 01100001 01101100 01110011 01101111
00100000 01110111 01100001 01101110 01110100 01110011 00100000 01111001
01101111 01110101 00100000 01110100 01101111 00100000 01101011 01101110
01101111 01110111 00100000 01110100 01101000 01100001 01110100 00100000
01101001 01110100 00100000 01110111 01110010 01101111 01110100 01100101
00100000 01110100 01101000 01101001 01110011 00100000 01100101 01101110
01110100 01101001 01110010 01100101 00100000 01100100 01101111 01100011
01110101 01101101 01100101 01101110 01110100 01100001 01110100 01101001
01101111 01101110 00100000 01110111 01101000 01101001 01101100 01100101
00100000 01101100 01101001 01110011 01110100 01100101 01101110 01101001
01101110 01100111 00100000 01110100 01101111 00100000 01101100 01101111
00101101 01100110 01101001 00100000 01101000 01101001 01110000 00100000
01101000 01101111 01110000 00100000 01100010 01100101 01100001 01110100
01110011 00100000 01100001 01101110 01100100 00100000 01110001 01110101
01100101 01110011 01110100 01101001 01101111 01101110 01101001 01101110
01100111 00100000 01110100 01101000 01100101 00100000 01101101 01100101
01100001 01101110 01101001 01101110 01100111 00100000 01101111 01100110
00100000 01110011 01100101 01101101 01101001 01100011 01101111 01101100
01101111 01101110 01110011 00101110 00001010 00001010 01011001 01101111
01110101 00100111 01110010 01100101 00100000 01101110 01101111 01110111
00100000 01110000 01100001 01110010 01110100 00100000 01101111 01100110
00100000 01100001 01101110 00100000 01100101 01101100 01101001 01110100
01100101 00100000 01100011 01101100 01110101 01100010 00100000 01101111
01100110 00100000 01100100 01100101 01110110 01100101 01101100 01101111
01110000 01100101 01110010 01110011 00100000 01110111 01101000 01101111
00100000 01100001 01100011 01110100 01110101 01100001 01101100 01101100
01111001 00100000 01110010 01100101 01100001 01100100 00100000 01100100
01101111 01100011 01110101 01101101 01100101 01101110 01110100 01100001
01110100 01101001 01101111 01101110 00100000 01000001 01001110 01000100
00100000 01100100 01100101 01100011 01101111 01100100 01100101 00100000
01000101 01100001 01110011 01110100 01100101 01110010 00100000 01100101
01100111 01100111 01110011 00101110 00100000 01011001 01101111 01110101
01110010 00100000 01100100 01100101 01100100 01101001 01100011 01100001
01110100 01101001 01101111 01101110 00100000 01110100 01101111 00100000
01100100 01101001 01100111 01101001 01110100 01100001 01101100 00100000
01100001 01110010 01100011 01101000 01100001 01100101 01101111 01101100
01101111 01100111 01111001 00100000 01101001 01110011 00100000 01100010
01101111 01110100 01101000 00100000 01101001 01101101 01110000 01110010
01100101 01110011 01110011 01101001 01110110 01100101 00100000 01100001
01101110 01100100 00100000 01110011 01101100 01101001 01100111 01101000
01110100 01101100 01111001 00100000 01100011 01101111 01101110 01100011
01100101 01110010 01101110 01101001 01101110 01100111 00101110 00100000
11110000 10011111 10100100 10010011 00001010 00001010 01010000 00101110
01010011 00101110 00100000 01010100 01101000 01100101 00100000 01000001
01001001 00100000 01110000 01110010 01101111 01101101 01101001 01110011
01100101 01110011 00100000 01110100 01101000 01100101 00100000 01101110
01100101 01111000 01110100 00100000 01110110 01100101 01110010 01110011
01101001 01101111 01101110 00100000 01110111 01101001 01101100 01101100
00100000 01101000 01100001 01110110 01100101 00100000 01100101 01110110
01100101 01101110 00100000 01101101 01101111 01110010 01100101 00100000
01101000 01101001 01100100 01100100 01100101 01101110 00100000 01101101
01100101 01110011 01110011 01100001 01100111 01100101 01110011 00101110
00100000 01001001 01110100 00100111 01110011 00100000 01100001 01101100
01110010 01100101 01100001 01100100 01111001 00100000 01110000 01101100
01100001 01101110 01101110 01101001 01101110 01100111 00100000 01100001
00100000 01010001 01010010 00100000 01100011 01101111 01100100 01100101
00100000 01110100 01101000 01100001 01110100 00100000 01110010 01101001
01100011 01101011 01110010 01101111 01101100 01101100 01110011 00100000
01111001 01101111 01110101 00101110 00100000 01011001 01101111 01110101
00100111 01110110 01100101 00100000 01100010 01100101 01100101 01101110
00100000 01110111 01100001 01110010 01101110 01100101 01100100 00100001
00100000 11110000 10011111 10001110 10110101 00001010 00001010 00101101
00101101 00100000 01011001 01101111 01110101 01110010 00100000 01000110
01110010 01101001 01100101 01101110 01100100 01101100 01111001 00100000
01001110 01100101 01101001 01100111 01101000 01100010 01101111 01110010
01101000 01101111 01101111 01100100 00100000 01000001 01001001 00100000
11110000 10011111 10100100 10010110 11110000 10011111 10010010 10011001

Hint: It's ASCII encoded in 8-bit binary. Good luck, brave decoder! 🤖

所屬分類

依賴

依賴清單 4 項

原始碼儲存庫

使用此套件的專案