您现在的位置是:首页 > 短信大全

Windows下使用C++调用海康威视SDK获取实时视频流进行检测

作者:往北时间:2024-03-29 13:00:41分类:短信大全

简介  文章浏览阅读878次,点赞6次,收藏4次。里面有开发文档和SDK的动态库文件,有各种开发语言的Demo案列。(可以参考一下他的接口调用)因为要实现实时视频流的解析。所以还需要一个头文件。根据自己的开发平台选择SDK下载。将OpenCV的文件放在工程目录下。文件

点击全文阅读

目录

准备海康威视的SDK官网下载下载后解压 Vs 2022创建项目创建32位的环境 将相关文件复制到工程目录下工程配置海康威视SDK配置包含目录配置库目录将dll文件添加到环境中在附加依赖项添加如下内容 工程配置OpenCV配置工程配置包含目录配置库目录 测试

准备海康威视的SDK

官网下载

海康威视开放平台
在这里插入图片描述
根据自己的开发平台选择SDK下载。本次以SDK_Win32为例。

下载后解压

里面有开发文档和SDK的动态库文件,有各种开发语言的Demo案列。(可以参考一下他的接口调用)
在这里插入图片描述

Vs 2022创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建32位的环境

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

将相关文件复制到工程目录下

库文件文件夹所有文件复制到项目工程下的dll文件夹下

在这里插入图片描述

头文件文件夹所有文件复制到项目工程下的include文件夹下

在这里插入图片描述
因为要实现实时视频流的解析。所以还需要一个头文件。

CH-HCNetSDKV6.1.9.48_build20230410_win32\Demo示例\2- MFC分功能示例\2- 实时流回调解码获取YUV
目录下
·

库文件文件夹所有lib文件复制到项目工程下的lib文件夹下

在这里插入图片描述

工程配置海康威视SDK

添加包含目录以及库目录

在这里插入图片描述

配置包含目录

在这里插入图片描述

配置库目录

在这里插入图片描述

将dll文件添加到环境中

文字内容如下:path=dll;dll\HCNetSDKCom;%path%

在这里插入图片描述

在附加依赖项添加如下内容

HCCore.lib
GdiPlus.lib
PlayCtrl.lib
HCNetSDK.lib
在这里插入图片描述

工程配置OpenCV

将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、账号和密码注意改成自己的!!!

在这里插入图片描述

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

上一篇:如何创建Vue项目

下一篇:返回列表

我来说两句