You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/global.cpp

307 lines
8.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "global.h"
global::global() {}
QString g_SoftwareVersion = "版本号V1.1.0.7_20250218";
NotifyManager *g_notifyManager = nullptr;
QColor g_themeColor(51, 51, 51);
QString g_PushBtnStyle = /**正常情况下样式**/
"QPushButton{"
"font: 12pt '微软雅黑';"
"color: #2f3640;"
"background-color: #f5f6fa;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QPushButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QPushButton::pressed,QPushButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QPushButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
QString g_PushBtnSelStyle = /**选中情况下样式**/
"QPushButton{"
"font: 12pt '微软雅黑';"
"color: #2f3640;"
"background-color: #619acd;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QPushButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QPushButton::pressed,QPushButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QPushButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
QString g_ToolBtnStyle = /**正常情况下样式**/
"QToolButton{"
"font: 10pt '微软雅黑';"
"color: rgba(0,0,0,200);" /*#2f3640*/
"background-color: #f5f6fa;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QToolButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QToolButton::pressed,QToolButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QToolButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
QString g_ToolBtnSelStyle = /**选中情况下样式**/
"QToolButton{"
"font: 10pt '微软雅黑';"
"color: #2f3640;"
"background-color: #619acd;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QToolButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QToolButton::pressed,QToolButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QToolButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
/**
* @brief calCRC16
* @param cpu8Data
* @param u16Len
* @return
*/
uint16_t calCRC16(const uint8_t *cpu8Data, uint16_t u16Len) {
uint8_t u8X;
uint16_t u16CRC = 0X8848;
while (u16Len--) {
u8X = u16CRC >> 8 ^ *cpu8Data++;
u8X ^= u8X >> 4;
u16CRC = (u16CRC << 8) ^ ((uint16_t)(u8X << 12)) ^
((uint16_t)(u8X << 5)) ^ ((uint16_t)u8X);
}
return u16CRC;
}
/**
* @brief 计算字符串MD5值
* @param str字符串
* @return 字符串MD5值
*/
QString calculateMD5(const QString &str) {
QByteArray hash =
QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Md5);
return hash.toHex();
}
/**
* @brief 生成推流地址
* @param uavID: 飞控ID
* @param uavName: 飞机型号默认981cs
* @param clientID: 客户端ID0为地面端1为载荷端。
* @param pushDomain: 推流域名
* @param appName: app名称
* @param expireTime: 过期时间单位是秒默认1h。
* @return 返回推流地址
*/
QString generatePushURL(int uavID, QString appName, QString pushKey,
QString uavName, int clientID, QString pushDomain,
long expireTime) {
QString clientName = "";
if (0 == clientID) {
clientName = "gcs"; // 地面端
} else {
clientName = "uav"; // 载荷端
}
QString streamName =
uavName + "_" + QString::number(uavID) + "_" + clientName;
QString pushURL = "";
if (pushKey == "") {
pushURL = "rtmp://" + pushDomain + "/" + appName + "/" + streamName;
} else {
// 计算鉴权串
long timeStamp =
QDateTime::currentMSecsSinceEpoch() / 1000 + expireTime;
QString stringToMd5 = "/" + appName + "/" + streamName + "-" +
QString::number(timeStamp) + "-0-0-" + pushKey;
QString authKey = calculateMD5(stringToMd5);
pushURL = "rtmp://" + pushDomain + "/" + appName + "/" + streamName +
"?auth_key=" + QString::number(timeStamp) + "-0-0-" + authKey;
}
return pushURL;
}
std::map<int, std::string> g_mapAppName;
/**
* @brief 生成拉流地址
* @param uavID: 飞控ID
* @param appName: app名称
* @param uavName: 飞机型号默认981cs
* @param clientID: 数据推流端ID0为地面端1为载荷端。
* @param pullDomain: 拉流域名
* @param expireTime: 过期时间单位是秒默认1h。
* @param pullKey: 拉流域名配置的鉴权Key
* @return 返回拉流地址
*/
QString generatePullURL(int uavID, QString appName, QString pullKey,
QString uavName, int clientID, QString pullDomain,
long expireTime) {
QString rtmpUrl = "";
QString clientName = "";
if (0 == clientID) {
clientName = "gcs"; // 地面端
} else {
clientName = "uav"; // 载荷端
}
QString streamName =
uavName + "_" + QString::number(uavID) + "_" + clientName;
if (pullKey == "") {
rtmpUrl = "rtmp://" + pullDomain + "/" + appName + "/" + streamName;
} else {
// 计算鉴权串
long timeStamp =
QDateTime::currentMSecsSinceEpoch() / 1000 + expireTime;
QString stringToMd5 = "/" + appName + "/" + streamName + "-" +
QString::number(timeStamp) + "-0-0-" + pullKey;
QString authKey = calculateMD5(stringToMd5);
rtmpUrl = "rtmp://" + pullDomain + "/" + appName + "/" + streamName +
"?auth_key=" + QString::number(timeStamp) + "-0-0-" + authKey;
}
return rtmpUrl;
}
/**
* @brief 非阻塞延时
* @param msec 延时毫秒
*/
void sleepMsec(int msec) {
if (msec <= 0) return;
QEventLoop loop; // 定义一个新的事件循环
QTimer::singleShot(
msec, &loop,
SLOT(quit())); // 创建单次定时器,槽函数为事件循环的退出函数
loop.exec(); // 事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
}
/**
* @brief 生成公司推流平台地址
* @param uavID:飞控ID
* @param appName:
* @param uavName:飞机型号默认981cs
* @return
*/
QString generatePushURL2(int uavID, QString appName, QString uavName,
int clientID, QString pushDomain) {
QString rtmpUrl = "";
QString clientName = "";
if (0 == clientID) {
clientName = "gcs"; // 地面端
} else {
clientName = "uav"; // 载荷端
}
QString streamName =
uavName + "_" + QString::number(uavID) + "_" + clientName;
rtmpUrl = "rtmp://" + pushDomain + "/" + appName + "/" + streamName;
return rtmpUrl;
}
/**
* @brief 生成拉流地址,应急厅铁塔平台
* @param uavID: 飞控ID
* @param appName: app名称
* @param uavName: 飞机型号默认981cs
* @param clientID: 数据推流端ID0为地面端1为载荷端。
* @param pullDomain: 拉流域名
* @return 返回拉流地址
*/
QString generatePullURL2(int uavID, QString appName, QString uavName,
int clientID, QString pullDomain) {
QString clientName = "";
if (0 == clientID) {
clientName = "gcs"; // 地面端
} else {
clientName = "uav"; // 载荷端
}
QString streamName =
uavName + "_" + QString::number(uavID) + "_" + clientName;
QString pushURL = "";
pushURL = "rtsp://" + pullDomain + "/" + appName + "/" + streamName;
return pushURL;
}