插件介绍

fluttertpc_chewie 是一个基于 chewie@1.8.5 开发的 HarmonyOS 适配版本,为 Flutter 开发者提供了在 HarmonyOS 设备上实现高质量视频播放的能力。该插件提供了丰富的视频控制功能,包括播放/暂停、进度控制、音量调节、全屏播放等,同时支持自定义字幕和播放控制界面。

主要功能特性

  • ✅ 视频播放控制(播放、暂停、跳转)
  • ✅ 进度条拖动和时间显示
  • ✅ 音量调节和静音控制
  • ✅ 全屏播放支持
  • ✅ 循环播放设置
  • ✅ 自定义字幕支持(带样式和时间控制)
  • ✅ 多平台控制界面适配(Material、Cupertino、Desktop)
  • ✅ 播放速度调节
  • ✅ 自定义控件布局和样式

如何使用插件

1. 包的引入

由于这是一个自定义修改的 HarmonyOS 适配版本,需要通过 Git 形式引入。在项目的 pubspec.yaml 文件中添加以下配置:

dependencies:
  chewie:
    git:
      url: https://gitcode.com/openharmony-sig/fluttertpc_chewie.git

dev_dependencies:
  chewie_ohos:
    git:
      url: https://gitcode.com/openharmony-sig/fluttertpc_chewie.git
      path: ohos

添加依赖后,执行以下命令获取包:

flutter pub get

2. API 的调用与实现

2.1 基本使用示例

下面是一个在 HarmonyOS 上使用 chewie_ohos 实现视频播放的基本示例:

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

class ChewieDemo extends StatefulWidget {
  const ChewieDemo({Key? key}) : super(key: key);

  
  _ChewieDemoState createState() => _ChewieDemoState();
}

class _ChewieDemoState extends State<ChewieDemo> {
  late VideoPlayerController _videoPlayerController;
  ChewieController? _chewieController;

  
  void initState() {
    super.initState();
    initializePlayer();
  }

  
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController?.dispose();
    super.dispose();
  }

  Future<void> initializePlayer() async {
    // 初始化视频控制器
    _videoPlayerController = VideoPlayerController.networkUrl(
      Uri.parse('https://media.w3.org/2010/05/sintel/trailer.mp4'),
    );

    await _videoPlayerController.initialize();

    // 创建 Chewie 控制器
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      autoPlay: true, // 自动播放
      looping: true,  // 循环播放
    );

    setState(() {});
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Chewie 视频播放器'),
      ),
      body: Center(
        child: _chewieController != null &&
                _chewieController!.videoPlayerController.value.isInitialized
            ? Chewie(
                controller: _chewieController!, // 使用 Chewie 控制器
              )
            : const Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  CircularProgressIndicator(),
                  SizedBox(height: 20),
                  Text('视频加载中...'),
                ],
              ),
      ),
    );
  }
}
2.2 高级功能使用
自定义字幕
// 创建带样式的字幕
final subtitles = [
  Subtitle(
    index: 0,
    start: Duration.zero,
    end: const Duration(seconds: 10),
    text: const TextSpan(
      children: [
        TextSpan(text: 'Hello', style: TextStyle(color: Colors.red, fontSize: 22)),
        TextSpan(text: ' from ', style: TextStyle(color: Colors.green, fontSize: 20)),
        TextSpan(text: 'subtitles', style: TextStyle(color: Colors.blue, fontSize: 18)),
      ],
    ),
  ),
  Subtitle(
    index: 1,
    start: const Duration(seconds: 10),
    end: const Duration(seconds: 20),
    text: 'Whats up? :)',
  ),
];

// 在 ChewieController 中配置字幕
_chewieController = ChewieController(
  videoPlayerController: _videoPlayerController1,
  autoPlay: true,
  looping: true,
  subtitle: Subtitles(subtitles),
  subtitleBuilder: (context, dynamic subtitle) => Container(
    padding: const EdgeInsets.all(10.0),
    child: subtitle is InlineSpan
        ? RichText(text: subtitle)
        : Text(subtitle.toString(), style: const TextStyle(color: Colors.black)),
  ),
);
全屏控制
// 进入全屏
TextButton(
  onPressed: () {
    _chewieController?.enterFullScreen();
  },
  child: const Text('进入全屏'),
),

