Whole House Live Streaming On A Budget
Let me preface this by saying this system is by no means perfect. You may need more or less depending on what you’re doing. Things like saving all your broadcasts locally will incur more of a cost in storage.
The goal is to stream 720p at 30FPS at a minimum. The system can then be upgraded from there to provide whatever additional power is necessary.
I decided, as a proof of concept that I wanted to see if I could make this work. My roommate throws a video game party called GamesAtSams every Saturday. I figured this would serve as a good test bed for such a system. We have one main TV with multiple consoles attached and then a PC lan party. So lets look at the tools at hand.
AMD FX-SERIES X6 FX-6100 3.3Ghz
1x Blue Yeti
1x MS Studio Webcam
1x Elgato HD60
1x HDMI 5 Port Switcher
3x Gigabit 8 port switches
As much cat5/6 and ends as you need to reach all the places you plan to put PCs.
For software I’m running Windows 7 on the streaming server. As of the time of writing Windows 8 and the Elgato software have quite a few bugs and stability issues. Virtualbox for running a second virtual computer on the physical one we’ve built. Ubuntu Server for the virtual machine. OBS for PC clients and X Split for the primary streaming box.
The PC is the primary streaming box. All streams pass through this box. X Split is the streaming client of choice. The reason for using X Split vs OBS is that we’re going to need to bring in several RTMP sources and OBS for some strange reason likes to reinitialize the stream connections every time you change scenes. This means 3-5 second black screens each time you scene switch to PCs. Clearly this is sub optimal and X Split activates all streams when you connect to them and seems to maintain them. On the rare occasion it doesn’t/can’t keep them live pre-viewing a scene will start the stream before you actually click to switch.
Audio and Video for the main living room of the house is provided by the Blue Yeti and MS Studio Cam mentioned above. The mic gets placed as close to front and center as possible and has the gain turned up a bit. It’s not a perfect science just yet. I’m considering hanging it from the ceiling to get it well centralized. The webcam goes front and center featuring the couch and chair in the livingroom.
I’ve setup VirtualBox with Ubuntu Server running Nginx configured as a sort of internal RTMP ingest server similar to what Twitch runs. I used the instructions found here. The instructions say that this can be run from a raspberry pi as this is simply redirecting or rebroadcasting and not doing any form of reencoding so resource usage is extremely low. Even so I’m paranoid and I’ve broken this server off two cores of our six core processor and 2GB of ram. This virtualization configuration has some neat up sides. The primary one being that you only need one set of hardware to run two machines. The second is that bandwidth internally between the host OS and VM is massive. Honestly I need to experiment but since the above instructions state they’re running off a Pi I could probably bring the VM down to 1 core and only 1GB of Ram and probably be fine.
The network switches are of course for running a LAN party that our PC clients will be on. Pretty straight forward.
At this point the consoles on the main TV are ready to be streamed. They’ll show up just by adding the Elgato in X Split. All that remains is to add PC clients and point them to the RTMP server. If you followed the guide I linked to above then you should be able to setup OBS on each client computer just as you would if you were going to point them to twitch to stream but instead point them to “XXX.XXX.XXX.XXX/live” and a stream key of whatever you set. Where the X’s are your RTMP servers internal IP address. Be sure you are setting each clients streaming bitrate equal to whatever you have going out to twitch in your X Split configuration on the streaming server. This prevents your streaming server from having to re-encode the streams which puts a lot of load on the streaming servers CPU and could effect your stream quality. Add each RTMP stream to your X Split scenes and you’re ready to rock.
You can now switch between anything on the TV and any of the PC clients on the LAN at will. Be careful though streaming even to an internal server is just as hefty on the PC clients resource usage as streaming to Twitch. I’ve gotten some successful streams out of i5 laptops and AMD A10 quad core desktops running light weight games like League of Legends but it’s always a bit of a crap shoot unless the system is a little beefy.
Recently our LAN has extended PC players to the basement which is a whole second floor. I’m currently extending camera and mic to the basement by using an older i5 laptop as another RTMP stream back to the stream server to get video down there as well. It all works very nicely.