V4L2 to NDI is an application that connects to attached V4L2 devices and encodes the video signal into NDI
It uses the NDI library, allowing for auto-discovery of streams on the local network.
This software is tested with Raspberry Pi 4 and Intel Mini PCs. It typically runs well on a dual or quad core CPU that is clocked at or above 1.4 GHz, though results vary. This also works well with the TC358743 HDMI to CSI-2 adapter for Raspberry Pi. This particular HDMI adapter handles an HDMI input up to 1080p30 with no framedrops.
Make sure git is installed.
sudo apt update -y
sudo apt install git -y
Clone this repository and cd
into it.
git clone https://github.com/lplassman/V4L2-to-NDI.git && cd V4L2-to-NDI
Run this compile and install script
sudo bash ./easy-install-rpi-aarch64.sh
Installation is now complete!
Run this compile and install script
sudo bash ./easy-install-rpi-armhf.sh
Installation is now complete!
Run this compile and install script
sudo bash ./easy-install-x86_64.sh
Installation is now complete!
Once the installation process is complete, it will create an executable file located at /opt/v4l2ndi/bin/v4l2ndi
The installer also creates a symlink to /usr/bin so that it can be run from a normal terminal.
To see all the available options run the following
v4l2ndi -h
Typically, this app is run with a 30fps input with a pixel format input of YUV2. This command creates the NDI stream for that given input
v4l2ndi -d /dev/video0 -f
In case a 60fps input is needed, this command would be used instead
v4l2ndi -d /dev/video0 -f -n 60000 -e 1001
Edit the boot configuration and add the boot overlay for TC358743
sudo nano /boot/config.txt
Add the following line into the boot configuration file:
dtoverlay=tc358743
Run this script to fix EDID on boot (installs fix-edid.service):
sudo bash ./install-edid.sh
By default this service file runs v4l2ndi as the root user with realtime CPU scheduling. Edit the service file with this command before copying it
sudo nano ./v4l2ndi_csi.service
Copy the service and enable it
sudo cp ./v4l2ndi_csi.service /etc/systemd/system/
sudo systemctl enable v4l2ndi_csi.service
sudo reboot
sudo rm -R V4L2-to-NDI
git clone https://github.com/lplassman/V4L2-to-NDI.git && cd V4L2-to-NDI
sudo service v4l2ndi_csi stop
sudo bash ./easy-install-rpi-aarch64.sh
cd
sudo service v4l2ndi_csi start
Hornettek HDMI to USB 3.0 Capture Card (1080p60) https://www.amazon.com/s?k=hornettek hdmi capture&crid=IL1SBF4A56VF&sprefix=hornettek hdmi capture,aps,134&ref=nb_sb_noss
Waveshare HDMI to CSI-2 Adapter (1080p30) https://www.amazon.com/s?k=waveshare hdmi to csi&crid=24ROTNS3MO1F5&sprefix=waveshare hdmi to csi,aps,136&ref=nb_sb_noss
These tests were performed using a Raspberry Pi 4B with the latest Raspberry Pi OS (64-bit) software
- Hornettek HDMI capture card at 1080p60: ~110ms
- Hornettek HDMI capture card at 1080p30: ~230ms
- Waveshare HDMI to CSI-2 adapter at 1080p50: ~160ms
- Waveshare HDMI to CSI-2 adapter at 1080p30: ~230ms
- Raspberry Pi Cameras are not supported when using libcamera (use this project instead: https://github.com/raspberry-pi-camera/raspindi)
- Supports 6 NDI client connections when input video format is UYVY at 1080p30
- Supports 5 NDI client connections when input video format is UYVY at 1080p60
- Supports 2 NDI client connections when input video format is YUV2 at 1080p60