| | |
| | | #include <mysql/mysql.h> |
| | | #include <future> |
| | | #include "iostream" |
| | | |
| | | #include <hiredis.h> |
| | | #include <string> |
| | | #include <locale> |
| | | #include <codecvt> |
| | |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 写入数据至redis模块 |
| | | /// </summary> |
| | | void fnWriteToRedis(redisContext*& context, string ipccode) |
| | | { |
| | | redisReply* reply; |
| | | |
| | | //检测redis是否连接,报警写入redis |
| | | if (!context == NULL && !context->err) { |
| | | |
| | | // 记录报警的时候,同时写入redis数据库 |
| | | std::string key = "camera::run::" + ipccode; |
| | | std::string value = "1"; |
| | | |
| | | //写入redis |
| | | reply = (redisReply*)redisCommand(context, "SET %s %s", key.c_str(), value.c_str()); |
| | | if (reply == NULL) { |
| | | printf("信息写入redis失败\n"); |
| | | redisFree(context); |
| | | } |
| | | freeReplyObject(reply); |
| | | } |
| | | } |
| | | |
| | | /// @brief 视频流拉取处理 |
| | | /// @param _rtspUrl 视频流源地址 |
| | | /// @param queJC 未处理的视频流帧队列 |
| | |
| | | rtspStream.release(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 连接并校验 Redis 服务器密码 |
| | | /// </summary> |
| | | /// <param name="server"></param> |
| | | /// <param name="port"></param> |
| | | /// <param name="password"></param> |
| | | /// <param name="context"></param> |
| | | /// <returns></returns> |
| | | bool connectToRedis(const char* server, int port, const char* password, redisContext*& context) { |
| | | // 连接 Redis 服务器 |
| | | context = redisConnect(server, port); |
| | | if (context == nullptr || context->err) { |
| | | std::cerr << "连接redis服务端失败!" << std::endl; |
| | | return false; |
| | | } |
| | | |
| | | //// 校验密码 |
| | | //redisReply* reply = (redisReply*)redisCommand(context, "AUTH %s", password); |
| | | //if (reply == NULL) { |
| | | // std::cerr << "连接校验失败!" << std::endl; |
| | | // redisFree(context); |
| | | // return false; |
| | | //} |
| | | //else { |
| | | // // 检查回复以确定是否鉴权成功 |
| | | // if (reply->type == REDIS_REPLY_ERROR && strcmp(reply->str, "OK") != 0) { |
| | | // std::cerr << "密码错误: " << reply->str << std::endl; |
| | | // freeReplyObject(reply); |
| | | // redisFree(context); |
| | | // return false; |
| | | // } |
| | | // freeReplyObject(reply); |
| | | //} |
| | | |
| | | return true; |
| | | } |
| | | |
| | | std::string jsontostr(Json::Value& json) |
| | | { |
| | | string return_str; |
| | |
| | | mysql_set_character_set(mysql, "utf8mb4"); |
| | | //mysql_query(mysql, "SET NAMES GB2312");//解决中文乱码问题 |
| | | } |
| | | |
| | | |
| | | //初始化redis链接 |
| | | redisContext* context; |
| | | if (!connectToRedis(redispath.c_str(), stoi(redisport), redispass.c_str(), context)) |
| | | { |
| | | cout << "redis连接初始化失败!" << endl; |
| | | } |
| | | else |
| | | { |
| | | cout << "redis连接初始化成功!" << endl; |
| | | } |
| | | |
| | | std::string limitDM = "1";//堆煤限定阈值,超过阈值进行报警,配置文件赋值,每个摄像头都不一样 |
| | | |
| | |
| | | currentFrame = 0; |
| | | } |
| | | |
| | | currentFrame++; |
| | | currentFrame++; |
| | | |
| | | fnWriteToRedis(context,ipccode); |
| | | } |
| | | catch (const std::exception& ex) |
| | | { |