Problem: Live Stream Three Inputs
Recently I had a problem come up that needed to be solved with a hardware & software solution. Heads Up Warning: This happened to be a work problem, so I will intentionally be somewhat vague about the content. This may make some of the choices seem weird, but at the end of the day, trust me, it worked for the particular need.
There are three independent video sources that exist in a room. Each of these video sources is a different combination of signal type and resolution (fortunately they are all digital signals). The three video sources need to be composited together into a single feed that can then be streamed live to an undetermined amount of users spread across the globe (10 years ago that would have been scary and really costly, but in 2016, not so much, thankfully). There are a number of different ways this can be accomplished depending on budget, system complexity, and system footprint. I went in with a moderate budget in mind, and a footprint of a single Pelican Case for transport. I wasn't too concerned about complexity since I would be the only person operating the system; it just needed to be repeatable.
DIGITAL VIDEO SIGNALS
- VIDEO SIGNAL 1: 1920x1080p@60 via HDMI
- VIDEO SIGNAL 2: 1920x1080i@30 via HDMI
- VIDEO SIGNAL 3: 1680x1050@60 via DVI
Ok, so here is what I did! First let's talk about hardware and how I connected it all.
- 15" MacBook Pro (2016 - Max Specs): Serves as the hub of the entire setup. This system has 4 ports for I/O and I used them all! (2) USB 3.0 Ports and (2) Thunderbolt Ports.
- UltraStudio Mini Recorder: Captures '1920x1080p@60' video signal from HDMI and feeds into MacBook pro via Thunderbolt.
- UltraStudio Mini Recorder: Captures '1920x1080i@30' video signal from HDMI and feeds into MacBook pro via Thunderbolt.
- AV.io HD: Captures '1680x1050@60' video signal from DVI and feeds into MacBook pro via USB 3.0.
- USB to Ethernet adapter. All network traffic is going over ethernet to ensure maximum throughput for stream output.
- GoPro Type Camera: This camera is for capturing a general 'room feed'. It is a very small battery operated camera which means I can put it almost anywhere without being intrusive to the people it is recording. Nice wide angle to really get the whole room.
- Pocket Cinema Camera w/ lens: This allows me to capture screen feeds of lower resolution equipment without needing a scaler with every conceivable input and output. Set everything up correctly and you would never know it's a camera pointed at a screen. Since I never know what sources I will be up against in a given environment, this is a foolproof way to ensure I can get the feed.
Streaming Hardware Configuration Diagram
- For the actual distribution of the stream, I am using http://Ustream.tv. There are an almost limitless number of streaming services available today, and there may be one more appropriate for me, but Ustream offered exactly what I needed for a reasonable price, and most importantly allowed me to lock down the stream with a password so I can manage who is viewing. (Yes that is not super secure, but for this purpose it was good enough)
- In order to effectively composite 3 feeds into a single feed, I needed some kind of software component. Since the events that would be streaming were live, it made sense to have the ability for 'live event extras' like switching, lower thirds, and title cards. I decided to go with Wirecast from Telestream. (When I was testing this whole solution out, it was on version 6. This worked ok, but was hitting the CPU really hard and the system ran at about 75% utilized consistently. Good news is that Wirecast is now on version 7, and enables the use of the GPU so CPU load is WAY LESS!)
Viewer Interface Mockup
There you have it, live streaming 3 video feeds It was a fun exercise and the result was really great! As always, I hope this was in some way helpful for someone out there looking to do something similar. Feel free to reach out with any questions!