Release Notes for v3.18.1 (2024.04.20)




This release was a long time in the making, with little on-the-surface to show for it. Beneath the surface though, a large refactor occurred to accomplish a small thing: when actively streaming ONVIF-compatible cameras, if a camera changes its IP address (I’m looking at you, Reolink), Streamie will reconnect to the latest known IP and not keep trying the old IP. I was wary of letting this release out without extensive testing, and I’m confident there are few (if any) regressions at this point.




- Fixes a 100% CPU use bug that manifested on an iPad that somehow happens when base64 encoding a string. I resolved this by moving the task off the main queue and the problem magically disappeared ... for now.

- Fixes some UIKit constraint issues related to the main option view on the Home tab.

- When saving a camera as a copy, delete the device address. If we're just trying to quickly add cameras and we manually enter an IP address, Streamie has the proclivity of using the device address to find a cached Onvif Service instance, and we don't want that.

- When doing NAS recording, check if a file server isReachable() before trying to pump() to it.

- When putting the app in the background, clear the ONVIF Service cache.

- Fixes a Slideshow Module issue where Shared albums were not accessible. There still exists the issue that if you have two albums of different types with identical names, that you'll select one but the other one will be displayed. Don't do that.

- Adds sanity checks for the S3 API Endpoint URL to provide better user feedback when an invalid input is provided, and to prevent crashing due to an invalid input. [DM]

- Fixes an issue where the "Direct" connect button was ignored if Streamie was under the impression the camera was not directly reachable.

- Fixes a Google Nest Authorization issue where the SQL query would be shown to the user instead of a description of the issue (ie, the session id you typed in was not correct).

- Fixes compatibility issues with the Ubiquiti integration from the latest pre-release version. In particular, URLSession was preserving cookies from previous launches and sending them along when we tried to login, which the UDM now dislikes. Also, a number of JSON properties have changed.

- Fixes a strange error state when reading from an SMB file server, where the read() would succeed but we'd get zero bytes. We now treat that as an error. Without this change, we'd just get stuck in an infinite read loop.

- Fixes some thread priority inversion errors.

- Resolves some NAS recording issues related to writing MOV files. We were discarding video frames with fewer than 100 bytes for a case where a corrupt frame was excatly 28 bytes, so I made it more specific because it turns out the Lorex camera actually sends us necessary frames that are less than 100 bytes.

- Fixes a tvOS build issue in ConfigureUrlCameraViewController.

- Sets a 0.25 second delay on CameraPacketSource because we need it to be non-realtime, otherwise we end up with a bug related to playback of recordings. This obviously is a hacky "fix" and not a long term solution. I should comment it accordingly, but I didn't already do so and I'm afraid if I edit it, Xcode will crash.

- Implements a big refactor for how streaming works, which is now based on the user-defined Source and not just from passing around a URL. This improves the ability of Streamie to reconnect to a camera after the camera changes IP addresses without any user interaction.

- Fixes a bug in YouTube Live Streaming where audio/video sync was never established because of a prior change I made to fix issues with timestamp / timescale / presentation.

- Fixes a deadlock issue in StreamingSession that can occur when shutting down a session. It was a 3-step cycle thing that was resolved by creating a 2nd queue in Session so that there's a workQueue for calling the encoder, and a sinksQueue for managing sinks.

- Updates the alert UI in the iOS Streamer View Controller so that it doesn't appear as a wide horizontal list.

- Improves the keyboard support for PTZ by customizing the acceptable delay between key repeats to distinguish between the first repeat and subsequent repeats.

- Fixes an Audio Toolbox Converter issue where we were only correctly counting the number of packets for LPCM audio, but we should have also done that for ALAW and ULAW.

- Fixes an issue related to RTSP streaming on a Reolink RLN16-410 where the SDP had blank lines in it.

- Fixes an issue with the Configure ONVIF Camera screen (iOS, tvOS) where it would continue to load stream previews even after the screen was dismissed.

- Updates 3rd party packages.

- Improved error handling as it pertains to App Transport Security and including the request class type when making ONVIF requests.

- Resolves a member-message-relay issue where our new, safe, InputStream superclass broke relaying messages because reading a relayad message relies on just reading as many bytes as possible up to 100_000, and that tripped an error in my 'safe' InputStream. Fixed.

- Fixes a remote-broadcast issue where we were using .groupName in the URL instead of .groupName.rawValue, so, for instance, the sourceType was 'attached' instead of 'camera-source-attached'.

- Fix for the background keepalive change that broke PiP and other things.

- Moves the backend entirely over to D1 and the API servers to geographically diverse data centers. Woo.



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