private void DoSetting(Socket web_client, string[] routePathParams) { if (routePathParams.Length < 4) { return; } // /setting/padding/0/left/right int previewOutputChannel = int.Parse(routePathParams[3]) - 1; int paddingLeft = int.Parse(routePathParams[4]); int paddingRight = int.Parse(routePathParams[5]); ConsoleService.GetInstance().LogMsg("DoSetting previewOutputChannel " + previewOutputChannel + " paddingLeft " + paddingLeft + " paddingRight " + paddingRight, LogType.Log); PreviewImageService.GetInstance().SetScreenPadding(previewOutputChannel, paddingLeft, paddingRight); //报文头部 string head = Header(); byte[] headBytes = Encoding.UTF8.GetBytes(head); web_client.Send(headBytes); byte[] result = Encoding.ASCII.GetBytes("SUCCESS"); web_client.Send(result); web_client.Close(10); web_client.Dispose(); }
public static PreviewImageService GetInstance() { lock (lockObj) { if (instance == null) { instance = new PreviewImageService(); } } return(instance); }
private void DoPreview(Socket web_client, string[] routePathParams) { if (routePathParams.Length < 4) { return; } try { //预监路径输出路数索引 string previewOutputChannel = routePathParams[2]; Console.WriteLine("Data Request previewOutputChannel :" + previewOutputChannel); //报文头部 string head = Header(); byte[] headBytes = Encoding.UTF8.GetBytes(head); web_client.Send(headBytes); //根据预监输出图像路数索引值去预监图像服务查找图像数据 while (web_client.Connected) { Bitmap screenPreviewBitmap = PreviewImageService.GetInstance().GetScreenPreviewBitmap(int.Parse(previewOutputChannel)); lock (screenPreviewBitmap) { if (screenPreviewBitmap == null) { web_client.Close(); return; } EncoderParameters encoderParameters = new EncoderParameters(1); EncoderParameter encoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50L); encoderParameters.Param[0] = encoderParameter; MemoryStream ms = new MemoryStream(); screenPreviewBitmap.Save(ms, GetImageCodecInfo(ImageFormat.Jpeg), encoderParameters); byte[] screenBitmapBytes = ms.GetBuffer(); ms.Close(); ms.Dispose(); byte[] payloadarray = Encoding.ASCII.GetBytes(PayloadHeader(screenBitmapBytes.Length)); web_client.Send(payloadarray); //图像数据 web_client.Send(screenBitmapBytes); } Thread.Sleep(1000 / Program.frame); } } catch (Exception ex) { Console.WriteLine("处理http请求断开" + Environment.NewLine + "\t" + ex.Message); } finally { web_client.Close(10); web_client.Dispose(); ConsoleService.GetInstance().LogMsg("web_client.Close ", LogType.Log); } }
static void Main(string[] args) { ConsoleService.GetInstance().Init(); ConsoleService.GetInstance().LogMsg(" Start Mjpeg Server", LogType.Log); string configXml = "./AppScreensSettings.xml"; if (args.Length >= 7) { port = int.Parse(args[0]); gridX = int.Parse(args[1]); gridY = int.Parse(args[2]); previewWidth = int.Parse(args[3]); previewheight = int.Parse(args[4]); frame = int.Parse(args[5]); configXml = args[6]; ConsoleService.GetInstance().LogMsg(" Start Mjpeg Server args " + args[0] + " " + args[1] + " " + args[2] + " " + args[3] + " " + args[4] + " " + args[5] + " " + args[6], LogType.Log); } else { //warnning ConsoleService.GetInstance().LogMsg(" Start Mjpeg Server without args ", LogType.Log); } ConsoleService.GetInstance().LogMsg(" XmlDocument load " + configXml, LogType.Log); try { var xmlDoc = new XmlDocument(); xmlDoc.Load(configXml); XmlElement root = xmlDoc.DocumentElement; XmlNodeList xmlScreenNodeList = root.SelectNodes("/AppSettings/Screes/Screen"); foreach (XmlNode screenNode in xmlScreenNodeList) { XmlNode curXmlNode = screenNode.FirstChild; string id = curXmlNode.InnerText; curXmlNode = curXmlNode.NextSibling; string x = curXmlNode.InnerText; curXmlNode = curXmlNode.NextSibling; string y = curXmlNode.InnerText; curXmlNode = curXmlNode.NextSibling; string width = curXmlNode.InnerText; curXmlNode = curXmlNode.NextSibling; string height = curXmlNode.InnerText; RestfulScreenData screenData = new RestfulScreenData(); screenData.id = id; screenData.x = x; screenData.y = y; screenData.width = width; screenData.height = height; screenData.paddingRight = "0"; screenData.paddingLeft = "0"; screenNodeList.Add(screenData); } //启动预监服务器 mjpegServer = new MjpegServer(port); mjpegServer.Start(); ConsoleService.GetInstance().LogMsg(" Start PreviewImageService", LogType.Log); //启动预监画面服务 PreviewImageService.GetInstance().Init(screenNodeList); } catch (Exception e) { Console.WriteLine(e); ConsoleService.GetInstance().LogMsg("Start Error " + e.Message, LogType.Error); } string cmd = Console.ReadLine(); while (!cmd.Equals("bye")) { cmd = Console.ReadLine(); } }