Onvif управление зуммом
Я пишу программу управления IP-камерами через протокол ONVIF.
Управляю через порт PTZ используя функцию ContinuousMove, но на разных камерах она работает по разному. К примеру, на одной камере все работает хорошо, а на другой зуммится до конца. При использовании функции RelativeMove картина обратная.
Для функции AbsoluteMove не могу достать из камеры текущее положение зумма.
Буду рад любому совету, исходники при необходимости предоставлю.
Ответы (1 шт):
Автор решения: xb3lh1nhx
→ Ссылка
Решил проблему следующим образом: использовал функцию GetStatus для получения текущего значения зумма и AbsoluteMove для непосредственно управления зуммом.
public void StartZoom (Direction direction)
{
if (zoomEnabled_)
{
var ptzStatus_ = ptzClient_.GetStatus(profile_.token);
moveVector_.PanTilt = ptzStatus_.Position.PanTilt;
moveVector_.Zoom = ptzStatus_.Position.Zoom;
var zoomSpace = options_.Spaces.AbsoluteZoomPositionSpace;
var minZoom = zoomSpace[0].XRange.Min;
var maxZoom = zoomSpace[0].XRange.Max;
moveVelocity_.Zoom.x = 0;
if (direction.HasFlag(Direction.ZoomIn))
{
if (ptzStatus_.Position.Zoom.x + 1 / 20F <= maxZoom)
{
moveVelocity_.Zoom.x = velocityZoomIn_;
moveVector_.Zoom.x += 1 / 20F;
}
else
{
moveVector_.Zoom.x = maxZoom;
}
}
else if (direction.HasFlag(Direction.ZoomOut))
{
if (ptzStatus_.Position.Zoom.x - 1 / 20F >= minZoom)
{
moveVelocity_.Zoom.x = velocityZoomOut_;
moveVector_.Zoom.x -= 1 / 20F;
}
else
{
moveVector_.Zoom.x = minZoom;
}
}
ptzClient_.AbsoluteMove(profile_.token, moveVector_, moveVelocity_);
}
}