Skip to content

Releases: mickeyzzc/onvif-go

v2.5.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 22:39
9bfa92b

What's Changed

  • feat(server): basic-notification interface — wsnt:Subscribe + push Notify by @xiqing85 in #138
  • release: v2.5.0 — the server basic-notification interface by @mickeyzzc in #139

Full Changelog: v2.4.1...v2.5.0

v2.4.1

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:12
c0b381c

What's Changed

  • fix(events): Notify decoding loses field dialects — wrapped envelopes, literal Name/Value items, empty heartbeats by @mickeyzzc in #137

Full Changelog: v2.4.0...v2.4.1

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 10:28
ac34934

What's Changed

  • Add standard motion-topic parsing to events by @genelee26 in #131
  • feat(device): typed time-sync primitives — GetDeviceTime, SetDeviceTime, SetNTPServer, ErrNoCredentials by @mickeyzzc in #132
  • feat(discovery): listener filtering — built-in ONVIF gate + Types/Scopes constraints by @mickeyzzc in #133
  • feat(events): WS-BaseNotification push receiving — Subscribe/Renew/Unsubscribe, Notify parsing, consumer handler, managed renew loop by @mickeyzzc in #134
  • docs: capability-package documentation + facade aliases for the push/time-sync/filter surface by @xiqing85 in #135
  • release: v2.4.0 by @xiqing85 in #136

New Contributors

Full Changelog: v2.3.0...v2.4.0

v2.3.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 15:01
55cb852

onvif-go v2.3.0 — the client/server completion capability package

EN — The client grows the PTZ/Media2/analytics/imaging/DeviceIO families (Profile-T path included, with xs:duration handling and an Initialize Media2-endpoint probe that respects the GetServices ver20/media address on dual-face devices). The server's virtual camera expands: DeviceIO (relays/digital inputs behind a new WithRelayController host seam — honest empty sets instead of fabricated demo I/O), the OSD store loop, honest empty audio sets, the Media2 (tr2) face, the ver10 encoder-configuration family, and SetSynchronizationPoint on both media faces firing a new WithKeyframeHook force-IDR seam. All caught/pinned by cross-library interop against the onvif-rs twin. 825+ tests, coverage floor 80%, -race clean.

中文 —— 客户端补齐 PTZ/Media2/analytics/imaging/DeviceIO 操作族(含 Profile T 路径、xs:duration 处理,Initialize 的 Media2 端点探测遵循 GetServices 的 ver20/media 广告——双面设备优先专用地址)。服务端虚拟相机扩展:DeviceIO(继电器/数字输入,新增 WithRelayController 宿主接缝——诚实空集而非演示数据)、OSD 存储闭环、诚实空音频集、Media2(tr2)面、ver10 编码器配置族,以及双媒体面的 SetSynchronizationPoint 触发新的 WithKeyframeHook 强制 I 帧接缝。全部经与 onvif-rs 孪生的跨库互操作实测钉板。825+ 测试、覆盖率地板 80%、-race 干净。

