文档详情

CCTV程序开发文档基于海康《设备网络SDK使用手册 V4.1.0》

仙***
实名认证
店铺
DOC
1.22MB
约85页
文档ID:33087711
CCTV程序开发文档基于海康《设备网络SDK使用手册 V4.1.0》_第1页
1/85

CCTV程序开发文档基于海康《设备网络SDK使用手册 V4.1.0》2012/1/17概述设备网络SDK是基于设备私有网络通信协议开发的,为后端设备(嵌入式网络硬盘录像机、视频服务器)、前端设备(网络摄像机、网络球机、IP模块)等产品服务的配套模块,用于远程访问和控制设备软件的二次开发 适用于以下产品型号:1. DS-95xx、DS-96xxNVR; DS-90xx混合型硬盘录像机; 2. DS-91xx、DS-81xx、DS-80xx、DS-70xx、DS-71xx、DS-7116、DS-72xx硬盘录像机;3. DS-60xx、DS-61xx视频服务器、编/解码器;4. iDS-6002HF/B双摄像机跟踪、iDS-6101HF智能设备(行为分析)、iDS52xx智能分析仪、iDS90XX、iDS91XX;5. DS630x_D、DS-6401HD多路解码器;6. IP摄像机(以下简称“IPC”):DS-2CD71xx、DS-2CD81xx、DS-2CD7xx、DS-2CD8xx、DS-2CD9xx;7. 其他IP设备:包含IP模块、IP快球等由于某些功能在此SDK版本中做了扩展,同时设备程序也做了相应的更新扩展,为了方便下文说明,此处将以上设备归为两类:l 如DS-7116、DS-81xx、DS-90xx、DS-91xx、DS-95xx、DS-96xx等系列设备称为V3.0以上版本支持的设备;l 如DS-80xx、IPC等设备称为V3.0以下版本支持的设备。

设备网络SDK主要功能 序号功能备注1.图像预览2.文件回放和下载3.云台控制、布防/撤防4.语音对讲5.日志管理6.解码卡7.远程升级8.远程重启/关闭9.格式化硬盘10.参数配置(系统配置、通道配置、串口配置、报警配置、用户配置)11.多路解码器12.智能设备功能和获取设备能力集设备网络SDK包含网络通讯库、软解码库、硬解码库等功能组件,我们提供Windows和Linux两个版本的SDK,各自所包含的组件如下: Windows下设备网络SDK: 网络通讯库HCNetSDK.h头文件HCNetSDK.lib LIB库文件HCNetSDK.dll DLL库文件hpr库hpr.lib LIB库文件hpr.dll DLL库文件RTSP通讯库StreamTransClient.dll DLL库文件软解码库PlayM4.h头文件PlayCtrl.lib LIB库文件PlayCtrl.dll DLL库文件转封装库SystemTransform.dll DLL库文件硬解码库DataType.hDecodeCardSdk.h头文件DsSdk.lib LIB库文件DsSdk.dll DLL库文件Linux下设备网络SDK库: 网络通讯库hcnetsdk.h头文件libhcnetsdk.soSO库文件hpr库libhpr.soSO库文件RTSP通讯库libStreamTransClient.soSO库文件软解码库playsdkpu.h头文件libm4play.soSO库文件转封装库libSystemTransform.soSO库文件本版本的设备网络SDK开发包中包含以上各个组件,除网络通讯库和hpr库这两个组件为必须项外,用户可以根据需要选择其中的一部分组件,以下将对各个组件在SDK中的作用和使用条件分别说明。

