这里给出一个简单的C#调用海康威视摄像头的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace HKCameraTest
{
    public partial class Form1 : Form
    {
        private IntPtr m_lUserID; // 用户登录ID
        private IntPtr m_lRealHandle; // 实时监视句柄

        // 海康威视SDK相关函数
        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_Init();
        [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 int NET_DVR_RealPlay_V30(IntPtr lUserID, ref NET_DVR_CLIENTINFO lpClientInfo, REALDATACALLBACK fRealDataCallBack_V30, IntPtr pUser, uint dwFlags, IntPtr hWnd);
        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_StopRealPlay(IntPtr lRealHandle);
        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_SetConnectTime(int dwWaitTime, int dwTryTimes);
        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_SetReconnect(int dwInterval, int bEnableRecon);

        // 海康威视SDK相关结构体
        [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 byMainProto;
            public byte bySubProto;
            public byte bySupport;
            public byte bySupport1;
            public byte byRes1;
            public ushort wDevType;
            public byte bySupport2;
            public byte byRes2;
            public int iRealPlayRight;
            public byte byRes3;
            public byte byMultiStreamProto;
            public byte byStartDChan;
            public byte byRes4;
            public byte byCardNum;
            public byte byRes5;
            public byte byChanType;
            public byte bySupport3;
            public uint dwSurplusSpace;
            public byte byClusterType;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
            public byte[] byRes6;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct NET_DVR_CLIENTINFO
        {
            public int lChannel;
            public int lLinkMode;
            public IntPtr hPlayWnd;
            public string sMultiCastIP;
            public byte byProtoType;
            public byte byRes1;
            public ushort wProtoType;
            public ushort wRes2;
            public byte[] byRes;
        }

        public delegate void REALDATACALLBACK(int lRealHandle, uint dwDataType, IntPtr pBuffer, uint dwBufSize, IntPtr pUser);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 初始化海康威视SDK
            int iInitResult = NET_DVR_Init();
            if (iInitResult == 0)
            {
                MessageBox.Show("海康威视SDK初始化失败!");
            }
            else
            {
                MessageBox.Show("海康威视SDK初始化成功!");
            }

            // 设置超时时间和重连功能
            NET_DVR_SetConnectTime(2000, 1);
            NET_DVR_SetReconnect(10000, true);
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            // 登录摄像头
            NET_DVR_DEVICEINFO_V30 DeviceInfo = new NET_DVR_DEVICEINFO_V30();
            m_lUserID = IntPtr.Zero;
            m_lUserID = (IntPtr)NET_DVR_Login_V30(txtIP.Text, Convert.ToInt32(txtPort.Text), txtUserName.Text, txtPassword.Text, ref DeviceInfo);

            if (m_lUserID == IntPtr.Zero)
            {
                MessageBox.Show("登录摄像头失败!");
            }
            else
            {
                MessageBox.Show("登录摄像头成功!");
            }
        }

        private void btnPreview_Click(object sender, EventArgs e)
        {
            // 开始预览
            NET_DVR_CLIENTINFO ClientInfo = new NET_DVR_CLIENTINFO();
            ClientInfo.lChannel = Convert.ToInt32(txtChannel.Text);
            ClientInfo.lLinkMode = 0;
            ClientInfo.hPlayWnd = pictureBox1.Handle;
            ClientInfo.byProtoType = 0;
            ClientInfo.byRes1 = 0;
            ClientInfo.wProtoType = 0;
            ClientInfo.wRes2 = 0;
            ClientInfo.byRes = new byte[24];

            m_lRealHandle = IntPtr.Zero;
            m_lRealHandle = (IntPtr)NET_DVR_RealPlay_V30(m_lUserID, ref ClientInfo, null, IntPtr.Zero, 0, IntPtr.Zero);

            if (m_lRealHandle == IntPtr.Zero)
            {
                MessageBox.Show("开始预览失败!");
            }
            else
            {
                MessageBox.Show("开始预览成功!");
            }
        }

        private void btnStopPreview_Click(object sender, EventArgs e)
        {
            // 停止预览
            if (m_lRealHandle != IntPtr.Zero)
            {
                NET_DVR_StopRealPlay(m_lRealHandle);
                m_lRealHandle = IntPtr.Zero;
                MessageBox.Show("停止预览成功!");
            }
        }

        private void btnLogout_Click(object sender, EventArgs e)
        {
            // 注销登录
            if (m_lUserID != IntPtr.Zero)
            {
                NET_DVR_Logout(m_lUserID);
                m_lUserID = IntPtr.Zero;
                MessageBox.Show("注销登录成功!");
            }
        }

        // 海康威视SDK其他函数
        [DllImport("HCNetSDK.dll")]
        public static extern bool NET_DVR_Logout(IntPtr lUserID);
    }
}

这个代码中包含了登录、预览、停止预览、注销登录等功能。需要注意的是,需要引入海康威视的SDK库文件,并且需要在程序运行时将SDK库文件放在程序所在的目录下,否则会出现运行时错误。


原文地址: https://www.cveoy.top/t/topic/bJCa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录