Release Notes for v4.12.1 (2025.06.09)

 

Overview

 

Quick Actions

 

The new Quick Actions feature is directly related to a user suggestion. In each camera configure screen, you can slice up the camera into 1x1, 2x2 or 3x3. For each cell in that grid, you can assign any of the available menu actions. When streaming that camera, instead of having to go through the initial step of viewing the entire contextual menu, you can perform an action with a single tap.

 

Looking to the future: some menu actions result in a sub-menu (such as choosing a function), and it’d be nice to be able to run a function with a single tap. We’ll get there eventually!

 

See this quick demo video for more details.

 

 

RTSP Scanning

 

It is a common refrain, that a user doesn’t know the IP address of his camera. In the case of ONVIF cameras (and some other types of cameras), Streamie can discover the cameras on the network. For other cameras (particularly RTSP cameras that do not support ONVIF), the user must turn to the camera manufacturer’s app or his home internet router.

 

New in Streamie is the RTSP Scanner feature. It is very simple. It should work for most home users. The scanner will look at the current subnet and then check each and every IP address on that subnet to see if it will respond on TCP port 554. All matches are displayed right in the app. You will still have to know the correct path, username and password — but, at least you know which IP address the camera is using, which gets you a step closer.

 

See this quick demo video for more details.

 

 

Play & Pause

 

When playing a NAS recording, you may have noticed there’s no pause button. It’s funny how deceptively challenging a seemingly simple feature can be. Streamie, from the beginning, has been a player for realtime media sources. The very concept of pausing is antithetical to its design. At every layer of its media processing stack, there are checks to look for backups and stalls that proactively restart processes in an effort to keep media streaming. When you pause playback on one layer, it looks like a failure to the adjacent layers (a queue backing up on the preceding layer and a stall on the following layer).

 

Even playing recordings isn’t a “natural” thing for Streamie: data can be received much faster than realtime.

 

After some gentle nagging from a new Streamie customer, I made it a priority to at least investigate the specific challenges. Surprisingly, without making too much of a mess, I was able to get pause / resume support working. I had to start by adding a paused status for the rest of the app to understand what is going on. This new streaming status prevents automatic stream restarts from occurring. That wasn’t sufficient in itself though. On my first pause / resume test, when resuming playback, it would immediately jump to where it should have been had I never paused in the first place because the display layer understands when a frame is supposed to be displayed, and will speed through delayed frames to get caught up. This means that the code that pauses the recording read loop also needs to note the pause duration, accumulate that duration across multiple pauses, and adjust each audio / video packet’s presentation time based on the accumulated pause time.

 

Where this gets interesting though is that I realized that this same mechanism of packet presentation time adjustment could be used to implement 2x, 4x, 8x recording playback. As of the time of this writing I’m not sure I want to work that into v4.12.1 since it’ll involve a little more UI work than I want to do just now. Look for speedy playback in the next release!

 

Play Pause

 

Changes

 

Adds

 

- Adds "Quick Action" support where sections of a camera / module can have an action assigned to each, allowing one to bypass the tedious step of going through the contextual menu first. This feature is not available for tvOS because it lacks the pointer / tap gesture that is required. [KW]

- Adds a pricing matrix for Streamie that is dynamically generated from the actual payment processing system, which you can see here.

- Adds the notion of a "minimum version" which the client app needs to satisfy when starting up.

- Adds RTSP network search support to the Cameras Search Screen based on scanning IPs and trying a TCP connection on port 554.

- Adds pause / resume support to the NAS recording playback interface. This was a long time coming. You can find more details about this in the release description, above.

 

Fixes

 

- Fixes the layout of the Options buttons in the various Camera Configure screens by setting a minimum width of 225pt for that cell type. It'd be nice if I would instead calculate a similar width that fits precisely with standard spacing around the cells, given the screen width.

- Fixes an issue with regard to loading stream previews in several Camera Configure screens. The streaming code was often "too smart" and tried to work with cached instances which is non-ideal in a situation where we're trying to preview the changes the user just made.

- Fixes an issue with the URL Camera Configure screen. I had previously simplified it from a set of fields, each related to a component of the URL, to just a single URL field. The unintended consequence of this is that the user was responsible for URL encoding the user:pass component of the URL, which isn't ideal. I've found a middle ground and now the fields are URL, User, Pass, and the screen will handle encoding / decoding as necessary and appropriate.

- Fixes a bug where a demo user whose trial period has concluded, could dismiss the upgrade nag from the streaming screen.

- Fixes an issue that prevented error messages related to the initial authentication request from being correctly parsed and handled.

- Fixes a crash in S3Service associated with the strong reference URLSession maintains to its delegate. We now correctly cancel and invalidate the session before the S3Service instance deallocates.

- Fixes (maybe) Streamie behavioral issues when the Local Network permission has been lost (like following an app update or something) and the UniFiService tries to connect to a UDM and is disallowed. We reset the URLSession now so that hopefully we can recover from that error state. However, in my testing to confirm this fix, I found that toggling on/off the permission made NO difference. I could get the app stuck with permission-on and permission-off with no way to resolve it outside of a device reboot. Three cheers for Apple software quality.

- Fixes a bug in TaskScheduler, where the finalizer callback would never be called because we were not correctly taking into account that the runningCount would be 1 because the current task is running.

 

Improves

 

- Improves the sections support in the Cameras, Groups and Modules screens so that the collapsed state of a section is both more compact and persistent.

- Improves backend handling of client connections from old, unsupported versions, so that we can present better error messages to the user.

- Improves the AlertController with a blocking status so that it cannot be dismissed without choosing an option. We'll use this when Streamie is too far out-of-date. There doesn't seem to be a way to block the menu button from dismissing this (on tvOS) unfortunately. On iOS, it blocks successfully though.

- Improved error messages by refactoring a bunch of Error types, specifically, the .failed cases now work with Errors instead of Strings, allowing me to check the type and case of an error instead of relying on a fragile string comparison.

 

Other

 

- Refactors out the code for the Functions section from each Camera Configure screen, removing a ton of duplicated code.

- Refactors out the code for the Classify section from each of the Camera Configure screens, removing a ton of duplicated code.

- Changes the demo duration from 7 days to 14 days.

- Replaces the old settings icon with a new one that actually looks like a settings icon.

- Disables excessive logging in the RTSP Scanner.

- Disables excessive logging associated with the TaskScheduler.

 

Updates

 

- Updates the release notes link for v4.12.1.

- Updates the Other Upgrades Screen so that when displaying a Message item we now show the full message in the cell. Removes the action icon indicator (right-arrow), as it is unnecessary now.

 

Details

 

Created: 2 weeks ago

Updated: 1 week ago

Author: Curtis Jones

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 -- and you can also reach us by phone. Download Streamie today for all of your CCTV needs.