一种实时数据库时点视频回放方法
文献发布时间:2023-06-19 19:30:30
技术领域
本发明涉及视频回放方法,尤其涉及一种实时数据库时点视频回放方法,及所述实时数据库时点视频回放方法的操作方法,执行所述实时数据库时点视频回放方法的计算机可读存储介质。
背景技术
针对电脑安装了Historian2017(历史数据库软件2017)任意版本,同时现场配备海康威视任意型号NVR机型的情形,历史画面无法与historian同时出现在同一画面,且共用同一个时间点,其中出现的困难如图1所示。不同的NVR需要适配本身是封装过的,包含技术壁垒的,经过咨询海康威视的技术后使用它专用的开发包得以去测试并解决问题。如果客户现场有多台NVR,利用C#连接到正确的NVR是一个相当重要的问题,不正确的IP地址以及Port号会连接到错误的设备画面。
发明内容
为了解决不同的NVR需要适配本身是封装过的技术问题,以及客户现场有多台NVR不正确的IP地址以及Port号会连接到错误的设备画面的技术问题,本发明提供一种实时数据库时点视频回放方法,及所述实时数据库时点视频回放方法的操作方法,执行所述实时数据库时点视频回放方法的计算机可读存储介质。
本发明采用以下技术方案实现:一种实时数据库时点视频回放方法,其应用的软件环境为:安装历史数据库软件2017任意版本;其应用的硬件环境为:至少一台海康威视任意型号的NVR;所述实时数据库时点视频回放方法包括以下步骤:
针对不同的NVR需要适配本身是封装过的情形,将NVR的SDK(CHCNetSDK.CS)嵌入C#工程中调用;
针对客户现场有多台NVR的情形,C#中本地存储多台NVR信息,然后确认用户名、密码、IP、Port对应的信息,同时与业主保证一个IP号对应一个NVR,做到NVR盒子不重叠,不引起调用重复的IP地址,防止通道的错误引用。
作为上述方案的进一步改进,所述实时数据库时点视频回放方法还包括以下步骤:
针对NVR中通道获取设计,利用CHCNetSDK.CS中System.Runtime.InteropServices.Marshal来调用转码,获得正确的通道号以及通道别名。
作为上述方案的进一步改进,所述实时数据库时点视频回放方法还包括以下步骤:
针对C#工程中配置完信息,在视频窗口播放上需要确认哪个窗口对应哪个频道的情形,创建NVR组,通过按键位置判断正确的NVR以及通道,分别执行以下播放脚本。
作为上述方案的进一步改进,所述实时数据库时点视频回放方法还包括以下步骤:
针对所述历史数据库软件的Historian Client在C#中的使用,在AVEVA WSP安装软件中,提取相关DLL文件,并将其添加至C#工程中,引用aaHistClientTagPicker.dll、aaHistClientTrendControl.dll函数。
作为上述方案的进一步改进,所述实时数据库时点视频回放方法还包括以下步骤:
针对查看趋势曲线以及视频播放窗口的情形,利用一个ContextMenuStrip控件来区分上下层。
作为上述方案的进一步改进,所述实时数据库时点视频回放方法还包括以下步骤:
针对所述历史数据库软件以及海康威视显示窗口显示同一个开始时间节点与结束时间节点的情形,采用了System.Windows.Forms.DateTime中的dateTimeStart来作为开始时间节点,System.Windows.Forms.DateTime中的dateTimeEnd来作为结束时间节点。
作为上述方案的进一步改进,所述实时数据库时点视频回放方法还包括以下步骤:
为了使所述历史数据库软件的historian Client 的时间播放点与视频回放窗口的时间保持一致,利用HCNetSDK.NET_DVR_PlayBackControl_V40(m_lPlayHandle,CHCNetSDK.NET_DVR_PLAYPAUSE, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue)与时点每隔一个具体时间进行比较,校准时间后调用与时间对应的画面。
本发明还提供一种上述任意实时数据库时点视频回放方法的操作方法,所述实时数据库时点视频回放方法的操作方法包括以下步骤:
步骤一,配置需查看历史视频的NVR对应信息;
步骤二,点击测试与NVR的通讯,并重开程序;
步骤三,打开预保存的Historian趋势文件*.aaTrend;
步骤四,界面判断NVR以及趋势文件是否成功;
步骤五,若运行按钮无反应则登录失败;
步骤六,需判断配置中哪一项出现问题并重新配置。
步骤七,若产生历史视频画面,则表示运行成功,用户可继续操作。
作为上述方案的进一步改进,所述NVR对应信息包括NVR的IP地址、端口号、用户名以及密码。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时,实现上述任意实时数据库时点视频回放方法的步骤。
本发明的有益效果为:
(1)解决不同的NVR需要适配本身是封装过的技术问题;
(2)当客户现场有多台NVR时,能连接到正确的NVR;
(3)重新对应了通道号与通道别名,能正常显示配置信息;
(4)在视频窗口播放上能做到窗口与频道的一一对应;
(5)实现HistorianClient在C#中的自由使用;
(6)能方便查看趋势曲线以及视频播放窗口;
(7)趋势曲线以及视频播放窗口同步查看时,开始与结束的时间节点能做到重合;
(8)能使historian Client 的时间播放点与视频回放窗口的时间保持一致。
附图说明
图1为现有技术存在的缺陷示意图;
图2为本发明的实时数据库时点视频回放方法的操作方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明的实时数据库时点视频回放方法是在解决实际应用过程中获取的,接下去对整个方法做详细介绍。
一、适配海康威视型号的NVR
问题:
不同的NVR需要适配本身是封装过的,包含技术壁垒的,经过咨询海康威视的技术后使用它专用的开发包得以去测试并解决问题。
解决过程:
海康威视官网上查询相关的SDK(CHCNetSDK.CS),将其嵌入C#工程中调用。
二、解决连入正确的NVR
问题:
客户现场有多台NVR,利用C#连接到正确的NVR是一个相当重要的问题,不正确的IP地址以及Port号会连接到错误的设备画面。
解决过程:
C#中本地存储多台NVR信息,然后确认用户名、密码、IP、Port对应的信息,同时与业主保证一个IP号对应一个NVR,做到NVR盒子不重叠,不引起调用重复的IP地址,防止通道的错误引用。
在研究海康威视SDK中发现利用Login通过SDK中CHCNetSDK.NET_DVR_Login_V30(IP, Int16.Parse(Port), UserName, Password,ref DeviceInfo)方法,成功登录到对应的NVR机器中,为下一步获取通道信号以及画面做基础。
三、解决通道号以及通道别名转码问题
问题:
客户现场的NVR中通道获取正常,本身通道号分配是按照阿拉伯数字1、2、3依次排列,别名作为通道号最主要的差异化识别中最重要的一块,需要特别去对应显示,因为业主很难在60多个阿拉伯数字1、2、3的通道号中找到需要的通道,中文别名使得这个软件的使用变得非常便利。
解决过程:
但是别名并不是标准函数,在测试SDK所给的脚本中,花了很久去测试出正确对应别名的函数,利用CHCNetSDK.CS中System.Runtime.InteropServices.Marshal来调用转码,获得正确的通道号以及通道别名。
重新对应了通道号与通道别名,能正常显示配置信息。
uintdwSize=(uint)Marshal.SizeOf(m_struIpParaCfgV40);
IntPtrptrIpParaCfgV40=Marshal.AllocHGlobal((Int32)dwSize);
Marshal.StructureToPtr(m_struIpParaCfgV40,ptrIpParaCfgV40,false);
m_struChanNoInfo.Init();//别名
Int32nSize=Marshal.SizeOf(m_struPicCfgV40);//别名
IntPtrptrPicCfg=Marshal.AllocHGlobal(nSize);//别名
Marshal.StructureToPtr(m_struPicCfgV40,ptrPicCfg,false);//别名
uintdwReturn=0;
intiGroupNo=0;//该Demo仅获取第一组64个通道,如果设备IP通道大于64路,需要按组号0~i多次调用NET_DVR_GET_IPPARACFG_V40获取
if(!CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID,CHCNetSDK.NET_DVR_GET_IPPARACFG_V40,iGroupNo,ptrIpParaCfgV40,dwSize,refdwReturn))
{iLastErr=CHCNetSDK.NET_DVR_GetLastError();
str1="NET_DVR_GET_IPPARACFG_V40failed,errorcode="+iLastErr;//获取IP资源配置信息失败,输出错误号
returnnum=str1;
}
else
{
m_struIpParaCfgV40=(CHCNetSDK.NET_DVR_IPPARACFG_V40)Marshal.PtrToStructure(ptrIpParaCfgV40,typeof(CHCNetSDK.NET_DVR_IPPARACFG_V40));
for(i=0;i { ListAnalogChannel(i+1,m_struIpParaCfgV40.byAnalogChanEnable[i]); iChannelNum[i]=i+(int)DeviceInfo.byStartChan; } bytebyStreamType; uintiDChanNum=64; if(dwDChanTotalNum<64) { iDChanNum=dwDChanTotalNum;//如果设备IP通道小于64路,按实际路数获取 } for(i=0;i { iChannelNum[i+dwAChanTotalNum]=i+(int)m_struIpParaCfgV40.dwStartDChan; byStreamType=m_struIpParaCfgV40.struStreamMode[i].byGetStreamType; m_unionGetStream=m_struIpParaCfgV40.struStreamMode[i].uGetStream; switch(byStreamType) { //目前NVR仅支持0-直接从设备取流一种方式 case0: dwSize=(uint)Marshal.SizeOf(m_unionGetStream); IntPtrptrChanInfo=Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(m_unionGetStream,ptrChanInfo,false); m_struChanInfo=(CHCNetSDK.NET_DVR_IPCHANINFO)Marshal.PtrToStructure(ptrChanInfo,typeof(CHCNetSDK.NET_DVR_IPCHANINFO)); CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID,CHCNetSDK.NET_DVR_GET_PICCFG_V40,iChannelNum[i],ptrPicCfg,(UInt32)nSize,refdwReturn);//别名 m_struPicCfgV40=(CHCNetSDK.NET_DVR_PICCFG_V40)Marshal.PtrToStructure(ptrPicCfg,typeof(CHCNetSDK.NET_DVR_PICCFG_V40));//别名 //列出IP通道 ChannelIPNum[i]=Convert.ToInt32(m_struChanInfo.byIPID); ChannelStatusNum[i]=Convert.ToString(m_struChanInfo.byEnable); stringChanOthername=Encoding.GetEncoding("GBK").GetString(m_struPicCfgV40.sChanName).Trim();//别名 ListIPChannel(i+1,m_struChanInfo.byEnable,m_struChanInfo.byIPID,ChanOthername);//最后一位别名 Marshal.FreeHGlobal(ptrChanInfo); break; default: break;}}} Marshal.FreeHGlobal(ptrIpParaCfgV40); 四、播放多个海康威视NVR的某个频道 问题: C#工程中配置完信息,在视频窗口播放上需要确认哪个窗口对应哪个频道。因此,需要弹窗来索引对应的窗口。 解决过程: 创建NVR组,通过按键位置判断正确的NVR以及通道,分别执行以下播放脚本。 (c1.ChangeChan - 1, pictureBox1.Handle, dateTimeStart.Value.AddSeconds(-2), dateTimeStart.Value.AddHours(1), ref CS1.m_lPlayHandles); publicvoidplaybackbytime(intchan,IntPtrpichandle,DateTimestartdt,DateTimeenddt,refintm_lPlayHandle) { if(nvrr.m_lUserID<0) { nvrr.Login(); } if(m_lPlayHandle>=0) { //如果已经正在回放,先停止回放 if(!CHCNetSDK.NET_DVR_StopPlayBack(m_lPlayHandle)) { iLastErr=CHCNetSDK.NET_DVR_GetLastError(); errmsg="NET_DVR_StopPlayBackfailed,errorcode="+iLastErr; return; } m_bReverse=false; m_bPause=false; return; } CHCNetSDK.NET_DVR_VOD_PARAstruVodPara=newCHCNetSDK.NET_DVR_VOD_PARA(); struVodPara.dwSize=(uint)Marshal.SizeOf(struVodPara); struVodPara.struIDInfo.dwChannel=(uint)nvrr.iChannelNum[(int)chan];//通道号Channelnumber struVodPara.hWnd=pichandle;//回放窗口句柄 //设置回放的开始时间Setthestartingtimetosearchvideofiles struVodPara.struBeginTime.dwYear=(uint)startdt.Year; struVodPara.struBeginTime.dwMonth=(uint)startdt.Month; struVodPara.struBeginTime.dwDay=(uint)startdt.Day; struVodPara.struBeginTime.dwHour=(uint)startdt.Hour; struVodPara.struBeginTime.dwMinute=(uint)startdt.Minute; struVodPara.struBeginTime.dwSecond=(uint)startdt.Second; //设置回放的结束时间Setthestoppingtimetosearchvideofiles struVodPara.struEndTime.dwYear=(uint)enddt.Year; struVodPara.struEndTime.dwMonth=(uint)enddt.Month; struVodPara.struEndTime.dwDay=(uint)enddt.Day; struVodPara.struEndTime.dwHour=(uint)enddt.Hour; struVodPara.struEndTime.dwMinute=(uint)enddt.Minute; struVodPara.struEndTime.dwSecond=(uint)enddt.Second; //按时间回放Playbackbytime m_lPlayHandle=CHCNetSDK.NET_DVR_PlayBackByTime_V40(nvrr.m_lUserID,refstruVodPara); if(m_lPlayHandle<0) { iLastErr=CHCNetSDK.NET_DVR_GetLastError(); errmsg="NET_DVR_PlayBackByTime_V40failed,errorcode="+iLastErr; return; } uintiOutValue=0; if(!CHCNetSDK.NET_DVR_PlayBackControl_V40(m_lPlayHandle,CHCNetSDK.NET_DVR_PLAYSTART,IntPtr.Zero,0,IntPtr.Zero,refiOutValue)) { iLastErr=CHCNetSDK.NET_DVR_GetLastError(); errmsg="NET_DVR_PLAYSTARTfailed,errorcode="+iLastErr;//回放控制失败,输出错误号 return;}} 六、适配Historian Client 问题: 针对HistorianClient在C#中的使用,需要调用专有的HistorianClient的dll控件来使用。 解决过程: 在AVEVA WSP安装软件中,提取相关DLL文件,并将其添加至C#工程中,引用aaHistClientTagPicker.dll、aaHistClientTrendControl.dll函数。 七、解决上下区分区域 问题: 显示时应该上下分开,这样才能方便查看趋势曲线以及视频播放窗口。 解决过程: 利用了一个ContextMenuStrip控件来区分上下层。 八、Historian以及海康威视显示窗口显示同一个开始时间节点与结束时间节点 问题: 趋势曲线以及视频播放窗口同步查看的最重要的重合信息就是开始与结束的时间节点,重合两个部分的时间节点才能够解决这个发明软件的关键问题。 解决过程: 采用了System.Windows.Forms.DateTime中的dateTimeStart来作为开始时间节点,System.Windows.Forms.DateTime中的dateTimeEnd来作为结束时间节点。 九、存储视频功能 问题: 在查询视频时,可通过下载视频来存储有效的视频文件以供后续排查。 解决过程: Path.ChangeExtension(Application.ExecutablePath, ".xml"); 十、线性同步功能 问题: 为了使historian Client 的时间播放点与视频回放窗口的时间保持一致,实时性非常重要,这是这个发明软件的核心问题。 解决过程: 利用CHCNetSDK.NET_DVR_PlayBackControl_V40(m_lPlayHandle,CHCNetSDK.NET_DVR_PLAYPAUSE, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue)与时点每隔一个具体时间进行比较,校准时间后调用与时间对应的画面。 请参阅图1,电脑需安装Historian2017任意版本同时现场需配备海康威视任意型号NVR机型,所述实时数据库时点视频回放方法的操作方法包括以下步骤: 步骤1、配置需查看历史视频的NVR对应信息。包括NVR的IP地址,端口号,用户名以及密码(可多台)。 步骤2、点击测试与NVR的通讯,并重开程序。 步骤3、打开预保存的Historian趋势文件(*.aaTrend) 步骤4、界面判断NVR以及趋势文件是否成功。 步骤5、若运行按钮无反应则登录失败。 步骤6、需判断配置中哪一项出现问题并重新配置。 步骤7、若产生历史视频画面,则表示运行成功,用户可继续操作。 本发明的实时数据库时点视频回放方法设计成程序进行实现功能时,可以采用一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序。该计算机终端可包括存储器、处理器,以及存储在存储器上并可在处理器上运行的计算机程序。该计算机程序被处理器执行时,实现本发明的实时数据库时点视频回放方法的步骤。计算机终端可以是电脑、智能手机等。也可以设计成嵌入式运行的程序,安装在计算机终端上,如安装在单片机上。 本发明的实时数据库时点视频回放方法设计成程序进行实现功能时,也可以设计成计算机可读存储介质可独立运行的程序,计算机可读存储介质可以是U盘,设计成U盾,通过U盘设计成通过外在触发启动整个方法的程序。 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
- 一种高清视频实时点播和历史回放的方法及系统
- 一种高清视频实时点播和历史回放的方法及系统