ffmpeg-grabber/Dump.sh

90 lines
2.6 KiB
Bash
Raw Normal View History

2012-03-29 12:04:41 +02:00
#!/bin/bash
NAME=$1
SERVER_IP=192.168.1.66
PORT=8080
USERNAME=admin
PASSWORD="123456"
2012-03-29 19:32:37 +02:00
CAMERAS="0 1 2 3 4 5 6 7 8 9"
2012-03-29 18:09:23 +02:00
# the real values _will_ differ depending on the machine running the script !!!
SECONDS_PER_FILE=3600
OVERLAP_PER_FILE=60
2012-03-29 12:04:41 +02:00
PIDFILE_BASE=/tmp/wget_script.$RANDOM.pids
if [ -z "$NAME" ]; then
NAME=0
fi
SCRIPT_DIR="$( cd $( dirname "${BASH_SOURCE[0]}" ); pwd )/"
CAPTURE_DIR="${SCRIPT_DIR}/capture/"
mkdir -p $CAPTURE_DIR
cd $CAPTURE_DIR
#OUT_FILE_TYPE="mjpeg"
OUT_FILE_TYPE="avi"
2012-03-29 12:04:41 +02:00
2012-03-29 13:11:39 +02:00
SHUTDOWN_IN_PROGRESS="false"
2012-03-29 12:04:41 +02:00
quit() {
2012-03-29 13:11:39 +02:00
if [ "$SHUTDOWN_IN_PROGRESS" == "false" ]; then
SHUTDOWN_IN_PROGRESS="true"
echo "quitting..."
PIDS="$(cat ${PIDFILE_BASE}_A 2>/dev/null) $(cat ${PIDFILE_BASE}_B 2>/dev/null)"
rm -f ${PIDFILE_BASE}_A ${PIDFILE_BASE}_B
kill $PIDS 2>/dev/null || (echo "waiting for remaining proccesses..."; sleep 10; echo "killing remaining proccesses..."; kill -9 $PIDS 2>/dev/null)
exit $1
fi
2012-03-29 12:04:41 +02:00
}
trap 'quit 0' SIGINT SIGTERM EXIT
do_record() {
for i in $CAMERAS; do
echo "starting recording for camera $i" >&2
OUTFILE_START=tmp_dump_cam_${i}_$(date +%s.%N)_RANDOM$RANDOM.$OUT_FILE_TYPE
2012-03-29 16:19:07 +02:00
(
EXACT_START_TIME=$(date +%s.%N)
outfile_close_trap() {
2012-03-29 18:09:23 +02:00
echo "finishing capture file for camera $i"
2012-03-29 16:19:07 +02:00
EXACT_END_TIME=$(date +%s.%N)
if [ -f $OUTFILE_START ]; then
mv $OUTFILE_START dump_cam_${i}_${EXACT_START_TIME}_${EXACT_END_TIME}.$OUT_FILE_TYPE
fi
2012-03-29 16:19:07 +02:00
}
trap outfile_close_trap SIGINT SIGTERM EXIT
#wget --ignore-length --http-user=$USERNAME --http-passwd=$PASSWORD http://${SERVER_IP}:$PORT/cam/$i/stream.mjpeg -O $OUTFILE_START -q >> /dev/null 2>&1 &
${SCRIPT_DIR}/ffmpeg -use_wallclock_as_timestamps 1 -f mjpeg -i http://$USERNAME:$PASSWORD@${SERVER_IP}:$PORT:8080/cam/$i/stream.mjpeg -c copy -ts abs -y $OUTFILE_START >> /dev/null 2>&1 &
2012-03-29 17:46:29 +02:00
THIS_WGET_PID=$!
echo $THIS_WGET_PID >> ${PIDFILE_BASE}_${1}
wait $THIS_WGET_PID
) &
2012-03-29 12:04:41 +02:00
done
}
while true; do
if [ ! -z "$PIDS_A" ]; then kill -9 $PIDS_A 2>/dev/null; fi
2012-03-29 12:04:41 +02:00
echo "starting group A"
do_record A
2012-03-29 13:11:39 +02:00
PIDS_B="$(cat ${PIDFILE_BASE}_B 2>/dev/null)"
2012-03-29 18:09:23 +02:00
if [ ! -z "$PIDS_B" ]; then
$OVERLAP_PER_FILE
echo "killing group B"
kill $PIDS_B 2>/dev/null
sleep $(($SECONDS_PER_FILE - $OVERLAP_PER_FILE))
else
sleep $SECONDS_PER_FILE
fi
2012-03-29 12:04:41 +02:00
if [ ! -z "$PIDS_B" ]; then kill -9 $PIDS_B 2>/dev/null; fi
2012-03-29 12:04:41 +02:00
echo "starting group B"
do_record B
2012-03-29 13:11:39 +02:00
PIDS_A="$(cat ${PIDFILE_BASE}_A 2>/dev/null)"
2012-03-29 18:09:23 +02:00
if [ ! -z "$PIDS_A" ]; then
sleep $OVERLAP_PER_FILE
echo "killing group A"
kill $PIDS_A 2>/dev/null
sleep $(($SECONDS_PER_FILE - $OVERLAP_PER_FILE))
else
sleep $SECONDS_PER_FILE
fi
2012-03-29 12:04:41 +02:00
done
quit 1