Devops's Blog

Запись с ip камер

Скрипт record, запускает запись с ip камер по протоколу RTSP(-t 43200 кол-во секунд),

					    
date_now="`date +%Y-%m-%d`"
out_patch='/mnt/ipvideo/'$date_now
 
/bin/mkdir $out_patch

/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.201:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam01.avi /dev/null 2>/mnt/ipvideo/cam01.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.202:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam02.avi /dev/null 2>/mnt/ipvideo/cam02.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.203:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam03.avi /dev/null 2>/mnt/ipvideo/cam03.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.204:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam04.avi /dev/null 2>/mnt/ipvideo/cam04.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.205:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam05.avi /dev/null 2>/mnt/ipvideo/cam05.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.206:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam06.avi /dev/null 2>/mnt/ipvideo/cam06.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.207:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam07.avi /dev/null 2>/mnt/ipvideo/cam07.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.208:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam08.avi /dev/null 2>/mnt/ipvideo/cam08.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.209:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam09.avi /dev/null 2>/mnt/ipvideo/cam09.log &
/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.210:554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t 43200 $out_patch/cam10.avi /dev/null 2>/mnt/ipvideo/cam10.log &
					    
				    

скрипт(/opt/check) для вывода процессов по нашим камерам


/bin/ps -ef | grep ffmpeg | awk ' { if($22~/cam/){ print $22}}'				    

Теперь делаем скрипт(/opt/check.php), который проверят, отвалилась ли камера, если да, то запускать ее с другим значением времени, я делал на php


<?php

exec("/opt/check",$ffmpeg);
if(empty($ffmpeg)==false)
{
$cam=array("cam01","cam02","cam03","cam04","cam05","cam06","cam07","cam08","cam09","cam10");
$date=date('d')."_".date('m')."_20".date('y')."_".date('h')."_".date('i')."_".date('s');
$date_catalog="20".date('y')."-".date('m')."-".date('d');
$ffmpeg_command="";
$time=(19.5*3600) - (date('H')*3600 + date('i')*60 );
if(date('w')=="0" || date('w')=="6" ) {$cam=array("cam01");}
for($i=0;$i<count($cam);$i++)
{
  for($j=0; $j<count($ffmpeg);$j++)
  {
      $pos=strrpos($ffmpeg[$j],$cam[$i]);
      
      if($pos==true)
      {
       break;
      }
     if($j==count($ffmpeg)-1)
     {
       if($i==9)
       {
         $ip=(string)($i+1);
       }
       else
        {
          $ip="0".(string)($i+1);
        }
       $ffmpeg_command="/usr/local/bin/ffmpeg -async 1 -i rtsp://192.168.1.2".$ip.":554/snl/live/1/1/Ux/sido=-Ux/sido= -timeout 300 -vcodec copy -r 25 -y -t ".$time." /mnt/ipvideo/".$date_catalog."/".$cam[$i]."_".$date.".avi </dev/null >/dev/null 2>/mnt/ipvideo/".$cam[$i]."_".$date.".log &"; 

       printf("ffmpeg_command=%s\n",$ffmpeg_command);
       exec($ffmpeg_command);
     }
  }
    
  }
}
else
{printf("Prosecc ffmpeg is not run\n");}
?>

Добавим в крон (/etc/cron.d/record)


*/5 8-19 * * * root /opt/check_bash #запускаем в рабочие дни с 8 утра до 7 вечера(скрипт проверки),каждые 5 мин
30 07 * * 1-5 root /opt/record      #запускаем в 7 утра в 30 мин в рабочие дни