赞
踩
海康威视开放平台
根据自己的开发平台选择SDK下载。本次以SDK_Win32
为例。
里面有开发文档和SDK的动态库文件,有各种开发语言的Demo案列。(可以参考一下他的接口调用)
将库文件
文件夹所有文件复制到项目工程下的dll
文件夹下
将头文件
文件夹所有文件复制到项目工程下的include
文件夹下
因为要实现实时视频流的解析。所以还需要一个头文件。
在CH-HCNetSDKV6.1.9.48_build20230410_win32\Demo示例\2- MFC分功能示例\2- 实时流回调解码获取YUV
目录下
将库文件
文件夹所有lib
文件复制到项目工程下的lib
文件夹下
添加包含目录以及库目录
文字内容如下:path=dll;dll\HCNetSDKCom;%path%
HCCore.lib
GdiPlus.lib
PlayCtrl.lib
HCNetSDK.lib
将OpenCV的文件放在工程目录下
测试代码
#include <stdio.h> #include <iostream> #include "Windows.h" #include "HCNetSDK.h" #include <time.h> using namespace std; typedef HWND(WINAPI* PROCGETCONSOLEWINDOW)(); PROCGETCONSOLEWINDOW GetConsoleWindowAPI; 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); //--------------------------------------- //设置异常消息回调函数 NET_DVR_SetExceptionCallBack_V30(0, NULL, g_ExceptionCallBack, NULL); //--------------------------------------- // 获取控制台窗口句柄 HMODULE hKernel32 = GetModuleHandle(L"kernel32"); GetConsoleWindowAPI = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32, "GetConsoleWindow"); //--------------------------------------- // 注册设备 LONG lUserID; //登录参数,包括设备地址、登录用户、密码等 NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 }; struLoginInfo.bUseAsynLogin = 0; //同步登录方式 strcpy_s(struLoginInfo.sDeviceAddress, "192.168.1.64"); //设备IP地址 struLoginInfo.wPort = 8000; //设备服务端口 strcpy_s(struLoginInfo.sUserName, "admin"); //设备登录用户名 strcpy_s(struLoginInfo.sPassword, "thy123456"); //设备登录密码 //设备信息, 输出参数 NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = { 0 }; lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40); if (lUserID < 0) { printf("Login failed, error code: %d\n", NET_DVR_GetLastError()); NET_DVR_Cleanup(); return; } //--------------------------------------- //启动预览并设置回调数据流 LONG lRealPlayHandle; HWND hWnd = GetConsoleWindowAPI(); //获取窗口句柄 NET_DVR_PREVIEWINFO struPlayInfo = { 0 }; struPlayInfo.hPlayWnd = hWnd; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 struPlayInfo.lChannel = 1; //预览通道号 struPlayInfo.dwStreamType = 0; //0-主码流,1-子码流,2-码流3,3-码流4,以此类推 struPlayInfo.dwLinkMode = 0; //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP struPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流 lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL); if (lRealPlayHandle < 0) { printf("NET_DVR_RealPlay_V40 error\n"); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; } Sleep(10000); //--------------------------------------- //关闭预览 NET_DVR_StopRealPlay(lRealPlayHandle); //注销用户 NET_DVR_Logout(lUserID); //释放SDK资源 NET_DVR_Cleanup(); return; }
IP、账号和密码注意改成自己的!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。