网络通讯库是设备网络SDK的主体,主要用于网络客户端与各类产品之间的通讯交互,负责远程功能调控、远程参数配置及码流数据的获取和处理等 hpr库是网络通讯库的依赖库 RTSP通讯库是支持RTSP传输协议的网络库当需要对支持RTSP协议的产品进行取流等操作时就必须加载该项组件 软解码库主要用于对实时码流数据进行解码显示(实现预览功能)和对录像文件进行回放解码等用户如果需要在SDK内部进行对实时流和录像码流播放显示时(即NET_DVR_RealPlay_V30接口的第二个结构体参数的播放句柄设置成有效句柄时)必须加载该组件,而如果用户仅需要用网络通讯库捕获到数据后再外部自行处理就不需要加载该组件,这种情况下用户在外部自行解码将更灵活,可参见软解码库函数说明《播放器SDK编程指南》 转封装库的功能可以分为两种:一种是将标准码流转换成采用我们公司封装格式的码流当用户需要对支持RTSP协议的产品捕获采用本公司封装格式的码流数据时(即当设置NET_DVR_RealPlay_V30接口中的回调函数捕获数据或者调用NET_DVR_SetRealDataCallBack接口捕获数据时)必须加载该组件另一种功能是能将标准码流转换成其他格式的封装,如3GPP、PS等。

例如,当用户需要对支持RTSP协议的产品实时捕获指定封装格式的码流数据(对应的SDK接口为NET_DVR_SaveRealData)时必须加载该项组件 硬解码库需在配备硬解码卡(MD卡)的前提下使用,通过解码卡的解码与输出功能实现实时流的解码显示及向监视器上矩阵输出的功能用户如果需要在SDK内部对实时流码流播放显示时必须加载该项组件为更方便灵活地调用硬解码的相关功能,建议用户通过捕获数据在外部处理解码相关硬解码库的功能函数可参见《板卡SDK编程指南》中解码卡API相关介绍Linux下无硬解功能 通用接口介绍接口功能支持的产品备注NET_DVR_Init初始化SDK全部NET_DVR_Cleanup释放SDK资源全部NET_DVR_SetConnectTime设置SDK网络连接超时时间和连接尝试次数全部NET_DVR_SetReconnect设置SDK重连功能全部NET_DVR_GetDVRIPByResolveSvr通过解析服务器,获取设备的动态IP地址全部NET_DVR_SetDVRMessage注册接收异常、重连等消息的窗口句柄全部NET_DVR_SetExceptionCallBack_V30注册接收异常、重连等消息的窗口句柄或回调函数全部NET_DVR_GetSDKVersion获取SDK的版本信息全部NET_DVR_GetSDKBuildVersion获取SDK的版本号和build信息全部NET_DVR_GetSDKState获取当前SDK的状态信息全部NET_DVR_GetSDKAbility获取当前SDK的功能信息全部NET_DVR_SetLogToFile启用SDK写日志文件全部NET_DVR_GetLastError返回最后操作的错误码全部NET_DVR_GetErrorMsg返回最后操作的错误码信息全部NET_DVR_Login_V30注册全部NET_DVR_Logout_V30注销全部 编程引导SDK主动注册模式SDK接口调用的主要流程其中虚线框的流程是可选部分,不会影响其他流程和模块的功能使用。

按实现功能的不同可以分成十个模块,实现每个模块的功能时初始化SDK、用户注册设备、注销设备和释放SDK资源这4个流程是必不可少的1) 初始化SDK(NET_DVR_Init):对整个网络SDK系统的初始化,内存预分配等操作2) 设置连接超时时间(NET_DVR_SetConnectTime):这部分为可选,用于设置SDK中的网络连接超时时间,用户可以根据自己的需要设置该值在不调用此接口设置超时时间的情况下,将采用SDK中的默认值 3) 设置接收异常消息的回调函数(NET_DVR_SetDVRMessage或NET_DVR_SetExceptionCallBack_V30):由于SDK中大部分模块的功能都是由异步模式实现,所以我们提供此接口用于接收预览、报警、回放、透明通道和语音对讲等模块发生异常信息用户可以在初始化SDK后就设置该回调函数,在应用层对各个模块异常消息的接收和处理 4) 从解析服务器获得设备的IP地址(NET_DVR_GetDVRIPByResolveSvr):该接口提供一种在仅知道设备名称和序列号的情况下,从解析服务器获得设备IP地址的方法如:当前设备是通过拨号上网方式获取到动态IP地址,而运行了我公司IPServer软件的服务器即为解析服务器,我们可以通过此接口输入解析服务器的地址、设备的名称和序列号等信息查询该设备的IP地址。

