鸿蒙 Flutter 实战:video_compress 3.1.4 适配 3.27-ohos 全流程
在鸿蒙(OpenHarmony)Flutter3.27-ohos生态下,社区已有针对较老 SDK 的适配。本文记录在上,将上游跑通并完成真机验证的过程,涵盖环境、构建、Demo 功能测试与依赖接入。开源仓库在上,基于社区完成适配。提供可运行的与对外仓库。、缩略图、。
摘要
在鸿蒙(OpenHarmony)Flutter 3.27-ohos 生态下,社区已有针对较老 SDK 的 fluttertpc_video_compress 适配。本文记录在 Flutter 3.27.5-ohos-1.0.3 上,将上游 video_compress ^3.1.4 跑通并完成真机验证的过程,涵盖环境、构建、Demo 功能测试与依赖接入。
开源仓库:https://gitcode.com/xiaoyangming/flutter_video_compress_ohos
一、为什么要做这件事?
video_compress 是 Flutter 侧常用的视频处理插件,主要能力包括:
| 能力 | 说明 |
|---|---|
| 视频压缩 | 缩小体积,可选画质、帧率、是否保留音频、裁剪时间段 |
| 缩略图 | getByteThumbnail(内存)、getFileThumbnail(文件) |
| 媒体信息 | getMediaInfo 读取宽高、时长、大小等 |
业务里常见场景:用户选视频 → 压缩后上传、生成封面图、展示视频信息。
鸿蒙 Flutter 使用 ohos 平台实现,不能直接用 pub.dev 上未适配鸿蒙的版本。参考仓基于 3.7-ohos 等版本已有实现,本文目标是在 3.27-ohos 上复用并验证。

二、环境与参考
2.1 开发环境
| 项 | 版本 / 说明 |
|---|---|
| Flutter | 3.27.5-ohos-1.0.3 |
| Dart | 3.6.2 |
| 命令 | flutter(本地若用 FVM,将下文 flutter 改为 fvm flutter 即可) |
| IDE | DevEco Studio(鸿蒙签名、真机调试) |
验证 Flutter 版本:
flutter --version

2.2 参考与发布仓库
| 仓库 | 作用 |
|---|---|
| CPF-Flutter/fluttertpc_video_compress | 已有鸿蒙适配,作实现参考 |
| xiaoyangming/flutter_video_compress_ohos | 本文适配成果对外发布 |
| pub.dev/video_compress | 上游 Dart API(3.1.4) |
三、适配思路(3.27-ohos)
整体不是从零写插件,而是:
- 以社区 fluttertpc_video_compress 为基线(含
ohos/ArkTS + FFmpeg 原生实现)。 - 对齐上游包版本 3.1.4,放宽 Dart SDK 约束以支持 Dart 3.x。
- 在 3.27.5-ohos-1.0.3 下执行
pub get、analyze、build hap。 - 扩展 example 为功能演示页,真机验证压缩 / 缩略图 / 媒体信息。
工程关键目录:
flutter_video_compress_ohos/
├── lib/ # Dart API(包名仍为 video_compress)
├── ohos/ # 鸿蒙 HAR、转码原生实现
├── example/
│ ├── lib/demo_page.dart # 功能演示
│ └── ohos/ # 示例 App,在此配置签名
└── pubspec.yaml
四、接入项目
4.1 添加依赖
在业务工程 pubspec.yaml 中:
dependencies:
video_compress:
git:
url: https://gitcode.com/xiaoyangming/flutter_video_compress_ohos.git
ref: v3.1.4-ohos-3.27
说明:Git 仓库名是
flutter_video_compress_ohos,Dart package 名仍是video_compress,无需改 import。
flutter pub get
4.2 代码示例
import 'package:video_compress/video_compress.dart';
// 媒体信息
final info = await VideoCompress.getMediaInfo(videoPath);
// 文件缩略图(position 单位为毫秒)
final thumbFile = await VideoCompress.getFileThumbnail(
videoPath,
quality: 80,
position: 0,
);
// 内存缩略图
final thumbBytes = await VideoCompress.getByteThumbnail(
videoPath,
quality: 80,
position: 0,
);
// 视频压缩(鸿蒙侧 startTime/duration 为秒,见下文说明)
final out = await VideoCompress.compressVideo(
videoPath,
quality: VideoQuality.MediumQuality,
includeAudio: true,
frameRate: 30,
startTime: 0,
duration: 10,
);
五、构建与签名
5.1 编译 HAP
cd example
flutter pub get
flutter build hap --debug
成功时可看到类似输出:
✓ Built ohos/entry/build/default/outputs/default/entry-default-signed.hap

