C#中如何连接海康威视

下面我将详细讲解如何在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日

相关文章

  • asp.NET中实现文件的压缩和解压(3种方式)

    下面就详细讲解一下“asp.NET中实现文件的压缩和解压(3种方式)”的完整攻略。在实现文件的压缩和解压功能的过程中,我们可以通过三种方式来实现,包括使用ICSharpCode.SharpZipLib库、使用System.IO.Compression命名空间以及使用DotNetZip库。 一、使用ICSharpCode.SharpZipLib库 使用这种方式…

    C# 2023年6月3日
    00
  • C#中Backgroundworker与Thread的区别

    在C#中,可以使用BackgroundWorker和Thread类来实现多线程编程。这两个类最初的目的都是为了实现异步操作,但它们使用的机制和易用性却有着较大的不同。 BackgroundWorker与Thread的区别 机制 BackgroundWorker类是基于事件的异步操作机制,它将异步操作分为三个阶段:DoWork、ProgressChanged、…

    C# 2023年5月15日
    00
  • C# Path.GetTempFileName()方法: 获取一个唯一的临时文件名

    Path.GetTempFileName()方法作用及使用方法 C#的Path.GetTempFileName()方法可以返回一个唯一的临时文件名,并创建该文件。此临时文件的路径和文件名是在指定目录(如:%temp%)中由系统自动生成的,以确保每次调用时都必须生成唯一的文件名。 使用方法 Path.GetTempFileName()方法的使用非常简单,只需直…

    C# 2023年4月19日
    00
  • C# 9.0新特性——只初始化设置器

    当我们声明一个类时,经常需要为该类的字段或属性提供一个初始值,以确保在对象创建后这些值处于可用状态。在C# 9.0中,新特性“只初始化设置器”(init-only setters)允许我们在对象创建后,通过只读属性的方式对属性进行初始化。 什么是只初始化设置器 只初始化设置器(init-only setters)是C# 9.0中新出现的特性,只初始化设置器允…

    C# 2023年5月31日
    00
  • c#检测文本文件编码的方法

    C#中检测文本文件编码的方法主要有以下几种: 1. 使用System.Text.Encoding的GetEncoding方法 使用System.Text.Encoding的GetEncoding方法可以检测文本文件的编码类型。该方法会返回一个Encoding类型的对象,用来表示文件的编码。 以下是一个示例代码: using System.IO; using …

    C# 2023年6月1日
    00
  • C#和vb.net实现PDF 添加可视化和不可见数字签名

    C# 和 VB.net 都可以使用 iTextSharp 库来实现 PDF 文件添加数字签名。数字签名可以是可视化的,也可以是不可见的。 以下是实现 PDF 添加数字签名的完整攻略: 步骤 1:引入 iTextSharp 库 在项目中引入 iTextSharp 库。通常会从 NuGet 软件包管理器中安装该库,或者从官方网站 https://github.c…

    C# 2023年5月31日
    00
  • 基于mvc5+ef6+Bootstrap框架实现身份验证和权限管理

    基于mvc5+ef6+Bootstrap框架实现身份验证和权限管理的完整攻略如下: 1. 环境准备 首先,需要安装Visual Studio(建议安装最新版),并安装.Net Framework、MVC5、EF6等程序集。安装完后,打开Visual Studio,创建一个MVC5项目作为基础框架。 2. 实现身份验证 2.1 配置身份认证 在MVC5项目中,…

    C# 2023年5月31日
    00
  • C#日期转换函数分享

    接下来我将为您详细讲解C#日期转换函数分享的完整攻略。 一、背景介绍 日期格式是我们在编写程序时常常需要用到的格式之一,而在C#中,日期格式化是通过方法来实现的。这里我将分享一些C#日期转换函数的技巧和方法。 二、C#日期转换函数简介 C#提供了许多日期转换函数,使我们能够方便地把日期转换成各种不同的格式。其中主要的日期转换函数有: 1. ToString(…

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