IPServer是我公司提供的一款域名解析服务器软件 5) 用户注册设备(NET_DVR_Login_V30):实现用户的注册功能,注册成功后,返回的用户ID作为其他功能操作的唯一标识,SDK允许最大注册用户数为512个就设备而言,V3.0以上版本支持的设备允许有32个注册用户名,而且同时最多允许128个用户注册;V3.0以下版本支持的设备允许有16个注册用户名,而且同时最多允许128个用户注册6) 预览模块:从前端服务器取实时码流,解码显示以及播放控制等功能,同时支持软解码和解码卡解码具体流程详见预览模块流程7) 回放和下载模块:可以通过按时间和按文件名的方式远程回放或者下载前端服务器的录像文件,后续可以进行解码或者存储同时还支持断点续传功能具体流程详见回放和下载模块流程8) 参数配置模块:设置和获取前端服务器的参数,主要包括设备参数、网络参数、通道压缩参数、串口参数、报警参数、异常参数、交易信息和用户配置等参数信息具体流程详见参数配置模块流程9) 远程设备维护模块:实现关闭设备、重启设备、恢复默认值、远程硬盘格式化、远程升级和配置文件导入/导出等维护工作具体流程详见远程设备维护模块流程。

10) 语音对讲转发模块:实现和前端服务器的语音数据对讲和语音数据获取,音频编码格式可以指定具体流程详见语音对讲转发模块流程11) 报警模块:处理前端服务器上传的各种报警信号报警分为“布防”和“监听”两种方式,在采用监听方式并且不需要获取用户ID的情况下,报警模块可以无需进行“用户注册”操作步骤具体流程详见报警模块流程12) 透明通道模块:透明通道是将IP数据报文解析后直接发送到串行口的一种技术实际上起到了延伸串行设备控制距离的作用可利用IP网络控制多种串行设备,如控制解码器、矩阵、报警主机、门禁、仪器仪表等串行设备,对用户来说,只看到点对点传输,无须关心网络传输过程,所以称为串口透明通道 SDK提供485和232串口作为透明通道功能,其中要将232串口作为透明通道使用,首先必须在232串口的配置信息(NET_DVR_RS232CFG)中将工作模式选为透明通道,这样232串口才可作为透明通道使用具体流程详见透明通道模块流程 13) 云台控制模块:实现对云台的基本操作、预置点、巡航、轨迹和透明云台的控制SDK将云台控制分为两种模式:一种是通过图像预览返回的句柄进行控制;另一种是无预览限制,通过用户注册ID号进行云台控制。

14) 解码器功能模块:实现解码器设备的配置、解码控制等功能SDK支持单路解码器和多路解码器,但目前以多路解码器为主流产品具体流程详见多路解码器功能模块流程 15) 智能行为分析功能模块:实现对智能产品的参数配置、报警上传和能力集获取等功能具体流程详见智能行为分析功能模块流程 注:本手册下文提供的代码都是在VC环境下编译的,其他语言版本的DEMO可在我们提供的多语言版本DEMO资源中找到 预览模块流程l 实时预览支持TCP、UDP、RTP、MULTICAST网络传输模式 l 实时预览时,DS-80xx、DS-70xx、DS-71xx、DS-72xx、 DS-60xx、DS-61xx系列设备每个通道最多支持6路同时连接,每台设备最多支持24路同时连接;DS-81xx、DS-71xxHV、72xxHV等系列设备每个通道最多支持6路同时连接,每台设备最多支持18路同时连接;DS-90xx混合型硬盘录像机每个通道最多支持6路同时连接,每台设备最多支持64路同时连接;DS-91xx系列设备每个通道最多支持6路同时连接,每台设备最多支持64路同时连接;IP设备每个通道最多支持6路同时连接;DS-91xx-ST系列通道连接数没有限制,每台设备最多支持128路同时连接。

