Skip to content

fix: make ONVIF/Majestic/audio work with real OpenIPC cameras#29

Merged
keyldev merged 4 commits into
mainfrom
fix/camera-onvif-majestic-grid-nav
Jun 24, 2026
Merged

fix: make ONVIF/Majestic/audio work with real OpenIPC cameras#29
keyldev merged 4 commits into
mainfrom
fix/camera-onvif-majestic-grid-nav

Conversation

@keyldev

@keyldev keyldev commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Majestic: detect via config.json (info.json is the web UI's HTML on some
    firmwares) and tolerate a non-JSON info.json instead of throwing
  • ONVIF: 8s WCF binding timeouts + catch TimeoutException so a broken
    onvif_simple_server fails fast rather than hanging the probe for 60s
  • Android: enable opus/pcm_mulaw/pcm_alaw FFmpeg decoders so camera audio
    plays on the phone (requires rebuilding the native libs)
  • Grid: Back from a camera returns to the originating page (grid vs library)
  • Desktop: persist and restore main window position/size/maximized state
  • Grid: add 4x4 and 5x5 layouts (up to 25 tiles)
  • Video: route FFmpeg native av_log to ILogger and append the real cause
    (401, connection refused, ...) to FfmpegException messages
  • Analytics: map detection boxes into the letterboxed video rect via CameraTileViewModel.SourceAspect
  • ShowRawConfigEditorAsync takes a validateJson flag; the Edit-over-SSH path passes false so Apply no longer rejects majestic.yaml as "invalid JSON" and silently refuses to save
  • drop JSON syntax highlighting when editing YAML
  • IAudioBackchannelClient.ProbeAsync: lightweight OPTIONS+DESCRIBE capability check (no SETUP/PLAY); RtspBackchannelClient implements it
  • camera page probes the backchannel once on activation and shows a hint when the camera advertises none, instead of a silently disappearing talk button

Related

Type

  • Bug fix
  • Feature
  • Refactor / cleanup
  • Docs / CI
  • Other:

Checklist

  • Builds with 0 warnings (TreatWarningsAsErrors=true).
  • Tests pass (dotnet test); new Core logic has unit tests.
  • No layering violation — App references Core only (Infrastructure / Video / Devices wired via DI in a head).
  • Scope stays within one phase (didn't pull work from a later phase's "Не входит").
  • README / docs updated if public commands, options, or setup changed.

Platforms tested

  • Windows
  • Linux
  • macOS
  • Android
  • iOS
  • CI build only

Screenshots / notes

keyldev added 4 commits June 24, 2026 18:47
- Majestic: detect via config.json (info.json is the web UI's HTML on some
  firmwares) and tolerate a non-JSON info.json instead of throwing
- ONVIF: 8s WCF binding timeouts + catch TimeoutException so a broken
  onvif_simple_server fails fast rather than hanging the probe for 60s
- Android: enable opus/pcm_mulaw/pcm_alaw FFmpeg decoders so camera audio
  plays on the phone (requires rebuilding the native libs)
- Grid: Back from a camera returns to the originating page (grid vs library)
- Desktop: persist and restore main window position/size/maximized state
- Grid: add 4x4 and 5x5 layouts (up to 25 tiles)
- Video: route FFmpeg native av_log to ILogger and append the real cause
  (401, connection refused, ...) to FfmpegException messages
- Analytics: map detection boxes into the letterboxed video rect via
  CameraTileViewModel.SourceAspect
- ShowRawConfigEditorAsync takes a validateJson flag; the Edit-over-SSH path
  passes false so Apply no longer rejects majestic.yaml as "invalid JSON"
  and silently refuses to save
- drop JSON syntax highlighting when editing YAML
- IAudioBackchannelClient.ProbeAsync: lightweight OPTIONS+DESCRIBE capability
  check (no SETUP/PLAY); RtspBackchannelClient implements it
- camera page probes the backchannel once on activation and shows a hint when
  the camera advertises none, instead of a silently disappearing talk button
@keyldev keyldev merged commit f0d408b into main Jun 24, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant