You can use ffmpeg to directly pull frames off of a dahua 4300s at full resolution. May be a good alternative to pricey dvrs which likely cannot record at full resolution, may not work with the camera, or are prohibitevly expensive
Simple stream to file. Full resolution
ffmpeg -loglevel debug -rtsp_transport tcp -i "rtsp://admin:admin@198.175.207.61:554/live" \
-c copy -map 0 foo.mp4
ffmpeg can save file in arbitrary segments at fixed intervals. In this example, we save a new file at
10 second intervals, but the value for segment_time
can be any positive integer
ffmpeg -rtsp_transport tcp -i "rtsp://admin:admin@198.175.207.61:554/live" \
-f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 \
-c copy -map 0 test%d.mp4
Output files can be timestamped as well.
ffmpeg -rtsp_transport tcp -i "rtsp://admin:admin@198.175.207.135:554/live" \
-f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 \
-strftime 1 -c copy -map 0 dauphine-%Y%m%d-%H%M%S.mp4
A different url is used to select the substream. Set subtype
to 0 for main hi-res stream, or
1 for low res substream. Channel looks to always be set to 1
ffmpeg -rtsp_transport tcp -i "rtsp://admin:admin@198.175.207.135:554/cam/realmonitor?channel=1&subtype=1" \
-f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 \
-strftime 1 -c copy -map 0 test-%Y%m%d-%H%M%S.mp4
I am using a variation of this command combined with a bash script+cron. I run ffmpeg with the -t flag to only run for 310 seconds. Then I have cron call the script every 5 minutes. This way I end up with a new file every 5 minutes with a ~10 second overlap. This makes it resilient if the ipcam goes offline for a few minutes due to reboot, cron will start a new ffmpeg process within 5 minutes.
Not as elegant as an NVR but it's functional.