Release Notes for v4.1.0 (2024.08.02)

 

Ramblings

 

What was originally intended to be v4.0.1 mostly-just-stability update, ended up becoming v4.1.0 lots-of-cool-new-things update (in addition to the stability improvements).

 

Focus Mode — You can find the tutorial here. Basically, you can stream a Group of many cameras — perhaps more than what bandwidth will realistically support — but only have a subset of the cameras on the screen, and Streamie will “focus” the cameras with motion events onto the screen for a time, and then back off the screen later.

 

UniFi HEVC and AI — A customer alerted me first to the new H.265 support in Protect, which has a unique spin on RTSP that Streamie did not like. That’s fixed. Also, Protect has AI motion detection for identify people, vehicles and animals instead of its former “dumb motion detection” that was triggered by shadows and tree branches. Support for this is also now included in Streamie, much like what ONVIF cameras do.

 

Group Overlays — You’ve been able to overlay modules onto individual camera streams, but now you can place an overlay on an entire group streaming session. This could be a message to customers (“CCTV recording in use”), a weather report, or any dynamic content you can access. There’s a lot of power and flexibility in this feature.

 

Changes

 

- Fixes a crash associated with tapping on a stream in the Camera Configure Onvif Screen. I'm not sure of the cause, but this change should prevent the crash itself.

- Fixes a crash (maybe) associated with using the attached cameras. It appears that the user was able to stop the stream before the stream had finished starting.

- Fixes a crash (maybe) when configuring an attached camera that reports no available resolutions or framerates and so the slider has zero items to display and it creates a range from 0...-1, which won't fly.

- Fixes a crash in Camera Configure Onvif screen and Camera Configure UniFi screen associated with tapping on the "Manage" button for actions when there were no known actions.

- Fixes a crash that can occur in the Talker when multiple events occur at the same time.

- Fixes a crash that could occur if the user closed the app right after finishing launching the app. We have an async() process started to prompt for app review, and that fires even though the app is stopping. We now check to make sure everything is still running before proceding with any of the post-start async tasks.

- Fixes a crash (maybe) related to the tvOS Tab Bar. It looks like an account-changed push notification was received and it changed tabs and somehow that crashed.

- Fixes a crash that would occur in KrillPacketReader during playback if we scrubbed somewhere in the file and let the recording play through to the end. The crash was due to not correctly setting the object offset when scrubbing. As a result of that, we tried to decode the Appendix as a DataObject.

- Fixes a crash with a check when deserializing String and Data types to make sure there's adequate data in the InputStream. This came about because there was an error in KrillPacketReader where we were incorrectly tracking the object offset when we scrubbed within the recording, which caused us to parse the Appendix as a DataObject, leading to us trying to decode a 4GB String.

 

- Fixes a UniFi Profile related memory leak.

- Fixes a bug in the Camera Choose Action screen where hitting the Delete button did not result in the screen beeing popped off the navigation controller stack.

- Fixes the Help URL for the Camera Configure Action screen and the Camera Configure UniFi screen.

- Fixes the Recorder screen on tvOS such that if you hit the Menu button on the remote, instead of instantly closing, you are prompted to confirm that you want to close the recorder.

- Fixes some Module font rendering stuff.

- Fixes a Group Configure Screen issue where "Normal" was not an option.

- Fixes an issue where we will now start camera events for a camera that's off screen, without also starting the stream.

- Fixes an H.265 RTSP streaming issue with Ubiquiti. For all other cameras (all!) they use the rtpMarker to indicate when a frame is ready to parse, and they use Fragmentation Units to chunk them up. Ubiquiti always has the rtpMarker flag set for every payload, even though it is not complete. The only way to resolve this is to ignore the rtpMarker flag and instead wait until we receive a timestamp that has incremented beyond the previous timestamp, and then we can proceed with processing all of the payloads received for the previous timestamp. [DV]

