Wirecast is a fairly agile encoder with many features at a competitive price point. Most notably the in-build overlays and switching, plus its usage of x264 had long made it a great platform for many users.
This brief write up will cover using Wirecast in a less traditional means, as an RTP encoder to deliver a stream locally using unicast. An important note here is that RTP has both unicast (one to one) and multicast (one to many) methods of delivery, the scope of this write up will cover unicast as multicast can get a bit messy in larger networks.
Prerequisites:
- Wirecast 8 (written based on v8.0.0)
- Content to stream
- Hardware capable of encoding the desired video and audio rates/codecs.
- VLC (written based on 2.2.6)
Step 1: Opening Output Settings
The output settings dialog is accessible through the top bar in the “app menus” section of the menu bar.
Step 2: Adding a Unicast Stream to the Outputs
From the drop-down box, select “Unicast” — this presumes you’re packaging as RTP. Seemingly Wirecast doesn’t support direct UDP streaming.
Step 3: Update Unicast IP Address of Receiving Host/Decoder
Because unicast is a 1:1 connection with another device on the network at this point we essentially need to point it in the right direction. For the sake of this demo, the host is my local machines address. This could be any host reachable on the network.
Note: You could modify any other encoding needs here, though it appears this is the potato grade encoder instead of x264 so few options for encoding tuning are available. Limited stream packetizer settings are exposed, but the defaults should work well for most cases.
Step 4: Generating the SDP File
VLC requires an SDP (Session Description Protocol) file to understand the contents of the incoming RTP stream. Some encoder/decoder setups make assumptions about the payload in the stream, VLC wants you to clearly define what’s inside so it knows how to handle the contents.
The good news is Wirecast will gladly spit this out for you – easy.
From the output settings screen select the settings cog to the right of the “Destination” line. You can store this file wherever you’d like, ultimately you’ll open it on the receiving host so a flash drive may be a great choice.
Step 5: Starting Your Wirecast Encoding
The “Start / Stop Broadcasting” drop-down is accessible through the top bar in the “app menus” section of the menu bar. At this point, you can start the RTP stream.
Step 6: Decoding the Stream
On the receiving host, open up SDP we generated previously. VLC should be associated with the .sdp file type, if it doesn’t just load it from the file “Open File” drop-down like any other media you wish to play in the application.
Step 7: Quality Control / Profit
Kick back and watch the stream for a bit, be sure it’s stable and doing what you expected. You may notice on the first load that the image takes a while to resolve. I suspect this is because the encoder doesn’t have a set interval for I-frames. This is a tweak that can be applied to the encoder settings (although they’re limited this one is present, they referred to as keyframes). Decreasing the interval will improve macro blocking error recovery as a complete image frame will be sent more frequently. It’s worth noting this decreases encoding efficiency, to supplement if bandwidth allows you may crank up the bitrate a bit.
Fantastic article!
Thanks Daniel. One challenge is the RTP encoding options with wirecast seem limited and don’t allow graphics card encoding. Have you found this to be true?
RTP itself shouldn’t be limited to just CPU encode but, Wirecast doesn’t appear to allow you to select QSV or NVEnc. Appears to be an application limitation as of this posting.