A profile-based ONVIF inventory has a blind spot: it only sees inputs that some profile references. A camera can have a video source with no profile bound to it — a second sensor, a spare input, a channel the installer never configured — and a profile-only scan will never mention it. That is what onvif-scan v0.4.0 closes.
Independent source enumeration
After imaging the profiles, the scanner now also queries GetVideoSources and GetVideoSourceConfigurations (Media1) — or GetVideoSourceConfigurations alone on Media2, which has no GetVideoSources operation at all. The report lists every source with its token, name and where the name came from, and marks which sources are not bound to any profile.
Two details matter:
- Sources are deduplicated by token, not by configuration. One physical source can carry several configurations (main and sub streams, for instance). Counting configurations as channels was a bug we already fixed in v0.2; the enumeration keeps that discipline — one source stays one source.
- The report makes no device-type inference. Several sources can mean a multi-sensor camera just as well as a recorder. The report states the count and the unbound marking and stops there. No guessing, no brand tables.
One protocol note, same shape as the v0.2 Media2 fix: the Media2 GetVideoSourceConfigurations request is a bare operation element — the operation is typed tr2:GetConfiguration, so both token children are optional and omitted when listing everything. No wrapper element.
Also in this release
The baseline diff now compares source token sets as a seventh change class, and the CSV gains source_count / unbound_source_count columns. 129 tests pass on a LAN host including full WS-Discovery end-to-end runs.
Still simulation-verified only — no real-camera reports yet. If you run it on real hardware, a sanitised device report through the repo's issue template helps more than a star.
Repo:
https://github.com/anguoyang/onvif-scan
Release: