Charity Streams, Learning, and Improvements for the future
Today is the 6th of November.
Last night, I survived the toughest thing I will do this year.
I streamed for 25 hours in support of Extra Life on Extra Life Day. It's not the toughest thing because raising money is hard, or streaming is hard. Those can be as easy as you want them.
It's the toughest thing because of the energy needed to put everything together, to make the stream worth tuning in, for new or returning supporters. A full day stream is no different than a marathon. The concern becomes less about what are you going to do when the camera is rolling, but how you're going to support yourself. Twenty-Five hours is more than just snacks and energy drinks to keep pushing forward, you're awake for at the minimum of 4 decent meals. You need to take care of your body.
You have to plan how you're going to fill your time; are you just going to sit there and play games and not interact with anyone who tunes in? Did you come up with incentives and milestones to entice supporters to tune in and donate?
The real linchpin is doing it with a group of people and friends to keep you moving forward, even when you're at your lowest in the 22nd hour and wondering if you can push through.

Even though I call the experience the toughest thing I'll do, even though I may not hit my personal goal for money raised, the amount of satisfaction that I get taking this on to raise money makes the entire event worth doing and looking forward to ever year I can do it in the future.
This year, outside of the expected stuff (unfortunately, no cooking stream this time, no room in my current kitchen) I thought of what I could do to try and increase the reach. If anyone knows, it's nearly impossible to be found on twitch randomly, especially if you are a new or small-time streamer. The only way to grow is to branch out into other platforms and leverage them for growth.
I decided to try and take that somewhat literally.
I wanted to stream to Twitch and YouTube simultaneously. Sounds fairly simple, just run 2 copies of OBS Studio, no? Well, it can be that simple, if the internet into your home/apartment/dorm is strong enough to handle it, and the device you are streaming from has enough horsepower to do that.
The answer is to use something like Restream. It's free to use for up to 2 platforms at once, but if you want to remove the Restream branding from your video, it's $16/month. Personally, I wanted no extra branding on what I'm uploading, and that feels expensive for a once-a-year thing. So, I decided to try and run my own restreamer.
How did it go?
Surprisingly well actually. The setup is pretty straightforward to just get rocking right away. YouTube gives you a short delay by default if the stream signal disconnects, usually you're able to reconnect to the same session without having to change the stream's URL. Twitch has an additional "Disconnect Protection" setting that you can turn on that gives you a pretty decent window, it's supposed to be about 90 seconds, but thankfully due to a bug the stream is still live until Nginx was restarted. Overall, I'd definitely set this back up for next year's stream. Will probably be doing a few more throughout the year, so stay tuned for more information!
So, you want to try to set up the same thing? How does it work? Where do i get started?
Let's start with how the whole thing works:
OBS Studio uses a protocol known as RTMP to broadcast the data to whatever streaming platform or endpoint you want to be "live" at.
There are quite a few projects out there that allow you to set up your own rtmp server, but nearly all of them (from what I've been able to find) boil down to a single module for nginx. That's awesome, we'll just install the module and start going!
.... Woah, pump the brakes there speedy. It's unfortunately a little more complicated than that depending on your platform of choice. Ubuntu, it's as simple as doing sudo apt install -y nginx nginx-rtmp-module, rpm-based systems don't have a compiled package, Arch can find it in the AUR, and there are docker images, but most have not been updated in at least a year (at time of the stream, but the rtmp module hasn't had updates since May 2021, though).
The best place to get started is more than likely the same thing I started with. I had set up my restreamer by following this post on DigitalOcean. I ended up automating the setup using Ansible, so I could set it up consistently for future streams while only paying for what I need.
If you’ve tried that post, and now you want to use something that’s a little more automated, here's the repo containing the playbook. Some things about it. I have group_vars setup, normally, as a vault file to keep my secrets configured. The secrets are the IPs to limit who can stream to it, and what services are configured to be streamed to with their respective api keys.
The `nginx.conf` is setup and templated to build out based on the allowed_ips and the services I want to stream to.
The things I hate:
1) I have no statistics endpoint for stats on the stream. I was unable to get it working in time for the stream with the playbook or by hand.
2) I'd prefer for my end to be rtmps (TLS for encrypting the stream)
3) A real nice to have would be able to pick what services i push to dynamically. I'd have to build something to handle this, but it's not a priority.
4) A dockerized version so I'm not tied to just spinning up an ubuntu host. I could use or repurpose one of the existing ones, and I might, but i want to get the rest working, including rtmps first.
I'll do an update or a follow-up post once I get some of these fixed and working!
If you've made it this far, thanks for finding this post. I means a lot that as niche as this information is, that there's someone out there trying to do the same things. Glad I can help, even if it's just future me.