Introduction to Dual Streaming
Generic Camera Driver Manual
Overview
Generic Camera Driver opens CGI commands and parameters required for camera-NVR integration to all users. In short, users by themselves can make Genius Vision NVR software support all available functionality to almost any IP camera, if the user have the knowledge of SDK documents or camera integration.
Generic Camera Driver is part of a bigger initiative called Genius Vision Community Platform that intend to improve global IP camera compatibility. By sharing IP camera connectivity information, you can contribute to the IP video community to help eveyone connecting to the same type of camera you're using. You also benefit from the knowledge shared by others. Visit our official website for more information: http://geniusvision.net/cp
Supported Functionality
Following functions are supported by Generic Camera Driver:
- Video streaming
- Dual stream
- PTZ
- DIO (digital input or alarm / digital output or relay control)
- Motion detection
Introduction to CGI Arguments
Many CGI commands require one or more arguments. All non-static arguments, e.g., pan/tilt/zoom values, should be provided as tokens so NVR can substitute them with user input from mouse, keyboard, or other input devices. Tokens must be strictly input in this format:
@{p1} @{p2} @{p3} @{p4} … |
For example:
/config/ptz_move_cont.cgi?p=@{p1}&t=@{p2} |
Introduction to Dual Streaming
Streaming configuration enables NVR software to acquire video streaming from cameras. There're 2 pages for streaming configuration; Steam 1 and Stream 2.
Stream 1 |
For recording. This is mandatory in most cases. |
Stream 2 |
[optional] For live view only. It usually has a lower resolution to reduce the loading of NVR server. NVR displays Stream 2 automatically when appropriate. |
StreamingMode |
Select network protocol for streaming: HTTP or RTSP |
RTSPPort |
Network port for RTSP streaming. 554 for most cameras. |
RTSP.UrlPath |
URL path for RTSP streaming. Additional arguments may be required using the question mark (?). Sample: rtsph2641080p |
HTTP.Codec |
Select the video encoding that matches camera setting. Use IE to log into the camera to see the setting. |
HTTP.UrlPath |
URL path for HTTP streaming. Additional arguments may be required using the question mark (?). Sample: /stream/mjpg.cgi?profile=1 |
Dual Stream
Options for Stream 2 is exactly the same as Stream 1. Note that different URL paths (or different arguments) are required. Request the same video stream twice not only makes no sense and sometimes crash the camera. It's okay for Stream 1 and Stream 2 to use different streaming modes, i.e., HTTP for one and RTSP for the other.
PTZ
PTZ configuration enables users to control camera motors in NVR (usually with a mouse). Most motorized models have 3 axes; pan, tilt, and zoom. These kinds of camera are called "speed dome" in video surveillance industry. Some models have only 2 axes; pan and tilt, or rarely, one axis; zoom.
Speed domes have many different operation modes and different cameras support different modes. As of version <Upcoming> only "free" mode is supported. In free mode the camera can go any directions with 2 arguments provided: X, Y as pan and tilt respectively.
PTMode |
Modes for pan/tilt. Cameras do not always support all modes. Please refer to camera SDK. free: In this mode camera goes any direction with X, Y supplied. click: Not supported yet. 4way: Not supported yet. 8way: Not supported yet. |
Free mode must be used with a mouse or joystick. It provides 360° with continuously variable speed. When dragging mouse on player, the yellow arrow indicates the direction and speed.
Stop Commands |
Stop Commands is mandatory for "free" mode and any other continuous mode. By "continuous", it means that the motor keeps moving after receiving moving commands, until receiving stopping commands. |
StopAll |
CGI command to stop all movements; pan, tilt, and zoom. Sample: /config/ptz.cgi?action=stop |
StopPT |
CGI command to stop pan and tilt. This is not used if StopAll is already provided. Sample: /config/ptz_move_cont.cgi?p=0&t=0 |
StopZ |
CGI command to stop zoom. This is not used if StopAll is already provided. Sample: /config/ptz_move_cont.cgi?z=0 |
Axes |
[optional] These are workaround options for axes issues. |
InvertPan |
Enable this if tilt control is upside down. |
InvertTilt |
Enable this if pan control is mirrored. |
InvertZoom |
Enable this if zoom control is reversed. |
XYExchange |
Enable this if pan and tilt are interchanged. |
PT Mode: Free |
These options are used only if "free" mode is selected for PTMode. |
URL |
CGI command for free mode pan and tilt. In this mode only one command is required for all directions. Sample: /config/ptz_move_cont.cgi?p=@{p1}&t=@{p2} |
MinX |
Minimum value for pan. |
MaxX |
Maximum value for pan. |
MinY |
Minimum value for tilt. |
MaxY |
Maximum value for tilt. |
Continuous Zoom In/Out |
These are required only if zoom is supported by camera. |
ZoomCont |
CGI command for continuous zoom. Continuous zoom usually uses one command for both zoom in and zoom out. Sample: /config/ptz_move_cont.cgi?z=@{p1} |
ZoomCont.Min |
Minimum value for zoom. |
ZoomCont.Max |
Maximum value for zoom. |
Preset Points |
These are required only if preset is supported by camera. |
PresetNumber |
Number of presets that camera supports. |
PresetSet |
CGI command to set current view as preset. One argument must be provided as preset No.. Sample: /config/ptz_preset.cgi?name=@{p1}&act=add |
PresetGoto |
CGI command to recall preset point. One argument must be provided as preset No.. Sample: /config/ptz_preset.cgi?name=@{p1}&act=go |
DIO / Motion
Generic Camera Driver only supports cameras with CGI commands to poll DIO or motion states. States embedded in multipart HTTP stream cannot be read with Generic Camera Driver.
NumberOfInputs |
Total number of digital inputs. |
NumberOfOutputs |
Total number of digital outputs. |
PollInterval |
Interval between each polling. DIO in NVR is more real-time with a short time. But some cameras can't withstand too frequent CGI calling and may hang or crash. |
MotionPollURL |
CGI command to get status of motion detection. |
PatternMotion |
Text pattern to match for motion detected. |
Digital Inputs |
Alarms or sensors. |
GetStatus |
CGI command to get states of digital inputs. |
PatternOn |
Text pattern to match for active digital inputs. One argument must be provided as port index if there're more than one ports. Sample: Input@{p1}=0 |
PatternOff |
Text pattern to match for inactive digital inputs. Sample: Input@{p1}=1 |
Index |
DIO ports are indexed differently in camera models. It's either 0 based or 1 based. Select the indexing system matches that of camera. |
Digital Outputs |
Relays or switches. |
GetStatus |
[optional] CGI command to get states of digital outputs. Can be omitted if inputs and outputs share the same CGI command. |
PatternOn |
Text pattern to match for active digital outputs. One argument must be provided as port index if there're more than one ports. Sample: Alarm Out@{p1} : Enable |
PatternOff |
Text pattern to match for inactive digital outputs. Sample: Alarm Out@{p1} : Disable |
Index |
DIO ports are indexed differently in camera models. It's either 0 based or 1 based. Digital outputs may be indexed independently or mixed with inputs. Select "GPIO" indexing system if they are mixed with inputs. For example, Outputs indexed independently looks like this: Relay1, Relay2, Relay3... Outputs mixed with inputs: 1:in, 2:in, 3:out, 4:in, 5:out... |
SetOutputsOn |
CGI command to set digital output on. One argument must be provided as port index if there're more than one ports. Sample: /cgi-bin/io/output.cgi?port=@{p1}&action=1 |
SetOutputsOff |
CGI command to set digital output off. Sample: /cgi-bin/io/output.cgi?port=@{p1}&action=0 |
To verify DIO operation, use Tree View in left panel.