C#中如何连接海康威视

yizhihongxing

下面我将详细讲解如何在C#中连接海康威视。

1.准备工作

在开始之前,我们需要做一些准备工作。

  1. 安装海康威视设备的SDK,可以从海康威视官网下载对应版本的SDK。

  2. 将SDK的bin目录下的HCNetSDK.dll文件拷贝到C#项目的bin目录下。

2.连接海康威视

接下来,我们将通过以下步骤连接海康威视。

  1. 引入HCNetSDK.dll

在代码中添加以下代码:

using System.Runtime.InteropServices;
[DllImport("HCNetSDK.dll")]
public static extern bool NET_DVR_Init();
[DllImport("HCNetSDK.dll")]
public static extern bool NET_DVR_Cleanup();
[DllImport("HCNetSDK.dll")]
public static extern int NET_DVR_Login_V30(string sDVRIP, int wDVRPort, string sUserName, string sPassword, ref NET_DVR_DEVICEINFO_V30 lpDeviceInfo);
[DllImport("HCNetSDK.dll")]
public static extern bool NET_DVR_Logout(int iUserID);
  1. 初始化SDK

在代码中添加以下代码:

if (NET_DVR_Init()) 
{
   Console.WriteLine("初始化SDK成功!");
}
else 
{
   Console.WriteLine("初始化SDK失败!错误码:" + NET_DVR_GetLastError());
   return;
}

其中,NET_DVR_GetLastError()函数可以获取当前SDK的错误码。

  1. 登录设备

在代码中添加以下代码:

NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();
int userID = NET_DVR_Login_V30("设备IP地址", 端口号, "用户名", "密码", ref deviceInfo);
if (userID < 0) 
{
   Console.WriteLine("登录设备失败!错误码:" + NET_DVR_GetLastError());
   NET_DVR_Cleanup();
   return;
}
else 
{
   Console.WriteLine("登录设备成功!");
}

其中,NET_DVR_Login_V30()函数返回的是userID,如果返回值小于0,则表示登录失败。

  1. 登出设备

在代码中添加以下代码:

bool logout = NET_DVR_Logout(userID);
if (!logout) 
{
   Console.WriteLine("登出设备失败!错误码:" + NET_DVR_GetLastError());
}
else 
{
   Console.WriteLine("登出设备成功!");
}

3.示例

下面是两个示例。第一个示例连接设备并获取设备参数。第二个示例连接设备并打开实时预览。

示例1:获取设备参数

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;

namespace Hikvision
{    
    [StructLayout(LayoutKind.Sequential)]
    public struct NET_DVR_DEVICEINFO_V30
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
        public string sSerialNumber;
        public byte byAlarmInPortNum;
        public byte byAlarmOutPortNum;
        public byte byDiskNum;
        public byte byDVRType;
        public byte byChanNum;
        public byte byStartChan;
        public byte byAudioChanNum;
        public byte byIPChanNum;
        public byte byZeroChanNum;
        public byte bySupport;
        public byte byRes1;
        public ushort wDevType;
        public byte byRes2;
    }

    public class HikvisionTest
    {
        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_Init();

        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_Cleanup();

        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_Login_V30(string sDVRIP, int wDVRPort, string sUserName, string sPassword, ref NET_DVR_DEVICEINFO_V30 lpDeviceInfo);

        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_Logout(int iUserID);

        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_GetLastError();

        static void Main(string[] args)
        {
            if (NET_DVR_Init()) 
            {
                Console.WriteLine("初始化SDK成功!");
            }
            else 
            {
                Console.WriteLine("初始化SDK失败!错误码:" + NET_DVR_GetLastError());
                return;
            }

            NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();
            int userID = NET_DVR_Login_V30("设备IP地址", 端口号, "用户名", "密码", ref deviceInfo);
            if (userID < 0) 
            {
                Console.WriteLine("登录设备失败!错误码:" + NET_DVR_GetLastError());
                NET_DVR_Cleanup();
                return;
            }
            else 
            {
                Console.WriteLine("登录设备成功!");
            }

            Console.WriteLine("设备序列号:" + deviceInfo.sSerialNumber);
            Console.WriteLine("通道数:" + deviceInfo.byChanNum);

            bool logout = NET_DVR_Logout(userID);
            if (!logout) 
            {
                Console.WriteLine("登出设备失败!错误码:" + NET_DVR_GetLastError());
            }
            else 
            {
                Console.WriteLine("登出设备成功!");
            }

            NET_DVR_Cleanup();
        }
    }
}

