Cheap FullHD Chinese IP Cameras from AliExpress – review of a bunch

tl;dr:

I’ve been buying bunch of Chinese IP cameras to see which one would be the best “bang for the buck”. I only had two requirements: PoE and FullHD resolution (and ONVIF, but that’s pretty much standard today).

I’ve tried 7 different cameras, and the best one that I tried and can recommend is this one for $23 (1080P (Black) and 2.8mm or any focal lenth you need).

For more info about this one, scroll down to #5.

ts;wm: (Too short, want more)

This is not a comprehensive review, just an overview of the cameras I tried out so I know which cameras I can buy again or recommend; and which ones I wouldn’t buy again. I don’t care about any of the camera’s features as I am just taking their video stream and feeding it into ZoneMinder-based DVR.

For privacy reasons I won’t post sample images from the cameras, since I have them already mounted in place.

Security concerns regarding no-name Chinese IP cameras

People (and by people I mean redditors) always freak out when I even barely mention that I am using no-name Chinese IP cameras for my home security system. I sort of understand why, but there is no reason.

I’ve created a separate group of objects (= the IP cameras) in my firewall which does not have internet access, therefore the cameras cannot call home in any way. They do try, but it is not a lot of traffic anyway. I’ve come to believe that often they only try to sync time, since some of the servers I’ve pulled from the log of blocked connections were time servers in China (I have found out later that some of the cameras have automatic time sync set up in the settings using random university servers in China). By the way, this can be bypassed by simply setting the time server to my local ZoneMinder server which also runs ntp service, so the cameras can have correct time even without Internet. (Which is not really important in the first place, but I am switching day/night mode on one of the cameras manually by time, which is where it becomes useful.)

If you are looking for a single camera packed with functionality (like with iOS app and whatnot) that you may even want to expose on the Internet for remote access, then I would probably suggest staying away from these Chinese devices.

But if you simply only need a “network lens” from which the NVR of your choice (ZoneMinder, Synology NAS and many, many others) can grab video stream, read on.

Cameras are in the order as I bought and tried them. FPS can be lowered on all of them in the settings. (See the end of this article.)

1. ???Brand??? (Legacy review), WiFi+RJ45, IR, AC, 1280×960, $34

Model number: N/A (sold it)
ZoneMinder settings:
Source Type: Ffmpeg
Source Path: rtsp://(ip-address):554/11
Remote Method: RTP/RTSP

This is the first camera I bought, naively thinking WiFi is good enough for streaming (it is not). The image quality is terrible and it gets even worse at night when the IR filter rolls in – the image gets so blurry I can’t even read a license plate on my own parked car right under the camera.

This specific model is not in stock anymore so I can’t find any details on the chip and sensor etc. but it doesn’t matter because I wouldn’t be buying again anyway. I also recommend staying away from WiFi. Just go through the trouble, buy a roll of cat5e and wire everything properly. (Edit: This is a 2018 article, today, with modern mesh WiFi networks, it might just work, but you still need to run power to the cameras, at which point you might just as well run cat5 cable with POE anyway.)

2. Revotech, FullHD with AC/DC power (ASDK Store)

AliExpress, P/N N/A (sold it), bought for $21.28

ZoneMinder settings:
Source Type: Remote
Remote Protocol: RTSP
Remote Method: RTP/RTSP
Remote Host Name: (ip-address)
Remote Host Port: 5544
Remote Host Path: /live0.264

Can’t confirm the model but they claim it’s I6032B-V200 that has a Hi3518E V200 chip with 2363 sensor (Hi3518EV200+2363).

Dynamic range is not the greatest (on sunny days sometimes the sun-lit part is way blown and over-exposed), but otherwise, the image quality is so-so good during the day, but shit-fuck grainy at night when running on the IR light.

Would not buy again, I sold it already and swapped it for a POE camera.

3. Besder, FullHD with AC power (Besder Official Store)

URL

