Flutter视频播放器插件chewiebingeplayer的使用

Flutter视频播放器插件chewiebingeplayer的使用

chewie

Flutter Community: chewie

Version CI Platform

The video player for Flutter with a heart of gold.

The video_player 插件提供了低级别的视频播放访问。Chewie 在底层使用 video_player 并用友好的 Material 或 Cupertino UI 包装它!

Preview

MaterialControls MaterialDesktopControls
MaterialControls MaterialDesktopControls

CupertinoControls

CupertinoControls

Installation

在你的 Flutter 项目中的 pubspec.yaml 文件下添加 chewievideo_player 作为依赖项:

dependencies:
  chewie: <latest_version>
  video_player: <latest_version>

Using it

import 'package:chewiebingeplayer/chewie.dart';

// 初始化视频播放控制器
final videoPlayerController = VideoPlayerController.networkUrl(Uri.parse(
    'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4'));

await videoPlayerController.initialize();

// 初始化 chewie 控制器
final chewieController = ChewieController(
  videoPlayerController: videoPlayerController,
  autoPlay: true,
  looping: true,
);

// 创建 chewie 视频播放组件
final playerWidget = Chewie(
  controller: chewieController,
);

请确保在使用后释放两个控制器。例如,在 StatefulWidgetdispose 方法中覆盖它们:

@override
void dispose() {
  videoPlayerController.dispose();
  chewieController.dispose();
  super.dispose();
}

Options

Options

Chewie 提供了一些用于控制视频的选项。这些选项默认情况下会出现在一个 showModalBottomSheet 中(类似于 YouTube)。默认情况下,Chewie 将 播放速度字幕 选项作为 OptionItem 传递。

要添加额外的选项,只需在 ChewieController 中添加以下代码:

additionalOptions: (context) {
  return <OptionItem>[
    OptionItem(
      onTap: () => debugPrint('My option works!'),
      iconData: Icons.chat,
      title: 'My localized title',
    ),
    OptionItem(
      onTap: () =>
          debugPrint('Another option that works!'),
      iconData: Icons.chat,
      title: 'Another localized title',
    ),
  ];
},

Customizing the modal sheet

如果你不喜欢默认的 showModalBottomSheet 来显示选项,你可以通过 optionsBuilder 方法覆盖视图:

optionsBuilder: (context, defaultOptions) async {
  await showDialog<void>(
    context: context,
    builder: (ctx) {
      return AlertDialog(
        content: ListView.builder(
          itemCount: defaultOptions.length,
          itemBuilder: (_, i) => ActionChip(
            label: Text(defaultOptions[i].title),
            onPressed: () =>
                defaultOptions[i].onTap!(),
          ),
        ),
      );
    },
  );
},

你的 additionalOptions 已经包含在这里(如果你提供了 additionalOptions)!

Translations

没有适当的翻译,一个选项有什么意义?

要添加你的翻译字符串,请添加以下代码:

optionsTranslation: OptionsTranslation(
  playbackSpeedButtonText: 'Wiedergabegeschwindigkeit',
  subtitlesButtonText: 'Untertitel',
  cancelButtonText: 'Abbrechen',
),

Subtitles

自从版本 1.1.0 起,chewie 支持字幕。这里是如何使用它们的方法。

你可以提供一个 List<Subtitle> 并使用 subtitleBuilder 函数自定义字幕。

向你的 ChewieController 添加字幕如下所示:

ChewieController(
  videoPlayerController: _videoPlayerController,
  autoPlay: true,
  looping: true,
  subtitle: Subtitles([
    Subtitle(
      index: 0,
      start: Duration.zero,
      end: const Duration(seconds: 10),
      text: 'Hello from subtitles',
    ),
    Subtitle(
      index: 1,
      start: const Duration(seconds: 10),
      end: const Duration(seconds: 20),
      text: 'Whats up? :)',
    ),
  ]),
  subtitleBuilder: (context, subtitle) => Container(
    padding: const EdgeInsets.all(10.0),
    child: Text(
      subtitle,
      style: const TextStyle(color: Colors.white),
    ),
  ),
);

index 属性是为了如果你希望将字幕结构化并在此处提供索引。endtext 是关键属性。

Duration 定义了字幕在视频中的开始和结束时间。例如,如果你的视频长 10 分钟,并且你想在第 0 秒到第 10 秒之间添加字幕:

Subtitle(
  index: 0,
  start: Duration.zero,
  end: const Duration(seconds: 10),
  text: 'Hello from subtitles',
),

Example

请在 example/ 文件夹中运行应用来开始播放!

Migrating from Chewie < 0.9.0

