对雄迈摄像头二次开发,因为雄迈给的资料比较混乱,没有找到可用的sdk手册,所以一开始想用OpenCV+qt。但是在Windows环境下,opencv摄像头读取卡顿严重,而且opencv只可以处理视频,不能处理音频,音频处理还需要ffmpeg。

后面发现SheBeiWangLuoSDK这个文件夹里面的东西可以参考,而且做出来效果也可以。所以就用雄迈的sdk进行二次开发。

准备工作

  • 头文件(.h):netsdk.h
  • 静态库(.lib):netsdk.lib
  • 动态库:netsdk.dll,StreamReader.dll,playctrl.dll

说明:

  • 主要使用netsdk。
  • 使用时注意库32位和64位的区别(虽然他们的名字是一样的)。
  • 录屏后没有录入声音,一般是因为没有playctrl.dll
  • #include <QMainWindow>一定要在#include "netsdk.h"前使用,不然会报错

初始化

// SDK初始化
bool iResult = H264_DVR_Init((fDisConnect)DisConnectBackCallFunc,(DWORD)this);
if(iResult == true){cout<<"SDK INIT OK!"<<endl;
}else{ccout << "SDK Init error;error number is " <<H264_DVR_GetLastError();
}

一开始这一部分我还不太会其中的断线回调部分,网上海康的二次开发比较多,所以后面我参考了海康的断线回调部分

//断线回调
void CALLBACK MainWindow::DisConnectBackCallFunc(LONG lLoginID, char *pchDVRIP, LONG nDVRPort, DWORD dwUser)
{printf("Call DisConnectFunc\n");cout<<"lLoginID:"<<lLoginID<<endl;if(NULL != pchDVRIP){cout<<"pchDVRIP:"<<pchDVRIP<<endl;}cout<<"nDVRPort:"<<nDVRPort<<endl;cout<<"dwUser:"<<dwUser<<endl;printf("\n");
}

摄像头登录

 // 登录H264_DVR_DEVICEINFO OutDev;int nError = 0;LoginHandle = 0;H264_DVR_SetConnectTime(3000, 1);char DVRIPtext[] = "192.168.0.100";char*  DVRIP= DVRIPtext;char UserNametext[] = "admin";char*  UserName = UserNametext;char Passwordtext[] = "";char*  Password = Passwordtext;LoginHandle = H264_DVR_Login(DVRIP, 34567, UserName, Password,&OutDev,&nError);

输入参数:IP、端口号、用户名、密码
输出参数:摄像头的登录句柄
为了防止内存溢出,也可以先定义char,然后再使用strcpy()复制ip等

摄像头画面开启和关闭

我看大华和海康摄像头的二次开发,视频播放都是需要定义HWND

void MainWindow::on_Open_triggered()
{//获取Label句柄HWND myhWnd = (HWND)ui->myVideo->winId();cout<<"hWnd"<<myhWnd<<endl;// 播放句柄H264_DVR_CLIENTINFO playstru;playstru.nChannel = 0;//1的时候就报错-11202playstru.nStream = 0;playstru.nMode = 0;playstru.hWnd = myhWnd;//实时监视句柄watchHandle = 0;watchHandle = H264_DVR_RealPlay(LoginHandle,&playstru);if(watchHandle <= 0){cout<<"real play error; error number is "<<H264_DVR_SUB_CONNECT_ERROR<<endl;}else{cout<<"real play succuss; play id is "<<watchHandle<<endl;}
}

关闭摄像头画面:

void MainWindow::on_Stop_triggered()
{H264_DVR_StopRealPlay(watchHandle,NULL);
}

摄像头声音打开和关闭

