C# 外接(网口)双摄像头视频获取

C# 外接(网口)双摄像头视频获取

【注意事项】
------------------------------------
1. 更新设备网络SDK时,SDK开发包【库文件】里的HCNetSDK.dll、HCCore.dll、PlayCtrl.dll、SuperRender.dll、AudioRender.dll、HCNetSDKCom文件夹、ssleay32.dll、libeay32.dll、hlog.dll、hpr.dll、zlib1.dll、log4cxx.properties等文件均要加载到程序里面,【HCNetSDKCom文件夹】(包含里面的功能组件dll库文件)需要和HCNetSDK.dll、HCCore.dll一起加载,放在同一个目录下,且HCNetSDKCom文件夹名不能修改。

2. 如果自行开发软件不能正常实现相应功能,而且程序没有指定加载的dll库路径,请在程序运行的情况下尝试删除HCNetSDK.dll。如果可以删除,说明程序可能调用到系统盘Windows->System32目录下的dll文件,建议删除或者更新该目录下的相关dll文件;如果不能删除,dll文件右键选择属性确认SDK库版本。

3. 如按上述步骤操作后还是不能实现相应功能,请根据NET_DVR_GetLastError返回的错误号判断原因。

4.适用型号:DS-2CD2D15DWD 2.8MM,DS-2CD6424FWD-20 3.7MM,DS-2CD6425FWD-20 2.8MM B

5.dll和sdk可以上海康官网下载: hikvision.com/cn/downlo

Form1.cs:

using System;using System.Threading.Tasks;using System.Windows.Forms; namespace WindowsFormsApp1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); init(); } public IntPtr PictureDev1Cam { get { return pictureBox1.Handle; } } public IntPtr PictureDev2Cam { get { return pictureBox2.Handle; } } IntPtr Cam1Handle = IntPtr.Zero; IntPtr Cam2Handle = IntPtr.Zero; Cam Camera1 = new Cam(); Cam Camera2 = new Cam(); static private string Cam1IP = "192.168.1.64"; static private string Cam2IP = "192.168.1.61"; void init() { Cam1Handle = PictureDev1Cam; Cam2Handle = PictureDev2Cam; } private void ConnectCamera(int whitch) { string userName = "admin"; string password = "a123456."; int PortCamera = 8000; if (whitch == 1) { labelCamera1Status.Text = "摄像头连接中..."; Task.Run(() => { if (!Camera1.ConnectCamera(Cam1IP, PortCamera, userName, password)) { this.Invoke((Action)delegate { labelCamera1Status.Text = "摄像头连接失败"; }); } else { this.Invoke((Action)delegate { labelCamera1Status.Text = ""; }); Camera1.Preview(Cam1Handle); Camera1.AdjustMirrorPara(1); Cam1ReconnectTimer.Stop(); } }); } else { labelCamera2Status.Text = "摄像头连接中..."; Task.Run(() => { if (!Camera2.ConnectCamera(Cam2IP, PortCamera, userName, password)) { this.Invoke((Action)delegate { labelCamera2Status.Text = "摄像头连接失败"; }); } else { this.Invoke((Action)delegate { labelCamera2Status.Text = ""; }); Camera2.Preview(Cam2Handle); Camera2.AdjustMirrorPara(1); Cam2ReconnectTimer.Stop(); } }); } } private void Cam1ReconnectTimer_Tick(object sender, EventArgs e) { ConnectCamera(1); } private void Cam2ReconnectTimer_Tick(object sender, EventArgs e) { ConnectCamera(2); } private void Form1_Load(object sender, EventArgs e) { } }}

cam:

using System;using System.IO;using System.Runtime.InteropServices; namespace WindowsFormsApp1{ class Cam { private bool initSDK = false; private uint lastErr = 0; private string debugMessage = ""; private bool err = false; private Int32 userID = -1; public bool Isconnected { get; private set; } UInt32 dwReturn = 0; Int32 nSize = 0; IntPtr ptrPicCfg; private CHCNetSDK.NET_DVR_CAMERAPARAMCFG_EX camPara = new CHCNetSDK.NET_DVR_CAMERAPARAMCFG_EX(); private CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); private Int32 realPlayHandle = -1; public bool ConnectCamera(string deviceIP, int port, string userName, string password) { initSDK = CHCNetSDK.NET_DVR_Init(); if (initSDK == false) { lastErr = CHCNetSDK.NET_DVR_GetLastError(); debugMessage = "初始化过程失败, 错误码:" + lastErr; err = true; return false; } else { CHCNetSDK.NET_DVR_SetLogToFile(3, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SdkLog\\"), true); } CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); userID = CHCNetSDK.NET_DVR_Login_V30(deviceIP, port, userName, password, ref DeviceInfo); if (userID < 0) { lastErr = CHCNetSDK.NET_DVR_GetLastError(); debugMessage = "注册失败, 错误码:" + lastErr; err = true; return false; } Isconnected = true; return true; } public void AdjustMirrorPara(byte type) { dwReturn = 0; nSize = Marshal.SizeOf(camPara); ptrPicCfg = Marshal.AllocHGlobal(nSize); Marshal.StructureToPtr(camPara, ptrPicCfg, false); if (CHCNetSDK.NET_DVR_GetDVRConfig(userID, 3368, DeviceInfo.byStartChan, ptrPicCfg, (uint)nSize, ref dwReturn)) { camPara = (CHCNetSDK.NET_DVR_CAMERAPARAMCFG_EX)Marshal.PtrToStructure(ptrPicCfg, typeof(CHCNetSDK.NET_DVR_CAMERAPARAMCFG_EX)); Marshal.FreeHGlobal(ptrPicCfg); camPara.byMirror = type; ptrPicCfg = Marshal.AllocHGlobal(nSize); Marshal.StructureToPtr(camPara, ptrPicCfg, false);