示例2:打开实时预览

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;

namespace Hikvision
{    
    [StructLayout(LayoutKind.Sequential)]
    public struct NET_DVR_DEVICEINFO_V30
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
        public string sSerialNumber;
        public byte byAlarmInPortNum;
        public byte byAlarmOutPortNum;
        public byte byDiskNum;
        public byte byDVRType;
        public byte byChanNum;
        public byte byStartChan;
        public byte byAudioChanNum;
        public byte byIPChanNum;
        public byte byZeroChanNum;
        public byte bySupport;
        public byte byRes1;
        public ushort wDevType;
        public byte byRes2;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct NET_DVR_PREVIEWINFO
    {
        public int lChannel;
        public int dwStreamType;
        public int dwLinkMode;
        public IntPtr hPlayWnd;
        public int bBlocked;
        public int bPassbackRecord;
        public int bPreviewMode;
        public int bRetrieveIPChannel;
        public int dwDisplayBufNum;
        public IntPtr byRes;
    }

    public class HikvisionTest
    {
        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_Init();

        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_Cleanup();

        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_Login_V30(string sDVRIP, int wDVRPort, string sUserName, string sPassword, ref NET_DVR_DEVICEINFO_V30 lpDeviceInfo);

        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_Logout(int iUserID);

        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_GetLastError();

        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_RealPlay_V40(int iUserID, ref NET_DVR_PREVIEWINFO lpPreviewInfo, RealDataCallBack_V30 fRealDataCallBack_V30, IntPtr pUser);

        public delegate void RealDataCallBack_V30(int lRealHandle, ref NET_DVR_PACKET_INFO_EX pstruPacketInfo, IntPtr pUser);

        static void Main(string[] args)
        {
            if (NET_DVR_Init()) 
            {
                Console.WriteLine("初始化SDK成功!");
            }
            else 
            {
                Console.WriteLine("初始化SDK失败!错误码:" + NET_DVR_GetLastError());
                return;
            }

            NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();
            int userID = NET_DVR_Login_V30("设备IP地址", 端口号, "用户名", "密码", ref deviceInfo);
            if (userID < 0) 
            {
                Console.WriteLine("登录设备失败!错误码:" + NET_DVR_GetLastError());
                NET_DVR_Cleanup();
                return;
            }
            else 
            {
                Console.WriteLine("登录设备成功!");
            }

            NET_DVR_PREVIEWINFO lpPreviewInfo = new NET_DVR_PREVIEWINFO();
            lpPreviewInfo.hPlayWnd = IntPtr.Zero;
            lpPreviewInfo.lChannel = 1;
            lpPreviewInfo.dwStreamType = 0;
            lpPreviewInfo.dwLinkMode = 0;
            lpPreviewInfo.bBlocked = true;
            lpPreviewInfo.dwDisplayBufNum = 15;

            int playHandle = NET_DVR_RealPlay_V40(userID, ref lpPreviewInfo, null, IntPtr.Zero);
            if (playHandle < 0) 
            {
                Console.WriteLine("打开实时预览失败!错误码:" + NET_DVR_GetLastError());
            }
            else 
            {
                Console.WriteLine("打开实时预览成功!");
            }

            Thread.Sleep(5000);//5秒钟后关闭实时预览

            bool stopPreview = NET_DVR_StopRealPlay(playHandle);
            if (!stopPreview) 
            {
                Console.WriteLine("关闭实时预览失败!错误码:" + NET_DVR_GetLastError());
            }
            else 
            {
                Console.WriteLine("关闭实时预览成功!");
            }

            bool logout = NET_DVR_Logout(userID);
            if (!logout) 
            {
                Console.WriteLine("登出设备失败!错误码:" + NET_DVR_GetLastError());
            }
            else 
            {
                Console.WriteLine("登出设备成功!");
            }

            NET_DVR_Cleanup();
        }
    }
}

