萤石摄像头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