// 退出全屏
TextButton(
  onPressed: () {
    _chewieController?.exitFullScreen();
  },
  child: const Text('退出全屏'),
),
切换视频源
List<String> videoSources = [
  "https://media.w3.org/2010/05/sintel/trailer.mp4",
  "http://www.w3school.com.cn/example/html5/mov_bbb.mp4",
  "http://vjs.zencdn.net/v/oceans.mp4"
];

int currentIndex = 0;

Future<void> toggleVideo() async {
  await _videoPlayerController.pause();
  currentIndex = (currentIndex + 1) % videoSources.length;

  _videoPlayerController = VideoPlayerController.networkUrl(
    Uri.parse(videoSources[currentIndex]),
  );

  await _videoPlayerController.initialize();

  _chewieController = _chewieController!.copyWith(
    videoPlayerController: _videoPlayerController,
    autoPlay: true,
    looping: true,
  );

  setState(() {});
}
控制界面样式切换
// 切换为 Android 风格控件
setState(() {
  _platform = TargetPlatform.android;
});

// 切换为 iOS 风格控件
setState(() {
  _platform = TargetPlatform.iOS;
});

// 切换为 Desktop 风格控件
setState(() {
  _platform = TargetPlatform.windows;
});

3. 核心 API 参考

控制器方法
方法名 返回类型 描述 HarmonyOS 支持
play() Future<void> 开始播放视频
pause() Future<void> 暂停视频播放
seekTo(Duration moment) Future<void> 跳转到指定时间
setVolume(double volume) Future<void> 设置视频音量
setLooping(bool looping) Future<void> 设置是否循环播放
enterFullScreen() void 进入全屏模式
exitFullScreen() void 退出全屏模式
setSpeed(double speed) Future<void> 设置播放速度
控制器属性
属性名 类型 描述 HarmonyOS 支持
videoPlayerController VideoPlayerController 视频控制器
autoPlay bool 视频加载后自动播放
looping bool 是否循环播放
showControls bool 是否显示控制界面
autoInitialize bool 启动时自动初始化视频
draggableProgressBar bool 进度条是否可拖动
startAt Duration 从指定位置开始播放
subtitle Subtitles 字幕内容
subtitleBuilder Widget Function(BuildContext, dynamic) 自定义字幕渲染
additionalOptions List<OptionItem> Function(BuildContext) 自定义选项菜单
zoomAndPan bool 是否允许缩放和平移
maxScale double 最大缩放比例
showOptions bool 是否显示选项按钮

约束与限制

  • Flutter 版本: 3.7.12-ohos-1.0.6
  • HarmonyOS SDK 版本: 5.0.0(12)
  • DevEco Studio 版本: 5.0.13.200
  • ROM 版本: 5.1.0.120 SP3

总结

fluttertpc_chewie 是一个功能强大的 HarmonyOS 适配视频播放器插件,它基于官方 chewie 包进行扩展,为 Flutter 开发者提供了在 HarmonyOS 设备上实现高质量视频播放的完整解决方案。

该插件不仅支持基本的视频播放功能,还提供了丰富的自定义选项,包括字幕、控制界面、播放设置等。通过简单的 API 调用,开发者可以轻松实现专业级的视频播放体验,满足各种应用场景的需求。

使用 Git 形式引入包的方式确保了开发者能够获取到最新的 HarmonyOS 适配版本,同时保持与官方 chewie 包的 API 兼容性,降低了迁移和学习成本。

无论是开发短视频应用、在线教育平台、直播应用还是媒体播放器,fluttertpc_chewie 都是 HarmonyOS 上 Flutter 视频播放的理想选择。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