Streamie Master Plan

 

Overview

 

This document is divided into a few sections:

 

- Really Big Things. These are items that can be thought of in terms of the broad development direction and business strategy.

 

- Big Things. Non-trivial features, possibly poorly defined and poorly understood.

 

- Little Things. This is a laundry list of items that may or may not ever be completed, that are nice-to-have but not strategically important.

 

Really Big Things

 

- Distributed Nodes. Go global for improved latency and fault tolerance. We are close on this one. We have to get Database v3 (see below) finished, and then we’ll use Tailscale to simplify inter-API-server communication and we should be able to deploy API servers across multiple data centers.

 

- [DONE (almost)] Database v3. When development began, the single API server had SQLite built right into the binary; very speedy. Coming out of beta, we made the switch to a multi-server architecture with a distributed database (BedrockDB). It has two downsides: writing to the database does not block pending the completion of the transaction, so doing a read for data recently written can yield old or no data. The Streamie and Penguin code is littered with wait-for-two-seconds code to cope with this. Second, while Bedrock did once support macOS, that hasn’t been the case in a while, so using Bedrock requires Linux servers. Being able to consolidate the whole system onto Macs would hugely simplify the overall architecture, hardware requirements and power consumption. I’ve been eyeing FoundationDB, which looks amazing, but it has scary warnings to not run it on Macs in production (why?!). So, finally, the next database iteration for Streamie will be the shiny, new Cloudflare D1. We are already running this in production, but we’re still mirroring everything to Bedrock until D1 reaches General Availability.

 

- Mac App. A real, true, native macOS app. Just imagine being able to distribute an app via the website! In addition to recording directly to locally attached storage, a Mac app could make use of a “record only” mode that performs no decoding or displaying, and would be capable of handling hundreds of cameras simultaneously. For organizations with an abundance of cameras, a Mac Mini would be a powerful and affordable management tool.

 

- Android App. We will need this eventually. I’m not doing it myself though.

 

Big Things

 

- [DONE] Navigation overhaul & unification. The iOS navigation overhaul is complete. The tvOS navigation overhaul is still pending. Once both are complete a lot more of the code will be shared across the platforms, which is vital to the next Big Thing (“Permissions” — see below).

 

- [DONE] Permissions. An administrative user should be able to lock down the functionality of any device, preventing both malicious and accidental security issues. By way of example, a user may be able to stream a camera, but not view or edit the camera’s configuration. Permissions will be defined in Permission Groups.

 

- Audit Logging. Actions within the app and, more specifically, actions that modify data, should be logged in an immutable fashion for the purpose of being able to perform an audit. Audit logs would expire over time; they would not be manually purgeable.

 

- [DONE] Cloud Recording. Cameras streamed by a particular device would also be securely relayed to cloud storage. Streamie supports record-to-NAS on your local network. If you have the necessary upstream bandwidth and transfer limits, this feature would remove local storage requirements. Cloud recording via S3 and Azure Storage Blobs is fully complete and in production.

 

- Bulk User Management. A mechanism for simplifying the management of 100s or 1000s of members on an account. The use case here is for a neighborhood or office building with a centralized video surveillance system where every resident or tenant can stream the cameras. As neighbors come and go and upgrade devices, the process of managing these changes needs to be minimally burdensome. There is probably an opportunity here to integrate with some sort of 3rd party user management / badge access system so that after an initial configuration process, no user management work has to take place within Streamie.

 

- Web Viewer. Share or monitor your cameras from the convenience of a web browser.

 

- HLS. I’m not entirely sure what the use case is here, but I’d like to see HLS support.

 

- Two-Way Audio. It’s the Wild West out there when it comes to the many ways cameras support two-way audio, but it’s worth adding solid support to at least one popular device, which would possibly be a network audio device and not actually a camera.

 

- Remote Streaming Session Tracking. Know which devices are (or were) remotely streaming your cameras. Manage existing connections. Define blocking rules.

 

- [DONE] Live Stream to YouTube. Figure out how to support MPEG-DASH so that any Streamie device can live stream to YouTube (or possibly other platforms).

 

- Crash Reporting & Resolutions. When an app crash occurs, make the crash details and the associated issue visible to the user. Thus a user could beware of the nature of the issue and its progress towards being resolved.

 

Little Things

 

I’m adding to this list as I have time to organize all of my chicken-scratch notes.

 

- [DONE] Remote Actions. Remotely manage the streaming state of another device, including stopping the current streaming session, or starting a new streaming session with a camera, module or group.

 

- [DONE] Attached Audio. Streamie already supports remotely accessing a device’s attached camera, and that support should be augmented with streaming an attached audio input device.

 

- [DONE] Camera Overlays. Arrange text and images to appear overlayed on a streaming camera.

 

- Object Grouping. When you’ve got a bunch of cameras, modules, file servers, account members, etc., it’d be nice to be able to arrange them into groups for maintaining you organizational system. Drag and drop between the groups.

 

- Unlock Code. Lock the app with a passcode to improve your security, or use a Permissions Group to enforce an unlock code on restricted devices.

 

- Local Network Event Notifications. When a device produces an event, in addition to posting it to the server, also look at the local network for other Streamie instances and directly notify them of the event. In addition to reducing one’s reliance on an internet connection, this would reduce the latency in getting the event sent.

 

- SMS Alerts. Allow the user to provide a phone number for SMS alerts instead of just APNS.

 

- Custom API Calls for Events. When a smart home or motion event occurs, instead of logging an event or whatever, also let the user define a custom API call including the method, parameters and so forth. This might take the form of a new integration type that can be referenced when defining actions.

 

Related Topics

 

General Permissions

 

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!