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可以上海康官网下载:https://www.hikvision.com/cn/download_61.html

 

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);if (!CHCNetSDK.NET_DVR_SetDVRConfig(userID, 3369, DeviceInfo.byStartChan, ptrPicCfg, (uint)nSize)){lastErr = CHCNetSDK.NET_DVR_GetLastError();debugMessage = "设置镜像关闭失败, 错误码:" + lastErr;err = true;}}else{lastErr = CHCNetSDK.NET_DVR_GetLastError();debugMessage = "获取参数失败, 错误码:" + lastErr;err = true;}Marshal.FreeHGlobal(ptrPicCfg);}public void Preview(IntPtr handle){CHCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();previewInfo.hPlayWnd = handle;//预览窗口previewInfo.lChannel = 1;//(int)DeviceInfo.byStartChan;//预览的设备通道previewInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推previewInfo.dwLinkMode = 0;//连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP previewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流previewInfo.dwDisplayBufNum = 0; //播放库播放缓冲区最大缓冲帧数//CHCNetSDK.REALDATACALLBACK RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);//预览实时流回调函数IntPtr pUser = new IntPtr();//用户数据//打开预览 Start live view realPlayHandle = CHCNetSDK.NET_DVR_RealPlay_V40(userID, ref previewInfo, null/*RealData*/, pUser);if (realPlayHandle < 0){lastErr = CHCNetSDK.NET_DVR_GetLastError();debugMessage = "预览失败, 错误码:" + lastErr; //预览失败,输出错误号err = true;//MessageBox.Show(str);return;}}}
}

CHCNetSDK.cs

这个太长,需要的可以上我的github下载,省略,我的账号zyr365

工程文件

bin目录

定时器:

运行结果:

----------------------------------------------------------

如果觉得有用,麻烦点击 在看,让更多志同道合的伙伴加入我们的交流群,一起共同进步!                                                                                                            

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2022 Preview 1 和.NET 6 Preview 5 正式发布

具有里程碑意义的Visual Studio 2022 Preview 1正式发布&#xff0c;重点是64位&#xff0c;而没有增加新功能&#xff0c;并且同时也发布了.NET 6 Preview 5。https://devblogs.microsoft.com/visualstudio/visual-studio-2022-preview-1-now-available/https://devblogs.micr…

每日一笑 | 你知道你爸妈当年是怎么在一起的吗?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

每日一笑 | 你知道程序媛最“大”的烦恼是什么吗?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

什么?他居然想在DLL中放毒!

dotnet/runtime有一个issue[1]讨论了如何使用ModuleInitializer投放恶意代码&#xff0c;但是微软的开发经理表示不背这个锅&#xff01; 什么是ModuleInitializer&#xff1f;ModuleInitializerAttribute[2]是在.NET5.0中新增加的API。它的作用是应用于编译中的任意数量的静态…

为什么说人工智能是一个大谎言

全世界只有3.14 % 的人关注了数据与算法之美人工智能是一个很大的谎言。或者往轻了说&#xff0c;它是一个混淆概念。往重了说&#xff0c;是用来欺骗大众的流行语&#xff0c;并且流行度非常高。其实真正的内涵是“机器学习”。所以&#xff0c;真正强大的&#xff0c;每个人都…

NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?

咨询区 user2341923&#xff1a;[ThreadStatic] 被设计成特性&#xff0c; ThreadLocal<T> 被设计成泛型&#xff0c;为什么会有这两种设计方案呢 &#xff1f;谁能告诉我他们的优缺点各是什么&#xff1f;是不是泛型的方式更好一点&#xff1f;回答区 Sanjeev&#xff1…

指针变量的定义与引用

2019独角兽企业重金招聘Python工程师标准>>> void main() { int a 5,b3; int *p; p &a; b*P5; printf("%d\n", b); *p 4; printf("%d,%d\n",a,*p); } 输出结果&#xff1a;10 4 4 之前在学校的时候就没怎么搞懂&#xff0c; 现在…

Vim的配置

2019独角兽企业重金招聘Python工程师标准>>> set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set guifontCourier_New:h12cANSI colorscheme torte set nobackup set ts4 set lines33 columns100 set diffexprM…

WPF 命中测试HitTest

