使用 easy_onvif Flutter 连接到闭路电视摄像机

问题描述 投票:0回答:1

我有一台 ezviz h8c 相机。我正在尝试从我的 flutter 应用程序访问此相机以获取流并控制相机的移动。 我已经能够使用 vlc_player 包获取带有 RTSP url 的流。 为了控制相机的移动,我尝试使用 pub.dev 中的 easy_onvif 包。 但是当我尝试使用 onvif.connect 命令连接时,它显示 DioException 错误。 这是我一直在尝试连接相机来控制运动的代码。

      Future<void> connect({required String ip}) async {
    try {
      onvif = await Onvif.connect(
        host: ip,
        username: 'admin', // Replace with your username
        password: 'password', // Replace with your password
      );

      log('💚 ✅🎄🍀🌲🐍 OnVIFService: connected to $ip');

      await getToken(); // Fetch token after successful connection
    } catch (error) {
      log('💚 ✅🎄🍀🌲🐍 OnVIFService: connection error: $error');
    }
  }

从这里我调用该函数

    onPressed: () async {
          await onvifService
              .connect(ip: '192.168.0.103')
              .then((value) => onvifService.moveLeft());
          debugPrint("working");
          onvifService.getToken();
        }

但是当我尝试连接相机时,显示以下错误。

I/flutter ( 6295): ‼️ 13:20:06.161941 错误 UI Loggy - LoggingInterceptors - 错误: I/flutter ( 6295): DioException [连接超时]: 请求连接花费的时间超过 0:00:20.000000 并且被中止。要消除此异常,请尝试将 RequestOptions.connectTimeout 提高到 0:00:20.000000 的持续时间以上,或提高服务器的响应时间。 我/颤振(6295):工作 [log] 💚 ✅🎄🍀🌲🐍 OnVIFService: 连接错误: 异常: DioException [连接超时]: 请求连接花费的时间超过 0:00:20.000000 并且被中止。要消除此异常,请尝试将 RequestOptions.connectTimeout 提高到 0:00:20.000000 的持续时间以上,或提高服务器的响应时间。 [日志] OnVIFService:未设置令牌 [日志] OnVIFService:令牌为空

任何人都可以向我建议如何修复此错误并连接我的相机以使用 easy_onvif 包控制 ptz 吗? 谢谢 如果下面有帮助,我会给出代码来获取工作正常的流。

import 'package:flutter/material.dart';
import 'package:flutter_vlc_player/flutter_vlc_player.dart';

import '../widgets/onvif_button.dart';

/// Stateful widget to fetch and then display video content.
class VideoApp extends StatefulWidget {
  const VideoApp({super.key});

  @override
  _VideoAppState createState() => _VideoAppState();
}

class _VideoAppState extends State<VideoApp> {
  late VlcPlayerController _controller;

  @override
  void initState() {
    super.initState();

    _controller = VlcPlayerController.network(
        "rtsp://admin:[email protected]/H.264",
        autoPlay: true)
      ..initialize().then((_) {
        // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
        setState(() {});
      });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        SizedBox(
          height: MediaQuery.sizeOf(context).height * 0.3,
          child: VlcPlayer(
            controller: _controller,
            aspectRatio: 16 / 9, // Adjust aspect ratio as needed
            placeholder: const Center(
                child:
                    CircularProgressIndicator()), // Optional loading indicator
          ),
        ),
        SizedBox(
          height: MediaQuery.sizeOf(context).height * 0.1,
          child: OnvifButton(),
        )
      ],
    );
  }

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
  }
}

通过nmap扫描我发现ezviz h8c相机有554、8000、9010端口是开放的。

flutter ip-camera onvif
1个回答
0
投票

我也遇到了同样的问题,我的解决方案是配置我的IP 我的相机是 Tapo C310,这是 IP http://ip_here:2020/onvif/device_service

© www.soinside.com 2019 - 2024. All rights reserved.