Streamie Master Plan

 

Overview

 

This document is divided into a few sections:

 

- Strategic 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.

 

- Other 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.

 

It’s also worth noting that the items included in the following sections represent the highlights from the pages and pages of features I’ve jotted down, which probably amounts to years of work.

 

Also, this page does not represent a complete history of Streamie development. Many features have been dreamt of, defined, implemented and deployed without being mentioned here.

 

Strategic Things

 

- [DONE] Distributed Nodes. Go global for improved latency and fault tolerance. With the completion of Database v3 (see below), our API servers have been split between two geographically diverse data centers. The whole system works seamlessly with the help of Cloudflare’s Load Balancer and Tailscale..

 

- [DONE] 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 is the shiny, new Cloudflare D1.

 

- 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. For the time being, the iOS app runs great on Macs.

 

- Other Platforms. I’ve got aspirations for native clients for Windows, Linux and maybe even Android. I’ll need one or two dedicated people for each platform though, and that’s not in the budget yet.

 

- Web Portal. Some of this is already in place, such as browsing and viewing NAS / Cloud recordings via your web browser. Still to come is similar support for Event recordings and finally to be able to live stream cameras in the browser.

 

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.

 

- [DONE] Web API Using the Web API Integration, you can use a secret API key to manage elements of your Streamie account and remotely automate and control your Streamie devices.

 

- 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.

 

- [DONE] Unlock Code. Lock the app with an admin-controlled passcode to improve your security. Various access control mechanisms are now available with the new Access Control feature by which the app can be unlocked with a username / password or a MFA code sent to an authorized email address.

 

- Synchronized Recording Playback. Given a set of recorded cameras, play all of them in a time-synchronized fashion (much like when live streaming a set of cameras). Stretch goal: select a time frame and export a clip containing just that segment from each camera in the playback set. Maybe also make the export a single video with all of the source streams tiled in it?

 

Other 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.

 

- 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.

 

- [DONE] 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. Update: this wasn’t accomplished in the way I had imagined, which was a URL field on an action. Instead, you can now script your own Functions, which can take the context of the event and perform whatever external actions you want.

 

Details

 

Created: 1 year ago

Updated: 3 weeks ago

Author: Curtis Jones

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