获取不规则图片的点击事件&#xff0c;如果一个Canvas中&#xff0c;有很多图形&#xff0c;比如下图&#xff1a;矩形&#xff0c;菱形等。如果每个图形都加一个点击事件&#xff0c;想要一个通用的方法&#xff0c;获取鼠标点击在了哪个图形上&#xff0c;这里可以使用Visual…

不足百元的乐高式积木,玩转数理机械原理

▲数据汪特别推荐点击上图进入玩酷屋作为一名资深积木达人&#xff0c;小木我可是大大小小的积木阅览无数&#xff0c;当然乐高也不会放过&#xff0c;虽然“钱包君”已经是路人了。&#xff08;每月的工资用来买乐高~&#xff09;之前给大家推荐了一款STEM积木&#xff0c;小小…

WPF 密码框水印与明文切换

WPF开发者QQ群&#xff1a; 340500857 欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;一、PasswordWithPlainText.xaml 代码如下<UserControl x:Class"WpfPasswrod.CustomControls.PasswordWith…

麻省理工学院迷你猎豹机器人,四条腿都能后空翻了,又是黑科技啊~

全世界只有3.14 % 的人关注了数据与算法之美麻省理工学院公布了一款迷你猎豹机器人&#xff0c;是第一个做后空翻的四足机器人。只有20磅的四肢四足动物可弯曲并摆动腿部&#xff0c;使其能够向右或向上行走。机器人也可以在不平坦的地形上小跑&#xff0c;大约是普通人行走速度…

c语言宏高级用法,C语言宏高级用法 [总结]

1、前言今天看代码时候&#xff0c;遇到一些宏&#xff0c;之前没有见过&#xff0c;感觉挺新鲜。如是上网google一下&#xff0c;顺便总结一下&#xff0c;方便以后学习和运用。C语言程序中广泛的使用宏定义&#xff0c;采用关键字define进行定义&#xff0c;宏只是一种简单的…

Win 11 真的要来了!微软宣布 Win10 将于 2025 年终止支持!

微软今日正式更新支持页面&#xff0c;Windows 10 家庭版和专业版的支持将于 2025 年 10 月 14 日结束。值得注意的是&#xff0c;这是微软首次描述对 Windows 10 的支持结束&#xff0c;在此之前&#xff0c;微软仅记录了特定的 Windows 10 正式版本&#xff08;如最新的 Wind…

每日一笑 | 为什么椅子总是最乱的?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

R,让你的数据分析更简便!

R语言被广泛应用于生物、医学、电商、新闻等数据相关行业&#xff0c;是目前主流数据应用软件之一。它是用来进行统计分析、绘图和统计编程的强大工具&#xff0c;它在大规模的数据挖掘、可视化和报告方面已经取得了巨大的成功。你能够轻松地获取各种的包&#xff08;通过 CRAN…

久坐伤腰!这款德国3D美臀坐垫,分散身体压力,保护腰椎尾椎。

▲数据汪特别推荐点击上图进入玩酷屋一直听闻德国是一个「直肠子」国家他们的严谨、认真、一丝不苟让这个只有8000万人口的国家竟有2300多个享誉全球的名牌小到牙刷牙线&#xff0c;大到汽车「德国制造」已成为高品质的代名词德国品质到底是一种怎样的存在&#xff1f;德国人生…

C sharp实例:华盾武器门数据接收和解析

项目介绍&#xff1a;本实例主要是接收安检金属门的数据解析并显示到界面上&#xff0c;只做功能实现&#xff0c;不做界面美化硬件&#xff1a;金属门一个、网线一根、电脑主机&#xff0c;金属门网线可以直接接到电脑主机上开发环境&#xff1a;vs2017 系统&#xff1a;win10…

Nature封面:大团队日趋中庸,小团队更容易出颠覆性创新

全世界只有3.14 % 的人关注了数据与算法之美【导读】现代科学研究团队的规模越来越大&#xff0c;一般认为&#xff0c;大团队往往有着更充足的经费支持和多样化的研究人员&#xff0c;更有利于科学创新。但近日Nature发表封面文章&#xff0c;认为大团队往往因为失败代价太高而…

linux 创建ll,两台linux建立GRE隧道

1.拓扑图&#xff1a; 备注&#xff1a;因为应用原因&#xff0c;需要在linux2上添加一个公网地址&#xff0c;并且在中间路由设备不受控制的情况下&#xff0c;Linux1能访问到linux2上面的公网地址。2.基本接口配置&#xff1a;linux1:192.168.10.1/24linux2:192.168.20.2/24R…