.cpp文件
详情请看代码注释

#include "customize_files/network_manager.h"
#include <QDir>
#include <QCoreApplication>
#include <QEventLoop>
#include <iostream>
#include <QJsonObject>
std::shared_ptr<NetworkManager> NetworkManager::_instPtr{nullptr};
std::mutex NetworkManager::mutex_;
//单例模式
std::shared_ptr<NetworkManager> NetworkManager::getSingletonPtr() {if (!_instPtr) {std::lock_guard<std::mutex> gLock(mutex_);if (_instPtr == nullptr) {_instPtr.reset(new NetworkManager, [](NetworkManager* inst) {delete inst; });}}return _instPtr;
}NetworkManager::NetworkManager(QObject* parent) {netAccessMgr_ = std::make_shared<QNetworkAccessManager>();
}NetworkManager::~NetworkManager() {
}
// path 对应URL,QNetworkAccessManager::Operation operation,http的三种方式pos,put,get,(还有一种,本文没写),QByteArray data对应传递的请求头,或者内容,
void NetworkManager::fetchServerData(QString path, QNetworkAccessManager::Operation operation, QByteArray data, bool sync) {QUrl url(path);QNetworkRequest request(url);QNetworkReply* reply = NULL;//request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");//application/jsonif (operation == QNetworkAccessManager::GetOperation) {reply = netAccessMgr_->get(request);}else if (operation == QNetworkAccessManager::PostOperation) {reply = netAccessMgr_->post(request, data);}else {reply = netAccessMgr_->put(request, data);}if (sync) {// 同步QEventLoop loop;connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));loop.exec();if (reply->error() == QNetworkReply::NoError) {QString strReply = (QString)reply->readAll();QJsonParseError jsonError;QJsonDocument jsonDocument = QJsonDocument::fromJson(strReply.toUtf8(), &jsonError);if (jsonError.error == QJsonParseError::NoError) {emit queryServerSuccessed(reply->url().path(), jsonDocument);}}else {//Failed;QString strReply = (QString)reply->readAll();QJsonParseError jsonError;QJsonDocument jsonDocument = QJsonDocument::fromJson(strReply.toUtf8(), &jsonError);QJsonObject objs = jsonDocument.object();QByteArray byteArray = jsonDocument.toJson(QJsonDocument::Compact);QString strJson(byteArray);emit errorServerSuccessed(reply->url().path(), jsonDocument);}}else{//异步connect(netAccessMgr_.get(), SIGNAL(finished(QNetworkReply*)), this, SLOT(handleAsyncRequestFinished(QNetworkReply*)));}
}
//这个跟上一个一样,直接返回结果
QJsonDocument NetworkManager::receiveHttpData(QString path, QNetworkAccessManager::Operation operation, QByteArray data, bool sync)
{QUrl url(path);QNetworkRequest request(url);QNetworkReply* reply = NULL;request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");//application/jsonif (operation == QNetworkAccessManager::GetOperation) {reply = netAccessMgr_->get(request);}else if (operation == QNetworkAccessManager::PostOperation) {reply = netAccessMgr_->post(request, data);}if (sync) {// 同步QEventLoop loop;connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));loop.exec();if (reply->error() == QNetworkReply::NoError) {QString strReply = (QString)reply->readAll();QJsonParseError jsonError;QJsonDocument jsonDocument = QJsonDocument::fromJson(strReply.toUtf8(), &jsonError);if (jsonError.error == QJsonParseError::NoError) {return jsonDocument;}}}return QJsonDocument();
}
//   设置请求头的方式   使用get
QByteArray NetworkManager::getUrl(QString url, QByteArray data,int type)
{QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();QNetworkRequest requestInfo;requestInfo.setUrl(QUrl(url));requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");requestInfo.setRawHeader(QByteArray("X-Subject-Token"), data);        //设置请求头QEventLoop eventLoop;QNetworkReply *reply = m_pHttpMgr->get(requestInfo);;connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));eventLoop.exec();//错误处理if (reply->error() == QNetworkReply::NoError){qDebug() << "request protobufHttp NoError";}else{QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);}//请求返回的结果QByteArray responseByte = reply->readAll();return responseByte;
}
//设置请求头和请求内容的方式。使用put
void NetworkManager::keepAliveVideo(QString path, QByteArray data, QString token)
{QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();//设置urlQString url = path;//设置头信息QNetworkRequest requestInfo;requestInfo.setUrl(QUrl(url));requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));requestInfo.setRawHeader(QByteArray("X-Subject-Token"), data);//发送数据QByteArray qByteHttpData;qByteHttpData.append(QString("{\"token\":  \"%1\"}").arg(token));QNetworkReply *reply = m_pHttpMgr->put(requestInfo, qByteHttpData);QEventLoop eventLoop;connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));eventLoop.exec();      //请求收到的结果QByteArray responseByte = reply->readAll();QString strReply = (QString)reply->readAll();qWarning() << responseByte;qWarning() << strReply;
}void NetworkManager::handleAsyncRequestFinished(QNetworkReply* reply) {if (reply->error() == QNetworkReply::NoError) {QString strReply = (QString)reply->readAll();QJsonParseError jsonError;QJsonDocument jsonDocument = QJsonDocument::fromJson(strReply.toUtf8(), &jsonError);if (jsonError.error == QJsonParseError::NoError) {emit queryServerSuccessed(reply->url().path(), jsonDocument);}}else {//Failed;}
}

.h文件

/**** @brief    Declares the network manager class*/#ifndef NETWORK_MANAGER_H
#define NETWORK_MANAGER_H#include <memory>
#include <mutex>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QJsonDocument>
#include <QJsonParseError>// 线程安全的单例类(懒汉模式)
// 目前支持HTTP协议的GET, POST, 同步, 异步, 返回JSON格式数据
class NetworkManager : public QObject {Q_OBJECTpublic:static std::shared_ptr<NetworkManager> getSingletonPtr();NetworkManager(const NetworkManager&) = delete;NetworkManager& operator=(const NetworkManager&) = delete;void fetchServerData(QString path, QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, QByteArray data = NULL, bool sync = true);QJsonDocument receiveHttpData(QString path, QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, QByteArray data = NULL, bool sync = true);QByteArray getUrl(QString path, QByteArray data, int type);void keepAliveVideo(QString path, QByteArray data,QString token);
signals:void queryServerSuccessed(QString path, QJsonDocument& jsonDocument);void errorServerSuccessed(QString path, QJsonDocument& jsonDocument);void hmjqueryServerSuccessed(QString path, QJsonDocument& jsonDocument);void hmjerrorServerSuccessed(QString path, QJsonDocument& jsonDocument);void dataAboveServerSuccessed(QString path,QJsonDocument& jsonDocument);void dataAboveServererror(QString path, QJsonDocument& jsonDocument);
private:explicit NetworkManager(QObject* parent = 0);~NetworkManager();
private slots:void handleAsyncRequestFinished(QNetworkReply* reply);private:static std::shared_ptr<NetworkManager> _instPtr;static std::mutex mutex_;std::shared_ptr<QNetworkAccessManager> netAccessMgr_;QNetworkAccessManager* netAccessMgr_tt;
};#endif // !NETWORK_MANAGER_H

QT——http协议(大华摄像头保活,根据Id获取大华摄像头播放地址rtsp流)相关推荐

  1. RTSP/GB28181/SDK/Ehome协议人脸识别/车牌识别视频智能分析系统EasyCVR获取播放地址和流地址方法介绍

    视频联网共享服务EasyCVR人脸识别/车牌识别智能分析系统是一个集视频联网共享.存储.流媒体转发.视频转码.视频上云.智能分析等多种功能为一体的流媒体视频服务融合型平台.目前EasyCVR还可以集成 ...

  2. 【操作教程】RTSP/GB28181/SDK/Ehome协议人脸识别/车牌识别视频智能分析系统EasyCVR如何获取播放地址和流地址?

    视频联网共享服务EasyCVR人脸识别/车牌识别智能分析系统是一个集视频联网共享.存储.流媒体转发.视频转码.视频上云.智能分析等多种功能为一体的流媒体视频服务融合型平台.目前EasyCVR还可以集成 ...

  3. Qt获取大华摄像头监控画面(RTSP流方式)

    一.与摄像头建立连接 1.RTSP格式 //格式 rtsp://username:password@<address>:<port>/Streaming/Channels< ...

  4. Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)

    一.前言 海康大华等厂家自己的客户端软件,基本上都是支持自家的设备,不支持其他家的摄像机和硬盘录像机,并不是因为技术上做不到,这些大厂要实现支持兼容其他的家的(他们家的服务端或者收费的都是支持其他家的 ...

  5. LiveGBS流媒体平台国标GB/T28181功能-国标流媒体服务平台作为上级接入海康大华华为宇视等下级平台及摄像头

    LiveGBS国标流媒体服务平台作为上级接入海康大华华为宇视等下级平台及摄像头 1.背景说明 2.部署国标平台 2.1.安装使用说明 2.2.服务器网络环境 2.3.信令服务配置 3.监控摄像头设备接 ...

  6. 网页播放海康威视大华华为摄像头RTSP流,不需转码转流,延迟毫秒级,支持多路播放、H.264/H.265及1080P/2K/4K

    一.背景: 在遍地都是摄像头的今天,往往需要在各种信息化.数字化.可视化B/S系统中集成实时视频流播放等功能,海康.大华.华为等厂家摄像头或录像机等设备一般也都遵循监控行业标准,支持国际标准的主流传输 ...

  7. 大华海康摄像头人家自己是怎么在web上播放视频的

    最近处理安防视频,怎么把摄像头视频在web上展示费了很大功夫,当然这一篇不是讲解我是怎么显示的,而是回答当时领导问我的一个问题,人家大华自己是怎么显示的? 我们知道大华海康大部分摄像头只对外提供rts ...

  8. 华为首款Harmonyos摄像头,掀起家居安防大变革 华为首款HarmonyOS智能摄像头发布...

    原标题:掀起家居安防大变革 华为首款HarmonyOS智能摄像头发布 10月30日,万众瞩目的华为Mate40系列于上海正式亮相.凭借麒麟9000芯片.全能的影像能力.创新的交互,华为Mate40系列 ...

  9. 传统大华海康宇视安防摄像头RTSP流如何转webrtc直播低延时无插件浏览器视频播放

    传统大华海康宇视安防摄像头RTSP流如何转webrtc直播低延时无插件浏览器视频播放 1.问题场景 2.WEBRTC延时对比 3.LiveNVR支持WEBRTC输出 4.RTSP/HLS/FLV/RT ...

最新文章

  1. 【CSTC白皮书】分布式数据库发展路径研究(附下载)
  2. SAP RETAIL 对WG22执行LSMW批量导入物料组描述信息时需要前台执行
  3. idea中提交mapper.xml到svn后代码变灰色
  4. 常用PHP函数整理!
  5. 我看windows mobile数据同步方案
  6. 判断变量是空_Python 判断变量是否是 None 的三种写法
  7. 使用Fluent NHibernate和AngularJS的Master Chef(第1部分)ASP.NET Core MVC
  8. IE10-浏览器实现placeholder效果
  9. LINUX删除指定子目录下所有指定文件名
  10. mysan用的什么树mysql_Mysql储存引擎MyISAM和InnoDB中B+树索引的区别
  11. Jvm面试题及答案(2021年Jvm面试题大全带答案)
  12. gre模考软件java.exe_【模考】GRE模考软件逆天版(考G神器)
  13. 【Android Gradle 插件】Splits 配置 ③ ( Splits#density{} 脚本块配置 | 根据屏幕像素密度进行分包 | DensitySplitOptions 配置简介 )
  14. Degis 是第一个基于 Avalanche 的保险协议,测试得空投
  15. Luogu P1144 最短路计数
  16. FFT的C语言实现,对照MATLIB
  17. 数据透视表怎么刷新数据_数据模型的Excel数据透视表刷新错误
  18. opencv自动裁切_荐Python Opencv 之 简单的视频裁剪功能的实现
  19. 手机rpg游戏存档在哪_在免费RPG日尝试新游戏
  20. jsvmp-某乎 x-zes-96 算法还原

热门文章

  1. java 运算符优先级
  2. 简单的VUE购物车应用
  3. iOS 面试题集合~[有答案]
  4. 三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组(GO,PHP)
  5. CMake Error: Could not find a package configuration file provided by “serial“
  6. 赋能 打造应对不确定性的敏捷团队 pdf_《创业书影音》本期推荐《赋能》
  7. c语言乒乓球比赛相关的拓展程序,乒乓球编排软件.pdf
  8. 计算机网络技术评估与备选方案,计算机网络技术业个人职业生涯规划书.doc
  9. 通常人们说i5处理器的计算机其中二五是指,计算机cpu?学会看CPU只要五分钟
  10. Qt 3D Overview