setting up zm on raspberry pi

installed raspbian, 

installed zm per docker steps

using entrypoint.sh in docker utils
zm wouldn't start, because zmsystemctl is not working via this docker script

i migrated to devuan
(change apt repos, then apt-get install sysvinit-core, then reboot)

and it now doesn't try to run zmsystemctl and it actually works


next error:
failed to open vchiq instance

this reportedly has to do with www-user not having permissions to video group
let's change that...
usermod -a -G video www-data
usermod -a -G wheel www-data

edit: that was not it. dead end.
let's try
https://raspberrypi.stackexchange.com/questions/19436/how-can-i-permanently-fix-dev-vchiq-permission-errors

chmod 777 on /dev/vchiq worked.
NOTE: it looks like a reboot would've worked for the video group as well.
need to log out and back in the www-data user...

but i 777'd it.



Now, on to testing the RTSP path for H264, and use passthrough.

I tested the path in Mplayer and it does work from my laptop, so the path
is correct. ZM doesn't seem to work. Something with ZM is broken...

i tried to run the onvif probe... 
seems there are a couple dependencies not installed on 
this install for onvif probe
i'm giving up for now on configuring onvif probe.
This is no doubt due to it being a docker script.


 rtsp://admin:@192.168.1.138:88/videoMain
this path works in mplayer but not in zm ffmpeg.
let's try changing to tcp or udp or something else...
OK
this time it seems to work sorta
except
[zmc_m1] [Monitor dimensions are 1280x720 but camera is sending 320x240]


7]: INF [zmc_m1] [Got signal 15 (Terminated), exiting]
Aug 11 03:44:00 raspberrypi zmc_m1[2657]: INF [zmc_m1] [Unable to read packet from stream 0: error -541478725 "End of file".]
Aug 11 03:44:00 raspberrypi zmc_m1[2657]: WAR [zmc_m1] [Return from Capture (-1), signal loss]
Aug 11 03:44:00 raspberrypi zmc_m1[2657]: ERR [zmc_m1] [Failed to capture image from monitor 1 main (1/1)]

ok this

