2019-10-18: Big Bad Game-a-Thon 2019
Another year, another BBG. This time around I was one of five core-staff instead of just a volunteer that behaved like core-staff. The difference? Practically none. I still ran the night shift, I still watched about 90% of the event live, I was still tired as hell at the end of it but not regretful at all. It's actually been about a month since the event; I've been kind of busy doing some other things and haven't really had time to do a write-up.
This year there were no major technical issues. I largely credit this to our obsessive planning in the weeks leading up to the event. I made absolutely sure every leg of the event's tech pipe had either a graceful failure or a failover available to it. This required changing how streaming was done a tiny bit, but I feel it was worth it. In short, we added an RTMP repeater to the streaming pipeline. This repeater was configured to allow in anyone authorized to be the "streaming box" for the event and would just parrot their RTMP feed to Twitch with the BBG stream key. In doing this, we safeguarded against the failure that manifested in 2018: an unattended restream system failing but holding the RTMP ingest open.
With this repeater in place we were comfortable leaving the actual stream encoder unattended. This means we had zero restreamer handoffs, which usually interrupt other marathons and even break hosts. We did have one hiccup early Sunday morning, but it was due to an ISP issue and not anything in the stream pipeline, and it was handled in 60 seconds. As long as we had someone who could boot the restreamer off and go live them self, it was all good.
The repeater also allows abstraction of the stream key. You can allow less-than-fully-trusted restreamers if necessary and if they go rogue, they don't have the stream key; you can just firewall them out of the repeater and they can no longer broadcast to your channel. A todo list item for BBG 2020 is to make this restream box have a control panel to let trusted people one-click manage whose ingest is being parroted to Twitch-- for this year we had to manually control this by giving each restreamer their own URI to broadcast to and disabling/enabling URIs in the config file directly.
As for the tech behind this: a bog standard nginx install with the nginx-rtmp module. It ran flawlessly on a $5 VPS and didn't drop a single frame all event. At some point I may write up how to do this, but it's simple enough and there's plenty of guides out there for similar tasks that one can slightly modify. I now have an Ansible playbook to create one of these whenever I want.
This year my runs were at like 3am, to not only match my night shift tech coverage, but also because I requested that because my runs just weren't all that interesting this year. I did Beauty & the Beast and Iron Hike. Given how tired I was by then, and how laid back I was about my runs, I dragged Karma in to commentate with me, and we had a blast. I really enjoyed that. Aside from my Pickle Wars race with Skye last year, I've never had co-commentary for any of me runs, and honestly I may do it more often in the future. Both runs went really well but, to be honest, even if they were total bombs it would have been fun. That's the nature of weird games at a kusoge marathon.
As far as viewers go, we actually got less than last year. I blame this mostly on the fact that we didn't get Twitch frontpage at Friday prime this year. We had it right at the start, and on and off through the event, but Twitch seems to be spreading the frontpage love out a lot more now and days. We ended up competing with a dozen other events and a dozen partners besides and we just didn't get as much share of the spotlight. Still we had a cap of around 3,000 viewers and a strong 500+ for most all of the event. Not bad if I do say so myself.
My todo list for the next 11 months looks something like this I suppose...
- Figure out some more RTMP repeater automation, if necessary
- Figure out audio compression. I'm not happy with the audio filters we used to attempt to auto-balance runs
- Attempt to re-code our restream tech, because I think some major improvements could be found here
That third item is the big one. We use a custom-coded system to do the marathon restreaming. It lets us switch runs with a single command in chat. It's great. But I want to add a couple of things and it's both in a language I don't know, and was written by someone with the intent to maybe eventually monetize it. So I'm making my own as a side-project. Mine's a terrible melange of Flask and Javascript, but it already has viewer-facing feature parity with the original article. I plan to go a step further and add some really nice host and admin tools and generally polish it up into a "Marathon in a box" solution anyone can use. More on that later-- I don't want to talk too much about plans in flight.
I spent some time trying to narrow down some favorite runs but honestly 75% of the event was "favorite run" for me. I'd say just go watch the whole thing. Again, I came out of the event a bit pumped and already planning for next year.
tags: personal, big_bad_gameathon