一、插件介绍

Fluttertpc_Chewie 是一个基于 Flutter 官方 video_player 插件封装的视频播放控件库,专为 HarmonyOS 平台进行了适配和优化。它提供了友好的 Material 和 Cupertino 风格的视频播放界面,支持丰富的视频控制功能,让开发者能够轻松实现高质量的视频播放体验。

核心功能

  • 🎬 完整的播放控制:播放/暂停、快进/快退、进度条拖动
  • 🎨 双风格界面:支持 Material 和 Cupertino 两种 UI 风格
  • ⚙️ 丰富的播放选项:循环播放、自动播放、音量控制
  • ⏱️ 播放速度调节:支持 0.25x 到 2.0x 多种播放速度
  • 📝 字幕支持:可自定义字幕内容、样式和显示方式
  • 🔄 自动切换全屏:支持横竖屏切换和全屏播放
  • 🎯 自定义主题:可自定义进度条颜色、控制按钮样式等
  • 流畅的用户体验:自动隐藏控件、加载缓冲提示等

适用场景

Fluttertpc_Chewie 适用于各种需要视频播放功能的 HarmonyOS Flutter 应用,如:

  • 在线视频播放应用
  • 教育类应用的视频课程播放
  • 新闻资讯应用的视频内容展示
  • 社交媒体应用的视频分享功能
  • 电商应用的产品视频展示

二、安装与集成

2.1 环境要求

  • Flutter: 3.7.12-ohos-1.0.6 或更高版本
  • HarmonyOS SDK: 5.0.0(12) 或更高版本
  • DevEco Studio: 5.0.13.200 或更高版本

2.2 依赖配置

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

dependencies:
  chewie:
    git:
      url: "https://atomgit.com/openharmony-sig/fluttertpc_chewie.git"
      path: "fluttertpc_chewie"
  video_player:
    git:
      url: "https://atomgit.com/openharmony-sig/fluttertpc_video_player.git"
      path: "fluttertpc_video_player"

2.3 安装依赖

执行以下命令安装依赖:

flutter pub get

三、API 文档与使用示例

3.1 基础使用

以下是一个简单的视频播放示例:

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

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

  
  State<VideoPlayerScreen> createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  late VideoPlayerController _videoPlayerController;
  ChewieController? _chewieController;

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

  Future<void> _initializePlayer() async {
    // 初始化视频控制器
    _videoPlayerController = VideoPlayerController.networkUrl(
      Uri.parse('https://assets.mixkit.co/videos/preview/mixkit-spinning-around-the-earth-29351-large.mp4'),
    );

    await _videoPlayerController.initialize();

    // 创建 Chewie 控制器
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      autoPlay: true,
      looping: true,
      showControls: true,
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.red,
        handleColor: Colors.blue,
        backgroundColor: Colors.grey,
        bufferedColor: Colors.lightGreen,
      ),
      placeholder: Container(
        color: Colors.grey,
        child: const Center(child: Text('加载中...')),
      ),
    );

    setState(() {});
  }

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

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('视频播放器')),
      body: Center(
        child: _chewieController != null &&
               _chewieController!.videoPlayerController.value.isInitialized
            ? Chewie(controller: _chewieController!)
            : const CircularProgressIndicator(),
      ),
    );
  }
}

3.2 字幕功能

Chewie 支持自定义字幕功能,可以为视频添加多段字幕:

// 创建字幕列表
final subtitles = [
  Subtitle(
    index: 0,
    start: Duration.zero,
    end: const Duration(seconds: 10),
    text: '欢迎使用 Fluttertpc_Chewie',
  ),
  Subtitle(
    index: 1,
    start: const Duration(seconds: 10),
    end: const Duration(seconds: 20),
    text: '这是一个功能强大的视频播放器',
  ),
  Subtitle(
    index: 2,
    start: const Duration(seconds: 20),
    end: const Duration(seconds: 30),
    text: '支持字幕、播放速度调节等功能',
  ),
];

// 在 ChewieController 中配置字幕
_chewieController = ChewieController(
  videoPlayerController: _videoPlayerController,
  autoPlay: true,
  looping: true,
  subtitle: Subtitles(subtitles),
  subtitleBuilder: (context, dynamic subtitle) => Container(
    padding: const EdgeInsets.all(10.0),
    decoration: BoxDecoration(
      color: Colors.black.withOpacity(0.7),
      borderRadius: BorderRadius.circular(5),
    ),
    child: Text(
      subtitle.toString(),
      style: const TextStyle(color: Colors.white, fontSize: 16),
    ),
  ),
);

