Release Notes for v4.0.0 (2024.07.20)

 

Overview

 

This version includes only one new feature, and it is merely a slight modification on an existing feature (per-camera configurable overlays). All of the other changes in this release are bug fixes and refinements.

 

Ramblings

 

After 39 months, we begin v4 of Streamie. I’m confident that priorities will change, of course. We’ve historically been able to adjust our road map to meet customer needs, which is essential. That said, here’s an overview of what I hope to see in the next 12 months, or so:

 

- Functions — User-defined actions for accessing functionality on cameras (and elsewhere) that isn’t built into Streamie. For one customer in particular, we will use Functions to add support for activating sirens that are attached to cameras, for which the API is proprietary to the manufacturer.

 

- Two-Way Talk — This has been a long time coming. This feature should include the RTSP-based mechanism (backchannel) as well as support for standalone IP speakers (SIP, perhaps).

 

- Web Portal — This feature already exists for use with viewing and managing 24/7 recordings, but it should be expanded to include motion event recordings and camera live streaming.

 

- Audit Logging — This feature records to an administrator-accessible log all of the actions taken by users on the account. If data is deleted, configurations changed, etc., the history will be recorded. The log itself will not be editable. Instead, history will be purged after a certain number of days.

 

- Synchronized Recording Playback — You can use the Groups feature to stream many cameras at the same time. Likewise, you should be able to play back recordings from a set of cameras, with the playback precisely synchronized. Once you’ve found the footage you’re looking for, it should be convenient to export and save the recordings from all of the cameras with just a tap or two. An interesting “stretch goal” would be to render the exported footage as a single video that includes all of the cameras.

 

- Event Focus — This is small potatoes relative to the preceding features, but it has been requested a lot, so it needs to get done. When configuring a Group, you should be able to designate one or more locations that will be used to show cameras that have recently noticed motion. With recent optimizations, you could, for instance, create a group with dozens of 4k cameras, but only a visible 2x2 grid of cameras with the remainder being offscreen. As motion is detected, an offscreen camera is brought onscreen to one of the four visible locations.

 

- License Plate Reader — I’ve had limited access to ONVIF-compatible license plate reading cameras, and I need to fix that. Streamie should already work with them, but I need better test data to make sure that searching and other functionality plays well with license plate reader events.

 

Going forward, three and a half years is not the cadence I expect for incrementing the major version number; maybe roughly every twelve months, depending on how development progresses?

 

Changes

 

- Adds support for configuring a camera with an overlay module. You can already manually add one or more overlays when you're streaming a camera, but they are not persistent; they're not a part of the camera's configuration. This change applies to all camera types: Attached, HomeKit, Google Nest, ONVIF, URL and Shared.

 

- Improves the File Server Azure Configure screen and File Server S3 Configure screen to match the File Server SMB Configure screen's functionality: you can tap on a Member device and choose to remove it from the members list instead of having to go to the member list screen and deselect it.

- Improves the Custom Module with a user-configurable refresh time.

- Improves the SMB File Server Configure screen so that you can tap on a Member to remove it.

- Improves the ModuleRender to include "fit" mode when rendering an image, in addition to the existing support for "fill".

- Improves ChinstrapCache by removing all of its use of the main queue.

- Improves RecordingFilesScreen by trapping attempts to view an MP4, MOV recording file in the app and presents the user with an error explaining that the file must be played directly on the user's computer (or whatever).

- Improves the autostream functionality so that it is no longer based on UserDefaults, and is instead an attribute on the User object, and stored by Penguin. Consequently, it can now be remotely managed, which was the entire purpose of this change. As such, the "Autostream" button has been removed from each of the Camera Configure and Group Configure screens. Additionally, Modules are now available for autostreaming (which should have been the case long ago, but it never occurred to me). Locally, this feature is now managed in the Settings tab, in the Quick section at the top.

 

- Fixes a crash (maybe) in SmbFileServer by explicitly calling disconnectShare() after each use which maybe will prevent the annoying crashes we've seen for ages.

- Fixes a crash in KrillPacketReader where we were force unwrapping some things that we really should have cautiously checked for.

- Fixes a crash in ModuleRenderer that probably happens if the user closes the view before it has finished rendering.

- Fixes a crash in the Shares screen that occurs if you tap on one of the placeholder cells. I thought I had fixed all of these....

- Fixes a crash related to adding a Smart Action to an ONVIF or UniFi camera.

- Fixes a crash due to the idiotic way in which I had reachability for cameras, servers working, where an async call by the camera / server was made back to ChinstrapService to report the result instead of ChinstrapService just using the resulting value from the Guarantee that it already had access to.

- Fixes a crash in OnvifService related to matching ONVIF addresses.

- Fixes a crash in CMCAppDelegate by adding a .stopped status type, which is set immediately when stop() is called. Otherwise, the status remains .ready (or whatever), and that resulted in a crash...but now I don't remember the details.

- Fixes a crash related to deallocating a SymmetricKey. [BB]

- Fixes a crash in ONVIF Camera Configure screen and UniFi Camera Configure screen that occurs when adding the first action to a camera. [BB]

 

- Fixes an issue where, when backgrounding the app, if keep-alive is disabled and you're streaming multiple cameras, the streaming session is not dismissed and cleaned up. When foregrounding the app, the streamer is still visible but is not interactive. [DV]

- Fixes an issue in the ONVIF and UniFi add-smart-action flow by popping the choose-an-action screen (without animating) before proceeding to the configure-action screen, so that if the user steps back, he doesn't end up on the choose-an-action screen, which is now non-functional because the promise has already been fulfilled once.

- Fixes an issue in Weather Module, where if reloading takes longer than the module's refresh time, the app would eventually crash after many such attempts pile up.

- Fixes an issue in the SMB File Server Configure screen where it was not correctly reloading the Shares section after it connected to the server.

- Fixes an issue where we were not correctly requesting snapshots for motion events and recordings.

- Fixes an issue with the time slider in tvOS where the shuttle would not move even though the value changed.

- Fixes an issue with S3Service where we were not correctly encoding file names.

- Fixes an issue that prevented recording from working correctly with cameras that were accessed remotely. We now include the original camera source when creating the remote stream. Camera Recorder looks for this and treats the source correctly.

- Fixes an issue where if you start streaming something and then the autostream kicks in, the UI gets messed up. I've consolidated all of the how-to-stop-an-active-stream code into a new stopStreamer() function in each AppCoordinator, which I should have done ages ago.

- Fixes an entire "class" of crashes associated with not correctly deleting / inserting in the collection view when the user removes the last item of a section which is replaced by a placeholder cell. This is all now handled on the base class instead of being haphazardly handled in each screen. [DV]

- Fixes a bug where, when deleting items from a section, the last item in the section was never reloaded, and would become inaccessible because it used its original row index and never got updated. This was some weird CollectionView bug associated with doing the insert and reload inside of a performBatchUpdates(). [DV]

- Fixes a cell drawing issue in the Member screen that would happen in some circumstances after tapping on an Option to toggle its value.

 

 

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.