#!/bin/ksh # process_dvr_output - a script processing dvr steering + data files # $Id: process_dvr_output 261 2009-03-17 04:52:51Z raasch $ # This script determines the number of streams opened by the dvr software # and creates one single dvrs- and html-file which allow the dvr-plugin # to display all streams in one sequence. # Last changes: # 16/03/09 - Siggi - Generating the first version # variable declarations + default values camera=false create_sequence_output=false data_catalog=`pwd` file_identifier=all_streams groundplate=false topography=false typeset -i i j nstream nscenes # read shellscript options while getopts :d:f:s option do case $option in (d) data_catalog=$OPTARG;; (f) file_identifier=$OPTARG;; (s) create_sequence_output=true;; (\?) printf "\n +++ unknown option $OPTARG \n" printf "\n allowed option are -d and -f \n" exit;; esac done # change to the given directory cd $data_catalog # find out the number of streams (( i = 0 )) while true do (( i = i + 1 )) if (( i < 10 )) then cstream=0$i else cstream=$i fi if [[ $(ls -1 *.* | grep -c $cstream) = 0 ]] then (( i = i - 1 )) break fi # find out the stream name streamname[$i]=`ls -1 ${cstream}_*-ge.dvrs | cut -f1 -d"-"` # get addres adr[$i]=`grep ADR= ${streamname[$i]}.dvrs | grep '*' | cut -f2 -d"="` # get maxbytes maxbytes[$i]=`head -1 ${streamname[$i]}.max` # get number of frames frames[$i]=`tail -1 ${streamname[$i]}.max` done nstream=$i nscenes=$nstream # Check, if there are files containing the camera data, the ground plate # and topography data. # Check the first stream only, because all streams have the same files. if [[ -f ${streamname[1]}_camera.max ]] then camera=true adr_camera=`grep ADR= ${streamname[1]}.dvrs | grep 'camera' | cut -f2 -d"="` maxbytes_camera=`head -1 ${streamname[1]}_camera.max` (( nscenes = nscenes + 1 )) fi if [[ -f ${streamname[1]}_groundplate.max ]] then groundplate=true adr_groundplate=`echo $adr_camera | sed "s/camera/groundplate/g"` maxbytes_groundplate=`head -1 ${streamname[1]}_groundplate.max` (( nscenes = nscenes + 1 )) fi if [[ -f ${streamname[1]}_topography.max ]] then topography=true adr_topography=`echo $adr_camera | sed "s/camera/topography/g"` maxbytes_topography=`head -1 ${streamname[1]}_topography.max` (( nscenes = nscenes + 1 )) fi # start with writing the dvrs file for the combined streams dvr_file=${file_identifier}_streaming.dvrs echo "SCENES=$nscenes" > $dvr_file # first, add the static scenes if [[ $camera = true ]] then echo "MED=TCP" >> $dvr_file echo "ADR=$adr_camera" >> $dvr_file echo "MAXBYTES=$maxbytes_camera" >> $dvr_file echo "FRAMES=1" >> $dvr_file echo "FRAMES_P_SEC=0" >> $dvr_file echo "SCENEEND" >> $dvr_file fi if [[ $groundplate = true ]] then echo "MED=TCP" >> $dvr_file echo "ADR=$adr_groundplate" >> $dvr_file echo "MAXBYTES=$maxbytes_groundplate" >> $dvr_file echo "FRAMES=1" >> $dvr_file echo "FRAMES_P_SEC=0" >> $dvr_file echo "SCENEEND" >> $dvr_file fi if [[ $topography = true ]] then echo "MED=TCP" >> $dvr_file echo "ADR=$adr_topography" >> $dvr_file echo "MAXBYTES=$maxbytes_topography" >> $dvr_file echo "FRAMES=1" >> $dvr_file echo "FRAMES_P_SEC=0" >> $dvr_file echo "SCENEEND" >> $dvr_file fi # now add the streams (( i = 0 )) while (( i < nstream )) do (( i = i + 1 )) echo "MED=TCP" >> $dvr_file echo "ADR=${adr[$i]}" >> $dvr_file echo "MAXBYTES=${maxbytes[$i]}" >> $dvr_file echo "FRAMES=${frames[$i]}" >> $dvr_file echo "FRAMES_P_SEC=25" >> $dvr_file echo "SCENEEND" >> $dvr_file done # change path to the current file identifier sed "s/DATA_DVR/${file_identifier}_dvr/g" $dvr_file > tmp_file mv tmp_file $dvr_file # if there is a dvr configuration file, set the BASEDIR to the parent # directory of the above given path if [[ -f .dvrserver.config ]] then old_path=`grep BASEDIR .dvrserver.config` sed "s&${old_path}&BASEDIR=..&g" .dvrserver.config > .dvrserver.config.new mv .dvrserver.config.new .dvrserver.config fi # create the html file for the combined streames cp 01_*-ge.html tmp.html replace=$(echo `grep src= tmp.html`) sed "s&${replace}&src=\"${file_identifier}_streaming.dvrs\"&g" tmp.html > ${file_identifier}_streaming.html rm tmp.html # informative messages printf "\n\n *** processing local dvr stream output:" printf "\n number of detected streams = $nstream" printf "\n stream names:" (( i = 0 )) while (( i < nstream )) do (( i = i + 1 )) printf " ${streamname[$i]}" done printf "\n" # create output for viewing dvr data in sequence mode if [[ $create_sequence_output = true ]] then mkdir sequence_data # first, merge static scenes into one file if [[ $camera = true ]] then cat ${streamname[1]}/camera.dvr >> sequence_data/static_scenes.dvr fi if [[ $groundplate = true ]] then cat ${streamname[1]}/groundplate.dvr >> sequence_data/static_scenes.dvr fi if [[ $topography = true ]] then cat ${streamname[1]}/topography.dvr >> sequence_data/static_scenes.dvr fi # now, merge the data, frame by frame (( j = 0 )) while (( j < ${frames[1]} )) do nframe=`printf "%05d" $j` (( i = 0 )) while (( i < nstream )) do (( i = i + 1 )) cat ${streamname[$i]}/$nframe.dvr >> sequence_data/$nframe.dvr done (( j = j + 1 )) done # create the html file to be used for the sequence mode cp ${streamname[1]}.html tmp1.html sed "s/camera.dvr/static_scenes.dvr/g" tmp1.html > tmp2.html sed "s&${streamname[1]}&sequence_data&g" tmp2.html > ${file_identifier}_sequence.html rm tmp1.html tmp2.html printf " data for using sequence mode generated" fi # change back to directory from where script has been called cd - > /dev/null