It's been two years since my last post, which means many changes to the K409 project to write about! My previous post indicated that my K409 livestream project was an "HLS" livestream. As of last year, though, K409 has been run using the MediaMTX server, developed by @aler9. Video files are stored in the H.264/H.265 compression formats but egressed to viewers in the VP9 codec over WebRTC. WebRTC connections, and the VP9 video codec, each enjoy broad support across modern web browsers across many devices. Thanks to these changes to the egress infrastructure, K409 is latency-free. It's an immediately-impressive demonstration of contemporary browser technology. I still use my privately-developed TVExecutive agent as a program scheduler, which uses FFMPEG commands to feed the MediaMTX RTSP receiver. Proper thanks should be given to the maintainer of FFMpegCore (@rosenbjerg). Sometime in the last 2 years, TVExecutive was overhauled to use a dependency injection (DI) model. This model made new features much easier to implement, while still reducing code complexity. Existing features were wrapped up as small, independent services which then leverage other services. A few of these new features are: * Configuration file monitors will trigger rebuilds of the file collections and/or schedules and listing queues (as required). There's not much to say about this, but it was a monumental achievement towards simplifying the management of schedules and playlists. * Notification service - webook calls to external integrations (like Discord message-sending) can be queued from various services. Previously, these webhook calls would be executed and handled synchronously, whenever each file changed. Now, the calls are queued and executed asynchronously. This approach greatly reduced latency when changing from one file to another. * Data microservice - this binds endpoints to internal metrics, such as the upcoming listings, and a fetch-and-count operation of viewers. It also runs asynchronously, which means statistics can stay live as the file is played out. TVExecutive now recovers from an ffmpeg subprocess failure, too. Thanks to the way FFMpegCore launches the external ffmpeg process, it's easy to determine when an error has occurred. Not every media file is perfect, and critical ffmpeg errors can happen seemingly-randomly. This used to require me to reboot the service manually, which could mean hours of downtime (a man's gotta touch grass!). The K409 page has undergone multiple changes too: windows can now be moved around, like you're back in the 90's! Additionally, there are theme settings, and a drop-down menu. Again, just like it's 1998! Future plans? Scaling! More live channels running simultaneously would be a great treat. I'd love to build an audio-only version of the site for real-time radio streaming, too. Thanks for reading!