Gadgetoid

gadg-et-oid [gaj-it-oid]

-adjective

1. having the characteristics or form of a gadget;
resembling a mechanical contrivance or device.

HDMI capture network broadcast with Azulle Access 4, OBS and NDI

I picked up an HDMI capture card recently to hook my barely used Canon EOS M3 up to my PC as a fancy webcam. Since I’m not going outdoors these days it felt like a better use of the camera than gathering dust in a drawer. Unfortunately Canon’s baffling market segmentation make the expensive EOS M3 one of the many that doesn’t support their webcam driver, so I had to get creative.

Fortunately the M3 can be modified with CHDK, which supports clean HDMI overlays out of the box by applying a few additional settings in the CHDK menu. I wont go into detail because this article isn’t about my camera, but about my journey to get my HDMI capture card working.

Canon DSLR modified with CHDK for clean output
“4K” USB 3.0 capture
Wired into @azulletech Access 4
Capturing video and audio with OBS
Broadcasting over WiFi with NDI
Capturing from my laptop in OBS
I’m not screaming you’re screaming pic.twitter.com/PkjGH4o392

— Phil Howard (@Gadgetoid) October 15, 2020

The Problem

Due to some frustrating glitch with USB 3.0 on my Alienware m15 r2 laptop I can’t seem to use any audio or video capture devices that use more than a paltry amount of bandwidth. My Yamaha MODX8 has serious audio stuttering issues when connected, and – unsurprisingly – the HDMI capture card had the most frustrating and consistent video flicker. Rapidly wiggling my mouse would fix the problem in both cases… but this certainly isn’t feasible for normal streaming or videoconferencing setups. I mean… you know what that’s going to look like on camera.

The Solution

It struck me that using an entirely separate computer to capture from the HDMI capture card and my Zoom H6 microphone would sidestep this problem. All I had to do was get the video and audio from that computer, into OBS on my laptop. Easy, right?

Well… no!

OBS, y u no? VLC y u hate me?

OBS only support sending video streams to… streaming services. You can fire a stream to Twitch, but you can’t fire a stream into the abyss of your network for another OBS instance to pick it up. At least… not with vanilla OBS.

VLC seemed like the logical solution to this problem. VLC has a “Streaming” option in the menu, which steps you through a painful list of baffling options that require a degree in throwing A/V over the network to understand. This menu is effectively a graphical interface to generate the right command-line to fire up a VLC streaming server, and it’s a somewhat underserviced niche of VLC. For love nor money I could not get an rtsp stream – or any other stream type – out of VLC to fire over my network for capture by another computer.

Bringing yet more software into the mix I discovered that some users were hosting a local rtmp server to rebroadcast their streams across a home network. I set about compiling nginx and the ninx-rtmp-module from source in WSL on both my laptop and the Azulle Access 4, but the results were not promising. I was able to connect to the rtmp server and begin broadcasting a stream, even seeing the server report that a stream was connected. The stream would invariably stall and crash OBS. This solution wasn’t to be, either!

NDI to the rescue!

I’d never heard of NDI until I took to Twitter with my streaming woes and was rescued by a mutual with far more experience in this field than me.

NDI is available from GitHub as an installer. This installs both the OBS plugin and the required NDI tools.

This is handy, since downloading the tools from their source requires filling out one of *those* onerous “we’ll email you the link” forms. No thank you.

Don’t work for them do you? Before I start swearing 😀 pic.twitter.com/fBmZWeoafa

— Phil Howard (@Gadgetoid) October 15, 2020

Once the plugin is installed a item is provided in the “Tools” menu of OBS which allows you to- rather invisibly- stream the OBS output canvas and/or the OBS preview canvas over the network. The method of streaming is extremely opaque and configuration options are – as near as I can tell – basically non-existent from the server side.

OBS seems to magic stuff over the network using NDI and on the receiving end it’s just…. there. pic.twitter.com/h1XKlyU6kt

— Phil Howard (@Gadgetoid) October 15, 2020

