Flutter视频监控插件hikvision_flutter的使用
Flutter视频监控插件hikvision_flutter的使用
1. 概述
hikvision_flutter
是一个用于在 Flutter 应用中集成海康威视(HIKVISION)SDK 的封装插件。它允许开发者通过 Flutter 调用海康威视设备的功能,例如实时预览、录像回放等。
2. 公共要求
所有方法和参数在 Flutter 和原生代码之间通信时,必须使用 pigeon
自动生成代码。配置文件位于 pigeons/messages.dart
。
3. iOS 平台配置
3.1 生成 pigeon 消息
运行以下命令生成 pigeon
文件:
flutter pub run pigeon \
--input ./pigeons/messages.dart \
--dart_out ./lib/platform_communication.dart \
--dart_test_out ./test/platform_communication_test.dart \
--objc_header_out ./ios/Classes/platform_communication.h \
--objc_source_out ./ios/Classes/platform_communication.mm \
--java_out ./android/src/main/kotlin/vn/zensho/hikvision/hikvision_flutter/PlatformCommunication.java \
--java_package "vn.zensho.hikvision.hikvision_flutter"
3.2 注意事项
- 强制要求:必须使用 ObjectiveC++,不能使用 Swift(Swift 编译会出错)。
- 所有
.m
文件需要改为.mm
文件(包括example/ios/Runner/GeneratedPluginRegistrant.m
)。 - 将海康威视 SDK 的所有头文件复制到项目目录下的
project/ios/Classes
文件夹。 - 将所有 SDK 的库文件复制到
project/ios/lib
文件夹,并确保文件名以lib
开头(如libHCNetSDK.a
),否则需要重命名。 - 在
podspec
文件中添加以下内容:
s.vendored_libraries = 'lib/*.a'
s.framework = 'AVFoundation', 'OpenAL', 'CoreGraphics', 'OpenGLES', 'QuartzCore', 'AudioToolBox', 'VideoToolBox', 'CoreVideo', 'CoreMedia', 'Foundation', 'GLKit', 'UIKit'
s.library = 'iconv', 'bz2'
4. 示例代码
以下是一个完整的示例代码,展示如何在 Flutter 中使用 hikvision_flutter
插件进行录像回放。
4.1 示例代码结构
example/
├── lib/
│ ├── main.dart
│ └── playback_screen.dart
└── ios/
└── Classes/
└── platform_communication.mm
4.2 示例代码实现
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:hikvision_flutter_example/playback_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // 确保 Flutter 绑定初始化
runApp(const PlaybackScreen()); // 启动录像回放界面
}
example/lib/playback_screen.dart
import 'package:flutter/material.dart';
import 'package:hikvision_flutter/hikvision_flutter.dart'; // 引入 hikvision_flutter 插件
class PlaybackScreen extends StatefulWidget {
const PlaybackScreen({Key? key}) : super(key: key);
[@override](/user/override)
_PlaybackScreenState createState() => _PlaybackScreenState();
}
class _PlaybackScreenState extends State<PlaybackScreen> {
String _playbackStatus = '未开始'; // 录像回放状态
[@override](/user/override)
void initState() {
super.initState();
_startPlayback(); // 初始化时启动录像回放
}
Future<void> _startPlayback() async {
try {
await HikvisionFlutter.startPlayback(
deviceIP: '192.168.1.100', // 替换为实际设备 IP 地址
port: 37777, // 替换为实际端口号
username: 'admin', // 替换为实际用户名
password: 'password', // 替换为实际密码
);
setState(() {
_playbackStatus = '正在回放';
});
} catch (e) {
setState(() {
_playbackStatus = '回放失败: $e';
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('海康威视录像回放示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_playbackStatus),
ElevatedButton(
onPressed: () {
_startPlayback(); // 点击按钮重新启动录像回放
},
child: const Text('重新开始回放'),
),
],
),
),
),
);
}
}
更多关于Flutter视频监控插件hikvision_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频监控插件hikvision_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
hikvision_flutter
是一个用于在 Flutter 应用中集成海康威视(Hikvision)视频监控功能的插件。通过这个插件,你可以在 Flutter 应用中实时查看海康威视摄像头的视频流,并进行一些基本的控制操作。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 hikvision_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
hikvision_flutter: ^0.0.1 # 请使用最新版本
然后运行 flutter pub get
来安装插件。
基本使用
-
导入插件
在你的 Dart 文件中导入
hikvision_flutter
插件:import 'package:hikvision_flutter/hikvision_flutter.dart';
-
初始化插件
在使用插件之前,通常需要先进行初始化:
HikvisionFlutter.initialize();
-
创建视频播放器
你可以使用
HikvisionPlayer
来播放海康威视摄像头的视频流。首先,创建一个HikvisionPlayer
实例:HikvisionPlayer player = HikvisionPlayer();
-
设置视频源
你可以通过设置
dataSource
来指定要播放的视频流。通常,你需要提供摄像头的 IP 地址、端口、用户名和密码等信息:player.setDataSource( ip: '192.168.1.64', port: 8000, username: 'admin', password: '12345', channel: 1, // 通道号 );
-
播放视频
调用
start
方法来开始播放视频:player.start();
-
显示视频
你可以将
HikvisionPlayer
的view
属性添加到你的 UI 中,以显示视频流:[@override](/user/override) Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Hikvision Video'), ), body: Center( child: player.view, ), ); }
-
停止播放
当你不再需要播放视频时,可以调用
stop
方法来停止播放:player.stop();
其他功能
hikvision_flutter
插件可能还提供其他功能,例如:
- 截图:你可以调用
capture
方法来截取当前视频帧。 - 录像:你可以调用
startRecord
和stopRecord
方法来开始和停止录像。 - 控制摄像头:你可以调用
ptzControl
方法来控制摄像头的云台(PTZ)操作。
注意事项
- 权限:确保你的应用已经获取了必要的权限,例如网络访问权限和摄像头权限。
- 兼容性:插件的功能可能因海康威视设备的不同而有所差异,建议在实际使用前进行充分测试。
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 hikvision_flutter
插件:
import 'package:flutter/material.dart';
import 'package:hikvision_flutter/hikvision_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Hikvision Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: VideoScreen(),
);
}
}
class VideoScreen extends StatefulWidget {
[@override](/user/override)
_VideoScreenState createState() => _VideoScreenState();
}
class _VideoScreenState extends State<VideoScreen> {
HikvisionPlayer player = HikvisionPlayer();
[@override](/user/override)
void initState() {
super.initState();
HikvisionFlutter.initialize();
player.setDataSource(
ip: '192.168.1.64',
port: 8000,
username: 'admin',
password: '12345',
channel: 1,
);
player.start();
}
[@override](/user/override)
void dispose() {
player.stop();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hikvision Video'),
),
body: Center(
child: player.view,
),
);
}
}