ZoneMinder settings:
Source Type: Ffmpeg
Source Path: rtsp://(ip-address):554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp
Remote Method: RTP/RTSP

Little more expensive than the previous one, it was $29. It has a Hi3516C chip with an unknown sensor. The image is great. At night the image gets grainy but it’s way better than the one above.

Has nice metal housing and the four IR LEDs look powerful (can’t confirm how powerful because I have this camera aimed on a gate lit by street lamp).

Despite all of this, I wouldn’t buy this specific camera again. I don’t see the benefit of paying $10 extra for the metal housing; the cameras with plastic housing serve me just as well. Though, this one does look more professional, but for me the goal is that no one should notice the cameras at all, let alone judge how “professional” my security system is based on that. (Not much anyway, I guess.)

4. Misecu dome camera, POE, FullHD (Misecu Official Store)

URL, model IPC-DM07-20SC (48V POE 1080P + 3.6 mm), bought for $30.12.

ZoneMinder settings:
Source Type: Ffmpeg
Source Path: rtsp://(ip-address):554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp
Remote Method: RTP/RTSP

My first PoE camera! #yay

The chip could be Hi3518 (Hi3518EV200), but it is hard to find out. The seller has this in the data sheet for different Full HD camera (IPG-50HV20PES-S). The sensor is not specified.

However, the image quality is by far the best I’ve seen so far and there is no noise at night! During the day, the image is maybe a little over sharpened but nothing major. Being a dome camera it was a little finicky to get it positioned, I thought it would be easier to set the angle.

The “camera ball” (not sure how to describe but the camera itself is actually a ball when taken out of the dome housing) and the housing are well finished and made from metal. The seller says it’s “vandal proof” and I am inclined to say this is not too far fetched when properly fastened to the wall/ceiling (I think it had four screw holes at the base, which’d make it rock-solid with proper fastening).

I would definitely consider buying this one again (especially if I figure out what is the best use-case for dome cameras instead of regular bullet body cameras).

5. Besder camera, POE, FullHD (Besder Official Store)

URL, model 6024PB-IP201 (48V PoE 1080P + 2.8mm), bought for $25.27

ZoneMinder settings:
Source Type: Remote
Remote Protocol: RTSP
Remote Method: RTP/RTSP
Remote Host Name: (ip-address)
Remote Host Port: 554
Remote Host Path: user=admin&password=&channel=1&stream=0.sdp?real_stream

Chip Hi3518EV200 with a 1/2.7″ SC2135 sensor.

For $25 this is the best value for money I’ve got so far. Image quality is comparable to the dome camera above, and it doesn’t seem to be as over-sharpened. On the default quality setting (Medium) there is visible compression in the stream, but it goes away when set to High.

Worth noting is also the fact that despite cheapo plastic case I have this camera in the wild (on a tree, actually) exposed to all kinds of weather, and so far it holds up fine! It survived summer thunderstorms and now going through its first winter. So far, so good. (Edit July 2019, over a year after set up: Still holds up fine. Edit April 2021: Ibid. Goes for all the other cameras, too.)

6. Two Revotech cameras, one with Sony chip and one “regular”

URL, models I6032B-V200-POE ($24.29) and I6032B-Sony-POE ($33.61)

ZoneMinder settings for the cheaper model (I6032B-V200):
Source Type: Remote
Remote Protocol: RTSP
Remote Method: RTP/RTSP
Remote Host Name: (ip-address)
Remote Host Port: 5544
Remote Host Path: /live0.264

ZoneMinder settings for the model with Sony chip (I6032B-Sony):
Source Type: Ffmpeg
Source Path: rtsp://admin:@(ip-address):554/live0.264
Remote Method: RTP/RTSP

Note: Both settings somewhat work for both of the cameras, I don’t know why I’ve set them up differently, but since it works, I am not gonna touch it. :D

Here it gets little confusing. When I bought these, this seller was offering two variations of the camera:
* 1080p (Hi3518EV200 + 2363), today the 1080p
* 1080p with a Sony chip (Hi3516C + IMX322), today the 1080p 25fps

The main difference in the specs is that the basic version has max 15 fps and the one with Sony chip has maximum 25 fps. This is not a dealbreaker for me as I reduce all cameras to 5-7 fps, but it’s worth noting. Today, the seller doesn’t include the exact specs, but it’s safe to assume that they remain the same. The 1080P (Black) is the basic model, and 1080P 25fps (Black) has the Sony chip.

Now the image quality on both is great, day and night, but I would not buy the more expensive one again. The one with Sony chip has a little better image quality, but it’s not $8 worth of difference. Also the one with Sony chip pulls the contrast too high at night so the IR-lit area is okay, but the rest is pitch black. All of the other cameras have more even night image.

Unlike Besder above (#5), with its similar image quality and price tag, the Revotech cameras can be set up through any browser and OS (I run on Mac), whereas the Besder camera needs to be set up through Windows and  Internet Explorer with ActiveX enabled. More on that at the end of the article.

But I must admit, when I was setting these cameras up, I loaded up the direct stream into VLC and I was truly amazed at how good the Sony one was. Also I think both of these record sound which I also only noticed in the VLC. I don’t use this feature in ZoneMinder (not even sure if it’s possible) but maybe it is worth knowing. The sound stream can be turned off directly in the camera’s web admin.

7. Dome 720p POE

URL, model LTID-72BDF ($21.93).

ZoneMinder settings:
Source Type: Ffmpeg
Source Path: rtsp://(ip-address):554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp
Remote Method: RTP/RTSP

All I’ve got to say: piece of shit in every way considering it is only a 720p (1280×720) camera (all the other ones are FullHD – 1920×1080). The image sucks, its plastic body sucks, etc.

Conclusion

I have not bought any more cameras to try, because number #4, #5 and #6 are good enough for what I need and I started replacing all the other cameras with these.

On 11/11 Sales I’ve even managed to buy the cheaper Revotech (the one with non-Sony sensor) from #6 for under $19!

How to setup the cameras

Majority of the cameras have the DHCP turned off and the local IP is set to 192.168.1.10. This is where you can access the camera’s admin page and settings after initially plugin it in. Most of the cameras have default admin user admin and empty password.

I always first plug them into my test-bench router, log into them, grab their MAC address, bind this MAC address to free IP address on my master router, turn DHCP on (unless it’s on already) and only after that I plug them into my main network.

Some of the cameras can be only set up through Internet Explorer with ActiveX enabled and you need to download and install some weird app. I’ve simply bypassed it by having a disposable Windows virtual machine that I use to set up the cameras. After you install all of this, surprisingly a lot of the camera’s settings can be adjusted in-camera (time, IR-cut filter sensitivity, bitrate, frame rate, OSD features – moving them or turning them off altogether to get nice, clean stream). Before I’ve found that out, I contacted one of the sellers who told me it cannot be done (needed to do frame rate adjustment from 15 fps to 5 fps)… But rest assured, it seems that in some way it can be done on any camera.

Interesting reads

– January 2020 Update: I’ve swapped all the cameras to #5, so far the oldest one is 3+ years old and so far none cameras dies. The only one I didn’t swap is #4 (the dome camera) and that one is still running well, too.

  • April 2021 Update: Ibid.

Tips to make ZoneMinder run better

NOTE: I am running – and this all mostly relates to – an older version of Zoneminder, the v1.29.0.

Majority of the issues described here are thing of the past thanks to direct x264 passthrough recording that came with Zoneminder 1.32 and I highly recommend to upgrade if you are not using it for whatever reason yet.

 

So, little back story. I have a server (~~dual-core~~ quad-core i5 w/ 8 GB RAM) in my basement that has been running for 10+ years doing various tasks. Currently it’s my primary backup server, media server, file server, OpenVPN server and a ZoneMinder server. For almost a decade now, it has been running off of 6 pieces of 2 TB drives, that are partitioned 10 GB for system (RAID1) and the rest for data (RAID6). Everything runs within one Debian instance which I understand is not ideal. My next setup will be one big hypervisor with SSDs and ZoneMinder will get its own dedicated virtual machine. Until then, it is what it is.

On an unrelated note, over the last two years, bunch of stuff was stolen from my property. Apart from locking everything down from the second theft on I also had an idea to build a low-cost CCTV system (AliExpress IP cameras and whatever NVR platform I can find for Linux). I did a little bit of googling and basically when you want something Linux-based and open source, there is only one stable solution: ZoneMinder. Over the last year I also played with Shinobi (very early version that despite my then struggles with ZoneMinder I have passed on) and I briefly tried also a corporate grade software (can’t remember the name) that is free for up to 8 cameras that is supposedly great, but for that I would need dedicated Windows machine, which I don’t have and don’t want to set up.

Anyway, here are my observations that could help you get your ZoneMinder running smoothly. It took me a long time to get everything running as it should through trial and error (everything here seems so obvious now, but I probably took a lot of dead ends).

At first, I had three cameras and everything sitting on that RAID6 array, which was a pain. Even little things like someone starting a Plex session that started re-encoding a movie on that same array could have been enough for the whole ZoneMinder to plop dead because of the array utilization. Or even moving large files on and off server. But anyway, I could go on and on, but here are my tips. Order is random.

Monit daemon – so the service restarts if it turns off

Have a Monit daemon running that will restart ZoneMinder should it go down for any reason.

The Monit setting can be found e.g. here. You can even add a sendmail that will let you know ZoneMinder was restarted, and you can then investigate why. Huge help for this is Netdata that helps you quickly identify congestions within the system (by default it goes up to one hour into history with 1 second steps, but if you have enough memory you can go way deeper).

This was very useful before applying the further tips. I haven’t had the service go down in a few months now.

Don’t watch the live montage

Looking at live stream montage is fun, but try not to. Before I made another improvements even couple of streams were enough for ZoneMinder to start dropping frames.

What I found beneficial is a separate HTML page with a “manual” montage of live single frames, with a link to access individual full-fps live streams only when necessary.

Single frame can be accessed through (or just copy image address from Montage page and edit as necessary):
http://IP/zoneminder/cgi-bin/nph-zms?mode=single&scale=100&monitor=2

Alternatively you can create montage with 1-3 fps streams based on this:

http://IP/zoneminder/cgi-bin/nph-zms?mode=jpeg&scale=100&maxfps=1&monitor=3

Note that I have the &scale= set to 100 (%), but you can scale it down to 50 or 25. I am just loading full resolution from the server and only then resizing it locally within the browser to roughly 33% because it looks way better on my Retina Macbook.

Don’t use motion detection

Initially, I ran ZoneMinder in the Modect setting. That means that event is only created and recorded when motion is detected in the video stream. I thought it will be great and the footage won’t take much space. However, that had few other problems:

  • Shitty Aliexpress cameras with grainy night image were virtually impossible to fine tune anyway (might do a whole separate post on these)
  • Even during the day when everything worked as it should (kind of), there were missing events in the video before and after the event that could be valuable
  • It uses a lot of CPU and HDD

So I ended up deciding to just record everything (Record setting). It does take a lot of space, but should anything get stolen again, I can analyze even areas outside my property that otherwise would not have been in the motion detection area because it would be triggering false alarm every time someone walks by.

I plan on integrating physical motion detectors that would trigger event based on actual movement and not on image analysis. These can be built based on e.g. inexpensive ESP8266 board with cheap PIR sensor. I then may get a lot of cat-triggered events, but at least they will be more fun to watch that grain-triggered events where nothing happens.

Further resources for hardware triggers: here, here and here and basically a complete guide here.

Dedicated hard drive for the recorded footage

My initial setup where I was recording onto the RAID6 array was plain stupid, because it meant that all 6 disks would be spinning nonstop, congesting the array, slowing everything else is down, and/or the ZoneMinder stoppping when other heavy traffic was going on on the array.

Dedicated drive is the way to go. You can use either “special” NVR drives like WD Purple or Seagate SkyHawk series, but even basic 5400rpm WD Red works just fine. I am currently running WD Red 6 TB with average utilization under 30%, and that is recording from 9 cameras (1080p, fps ranging 5 to 8 depending on camera and the time of the day – the frame rate drops a little in IR mode). The total incoming stream from the cameras is only about 25 mbps.

How to set up dedicated drive properly is described here. Just note the process is different on versions 1.30.4 or older and 1.31 or newer! (I’ve had some issues where I did not notice they are different…)

Also, in Debian (and other Linux distros) there is 5% of space on every drive reserved for root. Turn that off on your ZoneMinder drive and tadah, you have 300 GB extra space (on 6 TB drive). Basically run sudo tune2fs -m 0 /dev/sdX, where /dev/sdX is of course your ZoneMinder drive. More info here.

Turn off SMART testing on the dedicated drive

This may not apply to everyone, but I personally have a smartmontools daemon (smartd) set up to perform short SMART self-test daily and long SMART self-test weekly and I have noticed a lot of dropped frames during the long self-test, which basically scans each sector on the disk. It runs with low priority, but when there is neverending stream of data that wants to be written down, it just doesn’t seem to work very well.

So I turned it off. I still get an email should any raw SMART value change and a lot of the disk’s surface is still overwritten in less than 5 days, so I am not overly concerned about that.

Of course, I am still running the risk that the disk will plop dead without any SMART warning, and since I knows how the world works, it will also happen the same night when someone steals all my mountain bikes. But, oh, well, I might do like raid1 or something in the future.

Anyway, to turn off the testing only on one specific disk in the system, open /etc/smartd.conf and add in this line: /dev/sdX -d ignore (of course don’t forget to change the /dev/sdX accordingly). Save, and then restart smartmontools.

Offload the database to an SSD

I sort of did this for reasons unrelated to ZoneMinder per se, but after moving all my databases onto the cheapest SSD I could find (WDS120G2G0A) I noticed significantly better performance while doing anything in ZoneMinder (should it be running zmaudit.pl, scrolling through recorded events or even watching the live montage).

Which is not surprising, after all, before the database ran off of a raid-1 array that was duplicated onto six slow 5400 rpm drives.

I since then moved a whole bunch of other stuff onto the SSD and it was one of the best unplanned upgrades that I ever did to the server (I use it also for stuff like Plex server and it’s temporary re-encoding folder). (Yeah yeah I know, today, everyone uses SSD as a system disk even in home servers today, but my little server runs since the pre-SSD era!).

Limit FPS on the cameras

Rule of thumb is that 5 fps is good enough for basic surveillance. If your camera allows it, limit the fps in camera to 5-7 fps from the default 15-20. I personally have the FPS (where possible) set to 7 fps, which during the night in IR mode drops to around five fps.

Do NOT limit the FPS in ZoneMinder settings, it will cause all kinds of weird artifacts. I’ve accidentally set it once for one camera and believed for several months the camera is faulty before I noticed the fps was limited in ZoneMinder and not in the camera.

Unfortunately, I have some AliExpress cameras that run 15 fps without any options to limit it down, so a way to make ZoneMinder to “drop every second frame” would be nice, but I suppose I will have to deal with differently; just haven’t figured out how exactly just yet. Ok, I’ve actually figured this one out. Even with camera where the seller told me FPS cannot be changed, it actually can be done. Only the setting has to be done in an Internet Explorer with ActiveX allowed.

And thats probably all the things that I could think of right now but I will edit this article along the way, but with these basic tweaks (basically: separated drive for events, database on SSD and using Record/Mocord instead of Modect) the ZoneMinder has been rock stable for the last few months. Edit: Running strong for over a year now.

Another good sources

Of course the official documentation and forums and someone else’s best practices.