User Tools

Site Tools


software:zoneminder:picamera

Raspberry Pi Camera on ZoneMinder

I spent a lot of time trying to find some good software to run on a Raspberry Pi to turn it into a camera. Even tried to write my own using Perl, but all the libraries are in Python, so it took too much for a simple project.

I found the v4l2rtspserver (https://github.com/mpromonet/v4l2rtspserver) and decided to try it. The author has a good page, but assumes I knew how to configure ZoneMinder (which was mistaken).

Anyway, no GUI needed, so I did the Raspberry Pi OS Lite (https://www.raspberrypi.org/software/operating-systems/) and set it up, then did the following. Ended up with a pretty decent camera that is not “phoning home” with all your images.

Get raspbian image onto SD

  1. Download the Lite version of Raspbian from https://www.raspberrypi.org/downloads/raspbian/
  2. write the downloaded image to the micro-sd (do not uncompress)
  3. mount /boot from SD onto /mnt
touch /mnt/boot/ssh # enable ssh
# only do the following if you need wifi. Change country code, ssid and psk for your system
# see [[https://www.raspberrypi.org/documentation/configuration/wireless/headless.md]]
cat <<EOF >/mnt/boot/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=<Insert country code here>
 
network={
 ssid="<Name of your WiFi>"
 psk="<Password for your WiFi>"
}
EOF

Insert SD into your Pi and boot up.

Configure Raspberry Pi

Enable wlan by adding the following to /etc/wpa_supplicant/wpa_supplicant.conf

country=US
network={
   ssid="your ssid"
   psk="your psk"
}

Now, do the install

# Set up Camera
raspi-config # go to Interface, and enable camera
reboot
ls -lh /dev/video*
raspistill -v -o test.jpg # Verify camera works
# Remove Swap File
sudo systemctl stop dphys-swapfile.service
sudo systemctl disable dphys-swapfile.service
sudo systemctl mask dphys-swapfile.service
sudo rm /var/swap
# add zram for swap
sudo apt-get install zram-tools
sed -i 's\.*ALLOCATION=.*\ALLOCATION=100\g' /etc/default/zramswap
sudo systemctl enable zramswap
sudo systemctl restart zramswap
# Set up ntp
sudo apt-get install ntp
sudo timedatectl set-timezone America/Chicago
# add base packages needed
sudo apt install \
liblivemedia-dev liblog4cpp5-dev libasound2-dev git gdebi-core cmake build-essential v4l-utils
# get and build v4l2...
git clone https://github.com/mpromonet/v4l2rtspserver
cd v4l2rtspserver
cmake .
make
sudo make install
# do the install
sudo gdebi v4l2rtspserver-0.2.0-6-g3542b6f-Linux-armv6l.deb
# create systemd module
cat <<EOF >/etc/systemd/system/v4l2rtspserver.service
# systemd configuration for v4l2rtspserver
# /etc/systemd/system/v4l2rtspserver.service
 
[Unit]
Description=v4l2rtspserver rtsp streaming server
After=network.target
 
[Service]
#ExecStartPre=/usr/bin/v4l2-ctl --set-ctrl vertical_flip=1
ExecStartPre=/usr/bin/v4l2-ctl --set-ctrl h264_i_frame_period=5
ExecStart=/usr/local/bin/v4l2rtspserver -F 5 -W 1280 -H 720
#ExecReload=/bin/kill -HUP $MAINPID
Type=simple
User=root
Group=video
Restart=always
 
[Install]
WantedBy=multi-user.target
EOF
 
# enable the service
sudo systemctl enable --now v4l2rtspserver.service

At this point, you should be able to get an rtsp by pointing vlc to rtsp://{pi zero ip}:8554/unicast

Zoneminder Configuration

Create a new monitor in ZoneMinder with the following parameters

  • Source Type: Remote
  • Remote Protocol: RTSP
  • Remote Method: RTP/Unicast
  • Remote Host Name: Hostname or IP
  • Remote Host Port: 8554
  • Remote Host Path: /unicast
  • Capture Width: 640
  • Capture Height: 480

You should soon see the output in zoneminder.

Production

For production, change the resolution of both the camera and the ZoneMinder configuration

  1. Edit /etc/systemd/system/v4l2rtspserver.service
    1. Change -W and -H (width and height) to your desired parameters
      1. 1920 x 1080 (1080p) Gives you a lot of details, but also transfers a lot of traffic and is fuzzy
      2. 1280 x 720 (720p) Is a lot lower bandwidth and “prettier” picture
      3. # reload the systemctl daemon
        systemctl daemon-reload
        # reload the config for v4l2rtspserver
        systemctl restart v4l2rtspserver
        # Set v4l2rtspserver to autostart
        systemctl enable v4l2rtspserver
  2. Edit Monitor on ZoneMinder
    1. Set Capture Resolution to same values as camera
software/zoneminder/picamera.txt · Last modified: 2025/04/15 15:53 by rodolico