【海康威视】WPF客户端二次开发:【1】监控视频画面预览(SDK初始化、设备登录、监控画面预览)
文章目录
- 一、前言
- 二、步骤
- 1、界面布局准备:
- 2、海康威视SDK初始化:
- 3、准备登录相关参数信息:
- 4、登录设备:
- 5、开启预览:注意画面播放句柄
- 6、特别说明:
- 7、结果欣赏:
- 三、总结
一、前言
海康威视桌面板开发,追求简单快捷高效可选择Winform进行开发,追求界面好看当然自然需要选择WPF进行开发,WPF在布局也界面效果展示上面可以做的很漂亮。
WPF 和 Winform 开发类似,基本流程都是:1、海康SDK初始化;2、账号密码登录海康设备;3、传递画面播放句柄打开预览;
Winform中通常使用 PictureBox 组件进行画面播放,但是WPF中没有这个组件,通常做法是采用 WPF内嵌一个Winrom的PictureBox组件;
测试环境:VS2019+WPF+.Net5.0
二、步骤
1、界面布局准备:
WPF内嵌Winform PictureBox核心代码:
<WindowsFormsHost x:Name="Video_PBX" Background="#f8f8f9" HorizontalAlignment="Stretch" Grid.Row="0" ><wf:PictureBox x:Name="Video_PBX_01" Cursor="Hand"/>
</WindowsFormsHost>
2、海康威视SDK初始化:
- 需要去官网下载海康SDK(若干Dll文件):
无需在项目引用,把整个HKWSDLL文件夹放在程序根目录 - 需要引用SDK各种方法的C#封装类CHCNetSDK.cs(1.5万行代码):
添加到项目中方便使用,注意代码中Dll引用路径要对 [DllImport(@“HKWSDLL\HCNetSDK.dll”)] - 海康SDK初始化:
if (CHCNetSDK.NET_DVR_Init())
{MessageBox.Show("1、海康威视SDK初始化成功!");
}
3、准备登录相关参数信息:
DeviceDto tmpDeviceDto = new()
{Name = "测试设备",Login_Account = "admin",Login_Password = "1234qwer",LocalLogin_Port = 8000,LocalLogin_IPAddress = "172.24.0.168"
};
//各种函数返回结果封装
public class MsgReturnedDto{public bool Success { get; set; }public string Error { get; set; }public string MsgType { get; set; } public dynamic Result { get; set; }public MsgReturnedDto(bool success = true, string error = "", object result = null, string msgtype = ""){Success = success;Error = error;Result = result;MsgType = msgtype;}}
4、登录设备:
//海康登录成功后返回的设备基础信息
private CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo_V30 = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();
private int UserId=-1;//登录成功后返回的用户编号:作为其他功能调用的参数
public MsgReturnedDto Login(DeviceDto DeviceInfo)
{this.UserId = CHCNetSDK.NET_DVR_Login_V30(DeviceInfo.LocalLogin_IPAddress, DeviceInfo.LocalLogin_Port, DeviceInfo.Login_Account, DeviceInfo.Login_Password, ref DeviceInfo_V30);if (this.UserId == HandleInfo.NOT_ON_PATROL){uint tmpCode = CHCNetSDK.NET_DVR_GetLastError();string tmpMsg = $"登录失败:{tmpCode}";return new MsgReturnedDto(false, tmpMsg);}return new MsgReturnedDto(true, "登录成功");
}
5、开启预览:注意画面播放句柄
private int RealPlayHandle =-1;//开启预览成功返回句柄
public IntPtr PlayWnd =this.Video_PBX_01.Handle;//【重点】播放画面句柄
public MsgReturnedDto StartRealPlay()
{//1、尝试停止预览 保证上次其他环节失败 导致重新打开预览失败if (this.RealPlayHandle != -1){CHCNetSDK.NET_DVR_StopRealPlay(this.RealPlayHandle);}//2、全局存储预览回调函数if (this.RealPlayDataCallBackMethod == null){//预览实时流回调函数:可以自己对视频流进行解码操作 比如衔接自己的画面捕捉识别等功能this.RealPlayDataCallBackMethod = new CHCNetSDK.REALDATACALLBACK(this.RealDataCallBack);}//3、预览参数配置IntPtr pUser = new IntPtr();//用户数据CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();lpPreviewInfo.hPlayWnd = this.PlayWnd;//预览窗口 播放画面句柄 PictureBox组件句柄lpPreviewInfo.lChannel = 1; //Int16.Parse(textBoxChannel.Text);//预览的设备通道lpPreviewInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推lpPreviewInfo.dwLinkMode = 0;//连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP lpPreviewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流lpPreviewInfo.dwDisplayBufNum = 1; //播放库播放缓冲区最大缓冲帧数lpPreviewInfo.byProtoType = 0;lpPreviewInfo.byPreviewMode = 0;//4、打开预览 Start live viewthis.RealPlayHandle = CHCNetSDK.NET_DVR_RealPlay_V40(this.UserId, ref lpPreviewInfo, null/*RealData*/, pUser);//5、预览出错捕捉错误并返回if (this.RealPlayHandle == -1){uint tmpCode = CHCNetSDK.NET_DVR_GetLastError();return new MsgReturnedDto(false, string.Format("单设备打开预览失败:", tmpCode));}//6、打开预览成功return new MsgReturnedDto(true, "打开预览成功");
}
/// <summary>/// 实时播放数据回调函数/// </summary>public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser){if (dwBufSize <= 0){return;}byte[] sData = new byte[dwBufSize];Marshal.Copy(pBuffer, sData, 0, (Int32)dwBufSize);string str = "实时流数据.ps";FileStream fs = new FileStream(str, FileMode.Create);int iLen = (int)dwBufSize;fs.Write(sData, 0, iLen);fs.Close();}
6、特别说明:
- 为了测试方便可以把上述代码直接放到 WPF页面的 .cs代码中;
- 优雅一点儿的做法是把上面的代码封装到一个独立的类里面方便使用;
7、结果欣赏:
三、总结
差不多就是这么个流程,对你有帮助不放收藏点赞一波,没有的素材内容可以加我微信索要:qingwatianya
【海康威视】WPF客户端二次开发:【1】监控视频画面预览(SDK初始化、设备登录、监控画面预览)相关推荐
- 【海康威视】WPF客户端二次开发:【3】制作WPF/Winform安装包
文章目录 一.前言 二.成果欣赏 三.打包前准备 1.创建WPF应用程序: 2.准备程序打包工具: 四.打包步骤 1.创建打包项目: 2.应用程序名称及公司: 3.选中安装程序类型: 4.设置安装项目 ...
- Linux环境中对海康威视工业相机SDK进行二次开发(QT+CMake+Opencv+海康SDK)
关于在Windows环境中对海康威视工业相机SDK进行二次开发的话,可以参考这两篇博客. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一) 海康威视工业相机SDK二 ...
- Visual Studio 2019 STK11.6 C#(WPF)二次开发
Visual Studio 2019 STK11.6 C#(WPF)二次开发 概述 环境 软件效果 工程创建 添加引用文件 主要代码 1.创建场景 2.创建飞机 3.创建站点 4.创建传感器 5.创建 ...
- 抖音seo源码二次开发,短视频seo源码二次开发
抖音seo源码二次开发,短视频seo源码二次开发 开发逻辑及部分代码展示 抖音seo系统前端采用vue 与React技术语言,后端采用jave后台技术语言. 抖音seo是什么技术逻辑呢?seo是搜索引 ...
- 海康威视摄像头web二次开发(angular)
海康威视官网有提供二次开发的web开发包,主要由js,html组成,但是开发包更新迭代太快了,甲方的摄像头还是老版本,幸好甲方提供了它们的开发包(内涵demo,doc). 测试环境 在web包里面里面 ...
- 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一)
最近在做一个项目,涉及到工业相机,需要对其进行二次开发.相机方面选择了海康威视,网上关于海康威视工业相机SDK的开发资料很少,官方文档里面虽然写的是支持C++开发的,但其实是C.自己也摸索了一段时间, ...
- 基于QT的海康威视网络摄像头二次开发
资源下载链接 第一次使用海康威视的网络摄像头并进行二次开发,海康威视网络摄像头的二次开发的资料已经比较详细,网上关于这方面的介绍也不少.此处基于我的需求做了一些工作,特此记录. 目标: 1.实时预览 ...
- 【海康摄像头二次开发】移植海康摄像头Android SDK并实现多屏显示
文章目录 前言 一.看海康的例程 二.重要的函数分析 HCNetSDK PlayerSDK 三.移植 1.引入库 3.写一个设备信息管理的类 4.设备登录的类 5.视频显示的控件 6.通用的工具类 7 ...
- revit二次开发之教学视频
一.背景 刚入门revit二次开发的小伙伴,很多是零基础的工程人员,为了解决这个问题,博主做了revit二次开发的一系列教学视频(包括C#基础与revit二次开发两个模块),来帮助大家更好的入门. 二 ...
- 基于QT的海康威视的相机二次开发
与上一篇不同的是,本篇注重于实现相机的一键开启,注重相机采集过程中调整曝光量和伽马矫正等.(代码来自短学期实践时五位老师提供的,上传以供大家学习借鉴) 代码资源: 链接:https://pan.bai ...
最新文章
- 串口监视软件_ESP32 Arduino教程:软件重置
- 学习python的日常6
- python_字符串有时可以比较大小哦!
- TensorFlow 1.13.0 正式发布,谷歌开源的机器学习框架
- BZOJ 2561: 最小生成树(最小割)
- 当汇错款时该怎么办?
- redis sentinel哨兵配置及日志分析(grep -v)
- 阿里再开源!基于JAVA的模块化开发框架JarsLink
- KernelPCA进行非线性数据的映射和分类
- webbrowser控件 加载为空白_OA系统公文控件升级操作说明
- 云访问安全代理(CASB)行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- snmp是什么层协议_计算机网络基础:TCP/IP协议相关知识笔记?
- maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)
- php扑克牌随机发,PHP实现随机发放扑克牌
- python demo.py_python,pycharm_【已解决】pycharm 运行 web.py demo文件问题,python,pycharm - phpStudy...
- Django项目中常用的配置与官方文档
- LOJ2312 LUOGU-P3733「HAOI2017」八纵八横 (异或线性基、生成树、线段树分治)
- [unity]实现切水果游戏
- Unity中使用Google.Protobuf3,获取dll文件
- python:计划持有基金n年,求n年的每年复利_利率
热门文章
- 神经网络反向传播(BP)算法推导
- 自建网盘教程之:使用可道云搭建私有云网盘,无需数据库
- 中南大学电磁场理论matlab,中南大学电磁场理论实验2.doc
- 《TCP/IP详解》协议卷读书笔记之概述
- 25、ExtJs操作用友华表Cell插件(No.1)认识Cell
- (哈工大)计算机网络体系结构——OSI、TCP/IP、5层模型
- 7-5 游客检票 - 实验3 简单的计算及输入输出 -《Python编程基础及应用实验教程》(高等教育出版社)
- 使用arcgis修改行政区划图边界
- 【STM32 + HAL库】倒立摆
- html5游戏 糖果派对,搞怪碰碰球手机版糖果四溅游戏吃机高人来献计