{"id":34218115,"url":"https://github.com/jfsmig/onvif","last_synced_at":"2025-12-15T22:48:40.567Z","repository":{"id":89360054,"uuid":"581298730","full_name":"jfsmig/onvif","owner":"jfsmig","description":"ONVIF SDK and CLI to manage cameras in Go","archived":false,"fork":false,"pushed_at":"2023-10-11T23:20:06.000Z","size":1995,"stargazers_count":5,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-03T11:11:57.557Z","etag":null,"topics":["camera","camera-api","go","golang","golang-library","onvif","onvif-client","onvif-library","onvif-protocol","wsdiscovery"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jfsmig.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-22T19:56:51.000Z","updated_at":"2025-07-03T17:31:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"9a31d4b9-a002-41f3-ad2e-3cd5e444715b","html_url":"https://github.com/jfsmig/onvif","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jfsmig/onvif","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfsmig%2Fonvif","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfsmig%2Fonvif/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfsmig%2Fonvif/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfsmig%2Fonvif/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfsmig","download_url":"https://codeload.github.com/jfsmig/onvif/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfsmig%2Fonvif/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27757475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-15T02:00:09.782Z","response_time":96,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["camera","camera-api","go","golang","golang-library","onvif","onvif-client","onvif-library","onvif-protocol","wsdiscovery"],"created_at":"2025-12-15T22:48:39.825Z","updated_at":"2025-12-15T22:48:40.558Z","avatar_url":"https://github.com/jfsmig.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go OnVif Client\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/jfsmig/onvif/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/jfsmig/onvif/tree/master)\n[![CodeQL](https://github.com/jfsmig/onvif/actions/workflows/codeql.yml/badge.svg)](https://github.com/jfsmig/onvif/actions/workflows/codeql.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)\n\nSimple management IP-devices cameras that honor the [ONVIF Protocol](https://www.onvif.org/) protocol.\n\nThe present repository is a fork of [goonvif](https://github.com/use-go/goonvif) that quickly evolved. \nBecause of the need for quickly merged changes, the link to the upstream has been cut.\n\n## CLI tools\n\nFor the convenience and testing purposes, a [CLI](https://en.wikipedia.org/wiki/Command-line_interface) tool ships\nwith the repository to help discovering and fetching information from devices.\n\n```console\nonvif-cli COMMAND [SUBCOMAND] [ARGUMENTS...]\nCOMMAND:\n  discover                 perform a web-service discovery on the local networks and\n                           reports one line (IP:PORT CRLF) per device that responded\n  dump SUBCOMMAND IP:PORT  Prints a single JSON object with a configuration dump\n                           for the given camera\n  SUBCOMMAND: \n    all         Prints the full configuration dump, all sections included\n    media       Prints only the media section\n    event       ...\n    ptz         ...\n    device      ...\n```\n\n## SDK\n\nA High Level go package aims at fetching information from the devices:\n- [github.com/jfsmig/onvif/sdk](https://pkg.go.dev/github.com/jfsmig/onvif/sdk)\n\nLow-Level go packages implement the OnVIF unitary SOAP calls. For each call :\n- [github.com/jfsmig/onvif/device](https://pkg.go.dev/github.com/jfsmig/onvif/device)\n- [github.com/jfsmig/onvif/event](https://pkg.go.dev/github.com/jfsmig/onvif/event)\n- [github.com/jfsmig/onvif/ptz](https://pkg.go.dev/github.com/jfsmig/onvif/ptz)\n- [github.com/jfsmig/onvif/Imaging](https://pkg.go.dev/github.com/jfsmig/onvif/Imaging)\n- [github.com/jfsmig/onvif/media](https://pkg.go.dev/github.com/jfsmig/onvif/media)\n\nHelpers:\n- [github.com/jfsmig/onvif/networking](https://pkg.go.dev/github.com/jfsmig/onvif/networking)\n  implements the low-level SOAP connectivity\n- [github.com/jfsmig/onvif/ws-discovery](https://pkg.go.dev/github.com/jfsmig/onvif/ws-discovery)\n  implements the probing of the LAN network interfaces. Please refer to the CLI tools `onvif-cli discover NIC`\n\n### Beginner's Guide\n\n```go\nparams := networking.ClientParams{\n    Xaddr:      \"\",\n    Username:   os.Getenv(\"ONVIF_USERNAME\"),\n    Password:   os.Getenv(\"ONVIF_PASSWORD\"),\n    HttpClient: nil,\n}\nsdkDev, err := sdk.NewDevice(params)\nif err != nil { /* Not a reachable OnVif device */ }\n```\n\n### Auto-generated code instead of generics\n\nThe low level packages provide one function per OnVIF SOAP method.\nTheir purpose is to ease the persing and unpacking of the replies.\nThe problem was the requirement to name the reply field as the reply expected reply type.\nBut Golang's generics do not provide any sophisticated way to generate the name of a type instead of a type, as the\n`#` modifier does with `cpp`. That's why they have all been generated instead of replying on templated functions.\n\n## References\n\n* [OnVif](https://onvif.org)\n* [OnVif Specs](https://github.com/onvif/specs)\n* [OnVif Discussions](https://github.com/onvif/specs/discussions)\n\n### Clients SDK\n\nReferences\n  * https://github.com/topics/onvif-client\n  * https://github.com/topics/onvif-camera\n\nGo\n  * https://github.com/jfsmig/onvif\n  * https://github.com/use-go/onvif\n  * https://github.com/yakovlevdmv/goonvif\n\nPython\n  * https://github.com/quatanium/python-onvif\n  * https://github.com/abhi40308/onvif-django-client\n\nC\n  * https://github.com/mpromonet/v4l2onvif\n  * https://github.com/RichardoMrMu/gsoap-onvif\n  * https://github.com/torturelabs/monvif\n  * https://github.com/Quedale/OnvifDeviceManager\n\nRust\n\nSwift\n  * https://github.com/ms2138/ONVIFDiscovery\n  * https://github.com/ms2138/DahuaEvents\n  * https://github.com/rvi/ONVIFCamera\n\nJavascript\n  * https://github.com/patrickmichalina/onvif-rx\n  * https://github.com/ampretia/onvif-mqtt\n  * https://github.com/snow-tree/camera-probe\n\nPHP\n  * https://github.com/mapbuh/onvif-client-php\n\n### Client Apps_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfsmig%2Fonvif","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfsmig%2Fonvif","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfsmig%2Fonvif/lists"}