以上就是连接海康威视的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中如何连接海康威视 - Python技术站

(1)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • .Net Core解决WebAPI中返回时间格式带T的问题

    在本攻略中,我们将详细讲解如何在ASP.NET Core WebAPI中解决返回时间格式带T的问题,并提供两个示例说明。 步骤一:配置Json序列化选项 在ASP.NET Core WebAPI中解决返回时间格式带T的问题,您需要配置Json序列化选项。以下是一个示例: services.AddControllers() .AddJsonOptions(op…

    C# 2023年5月17日
    00
  • asp.net Core中同名服务注册的实现代码

    ASP.NET Core是一个跨平台的Web应用程序框架,可以在Windows、Linux和macOS上运行。在ASP.NET Core中,同名服务注册是指向服务容器注册两个或多个具有相同服务名称的服务实例。下面是实现同名服务注册的代码攻略。 1. 同名服务注册的实现方式 实现同名服务注册可以使用IServiceCollection接口的Add方法。Add方…

    C# 2023年5月31日
    00
  • C#后台调用前台JS函数方法

    C#后台调用前台JS函数方法,可以通过JavaScript Interop实现。具体实现步骤如下: 1.在前端代码中定义需要被后台调用的JS函数方法,使用window对象的属性定义方式,例如: window.invokeHelloWorld = function(message){ console.log(`Hello ${message} from Jav…

    C# 2023年6月7日
    00
  • .NET 6 跨服务器联表查询操作MySql、Oracle、SqlServer等相互联表

    以下是“.NET6跨服务器联表查询操作MySql、Oracle、SqlServer等相互联表”的完整攻略: 什么是跨服务器表查询 跨服务器联表查询是指在多个数据库服务器之间进行联表查询。这种查询通常需要在多个数据库之间建立连接,并使用跨服务器查询语句进行。 跨服务器联表查询的实现方法 以下是跨服务器联表查询的实现方法: 步骤1:建立数据库连接 首先,我们需要…

    C# 2023年5月12日
    00
  • .NET Orm性能测试分析

    .NET ORM 性能测试分析攻略 ORM(Object-Relational Mapping)是一种将对象模型映射到关系数据库的技术。在 .NET 中,有许多 ORM 框架可供选择,如 Entity Framework、Dapper、NHibernate 等。在选择 ORM 框架时,性能是一个重要的考虑因素。以下是 .NET ORM 性能测试分析的完整攻略…

    C# 2023年5月17日
    00
  • 详析C#的协变和逆变

    详析C#的协变和逆变 在C#中,协变和逆变是非常重要的概念,尤其是在泛型的使用中更是如此。本文将详细讲解C#的协变和逆变。 协变 协变是一种安全的类型转换,从一个更特殊的类型转换为一个更一般的类型,也就是说,从子类型转换为父类型。在C#中,协变只支持泛型接口或泛型委托。使用out关键字可以指示泛型类型参数是协变的。以下代码示例展示了协变的用法: interf…

    C# 2023年5月15日
    00
  • C#正则表达式实用大全(建议收藏!)

    C#正则表达式实用大全(建议收藏!) 什么是正则表达式? 正则表达式是一种文本模式,通常被用来检索、替换那些符合某个模式的文本。在C#中,我们可以使用正则表达式来进行字符串匹配、查找和替换等操作。 正则表达式的语法 在C#中,正则表达式语法使用的是Perl风格的语法,它包含了很多元字符和修饰符,可以用来匹配常见的文本模式。下面是一些常用的正则表达式元字符: …

    C# 2023年6月1日
    00
  • .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx)

    在.NET Core部署到linux(CentOS)最全解决方案,常规篇一文,我们详细讲解了传统的.NET Core部署到Linux服务器的方法,学到了Linux在虚拟机下的安装、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的发布与运行全过程。本文讲讲解通过使用Supervisor+Nginx的组合来实…

    C# 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部