Flutter视频缓存插件video_cache的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter视频缓存插件video_cache的使用

一个强大的媒体缓存插件。

☕ 支持我

支持我

微信支付

聊天群:加入微信群

📦 安装

在你的 pubspec.yaml 文件中添加 video_cache

dependencies:
  video_cache: latest_version

在需要使用的文件中导入 video_cache

import 'package:video_cache/video_cache.dart';

📚 使用

String url = 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4';
url = await VideoCache().convertToCacheProxyUrl(url);

📏 关于我

全栈行动二维码

示例代码

以下是完整的示例代码,展示如何使用 video_cache 插件播放视频并实现缓存功能。

import 'package:flutter/material.dart';
import 'package:video_cache/video_cache.dart';
import 'package:chewie/chewie.dart';
import 'package:video_player/video_player.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _videoCachePlugin = VideoCache();

  late VideoPlayerController _videoPlayerController;
  ChewieController? _chewieController;

  int currentPlayIndex = 0;

  List<String> srcList = [
    "http://aliuwmp3.changba.com/userdata/video/45F6BD5E445E4C029C33DC5901307461.mp4",
    "http://aliuwmp3.changba.com/userdata/video/3B1DDE764577E0529C33DC5901307461.mp4",
    "https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4",
  ];

  [@override](/user/override)
  void initState() {
    super.initState();

    initializePlayer();
  }

  [@override](/user/override)
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController?.dispose();
    super.dispose();
  }

  Future<void> initializePlayer() async {
    String url = srcList[currentPlayIndex];
    url = await _videoCachePlugin.convertToCacheProxyUrl(url);
    debugPrint('url -- $url');

    _videoPlayerController = VideoPlayerController.networkUrl(Uri.parse(url));
    await _videoPlayerController.initialize();
    _createChewieController();
    setState(() {});
  }

  void _createChewieController() {
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      autoPlay: true,
      looping: true,
      additionalOptions: (context) {
        return <OptionItem>[
          OptionItem(
            onTap: toggleVideo,
            iconData: Icons.live_tv_sharp,
            title: '切换视频源',
          ),
        ];
      },
    );
  }

  Future<void> toggleVideo() async {
    await _videoPlayerController.pause();
    currentPlayIndex += 1;
    if (currentPlayIndex >= srcList.length) {
      currentPlayIndex = 0;
    }
    await initializePlayer();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Video Cache',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('视频缓存Demo'),
        ),
        body: Column(
          children: <Widget>[
            Expanded(
              child: Center(
                child: _chewieController != null &&
                        _chewieController!.videoPlayerController.value.isInitialized
                    ? Chewie(controller: _chewieController!)
                    : const Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          CircularProgressIndicator(),
                          SizedBox(height: 20),
                          Text('加载中'),
                        ],
                      ),
              ),
            ),
            TextButton(
              onPressed: () {
                _chewieController?.enterFullScreen();
              },
              child: const Text('全屏'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter视频缓存插件video_cache的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter视频缓存插件video_cache的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter视频缓存插件video_cache的使用,下面是一个具体的代码案例,展示如何在Flutter应用中实现视频缓存和播放功能。

首先,确保你已经在pubspec.yaml文件中添加了video_cachechewie(一个用于Flutter的视频播放器控件)的依赖:

dependencies:
  flutter:
    sdk: flutter
  video_player: ^2.2.17 # 请确保版本是最新的
  chewie: ^1.2.2 # 请确保版本是最新的
  video_cache: ^0.3.4 # 请确保版本是最新的,注意这个插件可能不是官方维护的,确保选择一个活跃维护的版本

然后,运行flutter pub get来获取这些依赖。

接下来,在你的Flutter应用中,你可以按照以下步骤实现视频缓存和播放:

  1. 导入必要的包。
  2. 使用VideoCache来获取缓存的视频URL。
  3. 使用chewie来播放视频。

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:chewie/chewie.dart';
import 'package:video_cache/video_cache.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Video Cache Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: VideoCacheDemo(),
    );
  }
}

class VideoCacheDemo extends StatefulWidget {
  @override
  _VideoCacheDemoState createState() => _VideoCacheDemoState();
}

class _VideoCacheDemoState extends State<VideoCacheDemo> {
  VideoPlayerController _controller;
  ChewieController _chewieController;

  @override
  void initState() {
    super.initState();
    // 视频的原始URL
    String videoUrl = 'https://www.example.com/path/to/your/video.mp4';

    // 使用VideoCache获取缓存的视频URL
    VideoCache().getVideoUrl(videoUrl).then((cachedUrl) {
      // 创建VideoPlayerController
      _controller = VideoPlayerController.network(cachedUrl)
        ..initialize().then((_) {
          // 创建ChewieController
          setState(() {
            _chewieController = ChewieController(
              videoPlayerController: _controller,
              aspectRatio: _controller.value.aspectRatio,
              autoPlay: false,
              looping: false,
            );
          });
        });
    });
  }

  @override
  void dispose() {
    _controller?.dispose();
    _chewieController?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Cache Demo'),
      ),
      body: Center(
        child: _chewieController != null
            ? Chewie(controller: _chewieController)
            : CircularProgressIndicator(),
      ),
    );
  }
}

在这个示例中:

  1. 我们首先定义了一个VideoCacheDemo类,它包含了一个VideoPlayerController和一个ChewieController
  2. initState方法中,我们使用VideoCache().getVideoUrl(videoUrl)来获取缓存的视频URL。
  3. 一旦我们获取到缓存的URL,我们就用它来初始化VideoPlayerController
  4. 然后,我们使用这个VideoPlayerController来初始化ChewieController
  5. build方法中,我们检查_chewieController是否为null,如果不为null,则显示视频播放器,否则显示一个加载指示器。

请注意,video_cache插件可能不是官方维护的,因此在使用时请确保选择一个活跃维护的版本,并查看其文档以获取最新的使用方法和注意事项。如果插件有更新或者API有变化,请根据实际情况调整代码。

回到顶部