private void PTZScheduler_Load(object sender, EventArgs e) { chkSchedulePTZ.Checked = CameraControl.Camobject.ptzschedule.active; chkSuspendOnMovement.Checked = CameraControl.Camobject.ptzschedule.suspend; ShowPTZSchedule(); dtpSchedulePTZ.Value = new DateTime(2012, 1, 1, 0, 0, 0, 0); if (CameraControl.Camobject.ptz > -1) { PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz); CameraControl.PTZ.PTZSettings = ptz; if (ptz.ExtendedCommands != null && ptz.ExtendedCommands.Command != null) { foreach (var extcmd in ptz.ExtendedCommands.Command) { ddlScheduleCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value)); } } } if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4) { throw new NotSupportedException("PELCO no longer supported"); } if (CameraControl.Camobject.ptz == -5) { throw new NotSupportedException("ONVIF no longer supported"); } if (ddlScheduleCommand.Items.Count > 0) { ddlScheduleCommand.SelectedIndex = 0; } }
private void PTZTracking_Load(object sender, EventArgs e) { chkReverseTracking.Checked = CameraControl.Camobject.settings.ptzautotrackreverse; chkTrack.Checked = CameraControl.Camobject.settings.ptzautotrack; chkAutoHome.Checked = CameraControl.Camobject.settings.ptzautohome; //chkCRF.Checked = CameraControl.Camobject.recorder.crf; numTTH.Value = CameraControl.Camobject.settings.ptztimetohome; pnlTrack.Enabled = chkTrack.Checked; rdoAny.Checked = CameraControl.Camobject.settings.ptzautotrackmode == 0; rdoVert.Checked = CameraControl.Camobject.settings.ptzautotrackmode == 1; rdoHor.Checked = CameraControl.Camobject.settings.ptzautotrackmode == 2; numAutoHomeDelay.Value = CameraControl.Camobject.settings.ptzautohomedelay; ddlHomeCommand.Items.Add(new MainForm.ListItem("Center", "Center")); if (CameraControl.Camobject.ptz > -1) { PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz); CameraControl.PTZ.PTZSettings = ptz; if (ptz.ExtendedCommands != null && ptz.ExtendedCommands.Command != null) { foreach (var extcmd in ptz.ExtendedCommands.Command) { ddlHomeCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value)); if (CameraControl.Camobject.settings.ptzautohomecommand == extcmd.Value) { ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1; } } } } if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4) { throw new NotSupportedException("PELCO no longer supported"); } if (CameraControl.Camobject.ptz == -5) { throw new NotSupportedException("ONVIF no longer supported"); } if (ddlHomeCommand.SelectedIndex == -1 && ddlHomeCommand.Items.Count > 0) { ddlHomeCommand.SelectedIndex = 0; } tableLayoutPanel1.Enabled = chkAutoHome.Checked; }
private void pnlPTZ_MouseUp(object sender, MouseEventArgs e) { _mousedown = false; tmrRepeater.Stop(); if (CameraControl == null) { return; } PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(p => p.id == CameraControl.Camobject.ptz); if (ptz != null && !String.IsNullOrEmpty(ptz.Commands.Stop)) { SendPtzCommand(ptz.Commands.Stop, true); } }
private void pnlPTZ_MouseUp(object sender, MouseEventArgs e) { _mousedown = false; tmrRepeater.Stop(); if (CameraControl == null) { return; } PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(p => p.id == CameraControl.Camobject.ptz); if (!string.IsNullOrEmpty(ptz?.Commands.Stop)) { CameraControl.PTZ.SendPTZCommand(ptz.Commands.Stop); } if (CameraControl.PTZ.IsContinuous) { CameraControl.PTZ.SendPTZCommand(Enums.PtzCommand.Stop); } }
private void PTZScheduler_Load(object sender, EventArgs e) { chkSchedulePTZ.Checked = CameraControl.Camobject.ptzschedule.active; chkSuspendOnMovement.Checked = CameraControl.Camobject.ptzschedule.suspend; ShowPTZSchedule(); dtpSchedulePTZ.Value = new DateTime(2012, 1, 1, 0, 0, 0, 0); if (CameraControl.Camobject.ptz > -1) { PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz); CameraControl.PTZ.PTZSettings = ptz; if (ptz.ExtendedCommands?.Command != null) { foreach (var extcmd in ptz.ExtendedCommands.Command) { ddlScheduleCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value)); } } } if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4) { foreach (string cmd in PTZController.PelcoCommands) { ddlScheduleCommand.Items.Add(new MainForm.ListItem(cmd, cmd)); } } if (CameraControl.Camobject.ptz == -5) { foreach (var preset in CameraControl.PTZ.ONVIFPresets) { ddlScheduleCommand.Items.Add(new MainForm.ListItem(preset.Name, preset.Name)); } } if (ddlScheduleCommand.Items.Count > 0) { ddlScheduleCommand.SelectedIndex = 0; } }
public void SendPTZDirection(double angle) { if (_cameraControl.Camobject.settings.ptzrotate90) { angle -= (Math.PI / 2); if (angle < -Math.PI) { angle += (2 * Math.PI); } } if (_cameraControl.Camobject.settings.ptzflipx) { if (angle <= 0) { angle = -Math.PI - angle; } else { angle = Math.PI - angle; } } if (_cameraControl.Camobject.settings.ptzflipy) { angle = angle * -1; } PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == _cameraControl.Camobject.ptz); if (ptz == null) { return; } string command = ptz.Commands.Center; string diag = ""; if (angle < Arc && angle > -Arc) { command = ptz.Commands.Left; } if (angle >= Arc && angle < 3 * Arc) { command = ptz.Commands.LeftUp; diag = "leftup"; } if (angle >= 3 * Arc && angle < 5 * Arc) { command = ptz.Commands.Up; } if (angle >= 5 * Arc && angle < 7 * Arc) { command = ptz.Commands.RightUp; diag = "rightup"; } if (angle >= 7 * Arc || angle < -7 * Arc) { command = ptz.Commands.Right; } if (angle <= -5 * Arc && angle > -7 * Arc) { command = ptz.Commands.RightDown; diag = "rightdown"; } if (angle <= -3 * Arc && angle > -5 * Arc) { command = ptz.Commands.Down; } if (angle <= -Arc && angle > -3 * Arc) { command = ptz.Commands.LeftDown; diag = "leftdown"; } if (String.IsNullOrEmpty(command)) //some PTZ cameras dont have diagonal controls, this fixes that { switch (diag) { case "leftup": _nextcommand = ptz.Commands.Up; SendPTZCommand(ptz.Commands.Left); break; case "rightup": _nextcommand = ptz.Commands.Up; SendPTZCommand(ptz.Commands.Right); break; case "rightdown": _nextcommand = ptz.Commands.Down; SendPTZCommand(ptz.Commands.Right); break; case "leftdown": _nextcommand = ptz.Commands.Down; SendPTZCommand(ptz.Commands.Left); break; } } else { SendPTZCommand(command); } }
public void SendPTZCommand(string cmd, bool wait) { if (String.IsNullOrEmpty(cmd)) { return; } if (_request != null) { if (!wait) { return; } _request.Abort(); } PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == _cameraControl.Camobject.ptz); if (ptz == null) { return; } Uri uri; bool absURL = false; string url = _cameraControl.Camobject.settings.videosourcestring; if (_cameraControl.Camobject.settings.ptzurlbase.Contains("://")) { url = _cameraControl.Camobject.settings.ptzurlbase; absURL = true; } if (cmd.Contains("://")) { url = cmd; absURL = true; } try { uri = new Uri(url); } catch (Exception e) { Log.Error("", e);//MainForm.LogExceptionToFile(e); return; } if (!absURL) { url = uri.AbsoluteUri.Replace(uri.PathAndQuery, "/"); const string s = "http"; //if (!String.IsNullOrEmpty(ptz.Prefix)) // s = ptz.Prefix; const int p = 80; //if (ptz.Port > 0) // p = ptz.Port; if (!uri.Scheme.ToLower().StartsWith("http")) //rtsp/mrl replace { url = url.Replace(":" + uri.Port + "/", ":" + p + "/"); } url = url.Replace(uri.Scheme + "://", s + "://"); url = url.Trim('/'); if (!cmd.StartsWith("/")) { url += _cameraControl.Camobject.settings.ptzurlbase; if (cmd != "") { if (!url.EndsWith("/")) { string ext = "?"; if (url.IndexOf("?", StringComparison.Ordinal) != -1) { ext = "&"; } url += ext + cmd; } else { url += cmd; } } } else { url += cmd; } } else { if (!String.IsNullOrEmpty(cmd)) { if (!cmd.Contains("://")) { if (!url.EndsWith("/")) { string ext = "?"; if (url.IndexOf("?", StringComparison.Ordinal) != -1) { ext = "&"; } url += ext + cmd; } else { url += cmd; } } else { url = cmd; } } } string un = _cameraControl.Camobject.settings.login; string pwd = _cameraControl.Camobject.settings.password; if (!String.IsNullOrEmpty(_cameraControl.Camobject.settings.ptzusername)) { un = _cameraControl.Camobject.settings.ptzusername; pwd = _cameraControl.Camobject.settings.ptzpassword; } else { if (_cameraControl.Camobject.settings.login == string.Empty) { //get from url if (!String.IsNullOrEmpty(uri.UserInfo)) { string[] creds = uri.UserInfo.Split(':'); if (creds.Length >= 2) { un = creds[0]; pwd = creds[1]; } } } } url = url.Replace("[USERNAME]", un); url = url.Replace("[PASSWORD]", pwd); url = url.Replace("[CHANNEL]", _cameraControl.Camobject.settings.ptzchannel); _request = (HttpWebRequest)WebRequest.Create(url); _request.Timeout = 5000; _request.AllowAutoRedirect = true; _request.KeepAlive = true; _request.SendChunked = false; _request.AllowWriteStreamBuffering = true; _request.UserAgent = _cameraControl.Camobject.settings.useragent; // //get credentials // set login and password string authInfo = ""; if (!String.IsNullOrEmpty(un)) { authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(un + ":" + pwd)); _request.Headers["Authorization"] = "Basic " + authInfo; } string ckies = _cameraControl.Camobject.settings.cookies ?? ""; if (!String.IsNullOrEmpty(ckies)) { ckies = ckies.Replace("[USERNAME]", _cameraControl.Camobject.settings.login); ckies = ckies.Replace("[PASSWORD]", _cameraControl.Camobject.settings.password); ckies = ckies.Replace("[CHANNEL]", _cameraControl.Camobject.settings.ptzchannel); ckies = ckies.Replace("[AUTH]", authInfo); var myContainer = new CookieContainer(); string[] coll = ckies.Split(';'); foreach (var ckie in coll) { if (!String.IsNullOrEmpty(ckie)) { string[] nv = ckie.Split('='); if (nv.Length == 2) { var cookie = new Cookie(nv[0].Trim(), nv[1].Trim()); myContainer.Add(new Uri(_request.RequestUri.ToString()), cookie); } } } _request.CookieContainer = myContainer; } if (ptz.POST) { var i = url.IndexOf("?", StringComparison.Ordinal); if (i > -1 && i < url.Length) { var encoding = new ASCIIEncoding(); string postData = url.Substring(i + 1); byte[] data = encoding.GetBytes(postData); _request.Method = "POST"; _request.ContentType = "application/x-www-form-urlencoded"; _request.ContentLength = data.Length; using (Stream stream = _request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } } var myRequestState = new RequestState { Request = _request }; _request.BeginGetResponse(FinishPTZRequest, myRequestState); }
public void SendPTZCommand(Enums.PtzCommand command, bool wait) { if (_cameraControl.Camera == null) { return; } PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == _cameraControl.Camobject.ptz); bool d = (ptz == null || ptz.Commands == null); if (!d) { if (command == Enums.PtzCommand.ZoomIn) { if (String.IsNullOrEmpty(ptz.Commands.ZoomIn)) { d = true; } } if (command == Enums.PtzCommand.ZoomOut) { if (String.IsNullOrEmpty(ptz.Commands.ZoomOut)) { d = true; } } } if (!d) { _cameraControl.CalibrateCount = 0; _cameraControl.Calibrating = true; switch (command) { case Enums.PtzCommand.Left: SendPTZDirection(0); break; case Enums.PtzCommand.Upleft: SendPTZDirection(Math.PI / 4); break; case Enums.PtzCommand.Up: SendPTZDirection(Math.PI / 2); break; case Enums.PtzCommand.UpRight: SendPTZDirection(3 * Math.PI / 4); break; case Enums.PtzCommand.Right: SendPTZDirection(Math.PI); break; case Enums.PtzCommand.DownRight: SendPTZDirection(-3 * Math.PI / 4); break; case Enums.PtzCommand.Down: SendPTZDirection(-Math.PI / 2); break; case Enums.PtzCommand.DownLeft: SendPTZDirection(-Math.PI / 4); break; case Enums.PtzCommand.ZoomIn: SendPTZCommand(ptz.Commands.ZoomIn, wait); break; case Enums.PtzCommand.ZoomOut: SendPTZCommand(ptz.Commands.ZoomOut, wait); break; case Enums.PtzCommand.Center: SendPTZCommand(ptz.Commands.Center, wait); break; case Enums.PtzCommand.Stop: SendPTZCommand(ptz.Commands.Stop, wait); break; } } else { Rectangle r = _cameraControl.Camera.ViewRectangle; if (r != Rectangle.Empty) { if (command == Enums.PtzCommand.ZoomOut || command == Enums.PtzCommand.ZoomIn) { _cameraControl.Camera.ZPoint = new Point(r.Left + r.Width / 2, r.Top + r.Height / 2); } double angle = 0; bool isangle = true; switch (command) { case Enums.PtzCommand.Left: angle = 0; break; case Enums.PtzCommand.Upleft: angle = Math.PI / 4; break; case Enums.PtzCommand.Up: angle = Math.PI / 2; break; case Enums.PtzCommand.UpRight: angle = 3 * Math.PI / 4; break; case Enums.PtzCommand.Right: angle = Math.PI; break; case Enums.PtzCommand.DownRight: angle = -3 * Math.PI / 4; break; case Enums.PtzCommand.Down: angle = -Math.PI / 2; break; case Enums.PtzCommand.DownLeft: angle = -Math.PI / 4; break; case Enums.PtzCommand.ZoomIn: isangle = false; _cameraControl.Camera.ZFactor += 0.2f; break; case Enums.PtzCommand.ZoomOut: isangle = false; _cameraControl.Camera.ZFactor -= 0.2f; if (_cameraControl.Camera.ZFactor < 1) { _cameraControl.Camera.ZFactor = 1; } break; case Enums.PtzCommand.Center: isangle = false; _cameraControl.Camera.ZFactor = 1; break; } if (isangle) { _cameraControl.Camera.ZPoint.X -= Convert.ToInt32(15 * Math.Cos(angle)); _cameraControl.Camera.ZPoint.Y -= Convert.ToInt32(15 * Math.Sin(angle)); } } } }
private void ProcessPtzInput(Point p) { if (CameraControl.Camera == null) { return; } bool d = MainForm.PTZs.SingleOrDefault(q => q.id == CameraControl.Camobject.ptz) == null; Enums.PtzCommand comm = Enums.PtzCommand.Center; if (p.X < 60 && p.Y > 60 && p.Y < 106) { comm = Enums.PtzCommand.Left; } if (p.X < 60 && p.Y < 60) { comm = Enums.PtzCommand.Upleft; } if (p.X > 60 && p.X < 104 && p.Y < 60) { comm = Enums.PtzCommand.Up; } if (p.X > 104 && p.X < 164 && p.Y < 60) { comm = Enums.PtzCommand.UpRight; } if (p.X > 104 && p.X < 170 && p.Y > 60 && p.Y < 104) { comm = Enums.PtzCommand.Right; } if (p.X > 104 && p.X < 170 && p.Y > 104) { comm = Enums.PtzCommand.DownRight; } if (p.X > 60 && p.X < 104 && p.Y > 104) { comm = Enums.PtzCommand.Down; } if (p.X < 60 && p.Y > 104) { comm = Enums.PtzCommand.DownLeft; } if (p.X > 170 && p.Y < 45) { comm = Enums.PtzCommand.ZoomIn; if (!d) { PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == CameraControl.Camobject.ptz); if (ptz == null || String.IsNullOrEmpty(ptz.Commands.ZoomIn)) { d = true; } } } if (p.X > 170 && p.Y > 45 && p.Y < 90) { comm = Enums.PtzCommand.ZoomOut; if (!d) { PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == CameraControl.Camobject.ptz); if (ptz == null || String.IsNullOrEmpty(ptz.Commands.ZoomIn)) //use zoomin just in case zoomout is defined and zoomin isn't { d = true; } } } if (d) { Rectangle r = CameraControl.Camera.ViewRectangle; if (r != Rectangle.Empty) { if (comm == Enums.PtzCommand.ZoomOut || comm == Enums.PtzCommand.ZoomIn) { CameraControl.Camera.ZPoint = new Point(r.Left + r.Width / 2, r.Top + r.Height / 2); } double angle = 0; bool isangle = true; switch (comm) { case Enums.PtzCommand.Left: angle = 0; break; case Enums.PtzCommand.Upleft: angle = Math.PI / 4; break; case Enums.PtzCommand.Up: angle = Math.PI / 2; break; case Enums.PtzCommand.UpRight: angle = 3 * Math.PI / 4; break; case Enums.PtzCommand.Right: angle = Math.PI; break; case Enums.PtzCommand.DownRight: angle = -3 * Math.PI / 4; break; case Enums.PtzCommand.Down: angle = -Math.PI / 2; break; case Enums.PtzCommand.DownLeft: angle = -Math.PI / 4; break; case Enums.PtzCommand.ZoomIn: isangle = false; CameraControl.Camera.ZFactor += 0.2f; break; case Enums.PtzCommand.ZoomOut: isangle = false; CameraControl.Camera.ZFactor -= 0.2f; if (CameraControl.Camera.ZFactor < 1) { CameraControl.Camera.ZFactor = 1; } break; case Enums.PtzCommand.Center: isangle = false; CameraControl.Camera.ZFactor = 1; break; } if (isangle) { CameraControl.Camera.ZPoint.X -= Convert.ToInt32(15 * Math.Cos(angle)); CameraControl.Camera.ZPoint.Y -= Convert.ToInt32(15 * Math.Sin(angle)); } } } else { CameraControl.PTZ.SendPTZCommand(comm, false); } }
public void ResetONVIF() { _ptzProfile = null; _ptzSettings = null; }
private void PTZTracking_Load(object sender, EventArgs e) { chkReverseTracking.Checked = CameraControl.Camobject.settings.ptzautotrackreverse; chkTrack.Checked = CameraControl.Camobject.settings.ptzautotrack; chkAutoHome.Checked = CameraControl.Camobject.settings.ptzautohome; //chkCRF.Checked = CameraControl.Camobject.recorder.crf; numTTH.Value = CameraControl.Camobject.settings.ptztimetohome; pnlTrack.Enabled = chkTrack.Checked; rdoAny.Checked = CameraControl.Camobject.settings.ptzautotrackmode == 0; rdoVert.Checked = CameraControl.Camobject.settings.ptzautotrackmode == 1; rdoHor.Checked = CameraControl.Camobject.settings.ptzautotrackmode == 2; numAutoHomeDelay.Value = CameraControl.Camobject.settings.ptzautohomedelay; ddlHomeCommand.Items.Add(new MainForm.ListItem("Center", "Center")); if (CameraControl.Camobject.ptz > -1) { PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz); CameraControl.PTZ.PTZSettings = ptz; if (ptz.ExtendedCommands?.Command != null) { foreach (var extcmd in ptz.ExtendedCommands.Command) { ddlHomeCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value)); if (CameraControl.Camobject.settings.ptzautohomecommand == extcmd.Value) { ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1; } } } } if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4) { foreach (string cmd in PTZController.PelcoCommands) { ddlHomeCommand.Items.Add(new MainForm.ListItem(cmd, cmd)); if (CameraControl.Camobject.settings.ptzautohomecommand == cmd) { ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1; } } } if (CameraControl.Camobject.ptz == -5) { ddlHomeCommand.Items.Clear(); foreach (var cmd in CameraControl.PTZ.ONVIFPresets) { ddlHomeCommand.Items.Add(new MainForm.ListItem(cmd.Name, cmd.token)); if (CameraControl.Camobject.settings.ptzautohomecommand == cmd.token) { ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1; } } } if (ddlHomeCommand.SelectedIndex == -1 && ddlHomeCommand.Items.Count > 0) { ddlHomeCommand.SelectedIndex = 0; } tableLayoutPanel1.Enabled = chkAutoHome.Checked; }