Skip to main content

VISCA over IP PTZ Camera

VISCA is Sony's pan/tilt/zoom camera control protocol, originally a daisy-chain RS-232 standard and now widely implemented over UDP/IP as VISCA over IP on UDP port 52381. One VISCA-IP driver covers most commercial PTZ cameras used in conference rooms, classrooms, courtrooms, lecture halls, churches and broadcast B-roll rigs:

  • Sony BRC / SRG / FR-series
  • PTZOptics Move / Studio / SE / G2 / G3
  • Vaddio RoboSHOT / ConferenceSHOT / OneLINK
  • Lumens VC-A / VC-B / VC-TR series
  • Marshall CV / CVM PTZ cameras
  • BirdDog (VISCA control path)
  • Aver CAM5xx / PTC series
  • Most other "VISCA-compatible" commercial PTZs

The driver does not handle video — pair it with an RTSP/NDI/HDMI feed from the same camera through the appropriate AV path. It handles power, pan/tilt with speed, zoom, focus, presets, and read-back of zoom and PTZ position.

Prerequisites

  • The camera supports VISCA over IP in UDP mode. Most PTZOptics, Vaddio, Lumens, Marshall and Sony commercial PTZs do — check the camera menu for the setting (usually under Network or Camera Settings).
  • The camera's IP is reachable from the GEM controller on UDP port 52381 (no firewall block).
  • IR-remote control is not exclusive: VISCA-IP control works alongside the IR remote on most models, but a few firmwares disable IP control if the IR receiver is on — check the camera menu if commands silently fail.

Setup steps

  1. In the camera network menu, assign a static IP / DHCP reservation and enable VISCA over IP in UDP mode.
  2. In GEM, Admin → Devices → New, pick the VISCA over IP PTZ Camera driver.
  3. Enter the camera's IP. Leave the port on 52381 unless the camera documents otherwise.
  4. (Optional) Set default_pan_speed and default_tilt_speed if the defaults (9) move the camera faster/slower than you want.
  5. Save. The driver sends a VISCA-IP sequence-reset and immediately issues a CAM_PowerInq to confirm the camera is reachable.
  6. To save framing: pan/tilt/zoom into position, then call preset_save with a preset number 0–15 (most cameras support more, but 0–15 is the safe universal range).

Attribute reference

Required

AttributeTypeDescription
ipstringLAN IP or hostname of the camera.

Optional

AttributeTypeDefaultDescription
portint52381VISCA-IP UDP port.
default_pan_speedint (1–24)9Pan speed when pan_left/pan_right is called without a speed arg.
default_tilt_speedint (1–23)9Tilt speed when tilt_up/tilt_down is called without a speed arg.
status_intervalint (ms)60000How often the driver polls power and zoom.
request_timeoutint (ms)1500Per-command timeout waiting for completion.

Surfaced by the driver (read-only)

AttributeSourceMeaning
power_stateCAM_PowerInqon / off.
zoom_positionCAM_ZoomPosInq12-bit zoom value (0 wide … ~16384 tele, camera-dependent scale).

get_position returns {pan_position, tilt_position} as 16-bit signed integers but those are returned per-call, not stored as device attributes.

Zones

VISCA-IP is device-level — no GEM zones. Power, motion, zoom, focus, and presets all target the camera as a whole.

Pan / tilt / zoom semantics

VISCA pan/tilt commands are open-ended: pan_left (or any direction) starts the motor and it keeps moving until you send stop. This matches how AV control surfaces and joystick consoles drive PTZ cameras and is intentional. The driver does not auto-stop on a timeout — your macro, joystick, or UI must send stop.

zoom_in / zoom_out are also open-ended; use zoom_stop to halt.

Pan speeds are 1–24, tilt speeds are 1–23 per the VISCA spec. Zoom variable speed is 0–7 (0 slowest, 7 fastest).

Presets

preset_save / preset_recall / preset_delete take a preset arg in the range 0–127 per the VISCA spec, but real-world camera support is narrower:

  • All cameras: 0–9.
  • Most commercial PTZs (PTZOptics, Vaddio, Sony): 0–127.
  • A few older Lumens / Marshall: 0–15.

If preset_recall returns an error for a high number, drop to a lower preset.

Known limitations / not yet supported

  • Read-back of currently-selected preset (CAM_MemoryInq) is not exposed.
  • Image-control inquiries (iris, gain, shutter, exposure) are not exposed. This is camera-specific anyway — many cameras override the standard VISCA exposure layout.
  • VISCA-IP TCP mode is not supported. Configure the camera for UDP mode.
  • VISCA daisy-chain addressing (cameras 2–7) is not supported — the driver always targets address 0x81. Most over-IP installs are one camera per IP.
  • Class 2 VISCA extensions like CAM_Color, CAM_ColorEnhancement, and CAM_AutoTracking are not exposed.

Troubleshooting

SymptomLikely cause
Every command times outCamera is set to TCP-mode VISCA-IP, not UDP. Switch the camera to UDP mode.
Commands succeed but the camera does not moveCamera is in IR-only or local-only mode. Re-check the camera menu; on some PTZs ir_off is required before IP commands take effect.
preset_recall returns command not executablePreset number exceeds what the camera supports. Drop to 0–9 and re-test.
pan_left works but pan_right does not respondAn earlier command left the camera moving. Send stop first.
Status sometimes lags by a few secondsUDP packet was lost. The next status poll catches up. To reduce drift, lower status_interval.
Zoom inquiry returns a value but the slider is wrong scaleCamera's zoom range is not exactly 0–16384. Use zoom_position as a relative indicator; absolute scale varies by model.