预览和与预览相关的模块流程图图中虚线框部分的模块是与预览模块相关,必须在启动预览后才能调用,这些模块之间是并列的关系,各自完成相应的功能l 声音控制功能主要实现独占、共享声音的打开和关闭;音量的控制相关接口有:NET_DVR_OpenSound、NET_DVR_CloseSound、NET_DVR_OpenSoundShare、NET_DVR_CloseSoundShare、NET_DVR_Volume等l 实时流数据捕获和录像模块主要实现数据回调和本地录像的功能,可以供用户后续处理相关接口有:NET_DVR_SetRealDataCallBack、NET_DVR_SetStandardDataCallBack、NET_DVR_SaveRealData等l 抓图功能主要实现对当前解码图像的捕获,保存格式为BMP相关接口有:NET_DVR_CapturePicturel 云台控制模块主要是在开启预览的前提下实现对云台控制的操作功能,包括云台预置点、巡航、轨迹和透明云台等相关接口有:NET_DVR_PTZControl、NET_DVR_PTZControl_EX、NET_DVR_PTZPreset、NET_DVR_PTZPreset_EX、NET_DVR_PTZCruise、NET_DVR_PTZCruise_EX、NET_DVR_PTZTrack、NET_DVR_PTZTrack_EX、NET_DVR_TransPTZ、NET_DVR_TransPTZ_EX。

