I’d publish the build log but it’s got sooooo much personal info it in so fuck off
Goal: USB-powered, WiFi NDI broadcaster at 1280x720 @ 15–30fps. Physically tiny, single USB charger into the wall.
Existing NUC setup documented at log - target cam nuc — the software stack is identical, just compiled for ARM instead of x86_64.
Pi Options
Pi Zero 2W — Smallest possible
- Quad-core Cortex-A53 @ 1GHz, 512MB RAM
- Power: micro USB (PWR IN port) — any USB charger works, draws ~1.5–2W under load
- Webcam: USB OTG adapter into the second micro USB port
- WiFi: built-in
- Size: credit card, genuinely tiny
- Concern: 1GHz is tight for 720p @ 30fps NDI. Likely fine at 15fps, worth testing at 30fps — the YUYV→UYVY byte swap is cheap but NDI has overhead
- Cost: ~$20 AUD
Pi 3B+ — Middle ground
- Quad-core Cortex-A53 @ 1.4GHz, 1GB RAM
- Power: micro USB, draws ~2–3W — needs a decent charger (2.5A+)
- Webcam: full-size USB-A port, no adapter needed
- WiFi: built-in
- 720p @ 30fps: should handle it comfortably
- Cost: ~$50–60 AUD (harder to find new)
Pi 4 (2GB) — Safe bet
- Quad-core Cortex-A72 @ 1.8GHz, 2GB RAM
- Power: USB-C, draws ~3–4W — needs a 5V/3A USB-C charger
- Webcam: full-size USB-A port
- WiFi: built-in
- 720p @ 30fps: no issues, headroom to spare
- Cost: ~$60–80 AUD
Recommendation
Start with Pi Zero 2W if you want the smallest possible footprint — test at 15fps first, try 30fps and see. If it struggles, Pi 4 is the reliable fallback.
For the power setup on Zero 2W:
- USB charger → PWR IN (left micro USB port)
- Webcam → micro USB OTG adapter → USB port (right micro USB port)
- One cable in the wall, one cable to the webcam, done
Setup — Same as NUC, ARM Version
OS: Raspberry Pi OS Lite (64-bit) — headless, no desktop needed. Configure WiFi during flash via Raspberry Pi Imager (Advanced Options).
1. Install build tools
sudo apt update && sudo apt install -y curl gcc make v4l-utils2. Install NDI SDK (ARM64)
wget https://downloads.ndi.tv/SDK/NDI_SDK_Linux/Install_NDI_SDK_v6_Linux.tar.gz -O /tmp/ndi-sdk.tar.gz
cd /tmp && tar -xzf ndi-sdk.tar.gz
yes | PAGER=cat sh /tmp/Install_NDI_SDK_v6_Linux.sh
# ARM64 — note aarch64 instead of x86_64
sudo cp -P ~/NDI\ SDK\ for\ Linux/lib/aarch64-linux-gnu/* /usr/local/lib/
sudo cp ~/NDI\ SDK\ for\ Linux/include/* /usr/local/include/
sudo ldconfig
sudo ln -sf /usr/local/lib/libndi.so.6 /usr/local/lib/libndi.so.53. Compile ndi-webcam
Same C source as the NUC (see log - target cam nuc). Change NDI_NAME at the top to something like "Pi Target Cam".
gcc -O2 -Wall -I/usr/local/include -o /tmp/ndi-webcam /tmp/ndi-webcam.c -L/usr/local/lib -lndi -Wl,-rpath,/usr/local/lib
sudo install -m 755 /tmp/ndi-webcam /usr/local/bin/ndi-webcam4. Systemd service
Same service file as the NUC — copy it over, then:
sudo systemctl daemon-reload
sudo systemctl enable --now ndi-webcam5. Set a static IP
Either via your router’s DHCP reservation (easiest) or via /etc/dhcpcd.conf:
interface wlan0
static ip_address=192.168.1.XX/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
FPS Tweak
To drop to 15fps, edit the #define FPS 30 line in the C source to 15, recompile, reinstall, restart service. Halves the NDI bandwidth and CPU load.
Notes
- If the webcam doesn’t appear at
/dev/video0runv4l2-ctl --list-devicesto find the right path - NDI discovery is multicast — Pi and receiving machine need to be on the same subnet/WiFi network
- If multicast is blocked, NDI Tools on the receiving end has a manual source entry option