chewie

一个充满热情的 Flutter 视频播放器。

video_player 插件提供了对视频播放的底层访问。Chewie 在底层使用了 video_player,并将其包装在友好的 Material 或 Cupertino UI 中!

预览

MaterialControls MaterialDesktopControls

CupertinoControls

安装

在你的 Flutter 项目的 pubspec.yaml 文件中

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

使用它

import 'package:chewie/chewie.dart';
final videoPlayerController = VideoPlayerController.network(
    'https://github.flutterdart.cn/assets-for-api-docs/assets/videos/butterfly.mp4');

await videoPlayerController.initialize();

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

final playerWidget = Chewie(
  controller: chewieController,
);

请确保在使用后 Dispose 两个控制器组件。例如,通过重写 StatefulWidget 的 dispose 方法

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

选项

Chewie 有一些选项可以控制您提供的视频。这些选项默认会出现在 showModalBottomSheet 中(就像您从 YT 已经知道的那样)。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 working!'),
      iconData: Icons.chat,
      title: 'Another localized title',
    ),
  ];
},

如果您不想通过默认的 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)!

最后但同样重要:没有适当的翻译,选项就没有意义。要将您的字符串添加到其中,只需添加

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

字幕

从 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 属性仅用于您想在数据库中组织字幕并在此处提供索引的目的。startendtext 是这里的关键属性。

Duration 定义了字幕应该在视频的哪个部分开始和结束。例如:您的视频有 10 分钟长,您想在:00:0000:10 秒之间添加一个字幕,您必须提供

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

示例

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

从 Chewie < 0.9.0 迁移

现在,您将 VideoPlayerController 和选项传递给 ChewieController,然后将后者传递给 Chewie 小部件,而不是将它们传递给 Chewie 小部件。

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

变为

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

final playerWidget = Chewie(
  controller: chewieController,
);

路线图

  • MaterialUI
  • MaterialDesktopUI
  • CupertinoUI
  • 带翻译的选项
  • 字幕
  • CustomControls
  • 根据源纵横比在全屏时自动旋转
  • 直播流和 UI
  • 自动播放
  • Placeholder
  • 循环播放
  • 从...开始播放
  • 自定义进度条颜色
  • 自定义叠加层
  • 允许休眠 (Wakelock)
  • 播放速度控制
  • 自定义路由页面构建器
  • 全屏前后自定义设备方向和系统叠加层
  • 自定义错误构建器
  • 支持不同分辨率的视频
  • 使用 Provider 重新设计状态管理器
  • 屏幕镜像/投射 (Google Chromecast)

iOS 警告

Chewie 使用的 video_player 插件仅在 Flutter 1.26.0 或更高版本上的 iOS 模拟器中有效。您可能需要切换到 beta 版本 flutter channel beta。请参考此 问题

000000000000000KKKKKKKKKKKKXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKK00
000000000000000KKKKKKKKKKKKKXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00
000000000000000KKKKKKKKKKKKKXXXXXXK0xdoddoclodxOKKKKKKKKKKKKKKKKKKK00
00000000000000KKKKKKKKKKKKKKKK0xoc:;;,;,,,,''';cldxO0KKKKKKKKKKKKK000
00000000000000KKKKKKKKKKKKKKx:'',,,'.,'...;,'''',;:clk0KKKKKKKKKKK000
00000000000000KKKKKKKKKKKKd;'',,,;;;'.,..,c;;,;;;;;:;;d0KKKKKKKKKK000
00000000000000KKKKKKKKKKx,',;:ccl;,c;';,,ol::coolc:;;,,x0KKKKKKKKK000
00000000000000KKKKKKKKOl;:;:clllll;;o;;;cooclddclllllc::kKKKKKKKKK000
00000000000000KKKKKK0o;:ccclccccooo:ooc:ddoddloddolc;;;:c0KKKKKKK0000
00000000000000KKKKKOccodolccclllooddddddxdxddxkkkkxxo;'';d0KKKKKK0000
00000000000000KKKKkcoddolllllclloodxxxxdddxdddxxxddool:'.;O0KKKKK0000
00000000000000000xloollcccc:cclclodkkxxxdddxxxkkxdlllolc,,x0KKKKK0000
0000000000000000xccllccccc:;,'',;:dxkxxddddxkkkxdollcc:cc;d0KKKKKK000
000000000000000kcc:::cllol:'......odxxdoccldxxxdollllc:;;:d0KKKKK0000
00000000000000klc;;;clcc::;'...';;;:cll..',cdddolccccccc;:x0KKKKK0000
0000000000000kdl;:cclllclllc::;,;.'.''o;,,'.;ccoooollllc:;x0KKKKK0000
000000000000kol;:;::coolcc:::,.....,..cd,....':lolclolllc;x0KKKK00000
00000000000Odl;:'cllol;''',;;;;::''.',:doc;,',::looc:lcol:x0K00000000
0000000000Oxl:c,:lolc,..',:clllollodoc;cllolccloolllcclollO0K00000000
0000000000xllc,:lool:'.,...o.;llxdo:loc;;ccodlolodldllolld00K0K000000
000000000Ooc::coooc,,.',;:lx,,...':;o;l;':o:oolccocdoldloO0000KK00000
00000000kol:clllc;;,.;::;:clllllolxc;.:c':ocldlccl;clldox000000000000
000000Odll:cccc;:;,';cllooodoollcloll;c:.:d:ooo;cl;oloddkO00000000000
0000OOddOdll;c,;;,,;;:cldodddoxdoodlcc:.,ox:o:lllocdlodx00O0000000000
000Oxdl:::ll,:,:;,';c,:oloddolkxddxolc.'coccocolcccoooc;oxO00KOOOO000
dc;,'...';c,,:c:::'c:';cldoo;:odolxoc:.,o:oldlxol;lddl,.,lkO0KdlcckKO
'.......,:''';cll:cc,,;:l:c,,;:oc;cdc,.;::dldoxd:ldol;,'..,:lo,,,,kOk
.......';'.',:clcll,,;:l:;'..''c:,;cl'.';dxoooxlddl;',''..,,;'...,ool
.......,,.'';;:cld;.;,do:..;:,':c',:c''';xxdldocol'..';,.......',;;,;
.......'..'',,coxc'';:do'.clc:lco',o;',;cOxdol:cc:.....'..oxd;','.'..
'.......''..,:cxl;';;cx:''cll:clc'cl',:l:ko:c..;c:..';...,KNNl;:;ll:'
.......''...;,ooc,,,:od'.':cccdd,,l''cl:co;;,..;;'..','..;d0O,;;:XXXK
............'cll;',,lo'.'.::codl,c..:c;doc.,:.',....'...'......'l0XKk
'............c;;,':lc.'',.;ccol;:,.:c.:o,;'.;'......,...',,.'...'.,;;
.............',;;,cc..;,'';:lc':;..c'.c:;.,......,'..'...'',:,,;;,...
..............',,;:'.';,',:c;.;;..';..,;,.........''..'...'kko.,,....
...............;,:'..;''';:,..;''.''..''............'...'.lK0c';;c;'.
...............,,'...,.',;''...''....,......'............'dOx',;:dd,'
..............',.....'.,;..'..',..........'..............';:;',,ldo.'
.............'''.'.....,'..',','..'...''..'............'.......,dx'.'
.......................,...';,'..'.....,.'.............''.'......'..'
...........'......'...',..'';,'..'.....................',';,..'....'.

GitHub

查看 Github