The primary purpose of this release is to resolve YouTube live streaming audio / video synchronization issues. Because the primary use case with Streamie is to see / hear your cameras live, I was able to get away with not using or fully understanding RTSP Sender Report messages, and the channel timing information contained therein, for far longer than I had any right. When I play audio and display video as shortly after it arrives as possible, it is generally well synchronized. With YouTube, the “packets” I send have to include specific timing information for each channel. I struggled to understand how to use the SR timing until it finally “clicked” for me on the dozenth walk, and then my thousandth-or-so clap test live stream finally worked. I would have rightly lost all of my sixty-two (!) subscribers if not for Streamie’s support to designate live streams as Unlisted or Private.
These bug fixes are the first steps in a process to replace OBS for my specific use case. The next (and probably not last) step will be to render modules as overlays on a stream, including encoding the overlay into the video stream. That’ll be fun. More on that in a bit.
Regarding my specific OBS-related use case: I currently use OBS at church for YouTube live streaming the service each Sunday. My setup currently includes my old “trash can” Mac Pro, a Sony camcorder with an Elgato video capture device, and an audio capture device connected to one of the outputs on the main sound board. It’s pretty simple, but it has still been difficult to train people. And when we need to pan the camera, it’s a jerky, manual process. Also, I feel dirty using RTMP. I’d like to do better, you know?
For context, we already run Streamie on an Apple TV, in the sound booth, connected to its own display, that streams and monitors the security cameras.
The new system starts with a beefy Hikvision camera. I’ve toyed around with it at home a little bit and the only downsides I’ve discovered so far are: a plastic housing (my Dahua equivalent has a metal housing), no AAC audio support (the only quality audio codec is MP2L2, which Apple doesn’t support, so I’ll have to find a free, open source decoder), and it’s 360 degree pan doesn’t actually pan all the way, it instead jumps all the way back once you hit a certain limit, which is janky to say the least. This camera will be mounted indoors, up high, so the lack of a quality metal housing doesn’t really matter. I’ll eventually find a way to support MP2L2 audio decoding, so that’s a surmountable problem. And I won’t be doing any 360 degree panning, so that’s okay too. These things just all add up to an “ehh” product.
The new system actually ends with this camera as well. I’ll have one of the sound board’s outputs wired into the camera’s audio input. The existing Apple TV will stream that camera to YouTube. I’ll have PTZ presets configured on the camera. A couple clicks of the remote and the camera will jump from here to there. Streamie will also record the camera to our S3 service, so we have a backup if YouTube messes up.
Gone will be the camcorder, audio capture, video capture and perhaps even the Mac Pro. If I ditch the Mac Pro I’ll add a 2nd Apple TV dedicated to this new camera and live streaming.
As I mentioned at the start, the most glaring of the many missing features (relative to OBS) is overlays. I want to start the YouTube live stream well in advance of the service, and I want to show service information, not the camera’s video stream (at least until the service begins). There’s nothing overl[a]y difficult about combing two images and feeding the result to the video encoder, but I have to wedge this into the existing pipeline and conjure up something vaguely resembling an intuitive UI. Coming soon…once I figure it out.
This is way out in left field, but with just a tiny bit more work, I could remotely run the live stream if someone else was good enough to turn the mics on at the right time and all that (we have a basic analog sound board).
That’s enough rambling for now. Buy Streamie!
- Fixed an issue regarding YouTube audio/video synchronization. Now that I'm parsing the RTSP Sender Report messages AND correctly interpreting them, we have timestamps for each audio/video packet that can be used for synchronization. I've had a YouTube live stream going for more than a few months, quite stably, but that camera doesn't have a mic, so it wasn't until recently that I discovered that this issue existed.
- Fixed an issue in my copy-paste code (from Cameras) for Module snapshots, which did not correctly sync snapshots across devices because I didn't fully update the copy-paste code for modules, as is frequently the case when I think I'll save time by copying and pasting.
- I'm trying to address this "NSInternalIconsistency" crash on iOS, and maybe I've got it this time. I really don't know. There's not much to go on, sadly.
- On the backend, we're now writing to both the prod database (Bedrock) and the in-testing database (Cloudflare D1), while we continue to do reads exclusively from the prod database. After I'm happy with testing, I'll make the switch. I may still do dual-writes for a while to make a hasty reversal possible.
- When deleting an individual camera, the associated snapshot (if any) is also deleted.
- Fixes a Recording playback issue where I was incorrectly checking to see if the section tapped on was expanded instead of NOT expanded.
- Stripped out a bunch of old Penguin code that has been deprecated for six+ months, including: CrashReport, Event, FileServer, Help, Integration, Log, Module, Promo, Share, SmartDevice, Sound, Store, Support and Tutorial. If you're not updating Streamie, some functionality will stop working.
- Improves the Camera Recorder by staggering the startup for each camera so that we reduce the max storage pressure on the device.
- Unsuccessfully toyed around with trying to get MP2L2 (mp2) to decode to L16. AudioToolbox reports that the format is unsupported, so I'll need to dig up some open source decoder. After a quick, casual search, I could only find encoders or GPL decoders.
- Fixes a label issue with Events where often the label would appear when it was not supposed to be there.
- Fixes a member-join issue where if you are inviting the member to a particular Permissions Group, and that PG references a Group that has been deleted (but for some reason was not removed from the PG), then the member-join process will fail. We now handle this issue gracefully.
- Fixes a UI shortcoming with my new Hikvision PTZ camera which unhelpfully has 300 identical PTZ presets, which we present to the user. We now reduce that set to just a unique set (based on x, y, z coordinates) before presenting them to the user.
- Change the "NAS recording storage devices" label to "24/7 recording storage devices" since we've supported S3 for a while now.
- Adds quotes around the camera name in the string, "Welcome!
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!