如何通过按钮实现IP摄像机(ONVIF)的RelativeMove

时间:2018-11-27 12:17:13

标签: c# ip-camera onvif

有人可以告诉我为什么上,下保护套可以完美地与按钮配合使用,而其他情况却不能吗?我尝试了两种不同的方法,一种是在左侧的情况下看到的,另一种是在右侧的情况下看到的,但两种方法都不起作用。

 void Move(String direction)
        {
            timer.Enabled = true;
            switch (direction)
            {
                case "Up ":

                    onvifPTZ.RelativeMove(0, 1f, 0, (float)Pan_Speed.Value, (float)Tilt_Speed.Value, (float)Zoom_Speed.Value);
                    break;
                case "Down":
                    onvifPTZ.RelativeMove(0, -1f, 0, (float)Pan_Speed.Value, (float)Tilt_Speed.Value, (float)Zoom_Speed.Value);
                    break;
                case "Left":
                    direction = Direction.Left.ToString();
                    onvifPTZ.RelativeMove((float)Direction.Left, 0, 0, (float)Pan_Speed.Value, (float)Tilt_Speed.Value, (float)Zoom_Speed.Value);
                    break;
                case "Right":

                    onvifPTZ.RelativeMove(-1f, 0, 0, (float)Pan_Speed.Value, (float)Tilt_Speed.Value, (float)Zoom_Speed.Value);
                    break;
            }
        }

这是我相对的Move函数。

 public int RelativeMove(float xTrans, float yTrans, float zTrans, float xSpeed , float ySpeed, float zSpeed)
        {
            // Define Translation Vector
            PTZ.PTZVector ptzTrans = new PTZ.PTZVector()
            {
                PanTilt = new PTZ.Vector2D()
                {
                    x = xTrans,
                    y = yTrans,
                    space = ptzOptions.Spaces.RelativePanTiltTranslationSpace[0].URI,
                },
                Zoom = new PTZ.Vector1D()
                {
                    x = zTrans,
                    //space = ptzOptions.Spaces.RelativeZoomTranslationSpace[0].URI,
                }
            };
            // Define Speed Vector
            PTZ.PTZSpeed ptzSpd = new PTZ.PTZSpeed()
            {
                PanTilt = new PTZ.Vector2D()
                {
                    x = xSpeed,
                    y = ySpeed,
                    //space = ptzOptions.Spaces.RelativePanTiltTranslationSpace[0].URI,
                },
                Zoom = new PTZ.Vector1D()
                {
                    x = zSpeed,
                   // space = ptzOptions.Spaces.RelativeZoomTranslationSpace[0].URI,
                }
            };

            // Move relative along vectore <ptzTrans> with speed <ptzSpd> 
            // Zoom is manipulated with <zSpeed>.
            ptzClient.RelativeMove(profiles[this.selectedProfile].token, ptzTrans, ptzSpd);

            return 0;
        }

如果有人知道我该怎么做才能起作用,请帮助:),如果有人知道当我不按按钮告诉我时如何停止运动,导致它也无法起作用...我确实实现了并告诉相机停止其中的移动,但是它完全没有反应。

1 个答案:

答案 0 :(得分:0)

根据您的描述,我了解到您正在尝试通过速度移动PTZ单元。但是,这与您在代码中使用的功能RelativeMove不匹配。

来自https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/package-summary.html

  

如果PTZ节点支持相对平移/倾斜或相对缩放   动作,则它应支持RelativeMove操作。的   此操作的翻译参数指定与   当前位置到PTZ设备所在的位置   指示移动。该操作分为可选的“平移/倾斜”   元素和可选的Zoom元素。如果“平移/倾斜”元素为   省略,当前的平移/倾斜运动将不受此影响   命令。缩放元素也是如此。

因此,您有两个选择:

  • 验证ContinuousMove是否满足您的需求
  • 如果您确实要使用RelativeMove,请检查ptzOptions.Spaces.RelativePanTiltTranslationSpace[0].URI是什么。它可能是一个自定义空间,其平移和倾斜范围不同。