private void GetData() { try { CamsSetup[] cams = ST.GetCamsArray(); RECORDER_DATA = ST.GetRecorderSetup(); string log = ""; log += "------------------------------------------\n"; log += "данные регистратора\n"; log += "------------------------------------------\n"; log += "Архив - " + RECORDER_DATA.recorderArchiveDir + "\n"; log += "Адрес веб сервера - " + RECORDER_DATA.recorderURL + "\n"; log += "Порт веб сервера - " + RECORDER_DATA.recorderURLPort + "\n"; if (cams.Length > 0) { log += "------------------------------------------\n"; log += "данные по камерам\n"; log += "------------------------------------------\n"; foreach (CamsSetup cam in cams) { log += "Камера - " + cam.CamName + ", адрес: " + cam.CamIP + ", идентификатор: " + cam.CamID + "\nОписание: " + cam.CamDescription + "\n\n"; } } EVENT_LOG.WriteEntry(log); RECORDER_CAMS = new recorder_CAMS[cams.Length]; for (int i = 0; i < cams.Length; i++) { recorder_CAMS _cam = new recorder_CAMS(); _cam.camName = cams[i].CamName; _cam.camIP = cams[i].CamIP; _cam.camDescription = cams[i].CamDescription; _cam.camLogin = cams[i].CamLogin; _cam.camPassword = cams[i].CamPassword; Uri URL_data = new Uri(cams[i].CamIP); string camIPwithAuth = URL_data.Scheme + "://" + _cam.camLogin + ":" + _cam.camPassword + "@" + URL_data.Host + URL_data.PathAndQuery; _cam.CamClient = new rtsp_client(camIPwithAuth, 0, RECORDER_DATA.recorderArchiveDir, EVENT_LOG, cams[i].CamName, cams[i].camAutoRecconect); RECORDER_CAMS[i] = _cam; } } catch (Exception ex) { EVENT_LOG.WriteEntry("Ошибка чтения настроек - " + ex.ToString()); } }
private recorder_CAMS GetCamPlayerByID(string CamID) { recorder_CAMS camData = null; foreach (recorder_CAMS _camData in RECORDER_CAMS) { if (_camData.camName.Equals(CamID)) { //EVENT_LOG.WriteEntry("VLC find cam - " + CamID); camData = _camData; } ; } return(camData); }
private void Process(HttpListenerContext context) { context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); context.Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET"); context.Response.StatusCode = (int)HttpStatusCode.NotFound; string filename = context.Request.Url.AbsolutePath; string localpath = context.Request.Url.LocalPath; string query = context.Request.Url.Query; string pathandquery = context.Request.Url.PathAndQuery; if (localpath.IndexOf("camcommand") != -1) { string _cam = ""; string _action = ""; string _uid = ""; string[] commands = query.Split('&'); foreach (string command in commands) { if (command.IndexOf("cam") != -1) { _cam = command.Substring(command.IndexOf("cam") + 4); } else if (command.IndexOf("action") != -1) { _action = command.Substring(command.IndexOf("action") + 7); } else if (command.IndexOf("uid") != -1) { _uid = command.Substring(command.IndexOf("uid") + 4); } } EVENT_LOG.WriteEntry("Cam action - " + _action); if (_action.Equals(CAM_FUNC_REC)) { try { var destination = Path.Combine(REC_FOLDER, "Rec_" + _uid + ".mpg"); EVENT_LOG.WriteEntry("Cam - " + _cam); recorder_CAMS camData = GetCamPlayerByID(_cam); EVENT_LOG.WriteEntry("camData - " + camData); if (camData != null) { CameraJSONAnswer reply = new CameraJSONAnswer(); reply.CamID = _cam; reply.CamAction = _action; EVENT_LOG.WriteEntry("Cam action - " + destination); if (camData.CamClient.cam_online()) { camData.CamClient.rec(_uid); camData.nowRec = destination; context.Response.ContentType = "application/json"; reply.CamStatus = "Camera - Online, start recording stream to file"; } else { reply.CamStatus = "Camera - OffLine, please check camera connection"; } byte[] bytes = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(reply, Formatting.Indented)); context.Response.StatusCode = (int)HttpStatusCode.OK; context.Response.OutputStream.Write(bytes, 0, bytes.Length); } } catch (Exception ex) { EVENT_LOG.WriteEntry("Ошибка VLC - " + ex.ToString()); } } else if (_action.Equals(CAM_FUNC_STOP)) { recorder_CAMS camData = GetCamPlayerByID(_cam); camData.CamClient.stop_rec(_uid); context.Response.StatusCode = (int)HttpStatusCode.OK; } else { context.Response.StatusCode = (int)HttpStatusCode.NotFound; } context.Response.OutputStream.Close(); } else if (localpath.IndexOf("servercommand") != -1) { string[] commands = query.Split('&'); foreach (string command in commands) { if (command.IndexOf("status") != -1) { context.Response.StatusCode = (int)HttpStatusCode.OK; } } context.Response.OutputStream.Close(); } else { filename = filename.Substring(1); if (string.IsNullOrEmpty(filename)) { foreach (string indexFile in _indexFiles) { if (File.Exists(Path.Combine(CURRENT_INT_DIR, indexFile))) { filename = indexFile; break; } } } filename = Path.Combine(CURRENT_INT_DIR, filename); if (File.Exists(filename)) { try { context.Response.StatusCode = (int)HttpStatusCode.OK; Stream input = new FileStream(filename, FileMode.Open); //Adding permanent http response headers string mime; context.Response.ContentType = _mimeTypeMappings.TryGetValue(Path.GetExtension(filename), out mime) ? mime : "application/octet-stream"; context.Response.ContentLength64 = input.Length; context.Response.AddHeader("Date", DateTime.Now.ToString("r")); context.Response.AddHeader("Last-Modified", File.GetLastWriteTime(filename).ToString("r")); byte[] buffer = new byte[1024 * 16]; int nbytes; while ((nbytes = input.Read(buffer, 0, buffer.Length)) > 0) { context.Response.OutputStream.Write(buffer, 0, nbytes); } input.Close(); //context.Response.OutputStream.Flush(); context.Response.OutputStream.FlushAsync(); } catch (Exception ex) { EVENT_LOG.WriteEntry("Error read input - " + ex.ToString()); context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; } } }; }