3.3 自定义控制选项

可以通过 additionalOptions 参数为视频播放器添加自定义控制选项:

_chewieController = ChewieController(
  videoPlayerController: _videoPlayerController,
  autoPlay: true,
  looping: true,
  additionalOptions: (context) {
    return <OptionItem>[
      OptionItem(
        onTap: () {
          // 切换到另一个视频源
          _switchVideoSource();
        },
        iconData: Icons.live_tv_sharp,
        title: '切换视频源',
      ),
      OptionItem(
        onTap: () {
          // 分享当前视频
          _shareVideo();
        },
        iconData: Icons.share,
        title: '分享视频',
      ),
    ];
  },
);

3.4 播放速度控制

Chewie 默认支持播放速度调节功能,用户可以在选项菜单中选择不同的播放速度:

_chewieController = ChewieController(
  videoPlayerController: _videoPlayerController,
  autoPlay: true,
  looping: true,
  // 可以指定默认的播放速度
  playbackSpeeds: [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0],
  // 默认播放速度
  playbackSpeed: 1.0,
);

3.5 控件样式切换

Chewie 支持 Material 和 Cupertino 两种控件样式,可以根据平台自动适配:

// 在 MaterialApp 中设置平台
MaterialApp(
  theme: ThemeData(
    platform: TargetPlatform.android, // 使用 Material 风格控件
    // platform: TargetPlatform.iOS, // 使用 Cupertino 风格控件
  ),
  home: const VideoPlayerScreen(),
);

四、HarmonyOS 平台特定配置

4.1 权限配置

在 HarmonyOS 平台上使用视频播放功能,需要在 module.json5 文件中配置相关权限:

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "Fluttertpc_Chewie 示例应用",
    "mainElement": "EntryAbility",
    "deviceTypes": ["phone"],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "EntryAbility",
        "icon": "$media:app_icon",
        "label": "fluttertpc_chewie_example",
        "startWindowIcon": "$media:app_icon",
        "startWindowBackground": {
          "type": "color",
          "value": "#FFFFFF"
        },
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ]
      }
    ],
    "reqPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.READ_MEDIA",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}

4.2 兼容性说明

HarmonyOS 版本 Flutter 版本 支持状态
5.0.0(12) 3.7.12-ohos-1.0.6 ✅ 完全支持
4.1.0(10) 3.7.12-ohos-1.0.6 ⚠️ 部分支持
4.0.0(9) 3.7.12-ohos-1.0.6 ❌ 不支持

五、API 参考

5.1 核心类

ChewieController
参数名 类型 说明 HarmonyOS 支持
videoPlayerController VideoPlayerController 视频控制器
autoPlay bool 是否自动播放
looping bool 是否循环播放
showControls bool 是否显示控件
materialProgressColors ChewieProgressColors Material 风格进度条颜色
cupertinoProgressColors ChewieProgressColors Cupertino 风格进度条颜色
placeholder Widget 加载占位符
autoInitialize bool 是否自动初始化
startAt Duration 起始播放位置
subtitle Subtitles 字幕配置
subtitleBuilder Widget Function(BuildContext, dynamic) 字幕构建器
additionalOptions List Function(BuildContext) 额外控制选项
playbackSpeeds List 播放速度列表
optionsTranslation OptionsTranslation 选项翻译配置
hideControlsTimer Duration 控件自动隐藏时间
Chewie
参数名 类型 说明 HarmonyOS 支持
controller ChewieController Chewie 控制器
key Key Widget Key

5.2 方法

方法名 返回值 说明 HarmonyOS 支持
play() Future 开始播放
pause() Future 暂停播放
seekTo(Duration moment) Future 跳转到指定位置
setLooping(bool looping) Future 设置是否循环播放
setVolume(double volume) Future 设置音量
enterFullScreen() void 进入全屏模式
exitFullScreen() void 退出全屏模式

六、总结

Fluttertpc_Chewie 是一款功能强大、易于使用的视频播放控件库,为 HarmonyOS 平台的 Flutter 开发者提供了完整的视频播放解决方案。它不仅提供了丰富的播放控制功能和友好的用户界面,还针对 HarmonyOS 平台进行了深度优化,确保了良好的性能和兼容性。

使用 Fluttertpc_Chewie,开发者可以快速实现高质量的视频播放功能,无需关注复杂的视频解码和界面实现细节,大大提高了开发效率。无论是简单的视频播放需求还是复杂的视频应用开发,Fluttertpc_Chewie 都是一个值得选择的优秀组件。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