How to stream the Elgato HD60 to an RTMP server
If you’re someone who is interested in the concept of “streaming” online, you’ve likely crossed paths with, or heard of, an application called Open Broadcaster Software (OBS for short). This open software is cross-platform and available on macOS, Linux, and Windows operating systems. OBS can be used to broadcast everything from simple streams to complex scene-driven . I’m going to show you how to push your HD60 video feed to an RTMP server and consume it with OBS.
If you’ve used OBS before you know how hard it can be to get system-level support for devices like capture cards and video inputs. On Windows you can add a new “Video Capture Device” source and use the Elgato HD60 capture card directly without any extra processing involve. On macOS however, you can only use the Game Capture HD software designed for the HD60 and cannot use the video feed from the HD60 directly in OBS.There is an alternate solution for this limitation however (if you have the processing power): setup an nginx server running the Real-Time Messaging Protocol (RTMP) plugin.
This gets even more simple when you introduce nginx-rtmp, a pre-configured nginx server image with the RTMP plugin; you can run it in a docker container configuration free. The advantage of using a docker container to run this is that it will allow you to easily get a streaming server up and running with the least effort. The video feed generated by the streaming server can then be used as a video feed within OBS by adding a new “VLC Video Source”. The caveat here is that the video feed will be delayed by a significant amount (I’ve seen as high as 2600ms) so your mileage may vary.
The reason I wanted to even to this in the first place was because I have a Lumix G85 camera that I wanted to add to OBS as a video capture source; the demos here make use of the G85.
- If you have Docker installed, open a terminal window and run
docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp
This is going to start a docker container using a pre-configured nginx-based image with the RTMP plugin installed and running on port 1935 that will act as the “streaming account” below.
- Next, open the Game Capture HD app and add a new streaming account with the following information:
- Name (whatever you want)
- RTMP URL (rtmp://localhost:1935/live)
- Key (optional)
- Crank the bitrate knob up to “8mbps/1080”
- Click the green (globe) stream button and wait for it to say “ON AIR” in the sidebar
- If you see the “ON AIR” message, you’re good to go.
- Open a VLC window
- Click File > Open Network in the menubar
- Paste in the URL from above (rtmp://localhost:1935/live) and click Open
- Once you’ve done the above steps, open OBS
- In the sources column click the plus sign, then “VLC Video Source”
- In the Properties window, click the plus sign beside the Playlist area and select “Add Path/URL”
- Take the URL (rtmp://localhost:1935/live) from above and paste it in, then click OK twice
- You should now see your video feed in OBS!
- The following is optional if the video latency isn’t lining up to your audio input
- Right click the new video source you added and select Filters
- Click the plus sign, then select “Video Delay (Async)”, then Ok
- Tweak the delay value to 2500, and click Close (you may have to do this a few times to get the video feed in sync with other possible video feeds you may be displaying already)
Having done all this, I came to realize that this isn’t the most efficient way to get a video feed into OBS without using the Window Capture source, however this could work in a pinch if you have the processing power available to both capture the video, relay it to OBS, and stream it back out.
When it comes down to it, if you have the ability then use a Windows computer for much better better support in OBS!
- Original concept for this demo https://lambdan.se/141.2016.12.18-elgato-macos#update
I want to hear from you, dear reader 😄
If you enjoyed this content, please let me know on Twitter.