Flutter视频处理插件hms_video_plugin的使用
Flutter视频处理插件hms_video_plugin的使用
通过集成虚拟背景和模糊背景效果,您可以为您的Flutter应用添加丰富的视频处理功能。100ms视频插件允许您在100ms视频会议应用中添加虚拟背景、模糊背景和其他视频过滤器。该插件基于100ms Flutter SDK构建。
📖 完整文档:100ms官方文档
📲 示例iOS应用下载:TestFlight
🤖 示例Android应用下载:Firebase
100ms Flutter应用已发布在应用商店中,您可以通过以下链接下载:
📲 iOS应用在Apple App Store:100ms Live
🤖 Android应用在Google Play Store:100ms Live
安装指南
- 在100ms官网注册,并访问开发者标签以获取您的凭证。
- 阅读令牌与安全文档。
- 完成认证令牌快速入门指南中的步骤。
- 在
pubspec.yaml
文件中添加hms_video_plugin
依赖。
dependencies:
hms_video_plugin: ^最新版本号
📖 参考完整的安装指南。
最低配置
- 支持Flutter 3.10.0及以上版本
- 支持Android API级别21及以上版本
- 支持iOS 15及以上版本
支持的版本/分辨率
- 最小支持的100ms SDK版本为
1.10.3
限制
- 较旧的Android手机帧率较低
- 虚拟背景插件支持的最低iOS版本为
iOS 15
- 虚拟背景插件处于测试阶段,在iPhone X, 8, 7, 6等较旧设备上可能存在性能问题。建议在高性能设备上使用以获得流畅体验。
添加依赖
要将虚拟背景添加到您的应用中,请将hms_video_plugin
添加到应用的pubspec.yaml
文件中。
dependencies:
hms_video_plugin: ^最新版本号
如何集成虚拟背景插件
🗝️ 注意:
hms_video_plugin
不能独立使用。始终在onJoin
或onPreview
之后调用虚拟背景API。
1. 设置isVirtualBackgroundEnabled
属性
var videoTrackSetting = HMSVideoTrackSetting(
trackInitialState: joinWithMutedVideo
? HMSTrackInitState.MUTED
: HMSTrackInitState.UNMUTED,
isVirtualBackgroundEnabled: true);
2. 将轨道设置传递给HMSSDK
构造函数
/// 创建HMSTrackSetting实例
var trackSettings = HMSTrackSetting(
audioTrackSetting: HMSAudioTrackSetting(),
videoTrackSetting: videoTrackSetting);
/// 设置轨道设置到HMSSDK
var hmsSDK = HMSSDK(
hmsTrackSetting: trackSettings);
3. 检查虚拟背景是否可用
class Meeting implements HMSUpdateListener, HMSActionResultListener {
...
bool isVirtualBackgroundSupported = false;
/// 此方法检查虚拟背景是否可用
void checkIsVirtualBackgroundSupported() async {
isVirtualBackgroundSupported = await HMSVideoPlugin.isSupported();
}
...
}
4. 如果虚拟背景可用,则启用它
要启用虚拟背景,请调用enable
方法。
class Meeting implements HMSUpdateListener, HMSActionResultListener {
...
bool isVirtualBackgroundSupported = false;
/// 此方法检查虚拟背景是否可用
void checkIsVirtualBackgroundSupported() async {
isVirtualBackgroundSupported = await HMSVideoPlugin.isSupported();
}
/// 启用虚拟背景
void enableVirtualBackground(Uint8List? image) async {
/// [image] 是作为背景的图像
if (isVirtualBackgroundSupported) {
HMSException? isEnabled = await HMSVideoPlugin.enable(image: image);
if (isEnabled == null) {
/// 虚拟背景成功启动
} else {
/// 启用虚拟背景时出错
}
}
}
...
}
要启用背景模糊,请调用enableBlur
方法。
class Meeting implements HMSUpdateListener, HMSActionResultListener {
...
bool isVirtualBackgroundSupported = false;
/// 此方法检查虚拟背景是否可用
void checkIsVirtualBackgroundSupported() async {
isVirtualBackgroundSupported = await HMSVideoPlugin.isSupported();
}
/// 启用背景模糊
void enableBackgroundBlur(int blurRadius) async {
/// [blurRadius] 是模糊效果的半径
if (isVirtualBackgroundSupported) {
HMSException? isEnabled = await HMSVideoPlugin.enableBlur(blurRadius: blurRadius);
if (isEnabled == null) {
/// 背景模糊成功启动
} else {
/// 启用模糊时出错
}
}
}
...
}
5. 更改虚拟背景图像
要更改虚拟背景图像,请使用changeVirtualBackground
方法。
class Meeting implements HMSUpdateListener, HMSActionResultListener {
...
bool isVirtualBackgroundSupported = false;
/// 此方法检查虚拟背景是否可用
void checkIsVirtualBackgroundSupported() async {
isVirtualBackgroundSupported = await HMSVideoPlugin.isSupported();
}
/// 如果虚拟背景已启用,则可以更改虚拟背景图像
void changeVirtualBackground(Uint8List? image) {
/// [image] 是新图像
/// [isVirtualBackgroundSupported] 是检查虚拟背景是否受支持的标志
/// [isVirtualBackgroundEnabled] 是检查虚拟背景是否启用的标志
if (isVirtualBackgroundSupported && isVirtualBackgroundEnabled) {
HMSVideoPlugin.changeVirtualBackground(image: image);
}
}
...
}
6. 禁用虚拟背景
要禁用虚拟背景,请调用disable
方法。
class Meeting implements HMSUpdateListener, HMSActionResultListener {
...
bool isVirtualBackgroundSupported = false;
/// 此方法检查虚拟背景是否可用
void checkIsVirtualBackgroundSupported() async {
isVirtualBackgroundSupported = await HMSVideoPlugin.isSupported();
}
/// 禁用虚拟背景
void disableVirtualBackground() async {
if (isVirtualBackgroundSupported) {
HMSException? isDisabled = await HMSVideoPlugin.disable();
if (isDisabled == null) {
/// 虚拟背景成功禁用
} else {
/// 禁用虚拟背景时出错
}
}
}
...
}
要禁用背景模糊,请使用disableBlur
方法。
class Meeting implements HMSUpdateListener, HMSActionResultListener {
...
bool isVirtualBackgroundSupported = false;
/// 此方法检查虚拟背景是否可用
void checkIsVirtualBackgroundSupported() async {
isVirtualBackgroundSupported = await HMSVideoPlugin.isSupported();
}
/// 禁用背景模糊
void disableBackgroundBlur() async {
if (isVirtualBackgroundSupported) {
HMSException? isDisabled = await HMSVideoPlugin.disableBlur();
if (isDisabled == null) {
/// 背景模糊成功禁用
} else {
/// 禁用模糊时出错
}
}
}
...
}
示例代码
以下是使用hms_video_plugin
的基本示例代码。
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('HMS Video Plugin example app'),
),
body: const Center(
child: Text('HMS Video Plugin example app'),
),
),
);
}
}
更多关于Flutter视频处理插件hms_video_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频处理插件hms_video_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用hms_video_plugin
进行视频处理的示例代码。这个插件是华为提供的用于视频编辑和处理的Flutter插件。
首先,确保你已经在pubspec.yaml
文件中添加了hms_video_plugin
依赖:
dependencies:
flutter:
sdk: flutter
hms_video_plugin: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你需要在Android和iOS项目中分别进行一些配置,以集成HMS Core SDK。这里假设你已经完成了这些配置,并且你的项目已经能够正常运行。
以下是一个简单的Flutter应用示例,展示了如何使用hms_video_plugin
进行视频编辑:
import 'package:flutter/material.dart';
import 'package:hms_video_plugin/hms_video_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
HMSVideoEditorController? _videoEditorController;
String? _resultPath;
@override
void initState() {
super.initState();
// 初始化HMSVideoEditorController
HMSVideoEditorController.initialize().then((value) {
_videoEditorController = HMSVideoEditorController();
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('HMS Video Plugin Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 设置视频路径和输出路径
String inputVideoPath = "path/to/your/input/video.mp4";
String outputVideoPath = "path/to/your/output/video.mp4";
// 进行视频编辑,这里以简单的裁剪为例
HMSVideoEditorResult result = await _videoEditorController!.editVideo(
inputVideoPath: inputVideoPath,
outputVideoPath: outputVideoPath,
startTime: 1.0, // 裁剪开始时间(秒)
endTime: 5.0, // 裁剪结束时间(秒)
);
if (result.isSuccess) {
setState(() {
_resultPath = outputVideoPath;
});
print("Video edited successfully: $_resultPath");
} else {
print("Video editing failed: ${result.errorMessage}");
}
},
child: Text('Edit Video'),
),
if (_resultPath != null)
ElevatedButton(
onPressed: () {
// 打开编辑后的视频
_openVideo(_resultPath!);
},
child: Text('Open Result Video'),
),
],
),
),
),
);
}
void _openVideo(String path) {
// 打开编辑后的视频文件,这里简单使用URL启动
String videoUrl = "file://$path";
// 可以使用第三方包如chewie或video_player来播放视频
// 这里只是演示,所以直接打开URL(在真实应用中可能不支持直接打开)
// 可以考虑使用url_launcher包:launch(videoUrl);
print("Opening video at: $videoUrl");
}
@override
void dispose() {
// 释放资源
_videoEditorController?.dispose();
super.dispose();
}
}
注意:
- 视频路径:
inputVideoPath
和outputVideoPath
需要替换为你实际的视频文件路径。 - 权限:确保你的应用有读写存储的权限,特别是在Android和iOS上。
- 视频播放器:示例中的
_openVideo
方法只是演示了如何获取视频URL,并没有真正实现视频播放。你可以使用video_player
或chewie
等Flutter包来播放视频。 - 错误处理:实际应用中应添加更多的错误处理和用户反馈机制。
这个示例展示了如何初始化HMSVideoEditorController
,并使用其editVideo
方法进行简单的视频裁剪。你可以根据hms_video_plugin
的文档探索更多高级功能,如添加水印、滤镜等。