From 9280d221d473730e81738628d1b247131f500a64 Mon Sep 17 00:00:00 2001
From: admin <zzjincn@163.com>
Date: 星期日, 27 四月 2025 17:56:44 +0800
Subject: [PATCH] 读写redis处理,未完工

---
 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