给出C# 调用海康威视摄像头的代码
这里给出一个简单的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 著作权归作者所有。请勿转载和采集!