Как реализовать RelativeMove с помощью кнопок для IP-камеры (ONVIF) - PullRequest
0 голосов
/ 27 ноября 2018

Может кто-нибудь сказать мне, почему чехол Up и Down отлично работает с кнопками, а другие нет?Я пытался использовать эти 2 способа, один из которых вы видите в левом, а другой в правом, но оба не работают вообще.

 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 голосов
/ 05 декабря 2018

Из вашего описания я понимаю, что вы пытаетесь переместить PTZ-устройство, используя скорость.Однако это не соответствует функции RelativeMove, которую вы используете в коде.

Из спецификации ONVIF PTZ :

Если узел PTZ поддерживаетОтносительные перемещения Pan / Tilt или относительный Zoom, тогда он должен поддерживать операцию RelativeMove.Аргумент перевода этой операции указывает разницу между текущей позицией и позицией, в которую устройство PTZ получает указание переместиться.Операция разделена на необязательный элемент Pan / Tilt и необязательный элемент Zoom.Если элемент Pan / Tilt отсутствует, эта команда НЕ влияет на текущее движение Pan / Tilt.То же самое относится и к элементу масштабирования.

Таким образом, у вас есть два варианта:

  • Проверьте, является ли ContinuousMove функцией, выполняющей то, что вы ищете
  • Если вы действительно хотите использовать RelativeMove, проверьте, что такое ptzOptions.Spaces.RelativePanTiltTranslationSpace[0].URI.Это может быть произвольное пространство с разными диапазонами панорамирования и наклона.
...