Releases: GyeongHoKim/onvif-simulator
Releases · GyeongHoKim/onvif-simulator
v0.4.0
Changelog
Features
- 945e70f: feat(GYE-77): add WS-BaseNotification push subscriptions (@GyeongHoKim)
- 41c32a2: feat(GYE-78): surface ONVIF Profile S claim in CLI, TUI, and GUI (@GyeongHoKim)
- c07bde7: feat(ffmpeg): embed ffmpeg transcoder for kind=file MJPEG (GYE-76) (@GyeongHoKim)
- 962558a: feat(mediasvc): advertise JPEG encoder options (Profile S §7.9.1) (GYE-76) (@GyeongHoKim)
- 7ab2724: feat(rpicamera): expose Pi ISP secondary MJPEG stream (GYE-76) (@GyeongHoKim)
- 043a238: feat(rtsp): TranscodingSource bridges ffmpeg into MJPEGSource (GYE-76) (@GyeongHoKim)
- 94b8368: feat(rtsp): add MJPEG codec dispatch and MJPEGSource (GYE-76) (@GyeongHoKim)
- f06db18: feat(simulator): auto-generate MJPEG sibling profiles per Profile S §7.9 (GYE-76) (@GyeongHoKim)
Bug Fixes
- 5bf4248: fix(GYE-77): normalize push knobs in UpdateConfig and refresh notifier (@GyeongHoKim)
- cb2e066: fix(GYE-77): validate Subscribe ConsumerReference URI (@GyeongHoKim)
- 4e5ddd1: fix(ffmpeg): clamp mpjpeg frame size and distinguish truncation (GYE-76) (@GyeongHoKim)
- 5b31b27: fix(ffmpeg): wait for stdout reader before closing pipe (@GyeongHoKim)
- 3256cac: fix(release): mark scripts/fetch-ffmpeg.sh executable (@GyeongHoKim)
- 2b39d5c: fix(release): skip comment lines in ffmpeg.sha256 lookup (@GyeongHoKim)
- ca53f6f: fix(rtsp): gate MJPEG ready on first packetizable frame (GYE-76) (@GyeongHoKim)
- a617a9e: fix(simulator): suppress duplicate MJPEG sibling derivation (GYE-76) (@GyeongHoKim)
Others
- 2ca6dfc: build(ffmpeg): integrate fetch-ffmpeg into Justfile and goreleaser (GYE-76) (@GyeongHoKim)
- 28443a7: build(just): windows fetch uses pwsh scripts (@GyeongHoKim)
- 70b94e2: build(just): windows ffmpeg-fetch uses pwsh script (@GyeongHoKim)
- a47d252: build(just): windows rpicam-fetch uses pwsh scripts (@GyeongHoKim)
- bef0cdb: build: migrate task runner from make to just (GYE-79) (@GyeongHoKim)
- 1b3d155: build: update wails bridge (@GyeongHoKim)
- a627aee: test(GYE-77): cover Subscribe and Notify push paths (@GyeongHoKim)
- 4e9054c: test(GYE-77): synchronize deliver result assertion (@GyeongHoKim)
- a5faea3: test(GYE-78): expand e2e for §7.7/§7.9/§7.13 Profile S coverage (@GyeongHoKim)
- ed74992: test(ffmpeg): drop unused-import shims (GYE-76) (@GyeongHoKim)
- 86bbff0: test: improve codecov patch coverage for MJPEG paths (GYE-76) (@GyeongHoKim)
v0.3.1
Changelog
Bug Fixes
- 6a2bc1e: fix(rpicamera): default Contrast/Saturation/Sharpness to 1.0 (@GyeongHoKim)
- 14f8c17: fix(rtsp): repeat SPS/PPS in-band on every outgoing IDR (@GyeongHoKim)
- ef99162: fix(rtsp): require current IDR before live ready (@GyeongHoKim)
- 691d896: fix(rtsp): stop SDP mutation after live ready (@GyeongHoKim)
v0.3.0
Changelog
v0.3.0-beta.4
Changelog
Bug Fixes
- a2dc5d5: fix(rtsp): forward capture NTP through to gortsplib (@GyeongHoKim)
- e2e2e6d: fix(rtsp): replay cached GOP to mid-stream joiners (@GyeongHoKim)
Others
- 74864ef: perf(rtsp): widen LiveSource AU buffer to 32 (@GyeongHoKim)
- 1898696: test(rtsp): cover LiveSource error and empty-cache replay paths (@GyeongHoKim)
- 4d5abed: test(rtsp): cover mid-GoP join with active producer (@GyeongHoKim)
v0.3.0-beta.3
Changelog
Bug Fixes
- b8bb2f4: fix(rtsp): populate H.264 SDP parameter sets from first IDR (@GyeongHoKim)
v0.3.0-beta.2
Changelog
Bug Fixes
- 5354b21: fix(rpicam): bump mtxrpicam to v2.5.6 for libcamera 0.7 support (@GyeongHoKim)
- ce21fb7: fix(rpicamera): address review on stderr-capture diagnostics (@GyeongHoKim)
- 098f729: fix(rpicamera): capture helper stderr for post-mortem diagnostics (@GyeongHoKim)
v0.3.0-beta.1
Changelog
Features
- a77f4d3: feat(auth): inject logger via Controller.SetLogger (@GyeongHoKim)
- 8cb53f7: feat(build): add Raspberry Pi build channel (@GyeongHoKim)
- 570e37e: feat(cli): wire log-level and log-file flags (@GyeongHoKim)
- 8472aad: feat(cli,version): add version subcommand reporting rpicam build tag (@GyeongHoKim)
- 663d03a: feat(config): add LoggingConfig schema (@GyeongHoKim)
- f30e7b4: feat(config): add kind discriminator and RPICamConfig (@GyeongHoKim)
- 199141e: feat(event): inject logger into Broker via BrokerConfig.Logger (@GyeongHoKim)
- b13a4c1: feat(gui): add slog ring handler for structured log panel (@GyeongHoKim)
- 1e347f8: feat(gui): bootstrap RecentLogs and subscribe to log:new (@GyeongHoKim)
- 142cbc5: feat(gui): delegate logger ownership to simulator (@GyeongHoKim)
- 6d3e05a: feat(gui): show structured simulator logs in Log screen (@GyeongHoKim)
- 1865562: feat(gui): wire LogExtras, RecentLogs, and log:new emitter (@GyeongHoKim)
- 5765cd3: feat(install): auto-detect rpi and ship rpi example (@GyeongHoKim)
- a814867: feat(obs): add file-only structured logger package (@GyeongHoKim)
- 0fec67f: feat(onvif): inject logger into ONVIF service handlers (@GyeongHoKim)
- 17382fa: feat(rpicamera): vendor mtxrpicam driver gated by rpicam tag (@GyeongHoKim)
- b6c2eaa: feat(rtsp): inject logger via WithLogger option (@GyeongHoKim)
- 4bd9d0e: feat(rtsp): introduce Source seam and live rpicam source (@GyeongHoKim)
- 44f0533: feat(simulator): own and wire root logger (@GyeongHoKim)
- 1177b13: feat(simulator,tui): expose kind selector through mutators and TUI (@GyeongHoKim)
Bug Fixes
- 3e97e0b: fix(build): point rpicam fetch at mediamtx-rpicamera repo, pin v2.4.3 (@GyeongHoKim)
- a731968: fix(gui): bound simulator.Stop with timeout on Wails exit (@GyeongHoKim)
- 6484827: fix(gui,devicesvc): dedupe RecentLogs, spy finally, wire tests (@GyeongHoKim)
- efde884: fix(gui,devicesvc): review fixes for bootstrap, listeners, op names (@GyeongHoKim)
- 12786fd: fix(manual): close obs.State on shutdown after PR review (@GyeongHoKim)
- ef58cc3: fix(manual): non-zero exit when pkgsite fails or exits early (@GyeongHoKim)
- 3cb081f: fix(obs): commit applyInternal level only after sinks ready (@GyeongHoKim)
- 3bd9436: fix(obs): defer retired sink close until Handle refs drain (@GyeongHoKim)
- c629e6e: fix(obs): retire sink generations before closing (@GyeongHoKim)
- 37bcf12: fix(rpicamera): guard short helper frames in runReader (@GyeongHoKim)
- add8b2f: fix(rpicamera): make Camera.Close idempotent (@GyeongHoKim)
- 184669b: fix(rpicamera,rtsp,simulator): address inline review comments (@GyeongHoKim)
Others
- da3d441: refactor(auth): errcheck, govet, goconst for JWT and op maps (@GyeongHoKim)
- 7d1a311: refactor(cli): errorlint, errors.Join, and goconst for config flags (@GyeongHoKim)
- 6cabd80: refactor(cli,obs,sim): errcheck in tests and discovery sends (@GyeongHoKim)
- 1c846b1: refactor(eventsvc): rename WithEventLogger to WithLogger (@GyeongHoKim)
- afb0233: refactor(gui): revive recover handling in Wails log slog bridge (@GyeongHoKim)
- f9ceed1: refactor(obs): goconst for log level literals (@GyeongHoKim)
- c444a69: refactor(onvif/devicesvc): goconst for GetWsdlUrl op (@GyeongHoKim)
- aac7538: refactor(onvif/mediasvc): goconst for SOAP ops and H264 (@GyeongHoKim)
- 4ebabac: refactor(rpicamera): address review nitpicks in camera_rpicam (@GyeongHoKim)
- ea34e92: refactor(rtsp): gosec G118 without yaml excludes (@GyeongHoKim)
- acba9aa: refactor(simulator): goconst for Manual and PT0S (@GyeongHoKim)
- 89ee0bc: refactor(tui): goconst for titles, lifecycle, log kinds (@GyeongHoKim)
- e20190a: test(auth,simulator): add jwt and discovery coverage tests (@GyeongHoKim)
- 2daf835: test(event): require both tokens in disabled-topic log check (@GyeongHoKim)
- 0ce10e3: test(rtsp): start/stop server with WithLogger(nil) (@GyeongHoKim)
- 11e9760: test(wsdiscovery): deflake multicast and cover logger listen path (@GyeongHoKim)
- a35444d: test: add coverage for obs, wsdiscovery UDP, RTSP, and simulator reload (@GyeongHoKim)
v0.2.1
Changelog
Bug Fixes
- 32dbd32: fix(auth): only coerce chain errors to ChallengeError for client auth failures (@GyeongHoKim)
- 82d1459: fix(auth): only wrap UsernameToken client auth failures in ChallengeError (@GyeongHoKim)
- 5df4c0b: fix(auth): preserve aggregated challenge headers on hard errors (@GyeongHoKim)
- 962a8fc: fix(onvif): emit ter: fault subcode per ONVIF Core §5.12 (@GyeongHoKim)
Others
- 3b1b688: build: add combined build target for cli and gui (@GyeongHoKim)
- 5722ebf: build: change go fmt to golangci-lint fmt (@GyeongHoKim)
- 2ec9a71: test(config): make EnsureExists stat-error case OS-aware (@GyeongHoKim)
v0.2.0
Changelog
Features
- 2b9da9f: feat(config): add media_file_path and rtsp_port for embedded RTSP (@GyeongHoKim)
- ebd8b68: feat(config): resolve config from OS user dir, auto-create on first run (@GyeongHoKim)
- d6105f5: feat(gui): add media file picker, swap rtsp input for browse dialog (@GyeongHoKim)
- f151784: feat(rtsp): embed RTSP server with mp4 loop playback (@GyeongHoKim)
- 253e273: feat(simulator): host RTSP server and derive stream uri (@GyeongHoKim)
- 68a901f: feat(tui): swap rtsp input for media file path (@GyeongHoKim)
Bug Fixes
- f2e4bc1: fix(cli): validate config subcommand before EnsureExists (@GyeongHoKim)
- 218b389: fix(config): compare effective rtsp_port against http_port (@GyeongHoKim)
- f14ecde: fix(config): default profiles is empty array, not nil (@GyeongHoKim)
- 3454e48: fix(config): per-instance UUID + race-safe EnsureExists (@GyeongHoKim)
- cf1fcd2: fix(simulator): set active config path only after EnsureExists ok (@GyeongHoKim)
- a0474a4: fix(simulator): use rtsp.CodecH264 constant for goconst (@GyeongHoKim)
- e8260d1: fix: validate Default and roll back SetPath on later failure (@GyeongHoKim)
Others
- b2a0e20: refactor(config): drop deprecated rtsp and encoder fields (@GyeongHoKim)
- d2860e2: test(e2e): verify embedded rtsp stream end-to-end (@GyeongHoKim)
- 1ca9ca0: test(tui): invoke save cmd once and guard against nil (@GyeongHoKim)
v0.1.0
Changelog
Features
- 712662c: feat(auth): add EventOperationClasses for ONVIF event access control (GyeongHo Kim gyeongho.dev@proton.me)
- 0e1166f: feat(auth): add HTTP Digest authenticator (RFC 2617/7616) (GyeongHo Kim gyeongho.dev@proton.me)
- 7fcd321: feat(auth): add JWT Bearer authenticator (RFC 6750/7519) (GyeongHo Kim gyeongho.dev@proton.me)
- 8d560b4: feat(auth): add MediaOperationClasses for Media service authorization (GyeongHo Kim gyeongho.dev@proton.me)
- c5ce615: feat(auth): add NonceCache for replay protection (GyeongHo Kim gyeongho.dev@proton.me)
- b3bf592: feat(auth): add OperationAuthorizer and config Controller (GyeongHo Kim gyeongho.dev@proton.me)
- dd11851: feat(auth): add Principal, Authenticator, Chain, UserStore (GyeongHo Kim gyeongho.dev@proton.me)
- a2ed994: feat(auth): add WS-UsernameToken authenticator (GyeongHo Kim gyeongho.dev@proton.me)
- 5dcdd5d: feat(auth): add access policy and device operation map (GyeongHo Kim gyeongho.dev@proton.me)
- e187001: feat(cli): implement serve, tui, config, event subcommands (GyeongHo Kim gyeongho.dev@proton.me)
- bf34b1b: feat(config): add RuntimeConfig and EventsConfig (GyeongHo Kim gyeongho.dev@proton.me)
- 2544507: feat(config): add Update/Upsert/Remove setter API (GyeongHo Kim gyeongho.dev@proton.me)
- d1b4b4d: feat(config): add media profile pass-through fields and mutation helpers (GyeongHo Kim gyeongho.dev@proton.me)
- 3a438a3: feat(devicesvc): add Capability field to ServiceDescriptor (GyeongHo Kim gyeongho.dev@proton.me)
- 1d391cf: feat(devicesvc): implement SetNetworkInterfaces (GyeongHo Kim gyeongho.dev@proton.me)
- bd8b4fd: feat(devicesvc): wire auth challenges and JsonWebToken capability (GyeongHo Kim gyeongho.dev@proton.me)
- 1f3764c: feat(event): add EventBroker and expand devicesvc Provider (GyeongHo Kim gyeongho.dev@proton.me)
- 39f2123: feat(eventsvc): add XML envelope structs and SOAP/XSD helpers (GyeongHo Kim gyeongho.dev@proton.me)
- d3bccc3: feat(eventsvc): add package doc, domain types, and Provider interface (GyeongHo Kim gyeongho.dev@proton.me)
- 976eda1: feat(eventsvc): implement EventServiceHandler with auth hook (GyeongHo Kim gyeongho.dev@proton.me)
- 921c636: feat(eventsvc): implement SubscriptionManagerHandler (GyeongHo Kim gyeongho.dev@proton.me)
- cd78752: feat(gui): scaffold Wails app and React frontend with Vitest harness (GyeongHo Kim gyeongho.dev@proton.me)
- 5b865f1: feat(mediasvc): add GetGuaranteedNumberOfVideoEncoderInstances (GyeongHo Kim gyeongho.dev@proton.me)
- 97d705c: feat(mediasvc): implement Metadata Configuration operations (GyeongHo Kim gyeongho.dev@proton.me)
- df3ebfc: feat(mediasvc): implement ONVIF Media Service for Profile S (GyeongHo Kim gyeongho.dev@proton.me)
- 7b12f9a: feat(simulator): add Device Management and Media data providers (GyeongHo Kim gyeongho.dev@proton.me)
- bd9d7dc: feat(simulator): add HTTP server lifecycle and discovery goroutine (GyeongHo Kim gyeongho.dev@proton.me)
- 75a2b80: feat(simulator): add config mutators with persist-then-apply semantics (GyeongHo Kim gyeongho.dev@proton.me)
- 1184a05: feat(simulator): add typed event triggers for Profile S topics (GyeongHo Kim gyeongho.dev@proton.me)
- 86c0e8f: feat(simulator): wire composition root with auth, broker, handlers (GyeongHo Kim gyeongho.dev@proton.me)
- f4a10a6: feat(tui): implement Bubble Tea TUI with six screens (GyeongHo Kim gyeongho.dev@proton.me)
- 7c3e2c6: feat: add Discovery config (GyeongHo Kim gyeongho.dev@proton.me)
- 7bf681f: feat: add ONVIF device service SOAP handler and provider contracts (GyeongHo Kim gyeongho.dev@proton.me)
- 753826c: feat: add shadcn components (GyeongHo Kim gyeongho.dev@proton.me)
- bd584ff: feat: implement loading and saving functionality (GyeongHo Kim gyeongho.dev@proton.me)
- d20bf77: feat: ws-discovery (GyeongHo Kim gyeongho.dev@proton.me)
Bug Fixes
- 23fb759: fix(auth): digest authentication does not work (GyeongHo Kim gyeongho.dev@proton.me)
- c946671: fix(ci): fix coverage workflow and codecov thresholds for GUI/TUI packages (GyeongHo Kim gyeongho.dev@proton.me)
- bb38a2c: fix(config): add ManualDateTimeUTC and fix SubscriptionTimeout (GyeongHo Kim gyeongho.dev@proton.me)
- 09e4ca0: fix(config): extend isValidSubscriptionTimeout to accept RFC3339 (GyeongHo Kim gyeongho.dev@proton.me)
- fca243c: fix(config): forbid RFC3339 timestamps in isValidSubscriptionTimeout (GyeongHo Kim gyeongho.dev@proton.me)
- bce3bd0: fix(devicesvc): align SetNetworkInterfaces with ONVIF WSDL (GyeongHo Kim gyeongho.dev@proton.me)
- 6819850: fix(devicesvc): bound request body and map decode errors to 400 (GyeongHo Kim gyeongho.dev@proton.me)
- b83894b: fix(devicesvc): fix RemoveScopes field and add IPv6 DNS support (GyeongHo Kim gyeongho.dev@proton.me)
- d397631: fix(devicesvc): preserve auth envelope access and advertise all services (GyeongHo Kim gyeongho.dev@proton.me)
- f2121b2: fix(devicesvc): rename GetScopes loop var to avoid receiver shadow (GyeongHo Kim gyeongho.dev@proton.me)
- 7bb792f: fix(devicesvc): use pointer fields for TimeZone/UTCDateTime omitempty (GyeongHo Kim gyeongho.dev@proton.me)
- b0dc963: fix(devicesvc): validate InterfaceToken in SetNetworkInterfaces (GyeongHo Kim gyeongho.dev@proton.me)
- 2897228: fix(devicesvc,config): address review feedback on SetNetworkInterfaces (GyeongHo Kim gyeongho.dev@proton.me)
- c3e81ac: fix(event): clone Topics slice in New/UpdateConfig; set sub.address (GyeongHo Kim gyeongho.dev@proton.me)
- d7e3087: fix(event): gate Publish on topic enabled, reject negative limit (GyeongHo Kim gyeongho.dev@proton.me)
- fe1af9d: fix(event): idempotent Start/Stop and lazy prune before max check (GyeongHo Kim gyeongho.dev@proton.me)
- 7130b82: fix(event): newSubscriptionID returns error on rand failure (GyeongHo Kim gyeongho.dev@proton.me)
- 08c729f: fix(event): remove leftover _ = id in Publish loop (GyeongHo Kim gyeongho.dev@proton.me)
- c58450d: fix(event): support absolute RFC3339 times in parseISO8601Duration (GyeongHo Kim gyeongho.dev@proton.me)
- 0b867be: fix(event): xml-escape attribute values in boolPropertyMessage (GyeongHo Kim gyeongho.dev@proton.me)
- e28ebb3: fix(eventsvc): return 400 when subscription ID is absent (GyeongHo Kim gyeongho.dev@proton.me)
- ae423fb: fix(eventsvc): use net/url to parse correctly (GyeongHo Kim gyeongho.dev@proton.me)
- 348c31d: fix(gui): fix EmptyDescription props type to match returned element (GyeongHo Kim gyeongho.dev@proton.me)
- ed687c9: fix(gui): only fall back to stub for missing-config errors in NewApp (GyeongHo Kim gyeongho.dev@proton.me)
- 1f721c5: fix(gui): update Wails bindings path and remove Windows-incompatible mkdir (GyeongHo Kim gyeongho.dev@proton.me)
- 1caf719: fix(lint): check error returns and remove unused parameter in auth_test (GyeongHo Kim gyeongho.dev@proton.me)
- 2f86da6: fix(lint): extract NonDiscoverable constant and use http.NoBody in auth tests (GyeongHo Kim gyeongho.dev@proton.me)
- 060b642: fix(lint): resolve errcheck, goconst, revive, err113, and govet issues in tui package (GyeongHo Kim gyeongho.dev@proton.me)
- 7d87306: fix(make): require frontend/dist before test-go and coverage (GyeongHo Kim gyeongho.dev@proton.me)
- ff1bfa8: fix(manual): make waitReady return error and pin pkgsite version (GyeongHo Kim gyeongho.dev@proton.me)
- afb3776: fix(manual): race waitReady against pkgsite exit + remove Run directly (GyeongHo Kim gyeongho.dev@proton.me)
- f405448: fix(media): implement CreateProfile and DeleteProfile providers (GyeongHo Kim gyeongho.dev@proton.me)
- 94e86b1: fix(mediasvc): omit cleared encode...