/// <summary> /// 启动gb28181摄像头 /// </summary> /// <param name="cil"></param> private static void liveGB28181(CameraInstance cil) { try { ResponseStruct rs = null; var gbRet = CommonApi.LiveVideo(cil.PushMediaServerId, cil.CameraDeviceLable, cil.CameraChannelLable, out rs, (bool)cil.IfGb28181Tcp !); if (gbRet != null && rs.Code == ErrorNumber.None) { CameraSession sessionsub = null; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(gbRet.App) && x.Vhost !.Equals(gbRet.Vhost) && x.StreamId !.Equals(gbRet.MediaId)); } if (sessionsub != null) { lock (Common.CameraSessionLock) { sessionsub.CameraId = cil.CameraId; } } } } catch (Exception ex) { Console.WriteLine("liveGB28181 Except:\r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
public void PoseTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Assert.IsNotNull(cameraInstance.PoseWorld); Assert.AreEqual(Vector3F.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix33F.Identity, cameraInstance.PoseWorld.Orientation); // Set new Pose Vector3F position = new Vector3F(1, 2, 3); QuaternionF orientation = QuaternionF.CreateRotation(new Vector3F(3, 4, 5), 0.123f); cameraInstance.PoseWorld = new Pose(position, orientation); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.IsTrue(Matrix44F.AreNumericallyEqual(cameraInstance.PoseWorld.ToMatrix44F(), cameraInstance.ViewInverse)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(cameraInstance.PoseWorld.Inverse.ToMatrix44F(), cameraInstance.View)); // Set Position and Orientation position = new Vector3F(5, 6, 7); orientation = QuaternionF.CreateRotation(new Vector3F(1, -1, 6), -0.123f); cameraInstance.PoseWorld = new Pose(position, orientation); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.IsTrue(Matrix44F.AreNumericallyEqual(cameraInstance.PoseWorld.Inverse.ToMatrix44F(), cameraInstance.View)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(cameraInstance.PoseWorld.ToMatrix44F(), cameraInstance.ViewInverse)); }
public FormCamera(CameraInstance instance) { InitializeComponent(); _instance = instance; ckFixed.Checked = _instance.Fixed; }
/// <summary> /// 停止摄像头 /// </summary> /// <param name="cil"></param> private static void stopCamera(CameraInstance cil) { try { if (cil != null && cil.EnableLive == false) { CameraSession cameraSession = null; cameraSession = getCameraCurrentSession(cil); if (cameraSession != null && cameraSession.IsOnline == true) { switch (cil.CameraType) { case CameraType.Rtsp: stopRtsp(cameraSession); break; case CameraType.GB28181: stopGB28181(cameraSession); break; } } } } catch (Exception ex) { Console.WriteLine("stopCamera Except:\r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
public void PoseTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Assert.IsNotNull(cameraInstance.PoseWorld); Assert.AreEqual(Vector3.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix.Identity, cameraInstance.PoseWorld.Orientation); // Set new Pose Vector3 position = new Vector3(1, 2, 3); Quaternion orientation = Quaternion.CreateFromRotationMatrix(new Vector3(3, 4, 5), 0.123f); cameraInstance.PoseWorld = new Pose(position, orientation); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.IsTrue(Matrix.AreNumericallyEqual(cameraInstance.PoseWorld.ToMatrix(), cameraInstance.ViewInverse)); Assert.IsTrue(Matrix.AreNumericallyEqual(cameraInstance.PoseWorld.Inverse.ToMatrix(), cameraInstance.View)); // Set Position and Orientation position = new Vector3(5, 6, 7); orientation = Quaternion.CreateFromRotationMatrix(new Vector3(1, -1, 6), -0.123f); cameraInstance.PoseWorld = new Pose(position, orientation); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.IsTrue(Matrix.AreNumericallyEqual(cameraInstance.PoseWorld.Inverse.ToMatrix(), cameraInstance.View)); Assert.IsTrue(Matrix.AreNumericallyEqual(cameraInstance.PoseWorld.ToMatrix(), cameraInstance.ViewInverse)); }
public void PoseChangedTest() { bool poseChanged = false; CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); cameraInstance.PoseChanged += (sender, eventArgs) => poseChanged = true; cameraInstance.PoseWorld = new Pose(new Vector3F(1, 2, 3)); Assert.IsTrue(poseChanged); }
/// <summary> /// 启动摄像头 /// </summary> /// <param name="cil"></param> private static void liveCamera(CameraInstance cil) { try { CameraSession cameraSession = null; if (cil != null && cil.EnableLive) { cameraSession = getCameraCurrentSession(cil); if (cameraSession == null || (cameraSession != null && cameraSession.IsOnline == false) ) //camera没有,或者isonline是false要推流 { CameraType ctype = cameraSession != null ? cameraSession.CameraType : cil.CameraType; switch (ctype) { case CameraType.Rtsp: liveRtsp(cil); break; case CameraType.GB28181: liveGB28181(cil); break; } } else if (cameraSession != null && string.IsNullOrEmpty(cameraSession.CameraId) && cameraSession.IsOnline == true ) //当camera不为空,但camera.cameraid为空时,不需要重新推,但要补全这个id { CameraSession sessionsub = null; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(cameraSession.App) && x.Vhost !.Equals(cameraSession.Vhost) && x.StreamId !.Equals(cameraSession.StreamId)); } if (sessionsub != null) { lock (Common.CameraSessionLock) { cameraSession.CameraId = cil.CameraId; } } } } } catch (Exception ex) { Console.WriteLine("liveCamera Except:\r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
public void PoseChangedTest() { bool poseChanged = false; CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); cameraInstance.PoseChanged += (sender, eventArgs) => poseChanged = true; cameraInstance.PoseWorld = new Pose(new Vector3(1, 2, 3)); Assert.IsTrue(poseChanged); }
public void ShapeChangedTest() { bool shapeChanged = false; CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); cameraInstance.BoundingShapeChanged += (sender, eventArgs) => shapeChanged = true; cameraInstance.Camera.Projection.Far = 9; Assert.IsTrue(shapeChanged); }
private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } }
/// <summary> /// 停止摄像头 /// </summary> /// <param name="cil"></param> private static void stopCamera(CameraInstance cil) { try { if (cil != null && cil.EnableLive == false) { CameraSession cameraSession = null !; cameraSession = GetCameraCurrentSession(cil); if (cameraSession != null && cameraSession.IsOnline == true) { switch (cil.CameraType) { case CameraType.Rtsp: StopRtsp(cameraSession); break; case CameraType.GB28181: bool found = false; lock (Common.SipProcess.SipDeviceLock) { var dev = Common.SipProcess.SipDeviceList.FindLast(x => x.DeviceId.Equals(cil.CameraDeviceLable)); if (dev != null && dev.CameraExList != null && dev.CameraExList.Count > 0) { var camera = dev.CameraExList.FindLast(x => x.Camera != null && x.Camera.DeviceID.Equals(cil.CameraChannelLable)); if (camera != null) { found = true; //break; } } } if (found == true) { stopGB28181(cameraSession); } break; } } } } catch (Exception ex) { Logger.Logger.Error("stopCamera Except ->" + ex.Message + "->" + ex.StackTrace); } }
//public static bool Init = false; /// <summary> /// 获取摄像头session /// </summary> /// <param name="cil"></param> /// <returns></returns> private static CameraSession GetCameraCurrentSession(CameraInstance cil) { try { CameraSession session = null !; if (cil.CameraType == CameraType.GB28181) { lock (Common.CameraSessionLock) { if (cil.MobileCamera == true) //如果是移动摄像头,就不再检查ip地址 { session = Common.CameraSessions.FindLast(x => x.ClientType == ClientType.Camera && x.CameraType == CameraType.GB28181 && x.CameraEx !.Camera.DeviceID.Equals(cil.CameraChannelLable) && x.CameraEx.Camera.ParentID.Equals(cil.CameraDeviceLable)) !; } else { session = Common.CameraSessions.FindLast(x => x.ClientType == ClientType.Camera && x.CameraType == CameraType.GB28181 && x.CameraEx !.Camera.IPAddress.Equals(cil.CameraIpAddress) && //为支持公网远程设备的ip不固定性,取消ip 地址校验 x.CameraEx.Camera.DeviceID.Equals(cil.CameraChannelLable) && x.CameraEx.Camera.ParentID.Equals(cil.CameraDeviceLable)) !; } } } if (cil.CameraType == CameraType.Rtsp) //rtsp摄像头一定是固定ip地址的 { lock (Common.CameraSessionLock) { session = Common.CameraSessions.FindLast(x => x.ClientType == ClientType.Camera && x.CameraType == CameraType.Rtsp && x.CameraIpAddress !.Equals(cil.CameraIpAddress) && x.CameraEx !.InputUrl !.Equals(cil.IfRtspUrl)) !; } } return(session !); } catch (Exception ex) { Logger.Logger.Error("getCameraCurrentSession Except -> " + ex.Message + "->" + ex.StackTrace); return(null !); } }
public void InverseViewTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Assert.AreEqual(Matrix44F.Identity, cameraInstance.View); Assert.AreEqual(Matrix44F.Identity, cameraInstance.ViewInverse); Vector3F position = new Vector3F(1, 2, 3); Vector3F target = new Vector3F(2, 5, 4); Vector3F upVector = new Vector3F(1, 1, 1); Matrix44F view = Matrix44F.CreateLookAt(position, target, upVector); cameraInstance.ViewInverse = view.Inverse; Assert.IsTrue(Matrix44F.AreNumericallyEqual(view, cameraInstance.View)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(view.Inverse, cameraInstance.ViewInverse)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(view.Inverse, cameraInstance.PoseWorld.ToMatrix44F())); }
public void InverseViewTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Assert.AreEqual(Matrix.Identity, cameraInstance.View); Assert.AreEqual(Matrix.Identity, cameraInstance.ViewInverse); Vector3 position = new Vector3(1, 2, 3); Vector3 target = new Vector3(2, 5, 4); Vector3 upVector = new Vector3(1, 1, 1); Matrix view = Matrix.CreateLookAt(position, target, upVector); cameraInstance.ViewInverse = view.Inverse; Assert.IsTrue(Matrix.AreNumericallyEqual(view, cameraInstance.View)); Assert.IsTrue(Matrix.AreNumericallyEqual(view.Inverse, cameraInstance.ViewInverse)); Assert.IsTrue(Matrix.AreNumericallyEqual(view.Inverse, cameraInstance.PoseWorld.ToMatrix())); }
public void camlist1() //콤보박스 강제로 불러와서 그값으로 실행시키기 { { NeptuneDevice iDev = DeviceManager.Instance.GetDeviceFromSerial(m_CamInfo1[1].strSerial); NeptuneDevice iDev1 = DeviceManager.Instance.GetDeviceFromSerial(m_CamInfo1[0].strSerial); try { Cam1[0] = new CameraInstance(iDev, ENeptuneDevAccess.NEPTUNE_DEV_ACCESS_EXCLUSIVE); Cam1[1] = new CameraInstance(iDev1, ENeptuneDevAccess.NEPTUNE_DEV_ACCESS_EXCLUSIVE); } catch (Exception exp) { } m_Display1[1] = new DisplayImage(pictureBoxDisplay1[1].Handle); m_Display1[0] = new DisplayImage(pictureBoxDisplay1[0].Handle); } }
public void SetProjectionTest() { Matrix projectionMatrix = Matrix.CreateOrthographicOffCenter(1, 4, 2, 5, 6, 11); OrthographicProjection orthographicProjection = new OrthographicProjection(); orthographicProjection.Set(projectionMatrix); CameraInstance cameraInstance = new CameraInstance(new Camera(orthographicProjection)); Assert.AreEqual(Vector3.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix.Identity, cameraInstance.PoseWorld.Orientation); Assert.That(Numeric.AreEqual(3, cameraInstance.Camera.Projection.Width)); Assert.That(Numeric.AreEqual(3, cameraInstance.Camera.Projection.Height)); Assert.That(Numeric.AreEqual(1f, cameraInstance.Camera.Projection.AspectRatio)); Assert.That(Numeric.AreEqual(6, cameraInstance.Camera.Projection.Near)); Assert.That(Numeric.AreEqual(11, cameraInstance.Camera.Projection.Far)); Assert.That(Numeric.AreEqual(1, cameraInstance.Camera.Projection.Left)); Assert.That(Numeric.AreEqual(4, cameraInstance.Camera.Projection.Right)); Assert.That(Numeric.AreEqual(2, cameraInstance.Camera.Projection.Bottom)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Top)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Depth)); Assert.That(Matrix.AreNumericallyEqual(orthographicProjection, cameraInstance.Camera.Projection)); Assert.That(Matrix.AreNumericallyEqual(orthographicProjection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsNotNull(cameraInstance.BoundingShape); PerspectiveProjection perspectiveProjection = new PerspectiveProjection(); perspectiveProjection.Inverse = Matrix.CreatePerspectiveOffCenter(1, 5, 2, 5, 1, 10).Inverse; cameraInstance = new CameraInstance(new Camera(perspectiveProjection)); Assert.AreEqual(Vector3.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix.Identity, cameraInstance.PoseWorld.Orientation); Assert.That(Numeric.AreEqual(MathHelper.ToRadians(33.690067f), cameraInstance.Camera.Projection.FieldOfViewX)); Assert.That(Numeric.AreEqual(MathHelper.ToRadians(15.255119f), cameraInstance.Camera.Projection.FieldOfViewY)); Assert.That(Numeric.AreEqual(4, cameraInstance.Camera.Projection.Width)); Assert.That(Numeric.AreEqual(3, cameraInstance.Camera.Projection.Height)); Assert.That(Numeric.AreEqual(4.0f / 3.0f, cameraInstance.Camera.Projection.AspectRatio)); Assert.That(Numeric.AreEqual(1, cameraInstance.Camera.Projection.Left)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Right)); Assert.That(Numeric.AreEqual(2, cameraInstance.Camera.Projection.Bottom)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Top)); Assert.That(Numeric.AreEqual(1, cameraInstance.Camera.Projection.Near)); Assert.That(Numeric.AreEqual(10, cameraInstance.Camera.Projection.Far)); Assert.That(Numeric.AreEqual(9, cameraInstance.Camera.Projection.Depth)); Assert.IsNotNull(cameraInstance.BoundingShape); }
/// <summary> /// 启动gb28181摄像头 /// </summary> /// <param name="cil"></param> private static void LiveGb28181(CameraInstance cil) { try { ResponseStruct rs = null !; var gbRet = CommonApi.LiveVideo(cil.PushMediaServerId, cil.CameraDeviceLable, cil.CameraChannelLable, out rs, (bool)cil.IfGb28181Tcp !); if (gbRet != null && rs.Code == ErrorNumber.None) { Logger.Logger.Info("GB28181推流成功->" + cil.CameraId + "->" + cil.CameraDeviceLable + "->" + cil.CameraChannelLable + "->" + "(TCP:" + cil.IfGb28181Tcp + ")"); CameraSession sessionsub = null !; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(gbRet.App) && x.Vhost !.Equals(gbRet.Vhost) && x.StreamId !.Equals(gbRet.MediaId)) !; } if (sessionsub != null) { lock (Common.CameraSessionLock) { sessionsub.CameraId = cil.CameraId; } } } else { Logger.Logger.Warn("GB28181推流失败->" + cil.CameraId + "->" + cil.CameraDeviceLable + "->" + cil.CameraChannelLable + "->" + "(TCP:" + cil.IfGb28181Tcp + ")->" + JsonHelper.ToJson(rs)); } } catch (Exception ex) { Logger.Logger.Error("liveGB28181 Except -> " + ex.Message + "->" + ex.StackTrace); } }
public void LookAtTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Vector3F position = new Vector3F(1, 2, 3); Vector3F target = new Vector3F(2, 5, 4); Vector3F upVector = new Vector3F(1, 1, 1); cameraInstance.PoseWorld = new Pose(new Vector3F(1, 2, 3)); Matrix44F expected = Matrix44F.CreateLookAt(position, target, upVector); cameraInstance.LookAt(target, upVector); Assert.That(Matrix44F.AreNumericallyEqual(expected, cameraInstance.View)); position = new Vector3F(-2, 3, -7.5f); expected = Matrix44F.CreateLookAt(position, target, upVector); cameraInstance.LookAt(position, target, upVector); Assert.That(Vector3F.AreNumericallyEqual(position, cameraInstance.PoseWorld.Position)); Assert.That(Matrix44F.AreNumericallyEqual(expected, cameraInstance.View)); }
/// <summary> /// 从注册摄像头列表中获取摄像头实例 /// </summary> /// <param name="session"></param> /// <returns></returns> private static CameraInstance getCameraFromCameraInstance(CameraSession session) { lock (Common.CameraInstanceListLock) { if (Common.CameraInstanceList != null && Common.CameraInstanceList.Count() > 0) { foreach (var camera in Common.CameraInstanceList) { if (camera != null && camera.CameraChannelLable.Equals(session.CameraEx.Camera.DeviceID) && camera.CameraDeviceLable.Equals(session.CameraEx.Camera.ParentID)) { CameraInstance tmp = null; return(JsonHelper.FromJson <CameraInstance>(JsonHelper.ToJson(camera))); } } } } return(null); }
public void LookAtTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Vector3 position = new Vector3(1, 2, 3); Vector3 target = new Vector3(2, 5, 4); Vector3 upVector = new Vector3(1, 1, 1); cameraInstance.PoseWorld = new Pose(new Vector3(1, 2, 3)); Matrix expected = Matrix.CreateLookAt(position, target, upVector); cameraInstance.LookAt(target, upVector); Assert.That(Matrix.AreNumericallyEqual(expected, cameraInstance.View)); position = new Vector3(-2, 3, -7.5f); expected = Matrix.CreateLookAt(position, target, upVector); cameraInstance.LookAt(position, target, upVector); Assert.That(Vector3.AreNumericallyEqual(position, cameraInstance.PoseWorld.Position)); Assert.That(Matrix.AreNumericallyEqual(expected, cameraInstance.View)); }
public void ViewTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Assert.AreEqual(Matrix.Identity, cameraInstance.View); Assert.AreEqual(Matrix.Identity, cameraInstance.ViewInverse); Vector3 position = new Vector3(1, 2, 3); Vector3 target = new Vector3(2, 5, 4); Vector3 upVector = new Vector3(1, 1, 1); Matrix view = Matrix.CreateLookAt(position, target, upVector); cameraInstance.View = view; Assert.AreEqual(view, cameraInstance.View); Assert.AreEqual(view.Inverse, cameraInstance.ViewInverse); Vector3 originOfCamera = cameraInstance.PoseWorld.Position; originOfCamera = cameraInstance.View.TransformPosition(originOfCamera); Assert.IsTrue(Vector3.AreNumericallyEqual(Vector3.Zero, originOfCamera)); Vector4 positionView = new Vector4(0, 0, -1, 1); Vector4 positionView2; // Transform a point from view space to world space. Vector4 positionWorld = cameraInstance.PoseWorld * positionView; Vector4 positionWorld2 = cameraInstance.ViewInverse * positionView; Assert.IsTrue(Vector4.AreNumericallyEqual(positionWorld, positionWorld2)); // Transform a point from world space to view space. positionView = cameraInstance.PoseWorld.Inverse * positionWorld; positionView2 = cameraInstance.View * positionWorld; Assert.IsTrue(Vector4.AreNumericallyEqual(positionView, positionView2)); cameraInstance.View = Matrix.Identity; Assert.AreEqual(Vector3.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix.Identity, cameraInstance.PoseWorld.Orientation); }
public void ViewTest() { CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())); Assert.AreEqual(Matrix44F.Identity, cameraInstance.View); Assert.AreEqual(Matrix44F.Identity, cameraInstance.ViewInverse); Vector3F position = new Vector3F(1, 2, 3); Vector3F target = new Vector3F(2, 5, 4); Vector3F upVector = new Vector3F(1, 1, 1); Matrix44F view = Matrix44F.CreateLookAt(position, target, upVector); cameraInstance.View = view; Assert.AreEqual(view, cameraInstance.View); Assert.AreEqual(view.Inverse, cameraInstance.ViewInverse); Vector3F originOfCamera = cameraInstance.PoseWorld.Position; originOfCamera = cameraInstance.View.TransformPosition(originOfCamera); Assert.IsTrue(Vector3F.AreNumericallyEqual(Vector3F.Zero, originOfCamera)); Vector4F positionView = new Vector4F(0, 0, -1, 1); Vector4F positionView2; // Transform a point from view space to world space. Vector4F positionWorld = cameraInstance.PoseWorld * positionView; Vector4F positionWorld2 = cameraInstance.ViewInverse * positionView; Assert.IsTrue(Vector4F.AreNumericallyEqual(positionWorld, positionWorld2)); // Transform a point from world space to view space. positionView = cameraInstance.PoseWorld.Inverse * positionWorld; positionView2 = cameraInstance.View * positionWorld; Assert.IsTrue(Vector4F.AreNumericallyEqual(positionView, positionView2)); cameraInstance.View = Matrix44F.Identity; Assert.AreEqual(Vector3F.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix33F.Identity, cameraInstance.PoseWorld.Orientation); }
public void PerspectiveOffCenterTest() { Vector3F position = new Vector3F(1, 2, 3); QuaternionF orientation = QuaternionF.CreateRotation(new Vector3F(2, 3, 6), 0.123f); CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())) { PoseLocal = new Pose(position, orientation), }; ((PerspectiveProjection)cameraInstance.Camera.Projection).SetOffCenter(1, 5, 2, 5, 1, 10); Matrix44F projection = Matrix44F.CreatePerspectiveOffCenter(1, 5, 2, 5, 1, 10); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.IsTrue(Numeric.AreEqual(MathHelper.ToRadians(33.690067f), cameraInstance.Camera.Projection.FieldOfViewX)); Assert.IsTrue(Numeric.AreEqual(MathHelper.ToRadians(15.255119f), cameraInstance.Camera.Projection.FieldOfViewY)); Assert.AreEqual(4.0f / 3.0f, cameraInstance.Camera.Projection.AspectRatio); Assert.AreEqual(4, cameraInstance.Camera.Projection.Width); Assert.AreEqual(3, cameraInstance.Camera.Projection.Height); Assert.AreEqual(1, cameraInstance.Camera.Projection.Left); Assert.AreEqual(5, cameraInstance.Camera.Projection.Right); Assert.AreEqual(2, cameraInstance.Camera.Projection.Bottom); Assert.AreEqual(5, cameraInstance.Camera.Projection.Top); Assert.AreEqual(1, cameraInstance.Camera.Projection.Near); Assert.AreEqual(10, cameraInstance.Camera.Projection.Far); Assert.AreEqual(9, cameraInstance.Camera.Projection.Depth); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection, cameraInstance.Camera.Projection)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsNotNull(cameraInstance.BoundingShape); // Test shape using collision detection. Remove rotation to simplify test. cameraInstance.PoseWorld = new Pose(cameraInstance.PoseWorld.Position); CollisionDetection collisionDetection = new CollisionDetection(); var point = new PointShape(); CollisionObject pointCollisionObject = new CollisionObject(new GeometricObject(point)); CollisionObject cameraCollisionObject = new CollisionObject(cameraInstance); point.Position = position + new Vector3F(3, 3, -1); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(30, 30, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(3, 3, -0.9f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(30, 30, -10.1f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(1, 2, -1); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(0.9f, 2, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(1, 1.9f, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(5, 5, -1); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(5.1f, 5, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(5, 5.1f, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(10, 20, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(9.9f, 20, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(10, 19.9f, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(50, 50, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(50.1f, 50, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(50, 50.1f, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); }
public void OrthographicTest() { Vector3F position = new Vector3F(1, 2, 3); QuaternionF orientation = QuaternionF.CreateRotation(new Vector3F(2, 3, 6), 0.123f); CameraInstance cameraInstance = new CameraInstance(new Camera(new OrthographicProjection())) { PoseLocal = new Pose(position, orientation), }; ((OrthographicProjection)cameraInstance.Camera.Projection).Set(4, 3, 2, 10); Matrix44F projection = Matrix44F.CreateOrthographic(4, 3, 2, 10); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.AreEqual(4, cameraInstance.Camera.Projection.Width); Assert.AreEqual(3, cameraInstance.Camera.Projection.Height); Assert.AreEqual(4.0f / 3.0f, cameraInstance.Camera.Projection.AspectRatio); Assert.AreEqual(2, cameraInstance.Camera.Projection.Near); Assert.AreEqual(10, cameraInstance.Camera.Projection.Far); Assert.AreEqual(-2, cameraInstance.Camera.Projection.Left); Assert.AreEqual(2, cameraInstance.Camera.Projection.Right); Assert.AreEqual(-1.5f, cameraInstance.Camera.Projection.Bottom); Assert.AreEqual(1.5f, cameraInstance.Camera.Projection.Top); Assert.AreEqual(8, cameraInstance.Camera.Projection.Depth); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection, cameraInstance.Camera.Projection)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsNotNull(cameraInstance.BoundingShape); // Test shape using collision detection. Remove rotation to simplify test. cameraInstance.PoseWorld = new Pose(cameraInstance.PoseWorld.Position); CollisionDetection collisionDetection = new CollisionDetection(); var point = new PointShape(); CollisionObject pointCollisionObject = new CollisionObject(new GeometricObject(point)); CollisionObject cameraCollisionObject = new CollisionObject(cameraInstance); point.Position = position + new Vector3F(-2, -1.5f, -2); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-2.1f, -1.6f, -1.9f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(2, 1.5f, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(2.1f, 1.6f, -10.1f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); cameraInstance.PoseWorld = new Pose(position, orientation); ((OrthographicProjection)cameraInstance.Camera.Projection).Set(8, 4, 1, 100); cameraInstance.Camera.Projection.Near = 1; cameraInstance.Camera.Projection.Far = 100; projection = Matrix44F.CreateOrthographic(8, 4, 1, 100); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection, cameraInstance.Camera.Projection)); // Test shape using collision detection. Remove rotation to simplify test. cameraInstance.PoseWorld = new Pose(cameraInstance.PoseWorld.Position); point.Position = position + new Vector3F(-4, -2f, -1); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-4.1f, -1.9f, -0.9f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(4, 2f, -100); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(4.1f, 2.1f, -100.1f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); }
public void SetProjectionTest() { Matrix44F projectionMatrix = Matrix44F.CreateOrthographicOffCenter(1, 4, 2, 5, 6, 11); OrthographicProjection orthographicProjection = new OrthographicProjection(); orthographicProjection.Set(projectionMatrix); CameraInstance cameraInstance = new CameraInstance(new Camera(orthographicProjection)); Assert.AreEqual(Vector3F.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix33F.Identity, cameraInstance.PoseWorld.Orientation); Assert.That(Numeric.AreEqual(3, cameraInstance.Camera.Projection.Width)); Assert.That(Numeric.AreEqual(3, cameraInstance.Camera.Projection.Height)); Assert.That(Numeric.AreEqual(1f, cameraInstance.Camera.Projection.AspectRatio)); Assert.That(Numeric.AreEqual(6, cameraInstance.Camera.Projection.Near)); Assert.That(Numeric.AreEqual(11, cameraInstance.Camera.Projection.Far)); Assert.That(Numeric.AreEqual(1, cameraInstance.Camera.Projection.Left)); Assert.That(Numeric.AreEqual(4, cameraInstance.Camera.Projection.Right)); Assert.That(Numeric.AreEqual(2, cameraInstance.Camera.Projection.Bottom)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Top)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Depth)); Assert.That(Matrix44F.AreNumericallyEqual(orthographicProjection, cameraInstance.Camera.Projection)); Assert.That(Matrix44F.AreNumericallyEqual(orthographicProjection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsNotNull(cameraInstance.BoundingShape); PerspectiveProjection perspectiveProjection = new PerspectiveProjection(); perspectiveProjection.Inverse = Matrix44F.CreatePerspectiveOffCenter(1, 5, 2, 5, 1, 10).Inverse; cameraInstance = new CameraInstance(new Camera(perspectiveProjection)); Assert.AreEqual(Vector3F.Zero, cameraInstance.PoseWorld.Position); Assert.AreEqual(Matrix33F.Identity, cameraInstance.PoseWorld.Orientation); Assert.That(Numeric.AreEqual(MathHelper.ToRadians(33.690067f), cameraInstance.Camera.Projection.FieldOfViewX)); Assert.That(Numeric.AreEqual(MathHelper.ToRadians(15.255119f), cameraInstance.Camera.Projection.FieldOfViewY)); Assert.That(Numeric.AreEqual(4, cameraInstance.Camera.Projection.Width)); Assert.That(Numeric.AreEqual(3, cameraInstance.Camera.Projection.Height)); Assert.That(Numeric.AreEqual(4.0f / 3.0f, cameraInstance.Camera.Projection.AspectRatio)); Assert.That(Numeric.AreEqual(1, cameraInstance.Camera.Projection.Left)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Right)); Assert.That(Numeric.AreEqual(2, cameraInstance.Camera.Projection.Bottom)); Assert.That(Numeric.AreEqual(5, cameraInstance.Camera.Projection.Top)); Assert.That(Numeric.AreEqual(1, cameraInstance.Camera.Projection.Near)); Assert.That(Numeric.AreEqual(10, cameraInstance.Camera.Projection.Far)); Assert.That(Numeric.AreEqual(9, cameraInstance.Camera.Projection.Depth)); Assert.IsNotNull(cameraInstance.BoundingShape); }
public void PerspectiveTest() { Vector3F position = new Vector3F(1, 2, 3); QuaternionF orientation = QuaternionF.CreateRotation(new Vector3F(2, 3, 6), 0.123f); CameraInstance cameraInstance = new CameraInstance(new Camera(new PerspectiveProjection())) { PoseLocal = new Pose(position, orientation), }; ((PerspectiveProjection)cameraInstance.Camera.Projection).SetFieldOfView(MathHelper.ToRadians(60), 16.0f / 10.0f, 1, 10); Matrix44F projection = Matrix44F.CreatePerspectiveFieldOfView(MathHelper.ToRadians(60), 16.0f / 10.0f, 1, 10); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.AreEqual(MathHelper.ToRadians(60), cameraInstance.Camera.Projection.FieldOfViewY); Assert.IsTrue(Numeric.AreEqual(MathHelper.ToRadians(85.4601055f), cameraInstance.Camera.Projection.FieldOfViewX)); Assert.AreEqual(16.0f / 10.0f, cameraInstance.Camera.Projection.AspectRatio); Assert.IsTrue(Numeric.AreEqual(1.8475209f, cameraInstance.Camera.Projection.Width)); Assert.IsTrue(Numeric.AreEqual(1.1547005f, cameraInstance.Camera.Projection.Height)); Assert.AreEqual(1, cameraInstance.Camera.Projection.Near); Assert.AreEqual(10, cameraInstance.Camera.Projection.Far); Assert.IsTrue(Numeric.AreEqual(-0.9237604f, cameraInstance.Camera.Projection.Left)); Assert.IsTrue(Numeric.AreEqual(0.9237604f, cameraInstance.Camera.Projection.Right)); Assert.IsTrue(Numeric.AreEqual(-0.5773503f, cameraInstance.Camera.Projection.Bottom)); Assert.IsTrue(Numeric.AreEqual(0.5773503f, cameraInstance.Camera.Projection.Top)); Assert.AreEqual(9, cameraInstance.Camera.Projection.Depth); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection, cameraInstance.Camera.Projection)); Assert.IsTrue(Matrix44F.AreNumericallyEqual(projection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsNotNull(cameraInstance.BoundingShape); // Test shape using collision detection. Remove rotation to simplify test. cameraInstance.PoseWorld = new Pose(cameraInstance.PoseWorld.Position); CollisionDetection collisionDetection = new CollisionDetection(); var point = new PointShape(); CollisionObject pointCollisionObject = new CollisionObject(new GeometricObject(point)); CollisionObject cameraCollisionObject = new CollisionObject(cameraInstance); point.Position = position + new Vector3F(0, 0, -1); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(0, 0, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(0, 0, -0.9f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(0, 0, -10.1f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-0.9237604f, -0.5773f, -1); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-0.924f, -0.5773f, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-0.9237604f, -0.58f, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(0.9237604f, 0.5773f, -1); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(0.924f, 0.5773f, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(0.9237604f, 0.58f, -1); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-9.237604f, -5.773f, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-9.24f, -5.773f, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(-9.237604f, -5.8f, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(9.237604f, 5.773f, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(9.24f, 5.773f, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3F(9.237604f, 5.8f, -10); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); }
/// <summary> /// 启动摄像头 /// </summary> /// <param name="cil"></param> private static void liveCamera(CameraInstance cil) { try { CameraSession cameraSession = null !; if (cil != null && cil.EnableLive) { cameraSession = GetCameraCurrentSession(cil); if (cameraSession == null || (cameraSession != null && cameraSession.IsOnline == false) ) //camera没有,或者isonline是false要推流 { CameraType ctype = cameraSession != null ? cameraSession.CameraType : cil.CameraType; switch (ctype) { case CameraType.Rtsp: liveRtsp(cil); break; case CameraType.GB28181: bool found = false; lock (Common.SipProcess.SipDeviceLock) { var dev = Common.SipProcess.SipDeviceList.FindLast(x => x.DeviceId.Equals(cil.CameraDeviceLable)); if (dev != null && dev.CameraExList != null && dev.CameraExList.Count > 0) { var camera = dev.CameraExList.FindLast(x => x.Camera != null && x.Camera.DeviceID.Equals(cil.CameraChannelLable)); if (camera != null) { found = true; } } } if (found) { LiveGb28181(cil); } break; } } else if (cameraSession != null && string.IsNullOrEmpty(cameraSession.CameraId) && cameraSession.IsOnline == true ) //当camera不为空,但camera.cameraid为空时,不需要重新推,但要补全这个id { CameraSession sessionsub = null !; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(cameraSession.App) && x.Vhost !.Equals(cameraSession.Vhost) && x.StreamId !.Equals(cameraSession.StreamId)) !; } if (sessionsub != null) { lock (Common.CameraSessionLock) { cameraSession.CameraId = cil.CameraId; } } } } } catch (Exception ex) { Logger.Logger.Error("liveCamera Except -> " + ex.Message + "->" + ex.StackTrace); } }
public void OrthographicOffCenterTest() { Vector3 position = new Vector3(1, 2, 3); Quaternion orientation = Quaternion.CreateFromRotationMatrix(new Vector3(2, 3, 6), 0.123f); CameraInstance cameraInstance = new CameraInstance(new Camera(new OrthographicProjection())) { PoseLocal = new Pose(position, orientation), }; ((OrthographicProjection)cameraInstance.Camera.Projection).SetOffCenter(0, 16, 0, 9, 2, 10); Matrix projection = Matrix.CreateOrthographicOffCenter(0, 16, 0, 9, 2, 10); Assert.AreEqual(position, cameraInstance.PoseWorld.Position); Assert.AreEqual(orientation.ToRotationMatrix33(), cameraInstance.PoseWorld.Orientation); Assert.AreEqual(16, cameraInstance.Camera.Projection.Width); Assert.AreEqual(9, cameraInstance.Camera.Projection.Height); Assert.AreEqual(16.0f / 9.0f, cameraInstance.Camera.Projection.AspectRatio); Assert.AreEqual(2, cameraInstance.Camera.Projection.Near); Assert.AreEqual(10, cameraInstance.Camera.Projection.Far); Assert.AreEqual(0, cameraInstance.Camera.Projection.Left); Assert.AreEqual(16, cameraInstance.Camera.Projection.Right); Assert.AreEqual(0, cameraInstance.Camera.Projection.Bottom); Assert.AreEqual(9, cameraInstance.Camera.Projection.Top); Assert.AreEqual(8, cameraInstance.Camera.Projection.Depth); Assert.IsTrue(Matrix.AreNumericallyEqual(projection, cameraInstance.Camera.Projection)); Assert.IsTrue(Matrix.AreNumericallyEqual(projection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsNotNull(cameraInstance.BoundingShape); CollisionDetection collisionDetection = new CollisionDetection(); var point = new PointShape(); CollisionObject pointCollisionObject = new CollisionObject(new GeometricObject(point)); CollisionObject cameraCollisionObject = new CollisionObject(cameraInstance); // Test shape using collision detection. Remove rotation to simplify test. cameraInstance.PoseWorld = new Pose(cameraInstance.PoseWorld.Position); point.Position = position + new Vector3(0, 0, -2); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3(-0.1f, -0.1f, -1.9f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3(16, 9, -10); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3(16.1f, 9.1f, -10.1f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); cameraInstance.Camera.Projection.Left = -2; cameraInstance.Camera.Projection.Right = 4; cameraInstance.Camera.Projection.Bottom = 10; cameraInstance.Camera.Projection.Top = 14; cameraInstance.Camera.Projection.Near = 15; cameraInstance.Camera.Projection.Far = 100; projection = Matrix.CreateOrthographicOffCenter(-2, 4, 10, 14, 15, 100); Assert.IsTrue(Matrix.AreNumericallyEqual(projection.Inverse, cameraInstance.Camera.Projection.Inverse)); Assert.IsTrue(Matrix.AreNumericallyEqual(projection, cameraInstance.Camera.Projection)); // Test shape using collision detection. Remove rotation to simplify test. cameraInstance.PoseWorld = new Pose(cameraInstance.PoseWorld.Position); point.Position = position + new Vector3(-2, 10, -15); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3(-2.1f, -10.1f, -14.9f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3(4, 14, -100); Assert.IsTrue(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); point.Position = position + new Vector3(4.1f, 14.1f, -100.1f); Assert.IsFalse(collisionDetection.HaveContact(pointCollisionObject, cameraCollisionObject)); }
private void Run() { int i = 0; while (true) { try { i++; if (Common.MediaServerList == null || Common.MediaServerList.Count <= 0) { Thread.Sleep(5000); continue; } foreach (var mediaServer in Common.MediaServerList) { if (mediaServer != null && mediaServer.IsRunning) { if (i % 50 == 0) { mediaServer.ClearNoFileDir(out _); //清除空目录 } ReqGetDvrPlan rgdp = new ReqGetDvrPlan(); rgdp.MediaServerId = mediaServer.MediaServerId; var dvrPlanList = DvrPlanApis.GetDvrPlanList(rgdp, out ResponseStruct rs); if (dvrPlanList == null || dvrPlanList.Count == 0) { continue; } foreach (var dvrPlan in dvrPlanList) { if (dvrPlan == null || dvrPlan.Enable == false) { var ret = getDvrOnorOff( dvrPlan); //如果录制计划为停止状态,在处理下一个计划任务前要查看该录制计划是否正在执行,正在扫行的话,要停掉它 if (ret) { setDvrOnorOff(dvrPlan, false); } continue; } CameraInstance camera = null; lock (Common.CameraInstanceList) { camera = Common.CameraInstanceList.FindLast(x => x.CameraId.Equals(dvrPlan.CameraId)); } if (camera != null) { ExecDelete(dvrPlan); if (camera.EnableLive && getCameraSessionStatus(camera.PushMediaServerId, camera.CameraId)) { execOnOrOff(dvrPlan); } } Thread.Sleep(2000); } } } Thread.Sleep(5000); } catch (Exception ex) { Console.WriteLine("报错了:\r\n" + ex.Message + "\r\n" + ex.StackTrace); continue; } } }
/// <summary> /// 启动rtsp摄像头 /// </summary> /// <param name="cil"></param> private static void liveRtsp(CameraInstance cil) { try { ResponseStruct rs = null !; var mediaObj = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(cil.PushMediaServerId)); if (mediaObj == null || mediaObj.IsRunning == false) { return; } bool useFFmpeg = true; if (cil.RetryTimes < 2) { //rtsp方式,先跳过三次,因为zlmediakit会自动维护掉线的ffmpeg,要延迟处理一下,不然会重复创建ffmpeg cil.RetryTimes++; return; } cil.RetryTimes = 0; ResZLMediaKitAddFFmpegProxy ret = null !; if (useFFmpeg) { ret = MediaServerApis.AddFFmpegProxy( mediaObj.MediaServerId, cil.IfRtspUrl, out rs); } else { ret = MediaServerApis.AddStreamProxy(mediaObj.MediaServerId, cil.IfRtspUrl, out rs); } if (ret != null && rs.Code == ErrorNumber.None) { Logger.Logger.Info("Rtsp推流成功->" + cil.CameraId + "->" + cil.IfRtspUrl); CameraSession sessionsub = null !; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(ret.App) && x.Vhost !.Equals(ret.Vhost) && x.StreamId !.Equals(ret.StreamId)) !; } if (sessionsub != null) { lock (Common.CameraSessionLock) { sessionsub.CameraId = cil.CameraId; } } } else { Logger.Logger.Warn( "Rtsp推流失败->" + cil.CameraId + "->" + cil.IfRtspUrl + "->" + JsonHelper.ToJson(rs)); } } catch (Exception ex) { Logger.Logger.Error("liveRtsp Except ->" + ex.Message + "->" + ex.StackTrace); } }