Build your own Streaming Bridge with a Raspberry Pi!

Blog post version:


Thanks so much for putting this together.

I just received the last bit I needed for another Raspberry Pi rig (my 5th now, yeesh) and walked through your tutorial today. Surprisingly, I nailed it in the first try, even though I was nanoing on a 1080p 7" display (never fun) and a keyboard I absolutely despise.

Now I have to step out of my comfort zone and figure out port forwarding so I can have remote feeds.

Really hoping that eventually I can have this Raspberry Pi sit as a permanent input on my Atem Mini Pro to serve as an RTMP catcher and a pseudo HyperDeck leaving my three other inputs for cameras.

1 Like

Nice! Glad it worked for you! The first time I did this I also used a 7" monitor at 1080 and wow was that a challenge!

One of the next things I’m doing is documenting a good way to avoid needing to set up port forwarding so that it’s easier to do remote workflows. I have a few ideas but I need to run through the setup flows a few times to see how straightforward each one is.


Thanks for the great solution

For the recording side of things.

How will this work? If you can give abit more info in this please.

And can you setup more than one rtmp stream in the ATEM if I want to stream to 4 PI’s?

Will that be able…

The Raspberry Pi just outputs the stream over its HDMI port. You could configure the Pi to also record the stream to disk with some additional nginx configuration.

The ATEM will only stream to one destination, but you could have it stream to one Pi that then streams from it to several other destinations.

There’s lots of possibilities with this, it’s worth reading up on the RTMP module if you’d like to learn more!

Thanks for the reply.

I am struggling with the recording of the stream. Can you help with that please.


Recording on the Pi itself? You’ll want to add these “record” lines into your config file and choose a folder to record into. There are a few examples there. The best thing to do is just start trying things out to see what works.

Hey Aaron, love the DIY Streaming Bridge solution; I’m actually trying to get this going on a small Intel NUC running Ubuntu 18.04…

I have created an rtmp profile that records the stream locally on the NUC as a simple way to capture on-demand HD output from my ATEM Mini Pro as the USB-C output is connected as webcam for MS Teams, Zoom etc… it feels like I have a second USB-C output :slight_smile:

Solution works brilliantly to record content, using the exec_record-done option to re-encode into mp4 once the stream finished…simply awesome. thank you…

where I have an issue is getting a second profile setup to mimic what your raspi solution does and restream the stream back out via the HDMI display. OMXPlayer doesnt appear to be available for 64bit Ubuntu so looking to use the Exec command with VLC player… tried several options but cant seem to get it to spawn and play out over HDMI when it goes live…

any thoughts on VLC command line to work with NGINX RTMP as above.

many thanks to all for any suggestions.

Regards, Martin

Yeah omxplayer is a special raspberry pi thing, which is why this tutorial works well. I don’t even know the hoops you have to go through to get it to work on generic Ubuntu servers. The nice thing about omxplayer is you don’t even need the GUI loaded up because the GPU on the raspberry pi is in control of everything which is not how a normal Linux computer works. I’m sorry I’m not much of a help here but that’s the reason I used the raspberry pi specifically for this

1 Like

I would recommend trying mpv for that, I’m not sure if it works without Xorg, but it should be quite simple to setup (along the lines of mpv -fs rtmp://… )

thanks, will give that a try…

everything else is working great - with a samba share published for quick access to recordings, really not impacted now by only having one USB-C output on the ATEM

Hi @gimzo,

thanks for help…I’ve moved it on slightly…

whilst I’m streaming on-air from ATEM, I’m able to stream it back to HDMI on my ubuntu box simply running mpv -fs rtmp://xxx from the terminal window - worked like a charm.

it didnt though from within the nginx conf so sure i had a typo or needs full path…will continue to investigate and report back

still thats much further than ive been able to get so thanks…

The nginx user might need to be added to some linux groups in order to use that command, or it’s possible it won’t work from within nginx at all because it needs the context of being logged in as a real user where you get access to the GUI. That’s the special part of the Raspberry Pi that gets around that.

Hi Aaron,
I have the Pi streaming bridge working great and use it as the main output on an Atem mini pro, so that I can still keep the multi view and can record the program output on a Blackmagic video assist 12G the 7in version. Video wise this works great the problem I seem to have is click sound every few seconds this is audible when you are viewing the output as well as on the recording. This sound does not seem to happen when connected to a normal tv. Has anyone else had this problem and is there anything that I can check in the settings that could be specific to the video assist. Sorry if this is a long first post but this problems means that I have to keep swapping in the audio recorded on the camera rather than the final output.

Looks like a dropped frame, does Video Assist show any dropped frame warnings? Try a different SD card.

It isnt dropped frames as there are no warnings and you can hear the sound even when you are not recording. The recorded video is all ok but you can see where sound is on the the waveform.

That’s really strange, I’m not sure actually. Maybe try some of the other HDMI modes from the raspberry pi?

I have tried changing the settings to make sure the output is correct and still the same problem.
I have recieved my Atem streaming bridge now and that solves the problem so will take a look at a later date.
I have had a play around with the streaming bridge and love the way the cache works between the Atem and the streaming bridge. If they lose connection the cache on the Atem fills up and then as soon as they regain connection the Atem seems to push the entire cache down to the streaming bridge so that the cache on the Atem is empty. Thanks for all your videos they have given me a lot of ideas for my work.

Thanks so much for the tutorial Aaron!
It’s brilliantly done and very easy

I’m new to the Raspberry Pi as it just arrived yesterday
Tried to follow your tutorial this morning (I was on my home 55” as the 7” BMD video assist 4K is far too small…ahahahahaha) and it worked pretty much at the first attempt

I tried either connecting ATEM Mini Pro and the Raspberry Pi to the router or just connecting them directly and they both work fine!

I have a question, do you guys think it’s possible to shorten the latency?
If so, what’s the minimum?
I’m getting about 2 seconds at the moment and it’s too much for a specific application I want to try it on

Many thanks :pray:t2:

This looks amazing, I was wondering if there anyone knew of a way to output the RTMP stream as NDI from the PI as well?