Release Notes for v3.15.1 (2023.06.30)




The star of v3.15.1 is the new Web API Integration. This has been on my todo list for a while, but with the gentle nudging of some users, its priority got bumped up.


The use case here is being able to drive Streamie from outside the app with simple HTTP requests. To make this possible, there’s a new Integration named “Web API”. Once enabled, you’re provided with a secret API key. Keep it secret. With that key, you can access your account details and even remote control your Streamie devices. The very incomplete documentation can be found here.


I’m looking for further input on what this API should be able to do. Get in touch if you have any feedback.


MOV Camera Recording


At the request of a user, each File Server can now be configured with a specific Output Type which is either SPF or MOV. If you want to securely store your 24/7 camera recordings and use the integrated playback and management features, then SPF is the right choice. If you want to use your own video playback and management tools, then you can go with MOV.


In the process of testing this change with my iPad’s built-in camera, I noticed that camera recording was broken in that context, so that’s all fixed up now, and you should be able to record your built-in cameras to S3 or your SMB NAS. For those people who are into that sort of thing….


Aspect Ratios


One last thing of note is that Streamie was assuming 16:9 aspect ratios for all cameras even though the layout engine doesn’t care about that at all. This has been fixed and you should now be able to have all manner of wonky multi-camera layouts.




- Adds a new Integration type called "Web API" which will let you control Streamie from outside the app.

- Get a list of cameras, groups, modules, members

- Get snapshots of cameras, modules, members

- Control a member by streaming a camera, group, module

- Fixes an issue where the S3 Service could not delete "directories", which it needs to do in order to clean up recordings.

- Streamlines account limit enforcement with a single API call. Additionally, limits for Modes, Shares, Groups, Modules and File Servers are now based on the max camera count.

- Updates the app store with more of the new screenshots

- When inviting a member to your account, you can now Copy Link or Copy Code. The recipient of the link just needs to tap on that, and the code pre-fills; no UI navigation necessary.

- Fixes more ONVIF auth issues. I found that I broke support for the Sony Ipela with a prior fix to deal with a Daylight Saving bug on an NVR. I've abandoned the fancy heuristics and I'm instead just trying both the UTI Time and Local Time that the camera reports, and going with whatever works.

- Reduced ONVIF connection setup time by parallelizing all of the HTTP requests instead of running them serially.

- Replaces the dollar-sign Upgrade tab icon (iOS) with an opened lock.

- Adds .mov file recording support via a new "Output" option which is configurable on a per-File Server basis. Instead of writing out SPF3 files, Streamie will write out MOV files. These files won't be playable in the integrated playback system, but you can play them directly from the NAS with your preferred movie player.

- Adds an "App Use (Minutes)" cell to the Home-Member screen.

- Improves the behavior of cached UI content when switching accounts. Some stuff was not being refreshed that should be refreshed.

- Changes the Upgrade tab icon from a dollar sign to an opened lock (because the marketing guy said it would be better this way).

- Fixes an API server connectivity issue where if the very first attempt to connect failed, it would not continue to retry.

- Modifies the About screen (and associated API) so that it includes available, total storage.

- Modifies how streaming connections are established, automatically favoring a remote connection if we're not fairly certain a direct connection will succeed. This is based on isReachable(). So, if Streamie has had a moment to determine if a given camera is likely reachable (or not), then it should auto-remote stream (if appropriate) when you tap on the camera, instead of also requiring a subsequent tap on the blue button.

- Shows the remote host "Welcome" message on the screen briefly after a remote connection is established.

- Modifies the multi-part S3 uploading process such that if it fails, it'll call abort. Of course, if it fails because of network issues, then the abort call is also going to fail, but at least we tried.

- Fixes a remote streaming compatibility issue with some cameras for which we were not automatically detecting a key frame interval, which need in order to properly configure the video encoder for remote streaming.

- Updates the account limits basis for Modes and Modules from just being 999 to being based on maxCameraCount.

- Improves error handling in OnvifErrorResponse: parse the Detail and Text values, and display the Detail if it is available; fall back to the Text value (as before).