实时流解码方式l 方式一:在预览接口NET_DVR_RealPlay_V30中预览参数的播放窗口句柄赋成有效句柄,则由SDK实现解码功能在初始化SDK和注册设备两步骤后,直接调用启动预览和停止预览接口l 方式二:用户可以通过设置预览接口NET_DVR_RealPlay_V30中预览参数的播放窗口句柄为空值,并通过调用捕获数据的接口(即设置NET_DVR_RealPlay_V30接口中的回调函数或调用NET_DVR_SetRealDataCallBack、NET_DVR_SetStandardDataCallBack接口),获取码流数据进行后续解码播放处理下面示例代码以设置NET_DVR_RealPlay_V30()接口中的回调为例进行说明 示例代码 方式一(由SDK实现解码显示) #include #include #include "Windows.h"#include "HCNetSDK.h"#include using namespace std;void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser){ char tempbuf[256] = {0}; switch(dwType) { case EXCEPTION_RECONNECT: //预览时重连 printf("----------reconnect--------%d\n", time(NULL)); break; default: break; }}void main() { //--------------------------------------- // 初始化 NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); //--------------------------------------- // 注册设备 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) { printf("Login error, %d\n", NET_DVR_GetLastError()); NET_DVR_Cleanup(); return; } //--------------------------------------- //设置异常消息回调函数 NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL); //--------------------------------------- //启动预览并设置回调数据流 LONG lRealPlayHandle; HWND hWnd = GetConsoleWindow(); //获取窗口句柄 NET_DVR_CLIENTINFO ClientInfo = {0}; ClientInfo.hPlayWnd = hWnd; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 ClientInfo.lChannel = 1; //预览通道号 ClientInfo.lLinkMode = 0; //最高位(31)为0表示主码流,为1表示子码流0~30位表示连接方式:0-TCP方式;1-UDP方式;2-多播方式;3-RTP方式; ClientInfo.sMultiCastIP = NULL; //多播地址,需要多播预览时配置 BOOL bPreviewBlock = false; //请求码流过程是否阻塞,0:否,1:是 lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, NULL, NULL, 0); if (lRealPlayHandle < 0) { printf("NET_DVR_RealPlay_V30 error\n"); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } //--------------------------------------- //关闭预览 NET_DVR_StopRealPlay(lRealPlayHandle); //注销用户 NET_DVR_Logout(lUserID); //释放SDK资源 NET_DVR_Cleanup(); return;}方式二(由用户自行处理回调得到的码流数据,此处以软解显示为例,代码中带有PlayM4_的函数参见软解码库说明文档《播放器SDK编程指南》)#include #include #include "Windows.h"#include "HCNetSDK.h"#include "plaympeg4.h"#include using namespace std;LONG lPort; //全局的播放库port号void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser){ HWND hWnd=GetConsoleWindow(); switch (dwDataType) { case NET_DVR_SYSHEAD: //系统头 if (!PlayM4_GetPort(&lPort)) //获取播放库未使用的通道号 { break; } //m_iPort = lPort; //第一次回调的是系统头,将获取的播放库port号赋值给全局port,下次回调数据时即使用此port号播放 if (dwBufSize > 0) { if (!PlayM4_SetStreamOpenMode(lPort, STREAME_REALTIME)) //设置实时流播放模式 { break; } if (!PlayM4_OpenStream(lPort, pBuffer, dwBufSize, 1024*1024)) //打开流接口 { break; } if (!PlayM4_Play(lPort, hWnd)) //播放开始 { break; } } case NET_DVR_STREAMDATA: //码流数据 if (dwBufSize > 0 && lPort != -1) { if (!PlayM4_InputData(lPort, pBuffer, dwBufSize)) { break; } } }}void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser){ char tempbuf[256] = {0}; switch(dwType) { case EXCEPTION_RECONNECT: //预览时重连 printf("----------reconnect--------%d\n", time(NULL)); break; default: break; }}void main() { //--------------------------------------- // 初始化 NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); //--------------------------------------- // 注册设备 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("172.0.0.100", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) { printf("Login error, %d\n", NET_DVR_GetLastError()); NET_DVR_Cleanup(); return; } //--------------------------------------- //设置异常消息回调函数 NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL); //--------------------------------------- //启动预览并设置回调数据流 LONG lRealPlayHandle; NET_DVR_CLIENTINFO ClientInfo = {0}; ClientInfo.hPlayWnd = NULL; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 ClientInfo.lChannel = 1; //预览通道号 ClientInfo.lLinkMode = 0; //最高位(31)为0表示主码流,为1表示子码流0~30位表示连接方式:0-TCP方式;1-UDP方式;2-多播方式;3-RTP方式; ClientInfo.sMultiCastIP = NULL; //多播地址,需要多播预览时配置 BOOL bPreviewBlock = false; //请求码流过程是否阻塞,0:否,1:是 lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, g_RealDataCallBack_V30, NULL, 0); if (lRealPlayHandle < 0) { printf("NET_DVR_RealPlay_V30 error\n"); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } //--------------------------------------- //关闭预览 NET_DVR_StopRealPlay(lRealPlayHandle); //注销用户 NET_DVR_Logout_V30(lUserID); NET_DVR_Cleanup(); return;} 回放和下载模块流程l 按文件回放或下载需要通过查找录像文件功能先获取文件信息(相关接口NET_DVR_FindFile_V30、NET_DVR_FindNextFile_V30),然后根据获取到的文件名开始回放或下载(相关接口NET_DVR_PlayBackByName、NET_DVR_GetFileByName),特别提醒在调用了回放或下载的接口后,还必须调用控制接口(NET_DVR_PlayBackControl)的开始播放命令(NET_DVR_PLAYSTART)。

