Release Notes for v4.13.2 (2025.08.xx)

 

Overview

 

Conversion

 

While I continue to flounder about with marketing, I decided to improve the mechanisms available to encourage conversion from a demo user to a paid user. I have settled on a thirty day automatic demo period. During the course of the demo period, weekly in-app messages are sent with helpful tips and discount codes.

 

Additionally, those messages will now actually appear on the screen instead of just an alert asking the user to read the message.

 

Cloud Recording

 

In the process of further stabilizing the Cloud Recording feature, I found that the periodic decoder errors that can occur (particularly when streaming many cameras), could cause the encoder to fail silently — specifically, I could feed it input frames, and it would never emit another output frame. There’s hopefully a definitive way to trap this state, which I’ll discover eventually, but for the time being I’m just forcing an encoder restart whenever there’s a decoder failure. You might lose part of a recording, but the recording process as a whole will not just silently stop forever.

 

Changes

 

Adds

 

- Adds an imageData() extension to CVImageBuffer which I'm not actually going to use, but will probably come in handy later.

- Adds additional logging in CMCLogUploader so that we can better try to capture the "Log file already exists" error and handle that condition correctly.

- Adds a new message view that renders our basic markdown format so we can show a popup of the actual, formatted support ticket message.

- Adds an optional markAsRead parameter when reading a support ticket, which we can use to prevent the account's hasUnreadMessage flag being reset when we read the latest support ticket for the purpose of displaying it as an overlay (instead of just an alert to go read one's messages).

- Adds support to Rockhopper + Penguin for listing, viewing order sessions.

 

Fixes

 

- Fixes a remote streaming issue related to decoded sources by making sure that the encoder is started before handing the source format to sessions that don't need it.

- Fixes the iOS section footer text label to wrap by word instead of character.

- Fixes a crash associated with an unexpected subnet mask in the RTSP network scanner.

- Fixes a crash related to macOS and the toolbar horizontal line that shows up all the time.

- Fixes a crash related to H.265 RTSP payload processing.

- Fixes a crash that can occur, somehow, when performing layout when there are zero cameras on the screen.

- Fixes a video encoder issue that occurs when doing Streamie Cloud recording (or any recording with non-original quality), where a decoder issue would cause a silent encoder failure. We now restart the encoder when the decoder fails. Also adds some additional debug logging.

- Fixes a Penguin issue where marking hasUnreadMessage either true / false was not correctly accounting for a possible nil value.

- Fixes (maybe) a crash in startStream(). ChatGPT 5 claims that it is related to not cleaning up VolumeView. I'm skeptical of its reasoning, but it doesn't hurt to implement its suggested fix.

- Fixes (maybe) a crash associated with a synchronous call to a queue that is somehow made from that same queue? I couldn't figure out how that would have happened, but I also don't have any other explanation for the crash itself.

- Fixes a crash related to a video dimension (width, height) somehow being negative.

 

Updates

 

- Updates the release notes for v4.13.2.

- Updates various 3rd party dependencies.

- Updates a bunch of Swift.Error enums to include a string description of each error type.

- Updates the priority and duration for the support ticket messages. It is no longer a high priority message, but it stays on the screen longer.

- Updates the Recording-Cameras screen so that the "Direct Connect" and "Remote Connect" options are shown at more appropriate times. Specifically, if we're still in the .smart mode, the option presented to the user should be "Remote Connect".

- Updates the new-group mechanism so that it defaults to automatic layout, which I thought I had taken care of ages ago, but apparently not. What I did was make an ad hoc group use automatic layout by default, which is different.

- Updates Help Article View Controller so that it can support displaying an arbitrary markdown string instead of just an Article or articleId. I'll use this later to support displaying a support ticket.

 

Removes

 

- Removes instant decdoer restart support from StreamingSession because it seems to correlate with breaking cloud recording.

- Removes some excessive logging in KrillClient.

- Removes some deprecated code for MemberStatus v1 and v2, since we've been standardized on v3 for probably more than a year. I should have removed this code ages ago.

- Removes the alert in the Help tab about an unread support ticket because the API calls to Hello and AppUse will (better) trigger an alert to the same effect.

 

Other

 

- Starting work on a unified player for Recordings and Events.

- Refactors outputting a stream's buffer to a recording file. The caller can now specify the output type (SPF, MP4, MOV). At the moment, the behavior remains identical to before because the more odious task of getting EventDetailsViewController to play an SPF still needs to be completed, but internally we're now all ready for this change.

- Shuffles around a bunch of functions in ChinstrapPenguinServer so that they are better organized.

- Improves and refactors the AppUse and Hello API calls that return messages, so that the messages-gathering code is in a single place. Also, if a message relates to an unread support ticket, then we return the content of the most recent message of that support ticket instead of just a generic message about an unread support ticket.

- Improves error handling when streaming locally attached cameras.

- Overhauls the Admin Support stuff -- Rockhopper and Penguin -- so that loading tickets is much more efficient. This includes paging (based on updated date), and other optimizations. To accomplish this, I've updated the DataStore orderBy enum to include a before parameter to both created and updated. Updates all of the places where they were already in use.

 

Details

 

Created: 2 weeks ago

Updated: 4 days 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.