I am starting a mini-series of posts on how to set up Nginx-RTMP and WordPress to create a local version of Twitch.tv. I will post detailed guides on installing and configuring all software required for this project.
Project requirements are as follows:
- 1 or 2 Linux computers/VMs. All testing has been done with Ubuntu Server 14.04 64bit.
- Nginx-RTMP with the stats plugin compiled.
- A working WordPress installation. (not covered in this series)
- Various command line utilities that will be covered in depth during the guide.
The end product will be a fully functional streaming server capable of handling 1gbps of video traffic, with a custom WordPress frontend for users to use to access the streams. The entire system is automated and requires minimal user input. A basic use-case is below.
Bob wants to stream his Dota game for the entire LAN party to see. The LAN has a limited bandwidth internet connection, so using a service like Twitch.tv is out of the question. However, the LAN execs have configured a local RTMP solution for him to use.
Bob configures his streaming software like he would normally, except he points his stream to the local RTMP server. He uses his gamer handle (b0b) as a stream key. At this point, Bob’s job is finished. He can start playing his game.
On the backend, a script reads that a new stream has started. It checks to see if this stream has been played before, or if this is a new stream all together. If its new, it adds the stream to the local database and creates a page on the WordPress site dedicated to Bob’s stream. It then runs through every stream that has been registered to the server during the event. If the stream is active, like Bob’s, it updates the page with a JWPlayer configured specifically for Bob’s stream. It also generates an .m3u file with a playlist entry pointing towards Bob’s stream mount point. Viewers can just navigate to Bob’s page on the WordPress site and start watching from within their web browser.
If some of the previously registered streams are offline, it updates their page with an offline message telling users to check back soon. By using this process, every single page is updated every 60 seconds via a cronjob.
So that’s a basic overview of what this setup can do. It can listen for, create, and distribute live RTMP streams to viewers automatically and painlessly. And because all traffic is local, no internet bandwidth is wasted for redundant connections to websites like Twitch.tv or hitbox.
I will be making many more posts about how to set this up for your own event, so stay tuned. If you have any questions or comments, please leave a message below.
Part 1 – Install nginx rtmp tutorial here!
Part 2 – Customize WordPress tutorial here!
Part 4 – Virtual Machine Download here!