当前位置: 首页 > java >正文

萤石摄像头C++SDK应用实例

程序示例精选
萤石摄像头C++SDK应用实例
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《萤石摄像头C++SDK应用实例》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果

文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. C++
       2. VS

二、使用步骤

代码如下(示例):

#include <QDebug>
#include <QInputDialog>
#include <QTableView>
#include <QTextBrowser>
#include <QMessageBox>
#include <QTimer>
#include <QFileDialog>
#include <QMenu>
#include <fstream>
#include <QLocale>
#include <QDir>
#include <QThread>
#include <map>
#include <time.h>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qcalendarproxy.h"
#include "cameramodel.h"
#include "alarmmodel.h"
#include "pushalarmmodel.h"
#include "recordmodel.h"
#include "localsetting.h"
#include "OpenNetStreamError.h"
#include "gbcameramodel.h"
#include <QtCore/QDateTime>char *UTF8ToAnsi(const char *szUTF8String)
{
#if defined(_WIN32) || defined(_WIN64)WCHAR* strSrc = NULL;char* szRes = NULL;int i = MultiByteToWideChar(CP_UTF8, 0, szUTF8String, -1, NULL, 0);strSrc = new WCHAR[(size_t)i+1];MultiByteToWideChar(CP_UTF8, 0, szUTF8String, -1, strSrc, i);i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);szRes = new char[(size_t)i+1];WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);delete[] strSrc;strSrc = NULL;return szRes;#elif defined(__linux__)char *outbuf = 0;if (szUTF8String){iconv_t cd = iconv_open("EUC-CN", "UTF-8");if (cd){size_t contlen = strlen(szUTF8String);size_t outbuflen = contlen * 3 + 1;outbuf = new char[outbuflen];memset(outbuf, 0, outbuflen);char *inptr = const_cast<char*>(szUTF8String);char *outptr = outbuf;size_t inlen = contlen;size_t outlen = outbuflen;if (iconv(cd, &inptr, &inlen, &outptr, &outlen) == (size_t)(-1)){outbuf = 0;}iconv_close(cd);}}return outbuf;
#elsesize_t contlen = strlen(szUTF8String);size_t outbuflen = contlen;char *outbuf = new char[outbuflen];if (outbuf){memset(outbuf, 0, outbuflen);memcpy(outbuf, szUTF8String, outbuflen);}return outbuf;
#endif
}std::string UTF8ToANSIString(const char *pUtf8String)
{std::string strANSI;if (pUtf8String != NULL){char *pAnsi = UTF8ToAnsi(pUtf8String);if (pAnsi != NULL){strANSI = pAnsi;delete []pAnsi;}}return strANSI;
}MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow),m_osdTimer(NULL),m_bRealPlayStarted(false),m_bPlayBackStarted(false),m_bPlayBackFinished(false),m_bVideoDownload(false),m_bDeviceVideoDownload(false),m_bCloudVideoDownload(false),m_bP2PDownload(false),m_bCloudPlayBack(false),m_bMergeDownload(false),m_iSuportSeekplayback(0),m_iSuportSeek2playback(0),m_iStartTime(0),m_iEndTime(0),m_sliderStop(0),m_releasedSeekTime(0),m_previousTimestamp(-1),m_previousPosition(0),m_movedForward(false),m_movedBackward(false),m_setSliderDisableCount(0),m_Seek2StopFlag(0)
{ui->setupUi(this);// 正确做法//resize(800, 600); // 允许窗口调整大小LocalSetting::getInstance();//User own device listm_deviceTableView = new QTableView(this);m_deviceTableView->setContextMenuPolicy(Qt::CustomContextMenu);m_deviceTableView->setSelectionBehavior(QAbstractItemView::SelectRows);m_deviceTableView->setSelectionMode(QAbstractItemView::SingleSelection);ui->tabWidget->addTab(m_deviceTableView, tr("Device List"));connect(m_deviceTableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(slotDeviceTableViewPressed(const QModelIndex &)));if(1 == LocalSetting::getInstance()->GetGbFlag()){m_gbdDviceTableModel = new GbCameraModel(this);m_deviceTableView->setModel(m_gbdDviceTableModel);}else{m_deviceTableModel = new CameraModel(this);m_deviceTableView->setModel(m_deviceTableModel);}//User shared device listm_shareDevTableView = new QTableView(this); m_shareDevTableView->setContextMenuPolicy(Qt::CustomContextMenu);m_shareDevTableView->setSelectionBehavior(QAbstractItemView::SelectRows);m_shareDevTableView->setSelectionMode(QAbstractItemView::SingleSelection);ui->tabWidget->addTab(m_shareDevTableView, tr("Share Dev List"));connect(m_shareDevTableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(slotDeviceTableViewPressed(const QModelIndex &)));m_shareDevTableModel = new CameraModel(this);m_shareDevTableView->setModel(m_shareDevTableModel);m_alarmTableView = new QTableView(this);m_alarmTableView->setContextMenuPolicy(Qt::CustomContextMenu);m_alarmTableView->setSelectionBehavior(QAbstractItemView::SelectRows);m_alarmTableView->setSelectionMode(QAbstractItemView::SingleSelection);ui->tabWidget->addTab(m_alarmTableView, tr("Alarm List"));m_alarmTableModel = new AlarmModel(this);m_alarmTableView->setModel(m_alarmTableModel);m_pushAlarmTableView = new QTableView(this);m_pushAlarmTableView->setContextMenuPolicy(Qt::CustomContextMenu);m_pushAlarmTableView->setSelectionBehavior(QAbstractItemView::SelectRows);m_pushAlarmTableView->setSelectionMode(QAbstractItemView::SingleSelection);ui->tabWidget->addTab(m_pushAlarmTableView, tr("Push-Alarm-List"));m_pushAlarmTableModel = new PushAlarmModel(this);m_pushAlarmTableView->setModel(m_pushAlarmTableModel);connect(m_pushAlarmTableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(slotPushAlarmTableViewPressed(const QModelIndex &)));m_playBackTableView = new QTableView(this);m_playBackTableView->setContextMenuPolicy(Qt::CustomContextMenu);m_playBackTableView->setSelectionBehavior(QAbstractItemView::SelectRows);m_playBackTableView->setSelectionMode(QAbstractItemView::SingleSelection);ui->tabWidget->addTab(m_playBackTableView, tr("Playback List"));m_playBackTableModel = new RecordModel(this);m_playBackTableView->setModel(m_playBackTableModel);connect(m_playBackTableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(slotPlayBackTableViewPressed(const QModelIndex &)));m_jsonTextBrowser = new QTextBrowser(this);ui->tabWidget->addTab(m_jsonTextBrowser, tr("json"));m_realPlayMenu = new QMenu(this);ui->switchVideoLevelButton->setMenu(m_realPlayMenu);m_SetPlayBackScaleMenu=new QMenu(this);ui->SetScaleButton->setMenu(m_SetPlayBackScaleMenu);//add setPlayBackScale botton menu;int iSmallPermission = LocalSetting::getInstance()->GetSmallPermission();if(0 == iSmallPermission){//! [1] init library,alloc sessionOpenNetStream::getInstance()->initLibrary(LocalSetting::getInstance()->authAddress(), LocalSetting::getInstance()->platformAddress(), LocalSetting::getInstance()->appKey(),LocalSetting::getInstance()->Overseas());	}else if(1 == iSmallPermission){//! [1] init library,alloc sessionOpenNetStream::getInstance()->initInitClientLib(LocalSetting::getInstance()->authAddress(), LocalSetting::getInstance()->platformAddress(), LocalSetting::getInstance()->appKey(),LocalSetting::getInstance()->Overseas(),1);	}QString areaID = LocalSetting::getInstance()->areaId();if (!areaID.isEmpty()){OpenNetStream::getInstance()->setAreaID(areaID);}QString loginVer = LocalSetting::getInstance()->loginVer();if (!loginVer.isEmpty()){OpenNetStream::getInstance()->setLoginVer(loginVer);}QString logo = LocalSetting::getInstance()->logo();if (!logo.isEmpty()){OpenNetStream::getInstance()->setLogo(logo);}QString PrivacyPolicy = LocalSetting::getInstance()->PrivacyPolicy();if (!PrivacyPolicy.isEmpty()){OpenNetStream::getInstance()->setPrivacyPolicy(PrivacyPolicy);}QString ServiceTerms = LocalSetting::getInstance()->ServiceTerms();if (!ServiceTerms.isEmpty()){OpenNetStream::getInstance()->setServiceTerms(ServiceTerms);}if (LocalSetting::getInstance()->dataUtf8()){OpenNetStream::getInstance()->setDataUtf8();}if (LocalSetting::getInstance()->streamTrans()){OpenNetStream::getInstance()->setStreamTrans();}//OpenNetStream::getInstance()->setCloseBlongSer();//OpenNetStream::getInstance()->setCloseKeyAuth();if (LocalSetting::getInstance()->closeP2P()){OpenNetStream::getInstance()->closeP2P();}QString LoginauthAddr = LocalSetting::getInstance()->LoginauthAddress();if (!LoginauthAddr.isEmpty()){OpenNetStream::getInstance()->setLoginAuthAddr(LoginauthAddr);}if (LocalSetting::getInstance()->fastStream()){OpenNetStream::getInstance()->fastStream(1);}else{OpenNetStream::getInstance()->fastStream(0);}int iP2PMaxNum = LocalSetting::getInstance()->P2PMaxNum();if (iP2PMaxNum > 0){OpenNetStream::getInstance()->setP2PMaxNum(iP2PMaxNum);}//int iP2PCheckPeriod = LocalSetting::getInstance()->P2PCheckPeriod();//if (iP2PCheckPeriod > 0)//{//    OpenNetStream::getInstance()->setP2PCheckPeriod(iP2PCheckPeriod);//}//int iP2PExpire = LocalSetting::getInstance()->P2PExpire();//if (iP2PExpire > 0)//{//    OpenNetStream::getInstance()->setP2PExpire(iP2PExpire);//}int iLogLevel = LocalSetting::getInstance()->logLevel();if (iLogLevel > 0){OpenNetStream::getInstance()->setLogLevel(iLogLevel);}m_sessionId = OpenNetStream::getInstance()->allocSessionEx(MainWindow::messageHandler, this);//! [1]int iBlongSerial = LocalSetting::getInstance()->GetBlongSerial();OpenNetStream::getInstance()->setSessionCloseBlong(m_sessionId, iBlongSerial);}
运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

http://www.xdnf.cn/news/15672.html

相关文章:

  • 微信小程序 wx.request() 的封装
  • Github库镜像到本地私有Gitlab服务器
  • PortSwigger Labs 之 点击劫持利用
  • RPC 与 Feign 的区别笔记
  • Spring AI开发智能客服(Tool calling)
  • 开启modbus tcp模拟调试
  • 【LeetCode 热题 100】199. 二叉树的右视图——(解法一)BFS
  • 自己动手实现 strlen:从循环到递归的四种写法
  • Postman/Apipost中使用Post URL编码发送含换行符参数的问题分析
  • 现代R语言机器学习:Tidymodel/Tidyverse语法+回归/树模型/集成学习/SVM/深度学习/降维/聚类分类与科研绘图可视化
  • 串口(Serial Port)是什么?
  • 在 React 中根据数值动态设置 SVG 线条粗细
  • 【52】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码
  • 9. isaacsim4.2教程-ROS加相机/CLOCK
  • vs openssl编译提示无法打开文件“libssl.lib”或“libcrypto.lib”
  • 回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测
  • 搜广推校招面经九十五
  • stm32驱动双步进电机
  • Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上
  • UniApp -- 小程序自定义导航栏组件
  • 论文征集 | 国产工业软件硕博学位论文激励计划启动
  • 主流编程语言全景图:从Python到Rust的深度解析
  • 网络基础12--可靠性概述及要求
  • sky-take-out项目Mybatis的使用
  • 高性能数据库-Redis详解
  • 网关-微服务网关入门
  • STM32-第七节-TIM定时器-3(输入捕获)
  • 深度解析Linux文件I/O三级缓冲体系:用户缓冲区→标准I/O→内核页缓存
  • 如何在服务器上获取Linux目录大小
  • Mysql数据库——增删改查CRUD