hm....
//
all kinds of errors
//
Aug 11 03:45:29 raspberrypi zmdc[2349]: INF ['zmc -m 1' sending stop to pid 2764 at 18/08/11 03:45:29]
Aug 11 03:45:29 raspberrypi zmc_m1[2764]: INF [zmc_m1] [Got signal 15 (Terminated), exiting]
Aug 11 03:45:29 raspberrypi zmc_m1[2764]: ERR [zmc_m1] [Unable to read packet from stream 0: error -1414092869 "Immediate exit requested".]
Aug 11 03:45:29 raspberrypi zmc_m1[2764]: WAR [zmc_m1] [Return from Capture (-1), signal loss]
Aug 11 03:45:29 raspberrypi zmc_m1[2764]: ERR [zmc_m1] [Failed to capture image from monitor 1 main (1/1)]
Aug 11 03:45:29 raspberrypi zmdc[2349]: INF ['zmc -m 1' exited normally]
Aug 11 03:45:30 raspberrypi zmdc[2349]: INF [Starting pending process, zmc -m 1]
Aug 11 03:45:30 raspberrypi zmdc[2349]: INF ['zmc -m 1' starting at 18/08/11 03:45:30, pid = 2787]
Aug 11 03:45:30 raspberrypi zmdc[2787]: INF ['zmc -m 1' started at 18/08/11 03:45:30]
Aug 11 03:45:31 raspberrypi zmc_m1[2787]: INF [zmc_m1] [Starting Capture version 1.31.44]
Aug 11 03:45:31 raspberrypi zmc_m1[2787]: INF [zmc_m1] [Priming capture from rtsp://admin:@192.168.1.138:88/videoMain]
Aug 11 03:45:31 raspberrypi zmc_m1[2787]: WAR [zmc_m1] [Unknown method (rtpUni)]
Aug 11 03:45:31 raspberrypi zmc_m1[2787]: INF [zmc_m1] [Stream open rtsp://admin:@192.168.1.138:88/videoMain, parsing streams...]
Aug 11 03:45:39 raspberrypi zmwatch[2428]: INF [Restarting capture daemon for main, no image since startup. Startup time was 1533959131 - now 1533959139 > 5]
Aug 11 03:45:41 raspberrypi zmdc[2349]: INF ['zmc -m 1' sending stop to pid 2787 at 18/08/11 03:45:41]
Aug 11 03:45:44 raspberrypi zmc_m1[2787]: INF [zmc_m1] [Got signal 15 (Terminated), exiting]
Aug 11 03:45:44 raspberrypi zmc_m1[2787]: ERR [zmc_m1] [Unable to read packet from stream 0: error -1414092869 "Immediate exit requested".]
Aug 11 03:45:44 raspberrypi zmc_m1[2787]: WAR [zmc_m1] [Return from Capture (-1), signal loss]
Aug 11 03:45:44 raspberrypi zmc_m1[2787]: ERR [zmc_m1] [Failed to capture image from monitor 1 main (1/1)]
Aug 11 03:45:44 raspberrypi zmdc[2349]: INF ['zmc -m 1' exited normally]
//

hm... now mplayer doesn't work.
let's reboot camera.
//

Exiting... (Quit)
dev@dev:~/delete/zmhwlasergit/ZMHW_Project_LaserDiodeSensor$ mplayer rtsp://admin:@192.168.1.138:88/videoMain
Playing: rtsp://admin:@192.168.1.138:88/videoMain
 (+) Video --vid=1 (h264)
 (+) Audio --aid=1 (pcm_mulaw)
File tags:
 Comment: videoMain
 Title: IP Camera Video
AO: [pulse] 8000Hz mono 1ch s16
VO: [opengl] 1280x720 yuv420p
AV: 00:00:00 A-V: -0.462 Dropped: 8

Audio/Video desynchronisation detected! Possible reasons include too slow
hardware, temporary CPU spikes, broken drivers, and broken files. Audio
position will not match to the video (see A-V status field).

AV: 00:00:04 A-V: -1.915 ct: -1.916 Dropped: 38


Exiting... (Quit)
dev@dev:~/delete/zmhwlasergit/ZMHW_Project_LaserDiodeSensor$ mplayer rtsp://admin:@192.168.1.138:88/videoMain
Playing: rtsp://admin:@192.168.1.138:88/videoMain
[ffmpeg/demuxer] rtsp: Could not find codec parameters for stream 0 (Video: h264, none): unspecified size
[ffmpeg/demuxer] Consider increasing the value for the 'analyzeduration' and 'probesize' options
 (+) Video --vid=1 (h264)
 (+) Audio --aid=1 (pcm_mulaw)
File tags:
 Comment: videoMain
 Title: IP Camera Video
AO: [pulse] 8000Hz mono 1ch s16
[lavf] error reading packet.
//


I rebooted the camera, tried mplayer again and it worked.

I set the zm rpi to videoSub and resolution 640x360 
and it didn't work, but then two minutes later it worked... hm..

Load is good. I've taken a picture. very low. Looking at 3%
wow. 

OK, but that's 640 x 360. Let's try HD, and then let's try both without
mmal to see if there's a difference. See if the mmal is implemented in
this zm.

tcp by the way, on ffmpeg.
tcp, ffmpeg, the path above, and videoSub worked.
trying videoMain now, let's see if it suddenly catches after a few minutes.

I didn't have any luck with HD.
I tried rebooting camera, no luck.

I set it back to 640 x 480 and it caught near immediately (within a minute)
this seems to be what the rpi wants. It looks like HD isn't working with the RPI.

Load is low. I'm going to take this device on the road, and try it with
a couple more cameras. Let's see how many SD cameras we can get running
on it.

Load is about .7, though htop shows no more than 5% on any given core (more
around 1-3.3%.

So for rpi3, I'd stick with SD for now.

TODO: try more cameras, try ffmpeg without mmal...

just as a reminder there is 
armel (32 bit arm without hardware floating point peripheral)
armhf (32 bit with fp peripheral)
arm64 (64 bit arm)

Although each device has its own requirements beyond that which is why
arm is shit and not nearly as compatible as x86. I digress.


After looking a bit more, I realized that they aren't using the binary ffmpeg in ZM. I've never really
investigated much. I have used MJPEG up to this point. 
here:
dev@raspberrypi:~/ZoneMinder/src $ less zm_ffmpeg.cpp 
dev@raspberrypi:~/ZoneMinder/src $ grep -r mmal
zm_ffmpeg_camera.cpp:    if ( (mVideoCodec = avcodec_find_decoder_by_name("h264_mmal")) == NULL ) {
zm_ffmpeg_camera.cpp:      Debug(1, "Failed to find decoder (h264_mmal)" );
zm_ffmpeg_camera.cpp:      Debug(1, "Success finding decoder (h264_mmal)" );


//

I'm enabling debug logging in component files to see where this shows up.

and then
grep -r ffmpeg | less
in the /var/log/zm folder


zm_debug.log.05486:08/11/18 04:51:33.526451 zmc_m1[5486].DB1-zm_ffmpeg_camera.cpp/503 [Success finding decoder (h264_mmal)]
zm_debug.log.05486:08/11/18 04:51:33.526678 zmc_m1[5486].DB1-zm_ffmpeg_camera.cpp/512 [Video Found decoder h264_mmal]
zm_debug.log.05486:08/11/18 04:51:33.526743 zmc_m1[5486].DB1-zm_ffmpeg.cpp/266 [Dumping stream index i(0) index(0)]
zm_debug.log.05486:08/11/18 04:51:33.526806 zmc_m1[5486].DB1-zm_ffmpeg.cpp/271 [    Stream #0:0]
zm_debug.log.05486:08/11/18 04:51:33.526865 zmc_m1[5486].DB1-zm_ffmpeg.cpp/279 [, frames:17, timebase: 1/90000]
zm_debug.log.05486:08/11/18 04:51:33.526974 zmc_m1[5486].DB1-zm_ffmpeg.cpp/281 [: Video: h264 (Baseline), yuv420p(progressive), 640x360]
zm_debug.log.05486:08/11/18 04:51:33.527227 zmc_m1[5486].DB1-zm_ffmpeg.cpp/229 [90k stream tb numerator , ]
zm_debug.log.05486:08/11/18 04:51:33.527316 zmc_m1[5486].DB1-zm_ffmpeg.cpp/229 [180k codec time base:]
zm_debug.log.05486:08/11/18 04:51:33.527382 zmc_m1[5486].DB1-zm_ffmpeg.cpp/336 [
zm_debug.log.05486:08/11/18 04:51:33.527438 zmc_m1[5486].DB1-zm_ffmpeg_camera.cpp/519 [Calling avcodec_open2]
zm_debug.log.05486:08/11/18 04:51:33.588667 zmc_m1[5486].DB1-zm_ffmpeg_camera.cpp/542 [HWACCEL not in use]
zm_debug.log.05486:08/11/18 04:51:33.589192 zmc_m1[5486].DB1-zm_ffmpeg_camera.cpp/554 [Audio Found decoder]
zm_debug.log.05486:08/11/18 04:51:33.589282 zmc_m1[5486].DB1-zm_ffmpeg.cpp/266 [Dumping stream index i(1) index(0)]
zm_debug.log.05486:08/11/18 04:51:33.589347 zmc_m1[5486].DB1-zm_ffmpeg.cpp/271 [    Stream #0:1]
zm_debug.log.05486:08/11/18 04:51:33.589407 zmc_m1[5486].DB1-zm_ffmpeg.cpp/279 [, frames:86, timebase: 1/8000]
zm_debug.log.05486:08/11/18 04:51:33.589575 zmc_m1[5486].DB1-zm_ffmpeg.cpp/281 [: Audio: pcm_mulaw, 8000 Hz, 1 channels, s16, 64 kb/s]
zm_debug.log.05486:08/11/18 04:51:33.589641 zmc_m1[5486].DB1-zm_ffmpeg.cpp/336 [
zm_debug.log.05486:08/11/18 04:51:33.589699 zmc_m1[5486].DB1-zm_ffmpeg_camera.cpp/561 [Calling avcodec_open2]

Ah, so it is working. but I don't know where the decoders are found....



However, I'd like to disable it, to see what the difference is.. How do I do that?

And even with all this success, the foscam, still has too slow of a h264
stream. My cheaper Amovision camera gets better FPS than this... 3.5 vs 15fps. 

At least CPU is low.


here's an idea. Let's change it to remote, which doesn't use mmal
and see what the resource usage is. 
not exactly the same, but similar.

hm.. getting a no rtsp sources error. Will give up on that for now.


looking at the code
and this forum post:
https://forums.zoneminder.com/viewtopic.php?f=34&t=26112&p=100221&hilit=avcodec_find_decoder_by_name#p100221
ffmpeg libavcodec
includes mmal codecs. Let's see if I can get an older one without libavcodec.

https://packages.debian.org/stretch/libavcodec-dev
this is the package we want to get an older copy of .

Hm.. well as long as I know mmal is being used, I don't really need
to test the old one, but I would like to.

Question is, how to get the old version, without mmal installed...

http://snapshot.debian.org/binary/libavcodec-dev/
has it
but when was mmal added, and it is compatible with stretch...
Maybe I should just install 1.30.4 and compare that... Might be easier
in this case.

That is the end for now.



