From e9a9541f70351b2cf7a33b7862dd6481c0730df0 Mon Sep 17 00:00:00 2001 From: admin <zzjincn@163.com> Date: 星期日, 27 四月 2025 17:57:45 +0800 Subject: [PATCH] 配置文件 --- PreProcessFn.cpp | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 151 insertions(+), 29 deletions(-) diff --git a/PreProcessFn.cpp b/PreProcessFn.cpp index 86c2dce..70a2ea9 100644 --- a/PreProcessFn.cpp +++ b/PreProcessFn.cpp @@ -9,7 +9,7 @@ #include <mysql/mysql.h> #include <future> #include "iostream" - +#include <hiredis.h> #include <string> #include <locale> #include <codecvt> @@ -332,6 +332,38 @@ return size * nmemb; } +string join(const vector<string>& sequence, const string& separator) +{ + std::string result; + for (size_t i = 0; i < sequence.size(); ++i) + result += sequence[i] + ((i != sequence.size() - 1) ? separator : ""); + return result; +} + +/// <summary> +/// 鍐欏叆鏁版嵁鑷硆edis妯″潡 +/// </summary> +void fnWriteToRedis(redisContext*& context, string ipccode) +{ + redisReply* reply; + + //妫�娴媟edis鏄惁杩炴帴锛屾姤璀﹀啓鍏edis + 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 鏈鐞嗙殑瑙嗛娴佸抚闃熷垪 @@ -455,6 +487,43 @@ 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; @@ -502,6 +571,18 @@ mysql_set_character_set(mysql, "utf8mb4"); //mysql_query(mysql, "SET NAMES GB2312");//瑙e喅涓枃涔辩爜闂 } + + + //鍒濆鍖杛edis閾炬帴 + redisContext* context; + if (!connectToRedis(redispath.c_str(), stoi(redisport), redispass.c_str(), context)) + { + cout << "redis杩炴帴鍒濆鍖栧け璐ワ紒" << endl; + } + else + { + cout << "redis杩炴帴鍒濆鍖栨垚鍔燂紒" << endl; + } std::string limitDM = "1";//鍫嗙叅闄愬畾闃堝�硷紝瓒呰繃闃堝�艰繘琛屾姤璀︼紝閰嶇疆鏂囦欢璧嬪�硷紝姣忎釜鎽勫儚澶撮兘涓嶄竴鏍� @@ -1710,7 +1791,9 @@ currentFrame = 0; } - currentFrame++; + currentFrame++; + + fnWriteToRedis(context,ipccode); } catch (const std::exception& ex) { @@ -1867,6 +1950,37 @@ //瀹氫箟鎺ュ彈甯� Mat frame; + vector<string> arguments = { + "ffmpeg " + "-hwaccel","cuvid", + "-hwaccel_output_format","cuda", + "-y", "-an", + "-f", "rawvideo", + "-vcodec", "rawvideo", + "-pix_fmt", "bgr24", + "-s", "640x480", + "-r", "15", + "-i", "-", + "-pix_fmt", "yuv420p", + "-f", "flv", + "-max_delay", "1000", + "-flvflags", "no_duration_filesize", + "-c:v","h264_nvenc", + "-b:v", "3M", + "-g:v", "15", + "-bf", "0", + "-bufsize", "50000000", + "-rtbufsize", "50000000", + "rtmp://192.168.1.8:1935/live/camera1" }; + + string ffmpeg_command = join(arguments, " "); + + // 鎵撳紑FFmpeg杩涚▼ + FILE* pipe = popen(ffmpeg_command.c_str(), "w"); + if (!pipe) { + std::cerr << "鏃犳硶鍚姩FFmpeg" << std::endl; + } + while (!asyncStop) { //std::cout << ipccode + "褰撳墠绾跨▼Rabbitmq鏁版嵁鏁伴噺2222:" << queJC2.size() << std::endl; try @@ -1885,20 +1999,9 @@ queJC2.pop(); if (frame.empty())//甯т负绌猴紝鍒欒垗寮� - continue; + continue; - // FFmpeg鎺ㄦ祦鍛戒护 - std::string ffmpeg_command = - "ffmpeg -y -f rawvideo -pixel_format bgr24 -video_size 640x480 " - "-framerate 30 -i - -c:v libx264 -pix_fmt yuv420p -f rtsp " - "rtsp://192.168.1.188:8554/live/stream"; - - // 鎵撳紑FFmpeg杩涚▼ - FILE* pipe = popen(ffmpeg_command.c_str(), "w"); - if (!pipe) { - std::cerr << "鏃犳硶鍚姩FFmpeg" << std::endl; - } - + // 灏嗗抚鍐欏叆鍒癋Fmpeg绠¢亾涓� fwrite(frame.data, 1, frame.total() * frame.elemSize(), pipe); @@ -1931,6 +2034,37 @@ //瀹氫箟鎺ュ彈甯� Mat frame; + vector<string> arguments = { + "ffmpeg " + "-hwaccel","cuvid", + "-hwaccel_output_format","cuda", + "-y", "-an", + "-f", "rawvideo", + "-vcodec", "rawvideo", + "-pix_fmt", "bgr24", + "-s", "1280x720", + "-r", fps, + "-i", "-", + "-pix_fmt", "yuv420p", + "-f", "flv", + "-max_delay", "1000", + "-flvflags", "no_duration_filesize", + "-c:v","h264_nvenc", + "-b:v", "3M", + "-g:v", "15", + "-bf", "0", + "-bufsize", "50000000", + "-rtbufsize", "50000000", + toRtsp }; + + string ffmpeg_command = join(arguments, " "); + + // 鎵撳紑FFmpeg杩涚▼ + FILE* pipe = popen(ffmpeg_command.c_str(), "w"); + if (!pipe) { + std::cerr << "鏃犳硶鍚姩FFmpeg" << std::endl; + } + while (!asyncStop) { //std::cout << ipccode + "褰撳墠绾跨▼Rabbitmq鏁版嵁鏁伴噺2222:" << queJC2.size() << std::endl; try @@ -1949,20 +2083,8 @@ queJC2.pop(); if (frame.empty())//甯т负绌猴紝鍒欒垗寮� - continue; - - // FFmpeg鎺ㄦ祦鍛戒护 - std::string ffmpeg_command = - "ffmpeg -y -f rawvideo -pixel_format bgr24 -video_size 640x480 " - "-framerate 30 -i - -c:v libx264 -pix_fmt yuv420p -f rtsp " - "rtsp://192.168.1.8:8554/live/stream"; - - // 鎵撳紑FFmpeg杩涚▼ - FILE* pipe = popen(ffmpeg_command.c_str(), "w"); - if (!pipe) { - std::cerr << "鏃犳硶鍚姩FFmpeg" << std::endl; - } - + continue; + // 灏嗗抚鍐欏叆鍒癋Fmpeg绠¢亾涓� fwrite(frame.data, 1, frame.total() * frame.elemSize(), pipe); -- Gitblit v1.8.0