- Fixes an issue in OnvifService.verifySystemsDateAndTime() where we were unintentionally obscuring authentication issues. We now collect each error, and if no attempts succeeded, then throw one of the errors at the conclusion.

- Fixes the appearance of the UpgradeViewController (iOS), so that the header bar and tab bar are opaque.

- Fixes a link-handling issue in UpgradeCoordinator (tvOS), where only the first link in a paragraph was accessible to the user when the paragraph was clicked on.

- Fixes a ridiculous issue where I broke CMCOnvifService.isReachable() by handling the error that occurs with the D-Link camera objecting to the GetSystemDateAndTime request. This resulted in remote streaming failing in certain circumstances because every remote streaming device decided every onvif camera was actually reachable (even if it was not).

- Fixes some Penguin concurrency stuff. QuotaService won't dominate the CPU now. Each service has its own concurrent queue so they don't dominate the global queue.

- Fixes a Penguin issue where Recording Days were not being considered when determining if account limits had been changed when applying a purchase.

- Changes some of the BufferView queuing behavior. If a stream is real time with no imposed delay, then queueing should be unnecessary because if the display layer isn't ready, we just drop the frame.

- Fixes an ONVIF authorization issue related to a recent change due to the D-Link camera not supporting the GetSystemDateAndTime request. WTF?!

- Fixes a RIDICULOUS Penguin issue where I had not been trimming excess events or calculating file quotas after the switch to the Chinstrap Event API. Ugh. 380GB of event storage reduced to 27GB.

- Improves the parallelism of loading recording file snapshots when the underlying file server supports such parallelism. Basically, when its an SMB NAS we just want to load one at a time. When it's an S3 storage service, we can do better than that since we're probably not dealing with spinning disks.

- Improves support for non-16-by-9 video sources. Specifically, initial layout assumes 16:9 (with any rotation setting applied to that), but after the video stream begins and we know the size of the actual video stream, then we'll adjust the layout accordingly.

- Disables Metal API validation because apparently there's a macOS 13.x bug that asserts incorrectly, all the time, on Apple Silicon Macs when doing Metal stuff on the CPU (which is a thing on Apple Silicon).

- Attempts to fix a rare Penguin issue where (I believe) Chinstrap client authentication completes after the socket disconnects, resulting in a zombie connection.

- Fixes a crash that occurs in FileServerConfigureSmbScreen when tapping on the Details cell.

- Removes the animation that occurs when tapping on the Details cell (since it shouldn't appear to be user interaction), when configuring an SMB file server.

- Removes the animation that occurs when tapping on a Camera or Member in the S3 and SMB file server configuration screens.

- Fixes a crash that occurs when the API server cannot be reached when the app is loading (specifically, the Help tab), then connectivity is restored and the Help tab is refreshed. Because the initial load failed, the cell types were not registered with the collection view, and on pull-to-refresh, the cell registration process was not being performed.

- Changes the Help ==> Support screen to include an "Invite Code" option that can be used by a Streamie user to give account access to a Streamie support rep.

- Improves Penguin's event handling so that multi-account users won't be pestered by event relay messages that they don't want to see.

- Improves the Attached camera support by letting it recover gracefully when it runs into issues. This change is part of a larger effort to better support 24/7 recording of a device's built-in camera to a NAS / S3.

- Fixes an issue where it was not possible to delete SMB file servers because I apparently just didn't write those several lines of code. I'm not sure how I could have overlooked that for so long. It's fixed now though.

- Improves CameraRecorder's behavior when it runs out of storage space. You'll still lose recordings, but you'll be less likely to be perpetually out of storage.

- Adds "Haze" photos to the Weather Module image set, which is a National Weather Service short forecast description that I had not previously seen. I need to find a master list somewhere.

- Adds a "Vitals" section to HomeMemberScreen that shows memory and storage use for that device. The details are retrieved on-demand from the target member device (if it is online).



Related Topics


Release Notes Automation


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. Lastly, Streamie is solar powered!