5.2 DevEco 签名目录
签名请在 example 的鸿蒙工程 配置,不是插件根目录的 ohos/:
example/ohos/
步骤:File → Project Structure → Signing Configs → Automatically generate signature。

六、真机功能验证(Demo)
仓库 example 提供 「video_compress 功能演示」 页面。
| 步骤 | 操作 | 对应 API |
|---|---|---|
| 1 | 选择视频(相册) | — |
| 2 | 获取 MediaInfo | getMediaInfo |
| 3 | 内存缩略图 / 文件缩略图 | getByteThumbnail / getFileThumbnail |
| 4 | 配置画质、帧率、音频、起止时间后压缩 | compressVideo |




参数单位(鸿蒙实现)
| 参数 | 单位 | 备注 |
|---|---|---|
缩略图 position |
毫秒 | 与 Dart 文档一致 |
压缩 startTime / duration |
秒 | 对应原生 FFmpeg -ss / -t |
duration 不传或关闭「限制时长」 |
压到视频结尾 | 原生侧 duration = -1 |
3.27-ohos 已验证项
flutter pub get/analyze无 errorflutter build hap --debug成功- 真机 Demo:媒体信息、缩略图、压缩
七、与参考仓的差异说明
| 对比项 | 参考仓(3.7 / 3.35 等) | 本文(3.27-ohos) |
|---|---|---|
| Flutter SDK | 文档列 3.7.12 / 3.35.8 等 | 3.27.5-ohos-1.0.3 |
| 包版本 | 3.1.2 等 | 对齐 3.1.4 |
| Dart SDK | 旧约束 | >=3.0.0 <4.0.0 |
| Example | 功能较简 | 增加 demo_page 全量演示 |
鸿蒙 API 支持情况(与参考仓一致,节选):
| API | ohos |
|---|---|
| compressVideo | ✅ |
| getByteThumbnail / getFileThumbnail | ✅ |
| getMediaInfo | ✅ |
八、常见问题
Q1:build hap 提示配置签名?
在 DevEco 打开 example/ohos,配置自动签名后重试。
Q2:依赖报错找不到 video_compress?
确认 git 地址为 flutter_video_compress_ohos,且已 flutter pub get。
Q3:压缩很慢?
参考仓历史 commit 曾标注 ohos 转码性能 TODO,大文件请真机实测耗时。
Q4:和 pub.dev 原版能混用吗?
鸿蒙工程请只用本 git 依赖;Android/iOS 若用原版需按平台拆分依赖(本文未展开)。
九、总结
- 在 Flutter 3.27.5-ohos-1.0.3 上,基于社区
fluttertpc_video_compress完成 video_compress 3.1.4 适配。 - 提供可运行的 example Demo 与对外仓库 flutter_video_compress_ohos。
- 核心业务可按本文接入:
getMediaInfo、缩略图、compressVideo。
十、参考链接
- 插件仓库:https://gitcode.com/xiaoyangming/flutter_video_compress_ohos
- 参考实现:https://gitcode.com/CPF-Flutter/fluttertpc_video_compress
- 上游包:https://pub.dev/packages/video_compress
- AtomGit:https://atomcode.atomgit.com
更多推荐


所有评论(0)