Announcing Keyframe 0.2.1
Keyframe is an open-source, self-hosted video streaming server for creators and their communities.
Keyframe 0.2.1 has been released, with a new ingest server built on SRT and MPEG-DASH. You can follow the instructions to install it on a NixOS server.
My name is Shell Turner, I'm the developer of Keyframe, and a trans woman currently living in the UK. You can contact me via email or XMPP at firstname.lastname@example.org.
I started working on Keyframe last year in order to stream myself playing video games over the Internet. I didn't want to sign up to one of the streaming services run by Amazon, Google or Facebook – and force my audience to sign up to those services to chat with me while I play – so I put together a simple UI around nginx-rtmp-module, Prosody, and Converse.JS.
On showing this to some people, they were interested in using it and streaming to their own audience outside of walled gardens, so I cleaned it up and released Keyframe 0.1.
I realised over time that the latency I was getting didn't match what I knew was possible, making it difficult to communicate with my audience. There wasn't existing open-source software which could reach that latency, so I started working on Keyframe 0.2.
Keyframe 0.2 contains a standalone component called ingestd, which replaces nginx-rtmp-module. ingestd takes SRT input from sources like OBS, ffmpeg and gstreamer, as well as professional media hardware – and packages it as MPEG-DASH standard media in a low latency configuration. It also contains a custom web server for serving this MPEG-DASH media with minimal latency.
Keyframe uses dash.js to play the stream in the browser, currently configured to a 3 second buffer in the browser, although this is very conservative – I have successfully run Keyframe with 0.5 seconds of buffer, enabling near-real-time conversations with my audience.
ingestd is built on widely available standards and open-source code, and can be used independently of Keyframe.
Keyframe works today – I and others use it regularly to broadcast live video to audiences over the Internet. However, there's still a lot of work to be done.
I intend to work further on ingestd, implementing rescaling so that people with slower Internet connections can view a lower-quality stream while enabling people with faster connections to view the stream in the original broadcast quality.
I also intend to implement iOS support in ingestd and Keyframe, using iOS 14's new low-latency HLS specification.
I would like to enable stream monetisation options – ticketed streams, donations, and the ability to extend the platform further – and discoverability features like integration with social media and ActivityPub, as well as a stream directory.
Finally, I would like to enable easier installation of Keyframe, via a self-contained binary or Docker image that can be deployed on standard Linux distributions.
Between these features, Keyframe could become a serious alternative to existing streaming services and closed-source software for many use cases, enabling creators to build the service they need, without restrictions.
In order to work on Keyframe and ingestd, I need financial support. If you find Keyframe and ingestd interesting or useful, you can set up a donation through my LiberaPay. I am currently aiming to make 100 EUR/week, in order to support myself working on this project.
If you're aware of a company that might be interested in using Keyframe or ingestd, I'm also very interested in talking about contracting work or sponsorship.