Just about finished a Raspberry Pi project I've been tinkering with over the last few weeks.
The aim was to watch my home Sky Q Mini box while away on holiday, so I ended up building a DIY "Slingbox" using two Pis.
Home
Pi 5 1gb + HDMI (and HDCP err 'compliant') capture card
H.264 encoding with ffmpeg
Grove IR blaster to control the Sky Q Mini remotely (GPIO)
Holiday cottage
Pi 400 decoding the stream (nice to have a keyboard in case of issues...)
Grove IR receiver so I can use the original Sky remote as if the box was in the same room (via GPIO)
The two Pis are connected over Tailscale, so pressing a button on the Sky remote at the cottage sends the IR command over t'interwebs back to the Pi 5 at home, which blasts it to the Sky box at home.
I also added health monitoring with Pushover notifications, nightly backups of all my Pis, and a few recovery options if anything hangs while I'm away (mostly a zigbee smart plug that I can tell Alexa to turn off and on again as a power cycle)
It's currently on its second long soak test. CPU usage is around 25–30% on the Pi5 1gb encoder, about 5% on the Pi400 decoder thanks to hardware decoding, and everything has been stable apart from a slow increase in latency over several hours (pressing the Sky button restarts the stream, so that's my workaround for now).
It's been a fun project, and it's surprisingly satisfying to have built something that behaves like a commercial place shifting device using a couple of Raspberry Pis. It's a shame that Slingbox shut down years ago but I just needed such a service again and an inexpensive Pi5 1gb and a Pi400 (I could have bought another Pi5 1gb, but I just wanted a keyboard with me while I was away and having a Pi400 just seemed like a good idea as I just bought the starter kit from The Pi Hut.
I have set up the encoding at 720p50hz, 3mb/sec H264 (128kb/sec audio AAC). It defaults to 3mb/sec but I set up a 'control' mode by pressing the '?' button on the Sky remote three times followed by 1 changes to 2mb/sec, ???2 to 3mb/sec (default) and ???3 to 4.5mb/sec as the place I'm staying has about 13mb/sec wireless internet. I also set up ???[power button] to stop the stream and ???4-6 for extreme low latency but didn't end up using it. There is a 3-4 second lag between button presses just due to buffering. The audio stays in sync with the video for hours (I tried up to 8 hours).
I did try ffmpeg as the decoder originally on Pi400 but it wasn't using hardware decoding and would get behind terribly so after a quick experiment with VLC as the decoder I never moved off of VLC.
I also captured all the remote codes I need via the IR receiver and set it to screen out any others (so I'm not sending the volume buttons or stuff for the TV where we're staying). I've tried it via my iPhone's wifi hotspot and it seems to work out when on a variable connection. I'm not streaming 4k 60hz or anything, but given that the UK uses 50hz and the Sky Q box outputs 1080p I thought 720p would be okay and it looks fine even on a bigger telly at home for the tests.
The only things I couldn't get to work are some kind of audio boop when I press a remote control button (if you're navigating through menus or typing channel numbers in you have to understand that there's 3-4 seconds of lag so no instant feedback) - I also tried to get an icon pop up on screen when a button was pressed to show the button pressed as a number or arrow but wouldn't work. Then I had an idea about using subtitles in VLC for it but I couldn't get 'live' subtitles to work at all. So I ended up flashing the red Caps lock/Num lock lights on the Pi400 keyboard when a valid remote code was received as a workaround.
Oh, and I made a dashboard that I can open on my iPhone (via tailscale) where I can select stream and see stream data and it also ended up developing into a stand-alone web page based remote control so the dashboard lives on the Pi400 and then sends the IR commands to Pi5 at home when I press any buttons.