I posted this anonymously but now I can't find it on the listing here. If this is a repeat from another post (that I cannot find), I apologize. I'm not sure if my thoughts here will be directly in line with what you want, but I wanted to share what I did in case it would help.
To start, ZoneMinder is a project that I have a soft spot for. It's a very complex application that works moderately well than even some brand new proprietary solutions out there today. That said, ZoneMinder has to go through a monumental facelift before I would consider using it again. Last I used it, it would run for a few minutes then just stop recording and populate thousands of errors in my syslog. ZoneMinder has had some recent developer activity with some individuals who are taking it upon themselves to do work on it and patch it accordingly. The problem is, these individuals don't have access to patch the core version in the repos. I wouldn't be surprised if a large update comes out soon or that ZoneMinder gets forked under a different name with all of the updates. Either option is possible. That said, ZM isn't my software of choice at the moment.
Instead, I use Motion. Just a quick disclaimer, Motion is admittedly not for Grandma Edna who never used Linux before. It's something that requires a little bit of setup. It's a daemon, not a GUI. You have to create the directories for each camera feed. You have to adjust all of the parameters you want within the config file. You have to lay down the initial foundation upon which Motion will run on. If you want some insight with getting started, have a look at my YouTube tutorial I set up a few months ago. http://www.youtube.com/watch?v=NwDLkMPLTw0
(take note there's also a Part 2)
Motion works by watching the MJPG stream of your camera and taking snapshots accordingly. Those snapshots can be configured to stay regular JPG's, or you can turn off JPG's all together and have the system stitch them into an avi file and have more of a video-esque playback. Because MJPG isn't that fantastic with compression, it's literally impossible to have a flawless amazingly epic jaw dropping 3000 FPS feed that looks like BluRay quality. MJPG is solid, but it's not something you would want to be running as a traffic cam where every second makes a tremendous difference. The reality is when it comes to surveillance footage, it only takes a single JPG to really capture the face of a crook. MJPG is very well suited for things like that, so running an MJPG setup at 2, 5, 7, 10 FPS, whatever it may be could very well be a home run.
As I said, Motion has no GUI. You may be wondering, but wait, I want to have a montage of all video feeds actively running. You can do that relatively easy, but it'll take a little bit of leg work. Here on the Motion FAQ I posted some ideas as to what you can use to create your own montage. This will be very basic with no additional features, but you'll see all cameras running at once. Likewise, you can click on each feed to see it full screen. I built my own motion.html file and just keep it saved locally and open it in a web browser when I want to have view. I use Method 2, but each one should serve its purpose: http://www.lavrsen.dk/foswiki/bin/view/Motion/FrequentlyAskedQuestions#How_do_I_see_more_than_one_camera_stream_at_a_time_63
I personally run dual streams. I have Motion running at 1 FPS with the MJPG stream of my cameras which saves the JPG's accordingly to the specific directory for that camera... meaning my camera out front will save the JPGs in
/media/surveillance/front_cam/snapshots. On top of that, I also run 24/7/365 full time recording, which utilizes the H264 stream of my cameras. Motion does not support H264, so this particular stream is not involving Motion at all. Motion is only dealing with MJPG. My cameras have a feature on them that is an absolute must have for me... saving directly to NAS (Samba). Within the interface of my cameras, I added a server and set the path. I also set the username and password for my Samba user. The cameras thereby save their corresponding feeds to their designated directory, such as
The reason I run both is because I wanted to have full time recording (personal preference) plus I wanted to have a quick way to identify what happened without having to fumble around through hours of feeds. It's all well and good to have highlighted time slots of when motion was detected like some software has, but I find it's just easier to see a series of snapshots, page through them, and exit out when it's all said and done. Running Motion @ 1 FPS enables me to view the snapshots directory for each camera and quickly see the basic jist of what happened. If I see at 2:01 am that there was a masked man on my porch (via the date/time stamp on the image itself), I can go to the video feed and see exactly what happened. My H264 feeds save at 20 FPS, whereas MJPG works at 1 FPS. As I said, Motion's JPG snapshots are used for a quick identifier, with the full time feeds running for a higher quality feed. Not to mention, I personally like the idea of having full time recording... that way I feel as though nothing got by the system's motion detection capability. Just my 2c there.
You may be questioning why I went through all this work to set it up. Realistically speaking, it wasn't that involved. I basically set up Motion for each camera to run at 1 FPS. I made sure the directories and permissions were set up for each instance. Then I let it run. On the recording side, I set the server and path for each camera within the camera interface and bingo - there are my full time feeds. Not all cameras support saving to NAS, but I'm finding that it's a very nice feature. That way I'm not bound by the software's capabilities. Worst case scenario I at least know I can run with no software and simply save the feeds directly to the file server. That, to me, is a must. But again, just my 2c speaking.
Along the lines of the cameras saving to the file server, I set them to run in 60 second increments. My cameras (Vivotek IP8332) also save the feeds based on date/time. For example, if I navigate to 20130206/12/, I'll see 60 mp4's listed 1-60. Each one of them is the single minute of recording that took place at that time. the "12" in the path is corresponding to the 12 o'clock hour, with 20130206 being Feb 6th, 2013. That way if I go into my snapshots and see at 2:01:30 AM some guy was on my porch, I can navigate to 20130206/2/01.mp4 and view what happened just then. Considering that my "surveillance" drive is shared out via Samba, I can do so from anywhere on the LAN without having to go to my actual server, which in reality is a must since my server is Ubuntu Server (no GUI), so it wouldn't help to go to my server to begin with. Of course you could do this with a regular desktop Linux distro and work with it from there just fine.
The other reality is to just get a pre-packaged system. These come with pros and cons of all sorts. The only thing I want to stress 100 times over again is to do as much homework as possible. There are pre-fab systems that are terrible. There are pre-fab systems that are amazing. There are issues with each and every setup out there, you just have to read reviews and do as much digging as possible. For example, it's not uncommon to find a package deal where the camera's IR capabilities are terrible. In other instances, certain DVR/NVR's only work with specific HDD firmwares for some reason, or won't acknowledge HDD's over a certain size. Other times you might find a system that has amazing cameras, but the DVR/NVR is prone to random shutdowns and reboots (or vice versa). When I was building my setup, I was convinced to get the best of both worlds... as a result, I shopped around for the best bang/buck for both cameras and dedicated DVR/NVR units. What I ran into was a headache of compatibility questions. DVR/NVR units often have a "supported list" of cameras. In some cases, they'll only support 5 brands. In other cases, they'll say they support xyz manufacturer, but they don't list that they only support a handful of features from that camera... so the camera may be fully capable of doing far more but limited in usability simply because the DVR/NVR doesn't acknowledge that those features exist. Monumental headache, am I right? Please note, I'm not trying to say that pre-fab systems are bad to go with. I know some users who love them. I know other users who swear by PC/server based solutions. The reality is, the CCTV world by nature requires that users do their own homework to pick what works best for them. Even if you try to piece together a DVR/NVR setup with other cameras, you'll have to do homework and you'll have to answer questions. Or on the flip side, you could get cameras that support NAS recording and watch a 25 minute video on how to get Motion set up and have a setup like mine - that's entirely your call. Point is, every situation won't be a double click/slam dunk. It's almost about picking and choosing your battles. I can tell you this, though... Motion, along with my full time recording from the cameras, has been 100% bomb proof. In the year I've been running this setup I haven't had to tinker with it once. It just continues chugging along without fuss.
Sorry for the novel, but I wanted to share in case any of this could help. Good luck sir.