Skip to content
/ onvif Public

ONVIF SDK and CLI to manage cameras in Go

License

Notifications You must be signed in to change notification settings

jfsmig/onvif

Repository files navigation

Go OnVif Client

CircleCI CodeQL License: MIT

Simple management IP-devices cameras that honor the ONVIF Protocol protocol.

The present repository is a fork of goonvif that quickly evolved. Because of the need for quickly merged changes, the link to the upstream has been cut.

CLI tools

For the convenience and testing purposes, a CLI tool ships with the repository to help discovering and fetching information from devices.

onvif-cli COMMAND [SUBCOMAND] [ARGUMENTS...]
COMMAND:
  discover                 perform a web-service discovery on the local networks and
                           reports one line (IP:PORT CRLF) per device that responded
  dump SUBCOMMAND IP:PORT  Prints a single JSON object with a configuration dump
                           for the given camera
  SUBCOMMAND: 
    all         Prints the full configuration dump, all sections included
    media       Prints only the media section
    event       ...
    ptz         ...
    device      ...

SDK

A High Level go package aims at fetching information from the devices:

Low-Level go packages implement the OnVIF unitary SOAP calls. For each call :

Helpers:

Beginner's Guide

params := networking.ClientParams{
    Xaddr:      "",
    Username:   os.Getenv("ONVIF_USERNAME"),
    Password:   os.Getenv("ONVIF_PASSWORD"),
    HttpClient: nil,
}
sdkDev, err := sdk.NewDevice(params)
if err != nil { /* Not a reachable OnVif device */ }

Auto-generated code instead of generics

The low level packages provide one function per OnVIF SOAP method. Their purpose is to ease the persing and unpacking of the replies. The problem was the requirement to name the reply field as the reply expected reply type. But Golang's generics do not provide any sophisticated way to generate the name of a type instead of a type, as the # modifier does with cpp. That's why they have all been generated instead of replying on templated functions.

References

Clients SDK

References

Go

Python

C

Rust

Swift

Javascript

PHP

Client Apps_