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

1 回复

更多关于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 来安装插件。

基本使用

  1. 导入插件

    在你的 Dart 文件中导入 hikvision_flutter 插件:

    import 'package:hikvision_flutter/hikvision_flutter.dart';
    
  2. 初始化插件

    在使用插件之前,通常需要先进行初始化:

    HikvisionFlutter.initialize();
    
  3. 创建视频播放器

    你可以使用 HikvisionPlayer 来播放海康威视摄像头的视频流。首先,创建一个 HikvisionPlayer 实例:

    HikvisionPlayer player = HikvisionPlayer();
    
  4. 设置视频源

    你可以通过设置 dataSource 来指定要播放的视频流。通常,你需要提供摄像头的 IP 地址、端口、用户名和密码等信息:

    player.setDataSource(
      ip: '192.168.1.64',
      port: 8000,
      username: 'admin',
      password: '12345',
      channel: 1,  // 通道号
    );
    
  5. 播放视频

    调用 start 方法来开始播放视频:

    player.start();
    
  6. 显示视频

    你可以将 HikvisionPlayerview 属性添加到你的 UI 中,以显示视频流:

    [@override](/user/override)
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text('Hikvision Video'),
        ),
        body: Center(
          child: player.view,
        ),
      );
    }
    
  7. 停止播放

    当你不再需要播放视频时,可以调用 stop 方法来停止播放:

    player.stop();
    

其他功能

hikvision_flutter 插件可能还提供其他功能,例如:

  • 截图:你可以调用 capture 方法来截取当前视频帧。
  • 录像:你可以调用 startRecordstopRecord 方法来开始和停止录像。
  • 控制摄像头:你可以调用 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,
      ),
    );
  }
}
回到顶部