- Fixes an issue where the UI for selecting / deselecting an overlay when streaming a camera was impossibly bad; it was not clear that the current overlay was selected, and that removing it required de-selecting it. Now, by default, nothing is selected.

- Fixes an issue with Looper mode where offscreen cameras were not actually started when looped onscreen because Quilt was not setting the item's visibility to true when telling the controller that it was now visible. Instead, that happened six seconds later, but the stream was never started because the item wasn't actually marked as visible when we told the controller to start the stream. [DV]

- Fixes a bug where Streamie would hang when loading the streams for the camera configuration screen due to a deadlock because the video decoding session held sessionLock. [DV]

- Fixes an issue in the iOS RecordingDetails VC where we ommitted a "Cancel" option on the navigation menu. Whoops.

- Fixes a text color issue in the Recording Files Screen and Recording Snapshots Screen where the text color wasn't contrasting correctly with the text background color.

- Fixes an issue in the three FileServer Configure Screens (SMB, S3, Azure) that permitted a user to delete a file server without first checking if the user has adequate permission. The API server was already correctly enforcing the permission, but this will now check client-side and present a more user-friendly experience.

 

- Improves the Weather module so that it has a user-configurable template URL and updates the module's API so that it'll just return JSON. As long as a user-provided JSON template uses the correct titles for its various values, the Weather module will insert the correct values from the API JSON to the template JSON and render it for the user. The one complicating factor is the background image. If a user provides a custom URL, we'll remove the last path component (such as "hazy") and replace it with the correct forecast summary value.

- Improves the responsiveness when tapping on the Help ==> Release Notes button. Formerly, we'd take the app version and the API server would search through articles to find the correct article, but we don't have any indexing system, so that was starting to slow down. Going forward, I'll just have a link to the correct article hardcoded in the app, much like how every Help button works. After we've removed support for everything preceding v4.0.1 (this release), we can remove the server-side component for getting a release notes article by version number.

- Improves StreamingSession by using just a single CIContext to handle compositing overlays instead of allocating/deallocating one for each frame. I don't know that this'll help with anything, but it doesn't seem to hurt anything.

 

- Adds a spinner to the Save button in the Settings ==> Permissions ==> Group screen.

- Adds a permissions check when trying to delete recordings to the Recording Cameras, Dates, Files and Snapshots screens.

- Adds the new Focus feature. When configuring a Group, you can designate cells with the new Focus mode, or the new Locked mode. Configure a camera with a new Focus Action, and when the action occurs, the camera will be moved to an on-screen Focus location. After some inactivity, the camera will revert to its original location. Use the Locked mode to indicate that the camera should remain in a fixed location.

- Adds support for Group Overlays. Instead of having a per-camera overlay that is composited into that camera's video stream, a Group Overlay is set on the group (obviously) and is simply layered over the streamer views.

- Adds support to the Camera Action Configure screen for choosing a set of file servers for a Save Snapshot or Save Recording action.

- Adds support in the EventHandling protocol for writing snapshots, recordings to a set of file servers.

- Adds UniFi support for Smart Object Detection, which can be a person, vehicle or animal. These events are added to the Source and can be used when configuring actions.

 

- Removes the "Save as Copy" option from the three FileServer Configure Screens because it wasn't actually implemented.

 

- Updates 3rd party packages.

 

 

Related Topics

 

Release Notes

 

About Streamie

 

Streamie provides a best-in-class user experience on your iPhone, iPad, Apple TV and Apple Silicon Mac, with an intuitive user interface that makes it simple to discover, stream, record, monitor and share your HomeKit, Google Nest, Ubiquiti UniFi Protect and ONVIF-compatible IP and RTSP cameras. Streamie keeps you informed with motion event notifications and it works with most cameras using its advanced audio and video codec support. You can watch your cameras from anywhere, record 24/7 to your private NAS, remotely manage multiple locations, device permissions and seamlessly synchronize settings across your devices; configure Hubitat smart home automations, live stream to YouTube and rely on the in-app technical support system when you need help (but you can also reach us by phone). Download Streamie today.