On the client side the same OBS plugin gives you an “NDI Source” option when you add a new source. This has a few options but most notably is the “Source name.” If your source is streaming correctly, and NDI on your destination computer can see it then you should see a pre-populated list of choices here. Pick your desired source and it should Just Work.

The result

With my byzantine setup fully integrated I had:

* A Canon EOS M3 connected to –
* A cheap Amazon HDMI capture card connected to –
* An Azulle Access 4 connected to –
* My laptop via an Ethernet cable.

With Windows network sharing I was able to get the Access 4 to connect via my computer, allowing the video stream to be sent exclusively via LAN for stability.

This setup also includes my Zoom H6 microphone, connected to the Access 4 and then streamed along with the video. While the microphone works fine directly connected to my laptop, I figured it would be easy to sync the audio to the video if they were streamed as one unit. Additionally I could employ the Access 4 to run a noise reduction filter with no performance cost on my receiving laptop.

This setup is ridiculously contrived and requires me to:

* Power on the EOS M3
* Power on the Zoom H6
* Boot up the Azulle Access 4 and start OBS

But… it works!

Latency testing

The first test of my configuration ran over 5G WiFi and the video latency was noticeasbly terrible. Enticed by the “Low (Experimental)” latency option I gave it a try. This brought latency down from multiple seconds to some 170ms:

Wow, streaming video from an @azulletech Access 4 using OBS and NDI has a latency of around 170ms compared to my integrated webcam.

That’s…. not bad!

(Over 5G WiFi) pic.twitter.com/xvRF5lbJDP

— Phil Howard (@Gadgetoid) October 15, 2020

Could I get better latency by wiring an Ethernet cable between the Gigabit Ethernet port on my laptop, and that on the Access 4?

Well, no:

Haha! I don’t have an ethernet router!

I used a direct point-to-point wire, getting a 1Gbps link speed and latency is still around 190ms so – surprisingly little gain! Probably more stable though. pic.twitter.com/3KbUVYSVo8

— Phil Howard (@Gadgetoid) October 15, 2020

Latency actually went up from 170ms to 190ms, this is probably within some margin for error and since “Low” latency mode is experimental I may be pushing against some kind of limit.

What if I set latency back to “Normal (Safe)”.

Well, I get ~200ms instead of multiple seconds now:

yes! Wifi is definitely turned off. I just switched back from experimental low latency mode to regular latency mode and the improvements are much bigger. Now the regular mode is about as good as low, whereas before the delay was multiple seconds. pic.twitter.com/1ii2Qc0hPI

— Phil Howard (@Gadgetoid) October 15, 2020

So hopefully this will be a more stable connection because Ethernet and also because I’m not using an experimental mode. One thing’s for sure- a small latency penalty is a reasonable price to pay for elminating the frustrating flicker issues the camera had when directly connected to my laptop.

It also frees up some USB ports, too! Instead of tying up two USB ports, it’s using one of my two usually unused Gigabit Ethernet ports (one’s on my Anker PowerExpand Elite Dock).

Now- the real question: Can I leave all this stuff running 24/7 and just hook up to it when I need to stream? Having to turn on a microphone and camera, boot a computer, start OBS and pray that something doesn’t go wrong with NDI every time I want to stream on Twitch or join a Zoom call might be a little too much to handle.

What of the Azulle Access 4?

I had to set up TightVNC on the Access 4, since using Windows RDP would block access to the microphone- despite allowing me to capture video from the camera. With VNC I can service OBS and set up/tweak devices without having to have a keyboard plugged into the Access 4.

VNC set up and the @azulletech Access 4 just shoved unceremoniously behind my piano where it’s turning my microphone and camera into a low latency direct Ethernet stream. pic.twitter.com/6pe6OM2git

— Phil Howard (@Gadgetoid) October 15, 2020

The Azulle Access 4 is also small enough to hide behind my monitor along with the HDMI capture card. In fact it’s not much bigger than the capture card itself. This is a great use-case for this tiny little stick PC. It seems to handle grabbing my camera and microphone and chucking it over Ethernet without breaking a sweat, although it gets a little warm.

Thursday, October 15th, 2020, Mini Computers, Professional Audio.