l 按时间回放或下载文件时,用户可以无需调用查找录像文件的相关接口,只要在接口中指定开始和结束时间,调用回放或下载接口(相关接口NET_DVR_PlayBackByTime、NET_DVR_GetFileByTime)后,还必须调用控制接口(NET_DVR_PlayBackControl)的开始播放命令(NET_DVR_PLAYSTART)此时,将按照指定时间范围内最近的有录像的时间段开始回放或下载用户也可以通过调用查找录像文件的相关接口,获取文件的开始和结束时间后,按这个时间范围指定回放或下载接口中的时间参数,最后还必须调用控制接口(NET_DVR_PlayBackControl)的开始播放命令(NET_DVR_PLAYSTART)l Linux下,按文件回放和按时间回放时,若回放的窗口句柄不为NULL(即需要SDK解码显示),需要调用初始化窗口接口(NET_DVR_DrawAreaInit)进行SDL窗口的初始化才能正常的解码显示,在停止回放时,需要调用释放窗口资源接口(NET_DVR_DrawAreaRelease)释放窗口资源 示例代码示例一:查找录像文件并下载#include #include #include "Windows.h"#include "HCNetSDK.h"using namespace std;int saveRecordFile(int userId,char * srcfile,char * destfile){ int bRes = 1; int hPlayback = 0; if( (hPlayback = NET_DVR_GetFileByName(userId, srcfile, destfile)) < 0 ) { printf( "GetFileByName failed. error[%d]\n", NET_DVR_GetLastError()); bRes= -1; return bRes; } if(!NET_DVR_PlayBackControl(hPlayback, NET_DVR_PLAYSTART, 0, NULL)) { printf("play back control failed [%d]\n",NET_DVR_GetLastError()); bRes=-1; return bRes; } int nPos = 0; for(nPos = 0; nPos < 100&&nPos>=0; nPos = NET_DVR_GetDownloadPos(hPlayback)) { Sleep(5000); //millisecond } printf("have got %d\n", nPos); if(!NET_DVR_StopGetFile(hPlayback)) { printf("failed to stop get file [%d]\n",NET_DVR_GetLastError()); bRes = -1; return bRes; } printf("%s\n",srcfile); if(nPos100) { printf("download err [%d]\n",NET_DVR_GetLastError()); bRes=-1; return bRes; } else { return 0; }}void main() { //--------------------------------------- // 初始化 NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); //--------------------------------------- // 注册设备 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) { printf("Login error, %d\n", NET_DVR_GetLastError()); NET_DVR_Cleanup(); return; } NET_DVR_FILECOND struFileCond; struFileCond.dwFileType = 0xFF; struFileCond.lChannel = 1; struFileCond.dwIsLocked = 0xFF; struFileCond.dwUseCardNo = 0; struFileCond.struStartTime.dwYear = 2011; struFileCond.struStartTime.dwMonth = 3; struFileCond.struStartTime.dwDay = 1; struFileCond.struStartTime.dwHour = 10; struFileCond.struStartTime.dwMinute = 6; struFileCond.struStartTime.dwSecond =50; struFileCond.struStopTime.dwYear = 2011; struFileCond.struStopTime.dwMonth = 3; struFileCond.struStopTime.dwDay = 1; struFileCond.struStopTime.dwHour = 11; struFileCond.struStopTime.dwMinute = 7; struFileCond.struStopTime.dwSecond = 0; //--------------------------------------- //查找录像文件 int lFindHandle = NET_DVR_FindFile_V30(lUserID, &struFileCond); if(lFindHandle < 0) { printf("find file fail,last error %d\n",NET_DVR_GetLastError()); return; } NET_DVR_FINDDATA_V30 struFileData; while(true) { int result = NET_DVR_FindNextFile_V30(lFindHandle, &struFileData); if(result == NET_DVR_ISFINDING) { continue; } else if(result == NET_DVR_FILE_SUCCESS) { char strFileName[256] = {0}; sprintf(strFileName, "./%s", struFileData.sFileName); saveRecordFile(lUserID, struFileData.sFileName, strFileName); break; } else if(result == NET_DVR_FILE_NOFIND || result == NET_DVR_NOMOREFILE) { break; } else { printf("find file fail for illegal get file state"); break; } } //停止查找 if(lFindHandle > 0) { NET_DVR_FindClose_V30(lFindHandle); } //注销用户 NET_DVR_Logout(lUserID); //释放SDK资源 NET_DVR_Cleanup(); return;}示例二:按时间播放录像文件#include #include #include "Windows.h"#include "HCNetSDK.h"using namespace std;void main() { //--------------------------------------- // 初始化 NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); //--------------------------------------- // 注册设备 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) { printf("Login error, %d\n", NET_DVR_GetLastError()); NET_DVR_Cleanup(); return; } NET_DVR_TIME struStartTime, struStopTime; struStartTime.dwYear = 2011; struStartTime.dwMonth = 3; struStartTime.dwDay = 1; struStartTime.dwHour = 9; struStartTime.dwMinute = 0; struStartTime.dwSecond =0; struStopTime.dwYear = 2011; struStopTime.dwMonth = 3; struStopTime.dwDay = 1; struStopTime.dwHour = 10; struStopTime.dwMinute = 7; struStopTime.dwSecond = 0; HWND hWnd = GetConsoleWindow(); //获取窗口句柄 //--------------------------------------- //按时间回放 int hPlayback; hPlayback = NET_DVR_PlayBackByTime(lUserID, 1, &struStartTime, &struStopTime, hWnd); if(hPlayback < 0) { printf("NET_DVR_GetFileByTime fail,last error %d\n",NET_DVR_GetLastError()); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } //--------------------------------------- //开始 if(!NET_DVR_PlayBackControl(hPlayback, NET_DVR_PLAYSTART, 0, NULL)) { printf("play back control failed [%d]\n",NET_DVR_GetLastError()); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } Sleep(15000); //millisecond if(!NET_DVR_StopPlayBack(hPlayback)) { printf("failed to stop file [%d]\n",NET_DVR_GetLastError()); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } //注销用户 NET_DVR_Logout(lUserID); //释放SDK资源 NET_DVR_Cleanup(); return;}示例三:按时间下载录像文件#include #include #include "Windows.h"#include "HCNetSDK.h"using namespace std;void main() { //--------------------------------------- // 初始化 NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); //--------------------------------------- // 注册设备 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) { printf("Login error, %d\n", NET_DVR_GetLastError()); NET_DVR_Cleanup(); return; } NET_DVR_TIME struStartTime, struStopTime; struStartTime.dwYear = 2011; struStartTime.dwMonth = 3; struStartTime.dwDay = 1; struStartTime.dwHour = 9; struStartTime.dwMinute = 0; struStartTime.dwSecond =0; struStopTime.dwYear = 2011; struStopTime.dwMonth = 3; struStopTime.dwDay = 1; struStopTime.dwHour = 10; struStopTime.dwMinute = 7; struStopTime.dwSecond = 0; //--------------------------------------- //按时间下载 int hPlayback; hPlayback = NET_DVR_GetFileByTime(lUserID, 1, &struStartTime, &struStopTime, "./test.mp4"); if(hPlayback < 0) { printf("NET_DVR_GetFileByTime fail,last error %d\n",NET_DVR_GetLastError()); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } //--------------------------------------- //开始下载 if(!NET_DVR_PlayBackControl(hPlayback, NET_DVR_PLAYSTART, 0, NULL)) { printf("play back control failed [%d]\n",NET_DVR_GetLastError()); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } int nPos = 0; for(nPos = 0; nPos < 100&&nPos>=0; nPos = NET_DVR_GetDownloadPos(hPlayback)) { Sleep(5000); //millisecond } if(!NET_DVR_StopGetFile(hPlayback)) { printf("failed to stop get file [%d]\n",NET_DVR_GetLastError()); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return;。

下载提示
相关文档
正为您匹配相似的精品文档