A fully wireless-camera IRL streaming rig: a Radxa Rock 5B+ running BELABOX, with a DJI Pocket 4 sending video over WiFi instead of a cable.
Most IRL rigs run a cable from the camera to the encoder. This one doesn't — the Pocket 4 is completely untethered from the bag, so you can hand it to someone, mount it, or walk away from the backpack.
Used live on twitch.tv/Caxyhh.
| Part | Notes |
|---|---|
| Radxa Rock 5B+ (16GB) | 8GB works too |
| Active heatsink / fan | NOT optional, though you can choose another cooler |
| 3D printed case | I drilled antenna holes in the sides — two per side, four total |
| Power bank, 25,000 mAh / 140W USB-C PD | ~16 hours on a full charge. The board is sensitive to underpowering |
| USB-C cable rated for 100W+ (5A, e-marked) | Power bank → board. A cheap cable that can't carry the wattage looks exactly like a board problem |
| Small USB fan | Aimed at the Pocket 4 — see notes on overheating |
| Backpack | Summit Ridge Mini 11 Inch Mesh — anything with room for the board, power bank and cable runs |
| Gear organizer | Cocoon GRID-IT — the board straps to this, then the whole panel goes in the bag |
| Part | Notes |
|---|---|
| DJI Pocket 4 | Connects to a WiFi hotspot hosted on the BELAbox |
| DJI Pocket 4 battery handle | Doubles as a USB-C hub. Batteries hot-swap mid-stream without dropping the camera feed |
| Spare handle battery | One battery lasts ~2.5–3 hours of streaming. Two on rotation — swap, put the empty one on charge — keeps you going all day |
| DJI Mic 3 (TX + RX) | See notes on the receiver below |
| Part | Notes |
|---|---|
| SIM card(s) | Separate carriers if you want redundancy |
| Upgraded WiFi antennas | I use Delock 802.11 ac/a/b/g/n RP-SMA 2–5 dBi. Any RP-SMA antenna works — check that the antenna has a hole in the centre of the connector and the pigtail has a pin, so they mate |
| Antenna pigtail | Delock RP-SMA panel-mount to I-PEX MHF4 0.81. The Rock 5B+ WiFi module uses I-PEX MHF4 connectors, so this is what gets the signal from the board out to a panel-mounted antenna |
| USB WiFi dongle | TP-Link Archer T2U Nano — second radio, dedicated to the Pocket 4 hotspot |
| Quectel EC25-EUX M.2 LTE Cat 4 w/ antennas | With SIM slot. EUX is the Europe variant — pick the one that matches your region and carrier bands |
You can go for 5G modules instead, but they cost a good deal more and draw more power. 4G has been enough for my use.
| Setting | Value |
|---|---|
| Resolution | 1920x1080 |
| Frame rate | 30 fps |
| Codec | HEVC (H.265), Main profile, 8-bit |
| Bitrate | 5500 kbps |
| SRT latency | 2000 ms |
BELABOX recommends 1500–2500ms SRT latency. Lower than that and you get more glitching and a lower sustainable bitrate.
You need two WiFi radios: one for the Pocket 4, one for WiFi offloading.
The Pocket 4 connects to a hotspot hosted on the belabox with the USB dongle, ideally on 5GHz. If that hotspot occupies your only radio, the board can't connect to any other network — which means no WiFi offloading. When you're at home or somewhere with decent WiFi, you want the stream going out over that instead of mobile data, and when you walk out of range the switch to LTE should happen seamlessly without dropping the stream.
- USB dongle → Pocket 4 hotspot
- On-board WiFi → home/venue network for uplink
- LTE modem → takes over when WiFi drops
- Flash BELABOX to the onboard eMMC: grab the installer image for the Rock 5B+ from belabox.net/rk3588, write it to a microSD card (balenaEtcher or similar) and boot the board from it — it installs BELABOX to the eMMC. Remove the card, boot again, and complete setup in the BELABOX UI
- Apply the HEVC patch and pipelines: belabox-pocket4-rtmp-hevc — install, verify and rollback instructions are all in that repo
- Select the pipeline: h265_pocket4_rtmp_localhost_publish_live_30fps
- Create a hotspot on the USB dongle (preferably 5GHz) for the Pocket 4, and leave the on-board WiFi for uplink
- Set the Pocket 4 to publish RTMP to
rtmp://<belabox-address>:1935/publish/live(example: rtmp://10.42.0.1:1935/publish/live) - Point BELABOX at your SRTLA receiver — address, port and stream ID go in the BELABOX UI under relay settings
- Pull the SRT feed into OBS as a media source
Have a DJI Pocket 3 instead? Skip step 2 — no patch needed. The Osmo Pocket 3 livestreams H.264 over RTMP, which stock BELABOX already accepts, so the standard RTMP pipeline just works. Set up the livestream through the DJI Mimo app, connect the camera to the hotspot, and point it at the same
rtmp://<belabox-address>:1935/publish/liveURL. Note that the Pocket 3's RTMP livestream tops out at 1080p30.
You need something to receive the SRTLA stream and hand it to OBS. Two options:
- BELABOX Cloud — hosted relay, no setup, small monthly cost. Start here if you don't want to run a server.
- Self-hosted — srtla receiver plus SRT Live Server on a Linux box, republishing to OBS. More work, more control. Note that OBS needs a desktop environment — I run Xubuntu, with OBS on the same machine.
On top of OBS I run:
| Component | Notes |
|---|---|
| Stream-Control | OBS scene switching, restream management, bitrate automation, raid auto-stop etc. |
| Unified-Chat | Twitch / YouTube / Kick chat in one place with moderation |
| Unified-Chat-Lite | Don't need moderation? Same combined chat (plus TikTok), read-only and very easy to self-host — or skip hosting entirely and use it at unified-chat.com |
I control the rig from anywhere through Stream-Control: belaUI (the BELABOX web UI) is exposed on my own domain through a Cloudflare Tunnel and embedded straight into Stream-Control's BELABOX tab — there's a demo on the Stream-Control repo.
One catch: belaUI talks to the encoder over a plain ws:// WebSocket, and browsers block that on an HTTPS page. An nginx reverse proxy in front of belaUI fixes it by rewriting ws:// to wss:// in the served pages:
nginx config — /etc/nginx/sites-enabled/belabox.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name belabox.example.com;
ssl_certificate /etc/ssl/belabox/belabox.pem;
ssl_certificate_key /etc/ssl/belabox/belabox.key;
ssl_protocols TLSv1.2 TLSv1.3;
# Rewrite text in the served HTML/JS (needed for the wss:// patch below)
sub_filter_once off;
sub_filter_types text/html text/css
application/javascript text/javascript
application/x-javascript;
location / {
# belaUI
proxy_pass http://127.0.0.1:80;
# WebSocket headers
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
# Disable gzip from origin so sub_filter can rewrite the text
proxy_set_header Accept-Encoding "";
# Only needed if you embed belaUI in an iframe (e.g. Stream-Control)
add_header Content-Security-Policy "frame-ancestors 'self' https://*.example.com";
# The actual ws:// -> wss:// patch
sub_filter 'ws://' 'wss://';
}
}A word of caution: exposing belaUI to the internet means anyone who finds the URL can try to log in to your encoder. Put Cloudflare Access in front of it, or at the very least a strong password and a non-obvious hostname. If securing internet-facing services isn't something you're comfortable with yet, no shame in that — just skip this section: belaUI works fine on the local network, and BELABOX Cloud gives you remote control without exposing anything yourself.
Rock 5B+ with the Quectel EC25-EUX in the M.2 slot, active cooler, and all four antennas connected. I cracked one side while drilling the antenna holes — model them into the case before you print, and save yourself the trouble.
Closed up and strapped to the GRID-IT! organizer. The two black antennas are the LTE modem, the two white ones are WiFi.
How it sits in the bag. Antennas fold down, ports stay reachable, and the whole thing comes out in seconds.
Things I ran into. Your mileage may vary — some of this may already be fixed on newer firmware.
-
M.2 slot and the modem. The Rock 5B+ doesn't reliably detect the cellular modem when the card is screwed down flat. Shimming it so it sits at a slight angle fixed it for me — it makes better contact with the pins that way. This is a known issue on the 5B+, documented on the Radxa forum with the same EC25 modem. If your modem isn't showing up, try this before assuming the card is dead. Also worth knowing: the M.2 B-key slot on the 5B+ is USB-only, so PCIe modems won't work. The EC25 is USB, so it's fine.
-
DJI Mic 3 receiver. Using the Mic 3 transmitter wirelessly to the Pocket 4 (WITHOUT the receiver) may introduce a variable audio latency that the pipeline can't compensate for. In my case, after a small hiccup in the stream the audio would end up slightly delayed and stay that way. Plugging the receiver in by USB-C — either on the Pocket 4 or on the battery handle (can be done mid stream) — solved it completely for me. Sync locked, no drift. Worth trying it wireless first, though. It may have been patched since.
-
The Pocket 4 runs hot. On long streams, in direct sun, or above ~30°C it heats up noticeably. I've rigged a small fan blowing on it, which keeps it stable. Worth planning for if you stream outdoors in summer.
-
HEVC and codec ID 12. The Pocket 4 sends HEVC inside FLV using legacy codec ID 12, which stock GStreamer doesn't understand. That's what the patch repo above is for.
-
Bitrate occasionally collapses. On rare occasions, the outgoing bitrate from BELABOX drops to 600–900 kbps and stays there, even though the incoming feed from the Pocket 4 is still a healthy 6000–8000 kbps. Hitting stop and then start in the BELABOX UI clears it every time. I haven't figured out the root cause yet — if you run into this, that's the workaround. And please contact me if you find a permanent fix for it.
-
Soak test before you rely on it. The patch is experimental. Run it for an hour or more and watch audio sync, bitrate behaviour, reconnects and temperature before taking it out on a real stream.
Built by Kim · GitHub · LinkedIn
Field-tested by Caxyhh.


