Difference between revisions of "Dummies Guide"

From ZoneMinder Wiki
Jump to navigationJump to search
 
(67 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This is a short guide for using ZM. It's concise, and tells you what you need to know.
This is a lot of what I know about surveillance cameras and ZM.


If you wish to view the full ZM Documentation, I recommend viewing it through the PDF view, as the sphinx website is not efficient and requires javascript. PDF View: https://readthedocs.org/projects/zoneminder/downloads/pdf/stable/
If you wish to view the full ZM Documentation, I recommend viewing it through the PDF view, as the sphinx website is not efficient and requires javascript. PDF View: https://readthedocs.org/projects/zoneminder/downloads/pdf/stable/
Line 6: Line 6:
Zoneminder is a powerful tool, but it has a learning curve. The forums are there to answer questions. Search then post if its not already answered.
Zoneminder is a powerful tool, but it has a learning curve. The forums are there to answer questions. Search then post if its not already answered.


Consider the learning curve: It can be some work (depending on how complex your system is), but you will become a proficient gnulinux sysadmin if you familiarize yourself with ZM and its many features. If you buy an off the shelf DVR you won't learn nearly as much (if anything). Additionally, these skills are valuable for 'any' Unix-based server (DB, website, email server, kiosk, etc).
On the learning curve: It can be some work (depending on how complex your system is), but you will become a proficient gnulinux sysadmin if you familiarize yourself with ZM and its many features. If you buy an off the shelf DVR you won't learn nearly as much (if anything). Additionally, these skills are valuable for 'any' Unix-based server (DB, website, email server, kiosk, etc).


If you are already knowledgeable about servers, then you shouldn't have any trouble.
If you are already knowledgeable about unix based computers, then you shouldn't have any trouble.


==Install==
==Install==
Line 17: Line 17:
These are the best supported install guides.
These are the best supported install guides.


[[Ubuntu]] or [[Debian]] / Devuan  1.34 is recommended.
[[Debian]] is recommended.


Even numbers (1.34) are stable. Use those. Odd numbers are testing/development (1.35).  
Even numbers are stable. Use those. Odd numbers are testing/development.  


Here's a guide for using an external HDD: [https://wiki.zoneminder.com/Using_a_dedicated_Hard_Drive Using a dedicated Hard Drive]
Here's a guide for using an external HDD: [https://wiki.zoneminder.com/Using_a_dedicated_Hard_Drive Using a dedicated Hard Drive]
Use 1.34.


==Test out a Camera==
==Test out a Camera==
Line 42: Line 40:
In ZM, IP address, path, port, and Resolution must be correct. Most other fields can be left at defaults.
In ZM, IP address, path, port, and Resolution must be correct. Most other fields can be left at defaults.


If you can view the MJPEG or JPG url in your browser, you will be in good shape. Take that path, and put it into Zoneminder. If the camera requires authorization, consult the user manual, or you can try adding the username and password before the ip like so username:password@ipaddress
Use vlc or ffplay like this:
e.g. root:mypass@192.168.1.5/video.mjpg
ffplay http://192.168.1.5/mjpg/video.mjpg
This is an alternative to 192.168.1.5?username=root&pwd=mypass which most guides tell you to do. Both will work, however the latter can vary in what keywords it uses (pwd vs pass vs password) while the former requires no keywords.
or ffmpeg
ffmpeg -i http://192.168.1.5/mjpg/video.mjpg output.mp4
or
ffplay rtsp://<user>:<pass>@<hostname/ip>:554/axis-media/media.amp?videocodec=h264&resolution=320x240
If the camera requires authorization, consult the user manual, or you can try adding the username and password before the ip like so username:password@ipaddress This is an alternative to 192.168.1.5?username=root&pwd=mypass which most guides tell you to do. Both will work, however the former is easier.


If pass is blank, you type in root:@192.168.1.5
If pass is blank, you type in root:@192.168.1.5


RTSP always specifies the port. e.g. <code>rtsp://user:password@192.168.1.10:554/somepath</code>
RTSP always specifies the port and uses rtsp, instead of http. e.g. <code>rtsp://user:password@192.168.1.10:554/somepath</code>


==Obtaining more Cameras==
==Obtaining more Cameras==
Line 56: Line 58:
* '''LOCAL''' Camera connected directly to computer (webcam, or analog camera thorugh bttv card)(typically /dev/video0)
* '''LOCAL''' Camera connected directly to computer (webcam, or analog camera thorugh bttv card)(typically /dev/video0)


* '''REMOTE''' Grab MJPEG stream from IP camera on the network.  
* '''REMOTE''' (obsolete) Precursor to ffmpeg.  


* '''FILE''' Grab a jpg file somewhere locally and display that (you provide jpeg images that change from somewhere). Can be used in unusual ways (i.e. a slide show, <insert use here>).
* '''FILE''' Grab a jpg file somewhere locally and display that (you provide images that change from anywhere on the filesystem). Can be used in unusual ways (i.e. a slide show, <insert use here>).


* '''FFMPEG''' and '''LIBVLC''' use the respective libraries to pull a stream similar to REMOTE does for RTSP only. Anything RTSP should use FFMPEG.
* '''FFMPEG''' and '''LIBVLC''' use the respective libraries to pull a stream similar to REMOTE does for RTSP only. They can also watch MJPEG streams and the former can loop local video files.


Local is for webcams (usb), or BTTV (pci) cards for analog aka coax cameras. Webcams are ok. BTTV is obsolete, but usable as legacy hardware. If you have analog cameras, you are best off using a video encoder. See the [[Hardware_Compatibility_List]]
And some others...


After that you have FILE and REMOTE. I have not used FILE for anything but testing. I will cover REMOTE / FFMPEG.
FFMPEG / LibVLC is recommended. Don't confuse [[LibVNC]] with LibVLC. LibVNC is for recording VNC (i.e. screenrecording).


 
'''FFMPEG''' has the option of RTSP (h264) or MJPEG streams.  
'''REMOTE & FFMPEG''' have the option of either RTSP (h264) or MJPEG streams.  




===MJPEG===
===MJPEG===
These include [[Arecont Vision]], [[Axis]], Bosch, [[Foscam]], [[Grandstream]], Instar, Messoa, Zavio and others.  
Older cameras from 2000's. E.g.[[Arecont Vision]], [[Axis]], Bosch, [[Foscam]], [[Grandstream]], Instar, Messoa, Zavio and others.  
The prices scale with features. Old indoor Axis cameras at 480p-720p resolution (no IR) can be found
The prices scale with features. Old indoor Axis cameras at 480p-720p resolution (no IR) can be found
online easily for $10-80.
online easily for $10-30. These are generally obsolete.
 
Also see, [[Hardware_Compatibility_List#Single_Board_Computers SBC cameras]].


===RTSP===
===RTSP===
These cameras use h264 (or h265) compression. They serve it on an RTSP server. h264 uses compression, so you end up using less HDD space than compared with MJPEG. H264 is recommended when possible.
2010's and newer cameras: These cameras use h264 (or h265) compression. They serve it on an RTSP server. h264 means less bytes, so you end up using less HDD space than compared with MJPEG. H264 is recommended when possible.


Note: Users with 1.32+ can use '''H264 passthrough''', which writes the h264 direct to mp4, and saves some CPU usage. 1.36 has further efficiency improvements on this.
Note: Users with 1.32+ can use '''H264 passthrough''', which writes the h264 direct to mp4, and saves some CPU usage. .


===How Powerful of a Computer to Use===
===How Powerful of a Computer to Use===
Line 86: Line 85:
'''High-end''' server hardware will perform better than desktop, or low end server hardware. I have seen this firsthand between two servers: KFSN4-DRE and the KGPE-D16.  The latter runs ZM with 25+ cameras, not breaking a sweat. The former reaches a limit at about 10. Another limitation is HDD size.  
'''High-end''' server hardware will perform better than desktop, or low end server hardware. I have seen this firsthand between two servers: KFSN4-DRE and the KGPE-D16.  The latter runs ZM with 25+ cameras, not breaking a sweat. The former reaches a limit at about 10. Another limitation is HDD size.  


I currently recommend buying Axis (new is expensive, so you'll probably purchase used), although many do not have IR. This is not a problem, as outdoors IR on cameras attracts spider webs, and external IR is recommended. Another recommended brand is Hikvision. Hikvision can be bought new for a lower price if warranty is an issue (for business clients that can't afford Axis). The cameras work well with ZM, and are configurable without Windows, Otherwise, any respectable name brand camera will work. Look through the hardware compatibility list. Read the user manual before you purchase the camera, and look for the following: Outdoors/indoors, IR/no-IR, Resolution. IR can be supplemented with external appliances.  
I currently recommend buying Axis (new is expensive, so you'll probably purchase used), although many do not have IR. This is not a problem, as outdoors IR on cameras attracts spider webs, and external IR is recommended. Another recommended brand is Hikvision. Hikvision can be bought new for a lower price if warranty is an issue (for business clients that can't afford Axis). The cameras work well with ZM, and are configurable without Windows, Otherwise, any respectable name brand camera will work. Look through the hardware compatibility list. Read the user manual before you purchase the camera, and look for the following: Outdoors/indoors, IR/no-IR, Resolution. IR can be supplemented with external appliances. You can also put pesticide on the cameras to deter bugs... (although I wouldn't).


=== A note on Analog Cameras ===
=== A note on Analog Cameras ===


If you are upgrading an existing camera installation, you will likely have coaxial cables for the old cameras. These can be used with Zoneminder in either LOCAL, or REMOTE/FFMPEG. LOCAL, via a PCI or PCI-Express card, REMOTE/FFMPEG through a video encoder that takes the analog stream and converts to either MJPG or RTSP. I recommend the latter.  
There is an option to use a coax to ethernet adapter. You need two pieces. One is the sender, one is the receiver. They may or may not be identical. These allow the use of IP Cameras over coax. Search ebay. Altronix ebridge ones are about $120 for a pair or adapters (you need a pair for each camera). If this is too much money, you may keep the old coax cameras. See: IP Video Encoders [https://wiki.zoneminder.com/Hardware_Compatibility_List#IP_Video_Encoder]. Honestly, just run ethernet if you have a chance. Customers expect HD these days.  


There is no reason to rip out, or ignore old coaxial cables. They are perfectly viable for Zoneminder. They may be a step behind the IP cameras, however they can be used. That being said, customers generally prefer higher res cameras, so you probably should replace them, unless its a low priority area.
I have not worked with HD analog over coax, and I don't recommend it. I did try to keep old coax cameras but they became obsolete. IP cameras are the way to go.
 
I have not worked with HD analog (a new type of analog camera that does HD over the coax), and I don't recommend it. It is not standardized yet. Ethernet only for new cameras.


==Watching the Cameras==
==Watching the Cameras==


Cameras can be watched from the ZM apache server. Montage view is good. See notes section for a hint about > 6 camera setups.
Cameras can be watched from the ZM apache server website and/or ZMNinja.


Another way is to make an html file on a remote machine with the following code embedded in an img tag. Adjust monitor ID as needed.
For business customers offer both choices to the customer. Or build something custom if you like. HTML imagemaps work well.
[https://wiki.zoneminder.com/How_to_stream_from_another_ZoneMinder_installation  How to stream from another ZoneMinder installation]. Also an easy way to embed video in a website (img tag). See [[Dedicated SBC Camera Monitor]] for notes on refreshing the stream periodically. [[https://wiki.zoneminder.com/Example_Camera_View_HTML]]


Streaming in ZM, does not slow it down, in my experience.
You can make fully customizable pages i.e. make an html file on a remote machine with the following code embedded in an img tag. Adjust monitor ID as needed.
[https://wiki.zoneminder.com/How_to_stream_from_another_ZoneMinder_installation  How to stream from another ZoneMinder installation]. Also an easy way to embed video in a website (img tag). See [[Dedicated SBC Camera Monitor]] for an example of a computer that only displays the streams. [[https://wiki.zoneminder.com/Example_Camera_View_HTML]] has the HTML code for API/non-API usage.


If you embed the URL in an img tag, include http prefix or it wont work.
If you embed the URL in an img tag, include http prefix or it wont work.
Line 119: Line 116:
for instructions regarding multi port.  
for instructions regarding multi port.  


Watch the scale parameter. That can be adjusted for clients with low power CPUs (ARM SBCs).
Watch the scale parameter. That can be adjusted for clients with low power CPUs (ARM SBCs) if whole img boxes seem to drop out. Note that scale does require some CPU on the server side.
 
One note: If you have alternative high/low resolution cameras (motion detect on the low res, record on the high res). You might not want customers to view the low res cameras. In this case, make a group of the high res cameras, and set that to be the default view.


=== Quick Example ===
=== Embedding ZM in a webpage ===


[[Example Camera View HTML]]
[[Example Camera View HTML]]


[https://forums.zoneminder.com/viewtopic.php?f=37&t=26982 Embedding Streaming Video in External Website] from Forums
[https://forums.zoneminder.com/viewtopic.php?f=37&t=26982 Embedding Streaming Video in External Website] from Forums
https://wiki.zoneminder.com/External_Live_Stream#Imagemap_of_Cameras - Highly recommended for medium / large installations.


==Recording in Zoneminder==
==Recording in Zoneminder==
The zmc binary handles recording and analysis.
The zmc binary handles recording and analysis (1.36).


You can record everything (good, but no way to find events). You can modect everything (light HDD use, but misses stuff). You can mocord everything (best, but uses HDD). And finally, You can mix it up. I would recommend in small setups, to throw a >1TB HDD in there for videos and set everything to mocord. For larger setups, you will want to customize each camera based on its priority.
You can record everything (good, but no way to find events). You can modect everything (light HDD use, but misses stuff). You can mocord everything (better, but uses HDD, and event list timeline in ZMNinja shows 10 minute segments). But all of these are flawed. Here's what you do: always record two streams per camera. One, the low res stream, is set to mocord/modect, with reasonable (but no need to be perfect) settings for detection. Two, the high res stream is set to either record and uses h264 passthrough.* The hi res compressed stream is saved directly to disk. Decoding and Analysis should be disabled as well in the source menu.


In ZM 1.32 and newer, you can use multiple HDs, and assign cameras to where they should be saved. These are '''storage areas'''
See also this link for a way to use a high res stream under analysis with less CPU: https://forums.zoneminder.com/viewtopic.php?f=10&t=31334&p=124410


Some cameras have two streams. Run Mocord on the low res stream, and record or modect w/linked monitors - search forums for more details. Which you choose will depend whether you want to record all of the this camera or not. How much HDD space do you have?
In ZM 1.32+, you can use multiple HDs (as many as you like), and assign cameras to where they should be saved. These are '''storage areas'''
 
*Linked monitors have from time to time had bugs or configuration gotchas, so for simplicity sake, I use record. HDD space is cheap.


==Motion Detection==
==Motion Detection==
Line 141: Line 144:


The strength of zoneminder lies in its motion detection analysis (thus the 'zone' in zoneminder, being the motion detection zones). See: [https://wiki.zoneminder.com/Understanding_ZoneMinder%27s_Zoning_system_for_Dummies  Understanding Zoneminder's Zoning system for Dummies]
The strength of zoneminder lies in its motion detection analysis (thus the 'zone' in zoneminder, being the motion detection zones). See: [https://wiki.zoneminder.com/Understanding_ZoneMinder%27s_Zoning_system_for_Dummies  Understanding Zoneminder's Zoning system for Dummies]
Start with the most sensitive settings, and make them less sensitive until no false alarms are recorded. Night IR detects more false events than daylight. Monitoring for all alarms can easily be done by <code>$ tail -f /var/log/syslog</code> in Devuan based distros.
Or you can record everything, if modect isn't working. Mocord will combine both modect and record, having everything recorded, but making a graph where motion occurs (in '''show timeline''' https://wiki.zoneminder.com/How_to_view_recorded_history_from_show_timeline. Mocord is the best, but uses more HDD. Beware of running into issues with [[PurgeWhenFull]] not able to keep up.
I personally like using hardware motion detectors, as ZMA/zmeventnotification and all the associated software to detect people can be a rabbit hole. But, these come at a cost - more initial setup and wiring. I have an arduino sketch here: https://forums.zoneminder.com/viewtopic.php?f=9&t=27442 In some ways, ZMES may be an easier (less hardware) solution, so consider that.
'''Why motion detection?'''
Using modect or mocord is '''recommended''' here. Because you are able to click from the main zm index - events - '''show timeline''', and from there quickly review your modect events. Because you save HDD space. And [[SMS Notifications]] and [[ZMTrigger]] can be setup off of modect alarms (the latter requiring either modect, mocord, or nodect).
'''Any downsides?'''
Zones must be tuned to be sensitive enough to see all events, but not so sensitive as to detect false alarms. This requires work, and is not guaranteed to work 100% even after tweaking. POTENTIAL RABBIT HOLE WARNING...


'''Help, I missed an event!?'''
'''Help, I missed an event!?'''
After using this setup for some years, a sudden rise in the cost of some goods a business kept in storage led to thefts. The bad news was, my modect zone wasn't sensitive enough. This, with the added ability of ZM>1.32's storage areas led me to re-evaulate the above. It turns out, there is another way. Instead of Modect on a zone, you can Record (or mocord). And, instead of motion detecting on the live video, you can do analysis on old videos. With a combination of these two posts (note: untested, for the record) https://forums.zoneminder.com/viewtopic.php?f=11&t=24686 and https://forums.zoneminder.com/viewtopic.php?f=8&t=28013&p=109190  You can re-create videos from your (JPEG ONLY) footage, and then reanalyze them. (those with ffmpeg mp4s created, may need to combine the footage into one video).
You can re run analysis on old videos with: https://forums.zoneminder.com/viewtopic.php?f=11&t=24686 and https://forums.zoneminder.com/viewtopic.php?f=8&t=28013&p=109190  You can re-create videos from your (JPEG ONLY) footage, and then reanalyze them. (those with ffmpeg mp4s created, may need to combine the footage into one video, then make that a video source in zm as file.).
 
This gives the CPU reductions of not actively Modect/Mocord, while still not missing anything. A dedicated ZM computer (RPI) can be used to analyze old footage. EDIT: This is a lot of work, and '''I don't recommend it.'''


tl;dr: Use mocord.  
See also: https://forums.zoneminder.com/viewtopic.php?f=11&t=31355 to run zm on files on the server filesystem.




'''4K Cameras'''
'''4K Cameras'''
Mocord on the low res stream, and record on the high res stream. Do NOT use any analysis (zma) on the high res stream. Analysis is where the CPU is eaten up. If you want, you can use the 'linked monitors' function, and only record the 4K on motion (search forums).
Mocord on the low res stream, and record on the high res stream. Do NOT use any analysis or decoding on the high res stream. Analysis and decoding is where the CPU is eaten up.




'''Conclusion'''
'''Sizing Zones Tip'''
 
After all is said and done, motion detection works but has limitations. Motion detection tends to report false alarms from weather, wildlife, changing from IR to Day sensor, and others. For users that need accurate motion detection, you will either need to A) tune the zones so that no false alarms occur (see [https://wiki.zoneminder.com/Understanding_ZoneMinder%27s_Zoning_system_for_Dummies  Understanding Zoneminder's Zoning system for Dummies]) or B) use the cameras built in motion detection or C) use external motion sensors with [[ZMTrigger]] or some combination of the above.
 
'''Sizing Zones'''
<pre>My first thought is the threshold is too low. It happened to me when I  
<pre>My first thought is the threshold is too low. It happened to me when I  
first started with ZM. I figured out a little trick:
first started with ZM. I figured out a little trick:
Line 185: Line 165:
the percent.</pre>
the percent.</pre>
ref: http://forums.zoneminder.com/viewtopic.php?f=40&t=30570
ref: http://forums.zoneminder.com/viewtopic.php?f=40&t=30570
'''I'm still getting false alerts!'''
You may want to run [[ZMES]]. It's not too difficult to setup, but it will require more resources.
See https://wiki.zoneminder.com/ZMES
====Example Zone====
[[File:Filters example.png|300px|thumb|right|Basic zone that won't miss events. Though it will still detect false ones without ZMES.]]
Start out with Best, High Sensitivity. Change to pixels instead of percent, and start around 500. This is a good start, but it may still require [[ZMES]]. For bounding boxes, you should try to use rectangles or squares. I believe someone in the forum mentioned this will save on calculation of the CPU, but regardless, it just looks better. Use the boxes in the bottom to line up X and Y appropriately. See image.


==Tips==
==Tips==


*Zones should be as small as possible, and you should use as few zones per monitor, to lower CPU usage.  
* Zones should be as small as possible, and you should use as few zones per monitor, to lower CPU usage.  
*Analysis FPS can be limited to 1-2 FPS to lower CPU usage. '''IMPORTANT''' (do not limit Max FPS, only analysis).
* Analysis FPS can be limited to 2 FPS to lower CPU usage. '''IMPORTANT''' (do not limit Max FPS, only analysis).
*Aggressive Modect usage can run into issues with [[PurgeWhenFull]], beware.
* Aggressive Modect usage can run into issues with [[PurgeWhenFull]]  
*Transitions from [https://forums.zoneminder.com/viewtopic.php?f=36&t=27141 daylight to IR] cause false alarms. The solution is to "Set a max alarmed area so it doesn't alarm if the whole area is changing".  
* Transitions from [https://forums.zoneminder.com/viewtopic.php?f=36&t=27141 daylight to IR] cause false alarms. The solution is to "Set a max alarmed area so it doesn't alarm if the whole area is changing" or use ZMES.  
*I prefer the usage of external hardware motion sensors via [[ZMTrigger]] over modect, when high reliability / low false alarms is required.
* You can use external hardware motion sensors via [[ZMTrigger]] over modect, when high reliability / low false alarms is required. More setup cost / time though.
*JPEG saving, should be avoided on H264 streams when possible. Use H264 passthrough. Consider how decoding the H264 stream to JPEG uses CPU, while passthrough will avoid this conversion step.
* JPEG saving, should be avoided on H264 streams when possible. Use H264 passthrough. Consider how decoding the H264 stream to JPEG uses CPU, while passthrough will avoid this conversion step.
* If you have more than 6 cameras you may want to setup multi-port as an alternative to firefox about:config edits. See: https://medium.com/zmninja/multi-port-storage-areas-and-more-d5836a336c93    Note: article written by zm dev. See also [[Multi_Port]]
* If you have more than 6 cameras you may want to setup multi-port as an alternative to firefox about:config edits. See: https://medium.com/zmninja/multi-port-storage-areas-and-more-d5836a336c93    Note: article written by zm dev. See also [[Multi_Port]]
* From forum: "In zones, switch to pixels, reduce minimum area/pixels/blobs etc to less than 1000. I find either 500 or 1000 works well."


==Hardware Advice==
==Hardware Advice==


When setting up the cameras, here is some advice.
When setting up the cameras, here is some advice.
* Use fuses on the PSU output to the cameras, if using passive POE adaptors.
* Don't do anything but 802.3af POE. Passive POE is more trouble than its worth. There are 5/8 port POE switches, use those.
* Use barrel plug splitters, and use one 12V PSU. (i.e. a barrel plug that is a 1 to 5 splitter). Cameras in my experience use around 200-400mA of current at 12V (400mA is when IR LEDs are on).
* If you purchase axis cameras, be aware that the cameras are 5V and the barrel plug is 4.0mm x 1.7mm. It's easiest to use POE on these (and all cameras actually).
* If you purchase axis cameras, be aware that the cameras are 5V and the barrel plug is 4.0mm x 1.7mm. It's easiest to use POE on these (and all cameras actually).
* Installing areas where the temperature is high may cause early camera failure (especially for cheaper cameras). Even something as simple as a corner of an enclosed room where the sun shines all day may be enough heat.
* Installing areas where the temperature is high may cause early camera failure (especially for cheaper cameras). Even something as simple as a corner of an enclosed room where the heater runs / sun shines all day may be enough heat.


==Troubleshooting==
==Troubleshooting==
Line 225: Line 214:




* Some cams will have two video streams (e.g. Hikvision, Amcrest). The resolutions/video type may or may not be the same. For example, there may be a low resolution mjpeg stream, and a high resolution RTSP stream. Read the data sheet / user manual for cameras you intend to purchase. Multiple streams are desirable.
* Some cams will have two video streams (e.g. Hikvision, Amcrest). The resolutions/video type may or may not be the same. For example, there may be a low resolution mjpeg stream, and a high resolution RTSP stream. Read the data sheet / user manual for cameras you intend to purchase. Multiple streams are desirable. On Axis cameras, you can simply specify the resolution at the end of the path, e.g. &resolution=320x240, (certain model) Foscams have videoMain, and videoSub. There are different variations. One hikvision even had 3(!) streams.


* I found it helpful to include monitor ID in camera names, as you run into monitor ID in logs often.
* I found it helpful to include monitor ID in camera names, as you run into monitor ID in logs often.
Line 237: Line 226:
* I use ext4 filesystem for the HDDs. I had tried using ext2 filesystem for better performance, but the fsck time is prohibatively slow for ext2 (>24 hours for >2TB). Ext4 seems to work well. Older ext2, or ext3 fs can be upgraded to ext4. Other filesystems are generally, not recommended. Ext4 works fine. You have been warned.
* I use ext4 filesystem for the HDDs. I had tried using ext2 filesystem for better performance, but the fsck time is prohibatively slow for ext2 (>24 hours for >2TB). Ext4 seems to work well. Older ext2, or ext3 fs can be upgraded to ext4. Other filesystems are generally, not recommended. Ext4 works fine. You have been warned.


* When viewing the cameras in Firefox, once you get more than 6 cameras from ZM on the browser Firefox will not display the seventh. This is due to a limit of Firefox and can be adjusted in about:config. See: [https://forums.zoneminder.com/viewtopic.php?f=32&t=23417&p=89249  ZM Forums: Problems when two people are watching live] [http://kb.mozillazine.org/Network.http.max-persistent-connections-per-server Network.http.max-persistent-connections-per-server]. This max persistent connections per server must be > 6 in order to see > 6 camera streams.
* See [[Multi_Port]]
 
* Adding "< /dev/null" to the ffmpeg path used by ZM might fix some issues. See [https://forums.zoneminder.com/viewtopic.php?f=32&t=23861&p=91771  ZM Forums: Truncated Video Export]
 
* If you are going to use a BT878 based card, you can add a heatsink onto the top of all *878 chips. This has been mentioned in the [https://forums.zoneminder.com/search.php?keywords=heatsink+bt878 forums in various spots], Use a ruler, and measure the dimensions in mm, then purchase one on digikey. A heatsink attached to the plastic of the IC, instead of the actual IC die is not ideal, but it will help. EDIT: I'm not sure if this is necessary, in hindsight. Also consider a video encoder instead of a BT878 card (e.g. search auction sites for 1 or 2 or 4 channel video encoder).


* Edit /etc/default/rcS (applies to devuan/trisquel) and make sure auto FSCK is enabled. Failure to set this, will require manual intervention when the server is repairing the filesystem, requiring you to press a key.
* Edit /etc/default/rcS (applies to devuan/trisquel) and make sure auto FSCK is enabled. Failure to set this, will require manual intervention when the server is repairing the filesystem, requiring you to press a key.


* Make sure the BIOS is set to power on after power fails.
* Make sure the BIOS is set to power on after power fails.
* Set colourspace to 32-bit for a possible performance boost.


* Don't set a Max FPS limit on REMOTE or FFMPEG, or VLC cameras in Zoneminder. The FPS should only to be set at the IP camera itself. Max FPS limiting is for LOCAL cameras, only.
* Don't set a Max FPS limit on REMOTE or FFMPEG, or VLC cameras in Zoneminder. The FPS should only to be set at the IP camera itself. Max FPS limiting is for LOCAL cameras, only.
* With larger camera setups (one 10, one >20 cameras) I needed to change the watchdog timer (/usr/bin/zmwatch.pl) from the default of 10 seconds to 30 or 60 seconds in order to avoid periodic drop outs of individual cameras. The cameras would drop, and not return, unless i restarted zoneminder or disabled and enabled that camera. This setting is managed in options - system. If you see dropouts after that, review /usr/bin/zmwatch.pl and insert additional logging. You can also add a hack to the API so that if cameras drop out they are restarted. See documentation of ZM API. For my setups, they typically drop out once a day on specific cameras. Other cameras will never drop out. EDIT: This was because I had poorly supported cameras. Don't buy off brand cameras, or this might happen to you.


* Do NOT point cameras at bright light, such as facing a window, a garage door, or anything that generates glare. It will blur the image / potentially damage the camera's image sensor.
* Do NOT point cameras at bright light, such as facing a window, a garage door, or anything that generates glare. It will blur the image / potentially damage the camera's image sensor.


* Buy a set of adapters such as these: to use with your normal 5.5 2.1mm barrel plug. Search multi type 23 or 28 dc power adapter.
* Buy a set of adapters such as these: to use with your normal 5.5 2.1mm barrel plug. Search multi type 23 or 28 dc power adapter. EDIT: actually only use poe (but picture left as these are useful).


[[File:Universal-28pcs-5-5x2-1mm-Multi-type-Male-Jack-for-DC-Plugs-for-AC-Power-Adapter.jpg 640x640.jpg|200px|Coaxial barrel plug adaptors||Universal 28pcx Multi type Male Jack for DC Plugs]]
[[File:Universal-28pcs-5-5x2-1mm-Multi-type-Male-Jack-for-DC-Plugs-for-AC-Power-Adapter.jpg 640x640.jpg|200px|Coaxial barrel plug adaptors||Universal 28pcx Multi type Male Jack for DC Plugs]]


* I made a script to watch cameras that drop out, and disable/reenable them for my 1.29 setup. See [https://forums.zoneminder.com/viewtopic.php?f=9&t=26909 here]. This also doubles as a notification in case the cameras somehow are powered off. You'll get emails telling you cameras are down. EDIT: See note about poorly supported cameras above. With good cameras, this does not occur. Rabbit hole warning.
* I made a script to watch cameras that drop out, and disable/re-enable them for my 1.29 setup. See [https://forums.zoneminder.com/viewtopic.php?f=9&t=26909 here]. This also doubles as a notification in case the cameras somehow are powered off. You'll get emails telling you cameras are down. EDIT: See note about poorly supported cameras above. With good cameras, this does not occur. Rabbit hole warning. Stick with quality name brands.


* If you are setting up mobile phones with ZMNinja, and the wifi is the same WAN IP as the camera system, setup a VPS with a http/https proxy and point zmninja at the proxy. The proxy can be as simple as:  
* If you are setting up mobile phones with ZMNinja, and the wifi is the same WAN IP as the camera system, setup a VPS with a http/https proxy and point zmninja at the proxy. The proxy can be as simple as:  
Line 271: Line 252:
Note that you might want to set nonstandard ports.
Note that you might want to set nonstandard ports.


* run 2k cameras at least. people like flashy things (like birds) and hi
* run 2k cameras at least for business customers. People like hi res. You should have a low res, and a hi res stream. The hi res is record only with no analysis or decoding (using passthrough). The low res is mocord and the one they watch on ZMNinja or the console.
res.
 
* the more you overbuild the cpu, the faster you can go.


* users seem to like fluid video, so put high fps on low res substream.  
* use zmninja + the website. offer customers both apps. there are also some other apps available. (e.g. possibly zmsquarer).
analysis fps limit to 2. we don't have (asic) hardware yet, so there are limits, but cpu is still pretty
powerful.


* the more you overbuild the cpu, the faster you can go.
* For old coax cameras, buy a coax to ethernet adapter such as the ebridge series by Altronix. These allow use of an ip camera on a coax link. Or, better yet just run ethernet.


* passthrough on hi res stream obv. watch low res stream live, expand /  
*https://forums.zoneminder.com/viewtopic.php?p=130577&hilit=1.37#p130577 See this note about slow playback in ZM < 1.37.
open window to hi res stream, ideally (custom javascript could do this:todo).


* use zmninja + the website. offer customers both apps. there are also some other apps available. (e.g. possibly zmsquarer).
* For numerous camera setups (10+), you will make your life easier if you deploy all the same model of camera or at least the same resolution. This way you can reuse zone settings across the db.


* in most cases, you should replace coax cams with ethernet. customers
* fine tune zones with scripts on zm  https://forums.zoneminder.com/viewtopic.php?t=31355&p=124557#p124557 make 24 hour sequence, and fix ir false alarms
that are camera happy tend to like hi res, whether its needed or not,
and coax is low res.


* (optional) configure zmes or good blob detection. you pretty much only
* Always make sure you have a cellphone to test the alignment of the camera. Nothing beats being able to adjust the camera while looking at the feed.
will be detecting people in the average business. maybe cars. For extra points,
figure out how to assign names to people in zmes.


==See Also==
==See Also==
Line 303: Line 278:
* [[Docker]]
* [[Docker]]


* [[Example Camera View HTML]] A quick html file you can deploy on clients to watch the server.
* [[External Live Stream]] A quick html file you can deploy on clients to watch the server.


* [[Exporting Videos Hack]] (not recommended)
* [[Exporting Videos Hack]] (not recommended)
Line 315: Line 290:
* https://wiki.zoneminder.com/How_to_view_recorded_history_from_show_timeline
* https://wiki.zoneminder.com/How_to_view_recorded_history_from_show_timeline


* [[MJPEG_vs_H264]] For ZM < 1.31, use MJPEG for large deployments
* [[LibVNC]] Screen recording in Zoneminder


* [[Multi_Port]] For streaming more than 6 cameras at once to a browser.
* [[Multi_Port]] For streaming more than 6 cameras at once to a browser.


* [[MySQL]] can require some optimizing, and there are potential gotchas. Though newer releases of Zoneminder may have resolved some of the issues.
* [[MySQL]] can require some optimizing, and there are potential gotchas. Though newer releases of Zoneminder may have resolved some of the issues.
* [[OpenVPN]] tips


* [[PurgeWhenFull]] requires configuration on larger systems, or systems where events are created at a pace faster than PurgeWhenFull can keep up. Failure to do so, will result in all events being blank, and you will have to fix it.
* [[PurgeWhenFull]] requires configuration on larger systems, or systems where events are created at a pace faster than PurgeWhenFull can keep up. Failure to do so, will result in all events being blank, and you will have to fix it.
Line 344: Line 317:


* https://github.com/lbdc/zm_movie_bootstrap Create timelapse videos (adjust fps) or just export. Terminal or GUI. Good example of a basic ZM hack interfacing with db, and querying video files.
* https://github.com/lbdc/zm_movie_bootstrap Create timelapse videos (adjust fps) or just export. Terminal or GUI. Good example of a basic ZM hack interfacing with db, and querying video files.
* [[AxisMotionDetection]] - for offloading motion detection on Axis cameras and using ZMTrigger to receive the alerts (will save CPU).
* https://forums.zoneminder.com/viewtopic.php?p=131662#p131662 - URL for users to login to.
* https://forums.zoneminder.com/viewtopic.php?t=31005&start=15 - Run cameras at low res, yet using passthrough to get full res with modect on the low res stream and live.
* https://forums.zoneminder.com/viewtopic.php?t=31355 - Rerun a video through the zones to tune them.


[[Category:Dummies_Guide]]
[[Category:Dummies_Guide]]

Latest revision as of 10:14, 16 March 2024

This is a lot of what I know about surveillance cameras and ZM.

If you wish to view the full ZM Documentation, I recommend viewing it through the PDF view, as the sphinx website is not efficient and requires javascript. PDF View: https://readthedocs.org/projects/zoneminder/downloads/pdf/stable/ If you want a hard copy, you can order the documentation through a self publishing service like lulu.com

Zoneminder is a powerful tool, but it has a learning curve. The forums are there to answer questions. Search then post if its not already answered.

On the learning curve: It can be some work (depending on how complex your system is), but you will become a proficient gnulinux sysadmin if you familiarize yourself with ZM and its many features. If you buy an off the shelf DVR you won't learn nearly as much (if anything). Additionally, these skills are valuable for 'any' Unix-based server (DB, website, email server, kiosk, etc).

If you are already knowledgeable about unix based computers, then you shouldn't have any trouble.

Install

Use the install guides provided by Bbunge on the wiki: Zoneminder Wiki: Contents These are the best supported install guides.

Debian is recommended.

Even numbers are stable. Use those. Odd numbers are testing/development.

Here's a guide for using an external HDD: Using a dedicated Hard Drive

Test out a Camera

Once you get ZM installed, you will want to test out a camera. You can do a webcam, or you can do an IP camera. See the Hardware_Compatibility_List

I recommend you start with an early Axis. They are well documented and easy to setup. Old ones go for $10-20. Follow the instructions on either the Zoneminder Hardware compatibility list, on ispyconnect's url list, or in the user manual for the camera. Any respectable camera will document it's RTSP and MJPEG / JPG paths for you to access. ONVIF is also an option to find the path for RTSP cameras. This is covered in more detail in Finding Camera Stream Paths.


Follow the instructions in the Hardware Compatibility List for parameters for setting up a camera the first time. If you have an error, look at the logs. FFMPEG and VLC can be used to test that the streams are valid. e.g. from terminal: ffmpeg -i rtsp://username:password@<ipaddress>:554/path output.mp4 This is faster than using ZM.

In ZM, IP address, path, port, and Resolution must be correct. Most other fields can be left at defaults.

Use vlc or ffplay like this:

ffplay http://192.168.1.5/mjpg/video.mjpg
or ffmpeg
ffmpeg -i http://192.168.1.5/mjpg/video.mjpg output.mp4
or
ffplay rtsp://<user>:<pass>@<hostname/ip>:554/axis-media/media.amp?videocodec=h264&resolution=320x240

If the camera requires authorization, consult the user manual, or you can try adding the username and password before the ip like so username:password@ipaddress This is an alternative to 192.168.1.5?username=root&pwd=mypass which most guides tell you to do. Both will work, however the former is easier.

If pass is blank, you type in root:@192.168.1.5

RTSP always specifies the port and uses rtsp, instead of http. e.g. rtsp://user:password@192.168.1.10:554/somepath

Obtaining more Cameras

In ZoneMinder, when you add a camera, you have a few options:

  • LOCAL Camera connected directly to computer (webcam, or analog camera thorugh bttv card)(typically /dev/video0)
  • REMOTE (obsolete) Precursor to ffmpeg.
  • FILE Grab a jpg file somewhere locally and display that (you provide images that change from anywhere on the filesystem). Can be used in unusual ways (i.e. a slide show, <insert use here>).
  • FFMPEG and LIBVLC use the respective libraries to pull a stream similar to REMOTE does for RTSP only. They can also watch MJPEG streams and the former can loop local video files.

And some others...

FFMPEG / LibVLC is recommended. Don't confuse LibVNC with LibVLC. LibVNC is for recording VNC (i.e. screenrecording).

FFMPEG has the option of RTSP (h264) or MJPEG streams.


MJPEG

Older cameras from 2000's. E.g.Arecont Vision, Axis, Bosch, Foscam, Grandstream, Instar, Messoa, Zavio and others. The prices scale with features. Old indoor Axis cameras at 480p-720p resolution (no IR) can be found online easily for $10-30. These are generally obsolete.

RTSP

2010's and newer cameras: These cameras use h264 (or h265) compression. They serve it on an RTSP server. h264 means less bytes, so you end up using less HDD space than compared with MJPEG. H264 is recommended when possible.

Note: Users with 1.32+ can use H264 passthrough, which writes the h264 direct to mp4, and saves some CPU usage. .

How Powerful of a Computer to Use

High-end server hardware will perform better than desktop, or low end server hardware. I have seen this firsthand between two servers: KFSN4-DRE and the KGPE-D16. The latter runs ZM with 25+ cameras, not breaking a sweat. The former reaches a limit at about 10. Another limitation is HDD size.

I currently recommend buying Axis (new is expensive, so you'll probably purchase used), although many do not have IR. This is not a problem, as outdoors IR on cameras attracts spider webs, and external IR is recommended. Another recommended brand is Hikvision. Hikvision can be bought new for a lower price if warranty is an issue (for business clients that can't afford Axis). The cameras work well with ZM, and are configurable without Windows, Otherwise, any respectable name brand camera will work. Look through the hardware compatibility list. Read the user manual before you purchase the camera, and look for the following: Outdoors/indoors, IR/no-IR, Resolution. IR can be supplemented with external appliances. You can also put pesticide on the cameras to deter bugs... (although I wouldn't).

A note on Analog Cameras

There is an option to use a coax to ethernet adapter. You need two pieces. One is the sender, one is the receiver. They may or may not be identical. These allow the use of IP Cameras over coax. Search ebay. Altronix ebridge ones are about $120 for a pair or adapters (you need a pair for each camera). If this is too much money, you may keep the old coax cameras. See: IP Video Encoders [1]. Honestly, just run ethernet if you have a chance. Customers expect HD these days.

I have not worked with HD analog over coax, and I don't recommend it. I did try to keep old coax cameras but they became obsolete. IP cameras are the way to go.

Watching the Cameras

Cameras can be watched from the ZM apache server website and/or ZMNinja.

For business customers offer both choices to the customer. Or build something custom if you like. HTML imagemaps work well.

You can make fully customizable pages i.e. make an html file on a remote machine with the following code embedded in an img tag. Adjust monitor ID as needed. How to stream from another ZoneMinder installation. Also an easy way to embed video in a website (img tag). See Dedicated SBC Camera Monitor for an example of a computer that only displays the streams. [[2]] has the HTML code for API/non-API usage.

If you embed the URL in an img tag, include http prefix or it wont work.

img width="500px" height="500px" src="http://zmserveripaddress/zm/cgi-bin/nph-zms?mode=jpeg&monitor=#&scale=100&maxfps=5&user=username&pass=password"

Call it locally:

firefox file:///home/username/file.html

When you have > 6 cameras, you can either use firefox and edit about:config (explained below in guide), or see https://forums.zoneminder.com/viewtopic.php?t=28168&p=113934#p113934 for instructions regarding multi port.

Watch the scale parameter. That can be adjusted for clients with low power CPUs (ARM SBCs) if whole img boxes seem to drop out. Note that scale does require some CPU on the server side.

One note: If you have alternative high/low resolution cameras (motion detect on the low res, record on the high res). You might not want customers to view the low res cameras. In this case, make a group of the high res cameras, and set that to be the default view.

Embedding ZM in a webpage

Example Camera View HTML

Embedding Streaming Video in External Website from Forums

https://wiki.zoneminder.com/External_Live_Stream#Imagemap_of_Cameras - Highly recommended for medium / large installations.

Recording in Zoneminder

The zmc binary handles recording and analysis (1.36).

You can record everything (good, but no way to find events). You can modect everything (light HDD use, but misses stuff). You can mocord everything (better, but uses HDD, and event list timeline in ZMNinja shows 10 minute segments). But all of these are flawed. Here's what you do: always record two streams per camera. One, the low res stream, is set to mocord/modect, with reasonable (but no need to be perfect) settings for detection. Two, the high res stream is set to either record and uses h264 passthrough.* The hi res compressed stream is saved directly to disk. Decoding and Analysis should be disabled as well in the source menu.

See also this link for a way to use a high res stream under analysis with less CPU: https://forums.zoneminder.com/viewtopic.php?f=10&t=31334&p=124410

In ZM 1.32+, you can use multiple HDs (as many as you like), and assign cameras to where they should be saved. These are storage areas

  • Linked monitors have from time to time had bugs or configuration gotchas, so for simplicity sake, I use record. HDD space is cheap.

Motion Detection

What's all this motion detection stuff, anyhow?

The strength of zoneminder lies in its motion detection analysis (thus the 'zone' in zoneminder, being the motion detection zones). See: Understanding Zoneminder's Zoning system for Dummies

Help, I missed an event!? You can re run analysis on old videos with: https://forums.zoneminder.com/viewtopic.php?f=11&t=24686 and https://forums.zoneminder.com/viewtopic.php?f=8&t=28013&p=109190 You can re-create videos from your (JPEG ONLY) footage, and then reanalyze them. (those with ffmpeg mp4s created, may need to combine the footage into one video, then make that a video source in zm as file.).

See also: https://forums.zoneminder.com/viewtopic.php?f=11&t=31355 to run zm on files on the server filesystem.


4K Cameras Mocord on the low res stream, and record on the high res stream. Do NOT use any analysis or decoding on the high res stream. Analysis and decoding is where the CPU is eaten up.


Sizing Zones Tip

My first thought is the threshold is too low. It happened to me when I 
first started with ZM. I figured out a little trick:

Draw a new zone a little smaller than you appear in the video. The zone 
will tell you the number of pixels or the percent of the whole frame. 
Compare that to the size you have setup to detect. If you are using 
percent try changing to pixels, that will not require the math to adjust 
the percent.

ref: http://forums.zoneminder.com/viewtopic.php?f=40&t=30570

I'm still getting false alerts!

You may want to run ZMES. It's not too difficult to setup, but it will require more resources. See https://wiki.zoneminder.com/ZMES

Example Zone

Error creating thumbnail: Unable to save thumbnail to destination
Basic zone that won't miss events. Though it will still detect false ones without ZMES.

Start out with Best, High Sensitivity. Change to pixels instead of percent, and start around 500. This is a good start, but it may still require ZMES. For bounding boxes, you should try to use rectangles or squares. I believe someone in the forum mentioned this will save on calculation of the CPU, but regardless, it just looks better. Use the boxes in the bottom to line up X and Y appropriately. See image.

Tips

  • Zones should be as small as possible, and you should use as few zones per monitor, to lower CPU usage.
  • Analysis FPS can be limited to 2 FPS to lower CPU usage. IMPORTANT (do not limit Max FPS, only analysis).
  • Aggressive Modect usage can run into issues with PurgeWhenFull
  • Transitions from daylight to IR cause false alarms. The solution is to "Set a max alarmed area so it doesn't alarm if the whole area is changing" or use ZMES.
  • You can use external hardware motion sensors via ZMTrigger over modect, when high reliability / low false alarms is required. More setup cost / time though.
  • JPEG saving, should be avoided on H264 streams when possible. Use H264 passthrough. Consider how decoding the H264 stream to JPEG uses CPU, while passthrough will avoid this conversion step.
  • If you have more than 6 cameras you may want to setup multi-port as an alternative to firefox about:config edits. See: https://medium.com/zmninja/multi-port-storage-areas-and-more-d5836a336c93 Note: article written by zm dev. See also Multi_Port
  • From forum: "In zones, switch to pixels, reduce minimum area/pixels/blobs etc to less than 1000. I find either 500 or 1000 works well."

Hardware Advice

When setting up the cameras, here is some advice.

  • Don't do anything but 802.3af POE. Passive POE is more trouble than its worth. There are 5/8 port POE switches, use those.
  • If you purchase axis cameras, be aware that the cameras are 5V and the barrel plug is 4.0mm x 1.7mm. It's easiest to use POE on these (and all cameras actually).
  • Installing areas where the temperature is high may cause early camera failure (especially for cheaper cameras). Even something as simple as a corner of an enclosed room where the heater runs / sun shines all day may be enough heat.

Troubleshooting

  • Watch logs.
  • Use forum search.
  • Use web search.
  • Enable component logs and navigate to /var/log/zm/.
  • # tail -F /var/log/syslog
  • Beware of underlying hardware faults such as bad RAM.
  • Disable logs after you are done.

Notes

  • Some cams will have two video streams (e.g. Hikvision, Amcrest). The resolutions/video type may or may not be the same. For example, there may be a low resolution mjpeg stream, and a high resolution RTSP stream. Read the data sheet / user manual for cameras you intend to purchase. Multiple streams are desirable. On Axis cameras, you can simply specify the resolution at the end of the path, e.g. &resolution=320x240, (certain model) Foscams have videoMain, and videoSub. There are different variations. One hikvision even had 3(!) streams.
  • I found it helpful to include monitor ID in camera names, as you run into monitor ID in logs often.
  • Proprietary cameras are known to report to outside IPs. Don't give them internet access. Only the server should be wan-accessible. Make a separate network.
  • Many cameras have default telnet passwords, in addition to the default web access passwords. Change these or keep cameras away from the wan. Cameras are common botnet targets.
  • With server motherboard hardware, you will be able to have more cameras (servers are more powerful, and better servers will have better performance).
  • I use ext4 filesystem for the HDDs. I had tried using ext2 filesystem for better performance, but the fsck time is prohibatively slow for ext2 (>24 hours for >2TB). Ext4 seems to work well. Older ext2, or ext3 fs can be upgraded to ext4. Other filesystems are generally, not recommended. Ext4 works fine. You have been warned.
  • Edit /etc/default/rcS (applies to devuan/trisquel) and make sure auto FSCK is enabled. Failure to set this, will require manual intervention when the server is repairing the filesystem, requiring you to press a key.
  • Make sure the BIOS is set to power on after power fails.
  • Don't set a Max FPS limit on REMOTE or FFMPEG, or VLC cameras in Zoneminder. The FPS should only to be set at the IP camera itself. Max FPS limiting is for LOCAL cameras, only.
  • Do NOT point cameras at bright light, such as facing a window, a garage door, or anything that generates glare. It will blur the image / potentially damage the camera's image sensor.
  • Buy a set of adapters such as these: to use with your normal 5.5 2.1mm barrel plug. Search multi type 23 or 28 dc power adapter. EDIT: actually only use poe (but picture left as these are useful).

Universal 28pcx Multi type Male Jack for DC Plugs

  • I made a script to watch cameras that drop out, and disable/re-enable them for my 1.29 setup. See here. This also doubles as a notification in case the cameras somehow are powered off. You'll get emails telling you cameras are down. EDIT: See note about poorly supported cameras above. With good cameras, this does not occur. Rabbit hole warning. Stick with quality name brands.
  • If you are setting up mobile phones with ZMNinja, and the wifi is the same WAN IP as the camera system, setup a VPS with a http/https proxy and point zmninja at the proxy. The proxy can be as simple as:
sudo iptables-legacy -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j 
DNAT --to-destination <officeip>:80
sudo iptables-legacy -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j 
DNAT --to-destination <officeip>:443
sudo iptables-legacy -t nat -A POSTROUTING -j MASQUERADE

Note that you might want to set nonstandard ports.

  • run 2k cameras at least for business customers. People like hi res. You should have a low res, and a hi res stream. The hi res is record only with no analysis or decoding (using passthrough). The low res is mocord and the one they watch on ZMNinja or the console.
  • the more you overbuild the cpu, the faster you can go.
  • use zmninja + the website. offer customers both apps. there are also some other apps available. (e.g. possibly zmsquarer).
  • For old coax cameras, buy a coax to ethernet adapter such as the ebridge series by Altronix. These allow use of an ip camera on a coax link. Or, better yet just run ethernet.
  • For numerous camera setups (10+), you will make your life easier if you deploy all the same model of camera or at least the same resolution. This way you can reuse zone settings across the db.
  • Always make sure you have a cellphone to test the alignment of the camera. Nothing beats being able to adjust the camera while looking at the feed.

See Also

  • ffmpeg Example usage, and notes.
  • LibVNC Screen recording in Zoneminder
  • Multi_Port For streaming more than 6 cameras at once to a browser.
  • MySQL can require some optimizing, and there are potential gotchas. Though newer releases of Zoneminder may have resolved some of the issues.
  • PurgeWhenFull requires configuration on larger systems, or systems where events are created at a pace faster than PurgeWhenFull can keep up. Failure to do so, will result in all events being blank, and you will have to fix it.
  • Zmodopipe Is a tool that can tie an analog DVR system to Zoneminder, although it is far from perfect. I have documented it there, and recommend purchasing a (some #) channel video encoder instead.
  • ZMNinja - General usage, also Geoblocking w/apache.
  • ZMTrigger is a tool that can be used to take outside information and overlay it onto the camera display. For example, you might take the temperature, or wind speed, and overlay it on a camera. It can also be used as external motion detection. Experience with electronics and microcontrollers such as AVRs, Pics, and the Arduino IDE are applicable here.

Other Users

  • AxisMotionDetection - for offloading motion detection on Axis cameras and using ZMTrigger to receive the alerts (will save CPU).