Streamie: IP Camera Streamingv4.15.1
Released July 7, 2026Major
iOS
What changed
- New featureAdded support for UniFi Protect third-party ONVIF camera RTSP data.
- UXImproved camera discovery labels using metadata like display name and market name.
- New featureRevised third-party camera streaming to use local-only Protect-exposed streams via local API.
- UXUpdated UniFi configuration UI to clarify unconfigured or unavailable stream states.
- PerformanceFixed numerous concurrency races and crashes in VideoToolbox, Chinstrap, and SMB client.
- UXRefactored toolbar hover and touch visibility handling for better gesture control.
- PerformanceHardened H.264 RTP parsing against malformed or empty payloads.
- PerformanceFixed stream profile view lifecycle and error overlay attachment to prevent layout state growth.
- PerformanceDisabled AVKit automatic Now Playing updates to prevent MediaRemote abort crashes.
- PerformanceReworked local HTTP server and Nest WebRTC teardown to prevent thread buildup and stale callbacks.
Original release notes
UniFi Protect - Added support for UniFi Protect third-party ONVIF camera RTSP data. - Improved camera discovery labels using richer Protect metadata like display name, market name, type, host, MAC, and port. - Revised third-party camera streaming to use local-only Protect-exposed streams via the local Integration API and X-API-KEY, avoiding direct third-party camera RTSP fallback. - Updated UniFi configuration/search UI to make unconfigured or unavailable third-party stream states clearer. - Redacted sensitive local API key data from debug output. Streaming/UI Behavior - Disabled UIKit’s fragile hidesBarsOnSwipe path while streaming after a nav-bar gesture crash. - Refactored toolbar hover/touch visibility handling so explicit swipes are not immediately undone by hover timers. - Fixed stream profile view lifecycle cleanup so retry/cancel paths detach old profile views and do not grow Auto Layout state. - Fixed stream error overlay attachment so repeated failures update the existing overlay instead of embedding duplicate constrained views. Crash/Concurrency Hardening - Fixed Chinstrap reachable-cache races by serializing reachable mapping/timer state and using captured identifiers. - Fixed VideoToolbox decoder completion/backpressure races by replacing a shared semaphore with per-waiter tracking and making completion/session-leave paths idempotent. - Held the VideoToolbox session lock through decoded-frame callbacks to avoid shutdown racing frame delivery. - Fixed SMB client cache races by serializing SMB2Manager ownership and invalidating only the manager instance that failed. - Fixed startup Penguin client crashes by avoiding late getPenguin() singleton force unwraps during delayed startup work. - Fixed stream start lifecycle races by sequencing starts, snapshotting source/profile state, and ignoring stale callbacks. - Fixed Krill status logging races by serializing status access and adding explicit CustomStringConvertible. - Hardened H.264 RTP parsing against empty payloads, zero-length STAP-A fragments, and short FU-A packets. - Guarded account-scoped UserDefaults access when no account/public key is active. - Reworked local HTTP server launch/stop lifecycle to avoid Perfect thread buildup and stale lifecycle callbacks. - Fixed Nest WebRTC teardown by adding explicit hangup/cleanup and guarding stale callbacks. - Replaced the intentional remote-admin…