Highlights / 要点

  • Client: PTZ completion (#111), Media2 completion (#110), analytics rules write family + imaging + DeviceIO (#112-#114)
  • Server: virtual camera expansion — DeviceIO/OSD/audio sets/Media2 face (#115), WithRelayController seam (#120)
  • Fixes: Media2 endpoint discovery on dual-face devices (#122), media encoder family + sync-point seam (#123), Media2 GetServiceCapabilities (#124)

Full changelog: https://github.com/mickeyzzc/onvif-go/blob/main/CHANGELOG.md

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 04:23
48adfe0

onvif-go v2.2.0 — PTZ parity closure

The Rust twin's PTZ lead is closed: the server side now serves the
full preset/configuration family, and the client decodes what it
fetches.

Server

  • SetPreset / RemovePreset behind an optional provider.PTZPresetWriter — the simulator ships a mutable preset store (set → list → goto → remove end to end), and GetPresets prefers an optional PTZPresetReader with static-configuration fallback.
  • GetConfigurations / GetNodes served with WSDL-correct namespaces (tptz wrappers, ver10/schema children; PTZNode token attribute per tt:DeviceEntity). The conformance PTZ matrix drives the whole family client↔simulator.

Client

  • PTZ().GetConfigurations now decodes pan/tilt and zoom limits (previously parsed and dropped).

CI

  • Library coverage gate raised 70% → 80% statements (#107) — the conformance/ns-contract/fuzz suites put the measured total at 85.5%.

Twin release: onvif-device-rs v0.7.0.


中文说明

onvif-go v2.2.0 —— PTZ 能力对齐收官

补齐与 Rust 孪生的最后一项 PTZ 差距:服务端预置位/配置族齐装,客户端不再丢字段。

  • 服务端:SetPreset / RemovePreset(可选 provider.PTZPresetWriter,模拟器内置可变预置位存储,set→list→goto→remove 全链路);GetConfigurations / GetNodes(WSDL 正确命名空间);conformance PTZ 矩阵客户端↔模拟器全族驱动。
  • 客户端:PTZ().GetConfigurations 解码 pan/tilt 与 zoom 限位(此前解析后丢弃)。
  • CI:库覆盖率门槛 70% → 80%(#107,实测 85.5%)。

孪生版本:onvif-device-rs v0.7.0。

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 01:07
17c02f1

onvif-go v2.1.0 — the wire-format correctness release

English · 中文

Ground truth is now the official WSDL/XSD set
(onvif/specs): every element this
library sends or serves sits in the namespace the schemas assign it.
The headline fix closes #90
end to end — strict devices (Dahua &co.) previously parsed empty
PTZ/imaging/certificate payloads, answered HTTP 200 and silently did
nothing — and a follow-up WSDL audit corrected the remaining
misassignments in both directions, including a conformant GetScopes
shape and storage payloads.

On top of the fixes, three new service surfaces and TLS:

  • Media2 client (#103) — onvif.Client.Media2(), the codec-agnostic
    configuration model: GetVideoEncoderConfigurationOptions reports one
    entry per supported encoding with Encoding as a free media subtype
    name — the H.265/AV1 answer; profiles, configurations, and
    SetVideoEncoderConfiguration with verbatim encoding pass-through.
  • Analytics client (#99) — onvif.Client.Analytics(): the Profile M
    configuration core (rules + analytics modules CRUD).
  • Metadata stream parser (#102) — new metadata package decoding
    tt:MetadataStream documents (frames, tracked objects, bounding boxes,
    polygons, geo locations) — the Profile M analytics output channel.
  • Server TLS (#98) — Config.TLSCertFile/TLSKeyFile serve the
    listener over HTTPS (Profile T baseline); Start now binds explicitly,
    so ListenAddr() is observable with Port: 0.
  • Events that keep their promises (#101) — GetEventProperties answers
    the spec-complete form, and the advertised topic dialects
    (Concrete/ConcreteSet with |/* expressions) are now honored in
    what CreatePullPointSubscription actually delivers.
  • Conformance armor (#95/#96) — client↔simulator loopback across the
    full operation matrix, plus native fuzz targets driving the real
    per-op parsers against hostile bodies.

Breaking within the v2 line (deliberately minor-versioned — the
removed field never worked against conformant devices): the wire-format
fixes change request/response bytes on the affected surfaces; GetScopes
moves from the Scopeitem attribute to the schema's
ScopeDef/ScopeItem elements; and the phantom
StorageConfigurationData.Type field (no WSDL counterpart — no
conformant device ever populated it) is removed from the public model.

The bundled CLIs report 2.1.0. Toolchain floor: go1.26.6 (stdlib
security fixes; govulncheck-clean).

Artifacts: the four CLIs for linux/amd64, linux/arm64, linux/arm,
darwin/amd64, darwin/arm64, and windows/amd64, with SHA256SUMS.

Full details:
CHANGELOG.md.


中文

本版是“线格式正确性”版本:ground truth 换成官方 WSDL/XSD 集
(onvif/specs),本库收发的每个元素
都落在 schema 指定的命名空间里。头条修复把
#90 端到端关闭——
严格设备(大华等)此前解析出空载荷、回 HTTP 200 然后静默不动——
后续 WSDL 审计又纠正了双向残余错标,包括合规的 GetScopes 形状与
storage 载荷。

修复之外,三个新服务面 + TLS:

  • Media2 客户端(#103)——onvif.Client.Media2(),编解码无关的
    配置模型:GetVideoEncoderConfigurationOptions 按支持的编码逐条
    上报、Encoding 是自由媒体子类型名——H.265/AV1 的答案;含
    profiles、配置读写(编码名原样透传)。
  • Analytics 客户端(#99)——onvif.Client.Analytics():Profile M
    配置核心(规则与分析模块 CRUD)。
  • Metadata 流解析器(#102)——新 metadata 包解码
    tt:MetadataStream 文档(帧、跟踪目标、包围盒、多边形、地理位置)
    ——Profile M 分析输出通道。
  • 服务端 TLS(#98)——Config.TLSCertFile/TLSKeyFile 走 HTTPS
    (Profile T 基线);Start 显式绑定监听,Port: 0 时
    ListenAddr() 可观察。
  • 说到做到的 events(#101)——GetEventProperties 应答规范完整
    形态,且宣告的主题方言(Concrete/ConcreteSet,|/* 表达式)在
    CreatePullPointSubscription 实际投递中真正生效。
  • 一致性装甲(#95/#96)——client↔simulator 全操作矩阵回环 +
    原生 fuzz 目标喂真实 per-op 解析器。

v2 线内的破坏性(有意按 minor 发版——被删字段对合规设备从未
生效过):线格式修复改变受影响面的请求/响应字节;GetScopes 从
Scopeitem 属性改为 schema 的 ScopeDef/ScopeItem 元素;幻影字段
StorageConfigurationData.Type(WSDL 无对应、合规设备从不填充)从
公开模型移除。

两个 CLI 版本号对齐 2.1.0。工具链地板 go1.26.6(标准库安全修复,
govulncheck 干净)。

产物:四个 CLI 的 linux/amd64、linux/arm64、linux/arm、darwin/amd64、
darwin/arm64、windows/amd64 版本,附 SHA256SUMS。

完整明细:
CHANGELOG.md。

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 22:07
8deb379

onvif-go v2.0.0 — first stable release

English · 中文

The v2 line graduates from its rc series. v2.0.0 ships the complete
v2.0.0-rc6 capability pack — production hardening guide, the
library-neutral metrics seam, the ≥70% coverage gate, SOAP fuzz targets,
the authentication ladder that survives weird firmware — plus everything
landed since rc6:

  • Events pull-point service (server, #83/#84) — SupportEvents=true
    now really serves the advertised events_service XAddr:
    CreatePullPointSubscription / PullMessages (long-polling) / Renew
    / Unsubscribe on per-subscription addresses, canonical double-layer
    notification payloads, and a PublishEvent seam for hosts to inject
    their own analytics events. WSPullPointSupport flips to true — the
    advertisement and the implementation finally agree.
  • Canonical double-layer notification parsing (client, #82/#85) —
    spec-faithful cameras wrap tt:Message inside wsnt:Message;
    PullMessages now reaches through the wrapper so MotionAlarm
    State/Score actually arrive. The lax single-layer form keeps working.
  • Three-platform CI matrix (#86) — the full -race suite now runs
    on Linux, Windows, and macOS. Its very first run caught (and fixed) a
    macOS multicast-send gap in the discovery test guard.
  • Docs batch (#87) — copy-pasteable v2 import paths in server/README
    (they used to point at the upstream v1 module), a first-screen
    "Which onvif-go should I use?" decision table (upstream remains
    maintained and the table says so), and an explicit RTSP scope note.
  • The bundled CLIs (onvif-server, onvif-diagnostics) now report
    version 2.0.0.

Artifacts: the four CLIs for linux/amd64, linux/arm64, linux/arm,
darwin/amd64, darwin/arm64, and windows/amd64, with SHA256SUMS.

Full details: CHANGELOG.md ·
Migration from v1: MIGRATION.md
(mostly an import-path swap).


中文

v2 线从 rc 系列毕业。v2.0.0 = rc6 完整能力包(生产加固指南、库中立
metrics 接缝、≥70% 覆盖率门禁、SOAP fuzz 目标、扛得住怪固件的鉴权梯队)

  • rc6 之后合入的全部内容:
  • Events PullPoint 服务(服务端,#83/#84)——SupportEvents=true
    真正服务所宣告的 events_service XAddr:订阅地址上的
    CreatePullPointSubscription / PullMessages(长轮询)/ Renew /
    Unsubscribe,规范双层通知线格式,宿主经 PublishEvent 接缝注入
    自家分析事件;WSPullPointSupport 翻转为 true——宣告与实现终于一致。
  • 规范双层通知解析(客户端,#82/#85)——规范相机把 tt:Message
    包在 wsnt:Message 里;PullMessages 现在能穿透包装层拿到
    MotionAlarm 的 State/Score。宽松单层形状继续兼容。
  • 三平台 CI 矩阵(#86)——完整 -race 套件跑 Linux/Windows/macOS,
    首跑即抓到并修掉 macOS 多播发送缺口。
  • 文档批次(#87)——server/README 示例改回本仓 /v2 导入路径
    (原来指向上游 v1,复制粘贴编译不过)、首屏“该用哪个 onvif-go?”
    决策表(如实注明上游仍在维护)、RTSP 范围说明句。
  • 两个 CLI(onvif-server、onvif-diagnostics)版本号对齐 2.0.0。

产物:四个 CLI × 六平台(linux/amd64、linux/arm64、linux/arm、
darwin/amd64、darwin/arm64、windows/amd64)+ SHA256SUMS。

完整变更:CHANGELOG.md ·
v1 迁移:MIGRATION.md
(多数情况只需换 import 路径)。

v2.0.0-rc6

Choose a tag to compare

@github-actions github-actions released this 09 Sep 01:47
095f3ac

What's Changed

  • fix(download): typed status errors instead of "401" substring matching by @mickeyzzc in #13
  • refactor: architecture-mapped file layout; mermaid docs diagrams by @mickeyzzc in #14
  • docs: v2 architecture plan of record (en/zh) by @mickeyzzc in #26
  • refactor!: v2 module path and client package split (M1) by @mickeyzzc in #27
  • feat(server)!: v2 SOAP transport — request context, per-action auth, byte-predictable XML (M2) by @mickeyzzc in #28
  • feat(server)!: pluggable provider architecture — simulator becomes a swappable backend (M3) by @mickeyzzc in #29
  • feat(server)!: shared WS-Discovery codec + device-side responder (M4) by @mickeyzzc in #30
  • docs: v2 finalization — MIGRATION.md, rc1 changelog, v1-path sweep (M5) by @mickeyzzc in #31
  • test: comprehensive TDD backfill — 17-package suites, 4 real fixes, bounded-wait discipline by @mickeyzzc in #32
  • refactor!: move root package into onvif/ subdirectory by @mickeyzzc in #33
  • fix(server/soap): Created namespace variant + RawEnvelope channel (#39 #40) by @mickeyzzc in #41
  • feat(server): provider embedding surface — RTSPPort, GetScopes, snapshot chain (#34 #37 #36) by @mickeyzzc in #42
  • feat(server): embedding handler surface + device-local discovery XAddrs (#35 #38) by @mickeyzzc in #43
  • chore(changelog): fold Unreleased into v2.0.0-rc3 by @mickeyzzc in #44
  • fix(server): GetServices reports the Events service under SupportEvents (#46) by @mickeyzzc in #47
  • feat(server+discovery): dynamic advertise-host sources (#45) by @mickeyzzc in #48
  • test: client-service TDD backfill — six thin packages to wire-contract coverage by @mickeyzzc in #49
  • test: TDD backfill tail — registry/V2 mock, testutil self-tests, brokers, profile selection by @mickeyzzc in #50
  • test(events): fix panic-isolation flake under parallel-suite load by @mickeyzzc in #51
  • test: incremental full-mapping coverage — device caps/netif/services, media profiles/options by @mickeyzzc in #52
  • feat(examples): PullPoint event subscription example by @mickeyzzc in #53
  • docs(media): SelectSubProfile returns the main stream for an unresolvable token by @mickeyzzc in #54
  • fix!: library hygiene — empty default credentials, internal test helpers, fresh-slice defaults, synthetic testdata by @mickeyzzc in #55
  • docs: single-language README indexes + link guard tests by @mickeyzzc in #56
  • test(discovery): exact-count test sends its Hello exactly once by @mickeyzzc in #57
  • hard(security): bounded SOAP bodies, auth failure lockout, anonymous opt-in (P0) by @mickeyzzc in #70
  • fuzz: SOAP/XML fuzz targets for untrusted parse surfaces by @mickeyzzc in #71
  • docs: SECURITY.md — supported versions, disclosure flow, scope by @mickeyzzc in #72
  • feat(server): Config.Validate() with fail-fast in New by @mickeyzzc in #73
  • ci+test: library coverage gate (≥70%) + event subscription soak loop by @mickeyzzc in #74
  • feat(client): structured Logger option for SOAP client + discovery by @mickeyzzc in #75
  • feat(metrics): library-neutral observability seam by @mickeyzzc in #76
  • ci(release): publish a GitHub Release on tag by @mickeyzzc in #77
  • docs: production deployment & hardening guide by @mickeyzzc in #78
  • release: v2.0.0-rc6 by @mickeyzzc in #79

New Contributors

Full Changelog: https://github.com/mickeyzzc/onvif-go/commits/v2.0.0-rc6