void MainWindow::on_OpenSound_triggered()
{// 打开音频H264_DVR_OpenSound(watchHandle);
}void MainWindow::on_StopSound_triggered()
{// 关闭音频H264_DVR_CloseSound(watchHandle);}

摄像头截屏

注意路径应该为“\”或“/”,不可以为“\”
另外这个需要注意的是,在32位里使用H264_DVR_CatchPic()函数就可以,但在64位里需要使用H264_DVR_LocalCatchPic()函数

void MainWindow::on_CatchPic_triggered()
{int nChannel = 0;char* fileName = "D:\\study\\QtTestXM\\guTset1.bmp";int nType = 0;//0:bmp   1:jpgbool mytest = H264_DVR_CatchPic(watchHandle,nChannel,fileName,nType);cout<<"pic======="<<mytest<<endl;
}

摄像头录像开启和关闭

录像开启:

void MainWindow::on_StartRecord_triggered()
{  // 回放没有声音是因为没有playctrl.dllchar* fileName = "D:\\study\\QtTestXM\\guVideo.avi";long type=2;//0:h264   2:aviH264_DVR_StartLocalRecord(watchHandle, fileName, type);
}

录像关闭:

void MainWindow::on_StopRecord_triggered()
{H264_DVR_StopLocalRecord(watchHandle);
}

摄像头系统时间校准

void MainWindow::on_SetTime_triggered()
{// 获取系统系统时间QDate curDate=QDate::currentDate();QTime curTime=QTime::currentTime();// 设置相机时间SDK_SYSTEM_TIME pSysTime;pSysTime.year = curDate.year();pSysTime.month = curDate.month();pSysTime.day = curDate.day();pSysTime.wday = curDate.dayOfWeek();pSysTime.hour = curTime.hour();pSysTime.minute = curTime.minute();pSysTime.second = curTime.second();H264_DVR_SetSystemDateTime(LoginHandle,&pSysTime);
}

摄像头颜色(亮度、饱和度)调节

以亮度增加为例:

void MainWindow::on_BrightnessUp_triggered()
{DWORD nRegionNum = 0;// 亮度,对比度,饱和度,色度LONG pBrightness;LONG pContrast;LONG pSaturation;LONG pHue;H264_DVR_LocalGetColor(watchHandle,nRegionNum,&pBrightness,&pContrast,&pSaturation,&pHue);//获取现有颜色信息LONG nBrightness = pBrightness*1.1;LONG nContrast = pContrast;LONG nSaturation = pSaturation;LONG nHue = pHue;H264_DVR_LocalSetColor(watchHandle,nRegionNum,nBrightness,nContrast,nSaturation,nHue);//设置新的颜色信息
}

一些参考

在考虑opencv开发,和sdk开发时,参考过的一些资料:

  • OpenCV应用(4)雄迈相机网络取图
    https://blog.csdn.net/a83025273/article/details/101955760
  • C#基于雄迈Sdk的对画面视频监控源码
    https://download.csdn.net/download/woofilian/9711418
  • 海康威视的qt,用了callback函数
    https://github.com/geometryl/qt_hikvision/blob/master/qt_hikvision/qt_hikvision/qt_hikvision.cpp
  • 对网络摄像头的授时
    https://www.pianshen.com/article/37151633466/
  • 私有协议、onvif协议
    https://blog.csdn.net/benkaoya/article/details/72453403
    搜“onvif协议授时”有一些可以参考的
    https://blog.csdn.net/benkaoya/article/details/72486511

熊迈摄像头SDK二次开发:登录、截屏、录像等功能相关推荐

  1. 【目标识别】--【截图程序】海康摄像头sdk二次开发自动多摄像头截图程序

    目录 背景: 1.问题 2.截图程序自动化和多通道实现 3.摄像头参数灵活化 至此已经全部结束,运行程序可以看到 背景: 目标识别需要对每一帧图像进行检测,因此我们需要将摄像头获取的视频流转换成单帧图 ...

  2. 海康威视网络摄像头SDK二次开发(QT版本)

    暂时使用到的主要功能有四个:1.连接相机,2.实时显示,3.取图(bmp格式),4.关闭相机 在官网下载对应的win64的SDK,在库文件中运行demo.exe确保硬件连接正常. 在程序中导入库 1. ...

  3. 海康摄像头SDK二次开发错误问题解决方案(一):2. 错误号64:NET_DVR_LOADPLAYERSDKFAILED 64 载入当前目录下 Player Sdk 出错

    错误号64:NET_DVR_LOADPLAYERSDKFAILED 64  载入当前目录下 Player Sdk 出错 分析: 该问题为解决错误107时间引出,问题应该在文件放置目录不对或者库文件内容 ...

  4. 海康摄像头SDK二次开发错误问题解决方案(三):3. 错误:提示如“HCNetSDK.dll”组件缺失,无法加载问题

    错误: 提示如"HCNetSDK.dll"组件缺失,无法加载问题 分析: MFC平台可能有bug,有时不能读取出"HCNetSDK.dll"文件: 解决: 可将 ...

  5. 海康摄像头二次开发python_python实现海康sdk二次开发,移动侦测事件(一)

    1.概述 最近一段时间要从海康摄像头读取数据,作为程序的输入源,c++版本有海康有自己的demo,较为简单,很容易就实现了,但是为我们其他的程序都是基于python的,因此,需要使用Python调用海 ...

  6. 海康摄像头的二次开发(java)

    海康摄像头的二次开发(java) 我第一次接触海康摄像头的二次开发的项目,一开始的时候摸不清套路,走了不少弯路,现在准备把我的一些经验留下来,让大家参考一下. 1.首先到海康的官网下载设备网络SDK: ...

  7. 海康威视SDK二次开发通过云台参数设置控制摄像机的位置

    海康威视SDK二次开发通过云台参数设置控制摄像机的位置 由于最近在开发海康威视摄像头,特此记录一下通过云台参数控制摄像机的位置,我这里是通过properties配置文件输入的参数,也可以不用配置文件, ...

  8. 海康摄像头二次开发python_海康摄像头的二次开发(java)

    海康摄像头的二次开发(java) 我第一次接触海康摄像头的二次开发的项目,一开始的时候摸不清套路,走了不少弯路,现在准备把我的一些经验留下来,让大家参考一下. 1.首先到海康的官网下载设备网络SDK: ...

  9. 海康威视摄像机SDK二次开发--提取音频保存至文件

    由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中Came ...

  10. 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)

    Livox Lidar  + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...

最新文章

  1. python pickle模块操作
  2. 揭秘:高盛交易员赚取10亿美元利润的神秘“利器”终于公开了
  3. 关于UITableView的Cell zhuanzai
  4. sql下员工工牌(YC0001)的简单实现和一些特殊查询
  5. 使用maven引入Apache poi jar包
  6. python处理json文件_python处理json文件
  7. loadrunner 商城项目随机选书
  8. 【python】获取http响应
  9. python用pyinstaller生成exe时报错 TypeError: an integer is required (got type bytes)
  10. STM32 跑马灯程序设计
  11. 有限维空间上的线性算子
  12. php与mysql 5_PHP5与MySQL5从入门到精通 PDF扫描版[61MB]
  13. uniapp 安卓模拟器mumu 端口配置
  14. 2021多校补题(8)
  15. 冯·诺依曼结构:现代计算机的诞生
  16. c语言中取小数函数,C / C++ 保留小数函数(setprecision(n)的一些用法总结)
  17. 在Ubuntu-server下安装i3wm并简单配置
  18. 背包问题(01背包,完全背包,多重背包(朴素算法二进制优化))
  19. 第一章:电商及商品系统概述
  20. 偷偷地告诉学弟学妹们一个高效学习编程的秘密!大学四年悄悄惊艳他们,嘘

热门文章

  1. openssl密码套件详解
  2. ensp VRRP配置2
  3. web软件测试 测试报告模板_测试报告模板V1(提供下载)
  4. 健康体检信息管理系统方案/案列/软件/APP/小程序/网站
  5. 11月8日 课程设计幸运抽奖系统
  6. 走全渠道电商O2O模式的优势体现在哪些地方?
  7. Pytorch入门+实战系列五:Pytorch情感分类
  8. AK大神AE教程文字整编
  9. Java常见练习题总结
  10. 跳过Android6.0+权限的方法