All notable changes to this project are recorded here. The format follows Keep a Changelog and this project adheres to Semantic Versioning.
0.4.0 — Profile S compliance
- ONVIF Profile S v1.3 conformance. Every device-side mandatory feature in Profile S Specification v1.3 §7.1–§7.13 is implemented. The README headline and CLI/TUI/GUI surfaces now claim Profile S compliance.
- §7.7 Event Handling — WS-BaseNotification push subscriptions (
GYE-77). The event service now acceptswsnt:Subscriberequests, validatesConsumerReference, fansNotifyPOSTs out to the registered consumer asynchronously, and force-expires consumers that exceed the configured consecutive-failure threshold. Pull-point and push subscriptions share one keyed registry but count against separate capacity caps. - §7.9 MJPEG over RTSP (
GYE-76). The embedded RTSP server gains anMJPEGSource;kind=fileprofiles transparently transcode through a bundled ffmpeg helper, and the Raspberry Pi build channel exposes the Pi ISP secondary stream as MJPEG.GetVideoEncoderConfigurationOptionsadvertises theJPEGoption block andGetGuaranteedNumberOfVideoEncoder Instancesreports a non-zeroJPEGinstance count. - Profile S conformance validation harness.
just e2eexercises every Profile S mandatory operation, including the new event push and metadata configuration paths, against a running simulator. The DTT (ONVIF Device Test Tool) workflow is documented under "Profile S conformance validation" in the README. - CHANGELOG.md. First release of this file; v0.4.0 is the baseline entry.
- Task runner migrated from
maketojust(GYE-79). The legacyMakefileremains as a deprecation wrapper that forwards every target to the matchingjustrecipe. - CLI
--helpandversionnow show the Profile S compliance claim. The TUI status bar and GUI footer both surface "ONVIF Profile S v1.3 compliant".
- RTSP live source no longer flips
readybefore the first IDR, so DESCRIBE responses never expose a pre-keyframe SDP. - SPS/PPS are repeated in-band on every outgoing IDR for clients that miss the SDP-borne copy.
rpicameraContrast/Saturation/Sharpness defaults are aligned with the upstreammtxrpicamsemantics (1.0 = neutral).
See git history for pre-v0.4.0 changes — entries before this changelog was introduced are tracked in commit messages and PR descriptions.