程序示例精选
萤石摄像头C++SDK应用实例
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!
前言
这篇博客针对《萤石摄像头C++SDK应用实例》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。
运行结果
文章目录
一、所需工具软件
二、使用步骤
1. 主要代码
2. 运行结果
三、在线协助
一、所需工具软件
1. C++
2. VS
二、使用步骤
代码如下(示例):
cpp
#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;
#else
size_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 list
m_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 list
m_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 session
OpenNetStream::getInstance()->initLibrary(LocalSetting::getInstance()->authAddress(), LocalSetting::getInstance()->platformAddress(),
LocalSetting::getInstance()->appKey(),LocalSetting::getInstance()->Overseas());
}
else if(1 == iSmallPermission)
{
//! [1] init library,alloc session
OpenNetStream::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