What a whirlwind. I wanted to clean up and verify Google Nest camera support. Previously, Streamie support was limited to accounts that had not migrated from Nest to Google. Once I migrated my account, I tested with my Dropcam, and learned that I needed to add RTSPS support. That was easy enough. Before announcing the new support, I decided to buy a modern Nest camera to make sure nothing major had changed.
So, nothing worked with the new camera. It turns out that Google had migrated from RTSP to WebRTC, a technology I was not familiar with at all. I started down the rabbit hole which went way further than I expected.
The first challenge was getting WebRTC to build for iOS and tvOS. I thought all was fine at that point, but when trying to get the app submitted to TestFlight, it was rejected for lacking Bitcode support. The week that followed was a nightmare, but I prevailed (although it required a Technical Support Incident sacrifice for part of the process).
At this point I had solid Nest support in place, with one outstanding issue. You can play audio just fine, but the flexible nature of the WebRTC framework when it comes to video, that allows me to grab encoded H.264 frames, does not extend to audio. This means that I can’t, it seems, intercept Opus audio packets. Intercepting encoded audio and video data is key to Streamie’s architecture, which is based around a set of streamer modules each supporting some protocol, that provides that data back to the core in a common representation. Without the ability to intercept the audio data, the core can’t get access to it, and thus it can’t be recorded.
I realized that WebRTC (apart from Nest itself) could replace ENet for remote camera streaming, and it’d also check a bunch of other boxes on my todo list. For instance, the current iteration of remote streaming requires UPnP. I learned from a neighbor that AT&T blocks it entirely unless you get your own router. And WebRTC doesn’t require UPnP at all.
So I started down the road of ripping out ENet and putting WebRTC in its places. When remote streaming, Streamie does a number of things to monitor the connection and adjust the bandwidth needs accordingly. Shoehorning that into the WebRTC integration proved challenging.
Anyway, it’s all working, and working fairly well.
Stretch goal: use the open source TailScale code to further enhance remote streaming. Not today.
- Removes ffmpeg libraries, associated code (25MB ==> 12MB)
- Adds RTSPS (aka RTSP over SSL) support for RTSP, UniFi, ONVIF, Nest cameras
- Google Nest integration (RTSPS and WebRTC)
- Fixes a group camera sorting issue (BB)
- Replaces ENet with WebRTC for remote camera access
- Removes the "Switch to Remote..." option for unsupported camera types
- Resolves some performance issues and a macOS memory leak [DV]
- Resolves an issue with NAS recording playback
- Resolves an issue when saving a URL camera with the Secure setting enabled
- Resolves an issue when connecting to a Ubiquiti UDM
- Adds support for connecting to RTSPS ("secure") streams that use self-signed certificates
- Identifies and gracefully fails when an SRTP stream is identified
- Resolves an issue when remote streaming an attached camera
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!