与以前相比,现在你不再将 VideoPlayerController 和你的选项直接传递给 Chewie 组件,而是先将其传递给 ChewieController,然后将该控制器传递给 Chewie 组件。

final playerWidget = Chewie(
  videoPlayerController,
  autoPlay: true,
  looping: true,
);

变为

final chewieController = ChewieController(
  videoPlayerController: videoPlayerController,
  autoPlay: true,
  looping: true,
);

final playerWidget = Chewie(
  controller: chewieController,
);

Roadmap

  • ✅ Material UI
  • ✅ Material Desktop UI
  • ✅ Cupertino UI
  • ✅ 带有翻译的选项
  • ✅ 字幕
  • ✅ 自定义控件
  • ✅ 根据源宽高比自动旋转全屏
  • ✅ 直播流和 UI
  • ✅ 自动播放
  • ✅ 占位符
  • ✅ 循环播放
  • ✅ 从指定时间开始播放
  • ✅ 自定义进度条颜色
  • ✅ 自定义叠加层
  • ✅ 允许睡眠(保持唤醒)
  • ✅ 播放速度控制
  • ✅ 自定义路由页面构建器
  • ✅ 自定义设备方向和系统覆盖
  • ✅ 自定义错误构建器
  • ❌ 支持不同分辨率的视频
  • ❌ 重新设计状态管理器为 Provider
  • ❌ 屏幕镜像 / 投放 (Google Chromecast)

iOS warning

video_player 插件在 iOS 模拟器上只能在 flutter 1.26.0 或更高版本中工作。你可能需要切换到 beta 通道 flutter channel beta 请参阅此 issue

000000000000000KKKKKKKKKKKKXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKK00
000000000000000KKKKKKKKKKKKKXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00
...

示例代码

import 'package:chewiebingeplayer_example/app/app.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(
    const ChewieDemo(),
  );
}

更多关于Flutter视频播放器插件chewiebingeplayer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


ChewieBingePlayer 是一个基于 chewievideo_player 的 Flutter 视频播放器插件,它提供了更加丰富的功能和用户界面,适合用于视频播放应用。Chewie 是一个用于 video_player 的包装器,提供了自定义的用户界面和控制组件,而 ChewieBingePlayer 进一步扩展了 Chewie 的功能,支持更多的定制化选项。

以下是使用 ChewieBingePlayer 的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 chewie_binge_playervideo_player 依赖:

dependencies:
  flutter:
    sdk: flutter
  chewie_binge_player: ^1.0.0  # 请检查最新版本
  video_player: ^2.4.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

2. 基本使用

在 Dart 文件中导入相关库,并初始化 ChewieBingePlayer

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:chewie_binge_player/chewie_binge_player.dart';

class VideoPlayerScreen extends StatefulWidget {
  @override
  _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  late VideoPlayerController _videoPlayerController;
  late ChewieBingePlayerController _chewieBingePlayerController;

  @override
  void initState() {
    super.initState();
    _videoPlayerController = VideoPlayerController.network(
      'https://www.example.com/sample.mp4', // 视频URL
    );

    _chewieBingePlayerController = ChewieBingePlayerController(
      videoPlayerController: _videoPlayerController,
      aspectRatio: 16 / 9,
      autoPlay: true,
      looping: false,
      // 其他自定义选项
    );
  }

  @override
  void dispose() {
    _videoPlayerController.dispose();
    _chewieBingePlayerController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chewie Binge Player'),
      ),
      body: Center(
        child: ChewieBingePlayer(
          controller: _chewieBingePlayerController,
        ),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: VideoPlayerScreen(),
  ));
}

3. 自定义选项

ChewieBingePlayerController 提供了多种自定义选项,例如:

  • autoPlay: 是否自动播放。
  • looping: 是否循环播放。
  • aspectRatio: 视频的宽高比。
  • showControls: 是否显示控制条。
  • customControls: 自定义控制条组件。
  • overlay: 覆盖在视频顶部的自定义组件。

4. 处理全屏

ChewieBingePlayer 默认支持全屏播放。你可以通过设置 allowedScreenSleep: false 来防止设备屏幕在播放时休眠。

5. 处理错误

为了处理视频加载或播放时的错误,你可以使用 ErrorBuilder 来显示自定义的错误提示。

_chewieBingePlayerController = ChewieBingePlayerController(
  videoPlayerController: _videoPlayerController,
  aspectRatio: 16 / 9,
  autoPlay: true,
  looping: false,
  errorBuilder: (context, errorMessage) {
    return Center(
      child: Text(
        errorMessage,
        style: TextStyle(color: Colors.white),
      ),
    );
  },
);
回到顶部