-re-added recordloop as a thread within the app.
-the app no longer use mutiple services and will instead fully
operate in a single master service.
-build/install.py will now install the app as a single service.
-added/updated -s, -r and -q options to manage the single master
service.
-added the conf open option to the file menu.
-added /installers to the git ignore file so the large installer
files don't get included in the git repo.
-the build script will no longer include libc because it doesn't
need it and having it was causing seg faults on the deployed app.
-releasing to main.
-changed the app name to JustMotion to match the git repository.
-changed the build system away from cmake to qmake now that the
app doesn't depend on openCV.
-changed the build/install scripts to python based scripts which
now includes the ability create an installer.
-added aud_codec to the conf file so audio codec is now a
configurable option.
-renamed stream_codec to vid_codec on the conf file to contrast
aud_codec.
-rtsp streams now use udp instead of tcp.
-updated README with conf file changes.
-moved buff_path setup code away from rdconf() to loadSh(). this
insures root will never take ownership of the camera buffer.
-added service group option.
-updated the documentation in preperation of release.
-detect loop will now use the previous video clip as a base for the
next 3 video clips. doing this prevents the same clips from being
processed multiple times.
-detectloop now operates on a minimum of 3 clips and then grabs
only the second and third to last clips. this insures only
finished clips from the stream are grabbed.
-again reformed the detectloop class to use filesystem monitoring
instead of timers to pull clips from the live stream.
-removed the loop class after reforming detectloop.
-completely reformed the eventloop code to be more efficent and
removed the use backward/forward facing functions.
-added the live_secs config option that limits the amount of live
footage the app will record to the buffer directory.
-moved away from ffmpeg hls formatting. live footage will instead
just be recorded in clips inside of the 'live' directory, the
stream.m3u8 file will not longer be created. doing this removes
the codec/container limitations that hls imposed.
-changed up the default conf values that better suits a low spec
machine like a resberrypi.
-moved all service related code to seperate files.
-split the camera service into 2 systemd services.
-the -i, -c and -d options now function differently to support the
split systemd services.
-internal logging was completely removed. all verbose output will
instead just go to stderr/stdout. will use journalctl for real
time logging instead.
-fixed the magick compile/install script so it will actually run
now.
-fixed a bug in the config file reading functions so it will now
trim off white spaces and line breaks at the ends. doing this
now prevents undefined behaviour if any parameter has a line
break in it.
-service user was added as a config file option. this can be used
to set user name the installed services will run under. the
default user is "mow."
-the install.sh script will now add the default mow user to the
video group making it possible to record footage from webcams
without permission issues.
-pixel sizes for video and thumbnails are now configurable
-the amount of recording and snapshot threads are now
configurable
-changed the default buffer and recording directories to
drop the application name and also drop a level
-service files are now stored in a dedicated dir
-fixed logging so it will capture errors better
-moved folder structure building to rdConfig() and added more
error capturing
-recording fps is now configurable
-removed the web interface. this project will instead continue to
focus on backend operations. external applications can interface
with the buf/rec directories to provide frontend operations.
-removed the magick binary file from the project. magick will
instead be built from source on the target machine for maximum
support for the target architecture.
-stream codec and format are now user configurable.
-recording thumbnail and video formats are now user configurable.
-the live stream is now a part of the camera's main page.
-fixed symm links for the main page not being created on install.
-removed deprecated ffmpeg timeout option.
-copied hls.js as a local file so live streams will still work
without being connected to the internet.
-fixed the -i option that was using /etc instaead of /etc/mow
-the externalized image comparison executable is now configurable
in the config file.
-moved the main index.html and theme.css files to the buffer dir,
moving even more io to the buffer dir.
-the -d option will no longer directly run camera instances. it
will instead utilize systemd to install camera services.
-added -i, -l and -r options to manage camera services.
-the app will now default work and output directories in the
/var/opt directory instead of /var/www/html and /tmp, making
it a better neighbour in the fact that it won't overwrite
existing websites or tmp files.
-install.sh will now create an unprivileged mow user that will
be used to run camera services. all in effort to make the app
a good neighour and follow good security practice.
added a buffer directory so the actual work of image frame capture
and live video recording can be moved off of main storage.
also removed installation of the apache2 http server from
install.sh to make this app more agnostic and leave it up to the
end user to install what ever web server they want.
-added event age to evt_t as a way to track the age of the event
in EventLoop so now only events approching and exceeding
evMaxSecs will have the video range added for writing.
-the ffmpeg auto refresh logic is working, just need to shorten
the frequency by setting recloop's heartbeat to default.
-added hls flag "omit_endlist" so the auto refresh doesn't cut off
the stream at the web browser end.
-ffmpeg still stalls even with tcp timeout parameters in place.
added self end -t option to match the heart beat of RecLoop.
doing this auto re-fresh ffmpeg every 30mins and should prevent
stall. for some reason ffmpeg just can't run long term without
stalling.
-finally fixed the crashing issue. it turns out EventLoop::exec()
was calling vidList.removeLast() on an empty list every now and
then, causing qt to fatal assert. I removed the line since it is
not even needed.
-the debug code from the previous commit help narrow down what
function is causing the crash but that's it, I need more. decided
add the debug build type to cmake and will use gdb to help with
debugging.
-decided to remove the debug code since I'll use gdb as the long
term solution going forward.
-added mutex thread protection. getting sigmentation faults on the
test machine. added thread protection on various shared
parameters in hope that it fix the random crashing issue.
-didn't properly remove use of evhist from the last commit. it is
truely removed now.
-added delay cycles to detectLoop is motion was detected to
prevent some event overlap.
-removed use of evtHist. will instead allow eventLoop to que up
duplicate live video clips and then remove later using
QStringList::removeDuplicates().
-changed up the ffmpeg commands to utilize tcp and re-added a tcp
timeout argument, removing the need for command stall checking.
-added logic to pick the snapshot with the highest diff score as
the event thumbnail.
-added a termination slot to RecLoop that will kill the long term
ffmpeg commands and connected it to 'aboutToQuit' signal. this is
expected to kill the ffmpeg commands properly when quiting the
main process.
-max_event_secs is not being honered correctly. EventLoop was not
calculating the amount the hls clips to grab from live correctly.
chanaged it to properly calculate file count based on hls segment
size.
-updated the documentation as the current version nears stable
release.
-turns out the previous statment on the previous commit is
incorrect. it is every possible to overlap events. to
mitigate this, evtHist was added to shared_t to track
recently copied source vids and remove them from the
event queued to be written.
-removed the delay after motion was detected. it was not having
the desired effect and after more thought event overlap would
be impossible anyway.
-the test cameras are still picking up motion during the post
command. adjusted the after command delay to see if that
helps.
-reduced the DetectLoop heartbeat from 3 to 2 to better match
the record loop's cadence.
-the test cameras are picking up motion as post command is running.
added a delay increment to DetectLoop in hope to fix this.
-removed the upkeep log since it doesn't really provide any useful
information.
-adjusted the default motion score again.
-reduced the amount of image files DetectLoop needs from 3 to 2.
-added a dely to DetectLoop after a positive motion detection to
prevent motion event overlap.
-moved the 2 image diff pair compair to proper "end of array" in
DetectLoop.
-increased the size of the image stream so queded up events will
be able generate thumbnails properly.
-cleaned off a bunch of unused parameters in the code.
-adjusted the default motion sensitivity after real world
testing.
-added libfuse-dev to setup.sh since imagemagic needs that to
operate.
The Qt approach to grabbing frames from the live stream was also
a failure.
- decided to switch to a combination ffmpeg and imagemagic was
external commands to do motion detection. this approach
elimates the need for opencv altogeather so it was removed
from the project. system resource usage appears to be decent
and perhaps better than opencv.
I'm going to test a move away from opencv's videoio module.
Videoio simply refuses to open any video file even with
FFMPEG builtin. I tested old v2.2 code and even that failed
on a fresh install of ubuntu sever so this tells me an
update on opencv's side broke something.
This issue is not new and frankly I'm tired of chasing it.
I'm giving QT's QMediaPlayer a try to see how it works out.
Will still need opencv for the absdiff and threshold
functions, otherwise I would have dropped the API
altogeather.
Now that the app has QT::Multimedia, QT6 is now the minimum
version it will support. CMakeList.txt and the setup script
updated accordingly.
Got the app up to "not failing immediately" state.
However, for some reason DetectLoop is failing hard via opencv
being unable to open the stream clips.
I'll continue deep diving this. For now everything else works.