ДНЕВНИКИ
Назад >>
Сергей ШИБКА
>>
CentOS
06.06.2012 CentOC 5.x и Motion (видео и уведомление на E-mail, уведомление в Jabber)
Настройка пакета Motion для отправки фрагментов видео на E-mail и уведомлений в Jabber.
После некоторых экспериментов, отправка на E-mail картинок не оправдала себя, т.к. многие почтовые сервисы распознают частую отправку за спам и блокирую отправителя, а это "не есть хорошо". Почему частая отправка получается? Очень просто, даже если выставить захват картинки с частотой 15 кадров в секунду, то эти кадры необходимо быстро отправить, чтобы оповестить получателя. А если пытаться с такой частотой подключаться к почтовому сервису, то тот незамедлительно отреагирует блокировкой. Конечно можно сделать отправку через какое-то время, но какой смысл делать задержку, когда необходимо наоборот как можно быстрее оповестить и отправить изображение. Поэтому для себя оптимальное решение, это отправка видео фрагментов по 30 секунд и уведомление в Jabber.
И так приступим, сам пакет Motion уже должен быть установлен и работать.
Правим конфиг motion.conf (ищем и приводим к нужному виду необходимые параметры):
# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
# Сколько писать кадров в секунду. Выставляем 10
framerate 10
# Maximum length in seconds of an mpeg movie
# When value is exceeded a new mpeg file is created. (Default: 0 = infinite)
# Максимальная длинна записи отрывка видео. Выставляем 30 (секунд), т.е. видео будет писаться отрывками по 30 секунд.
max_mpeg_time 30
# Output 'normal' pictures when motion is detected (default: on)
# Valid values: on, off, first, best, center
# Захват движения в картинку. Отключаем, выставляем off
output_normal off
# Use ffmpeg to encode mpeg movies in realtime (default: off)
# Кодирование в реальном времени в mpeg при обнаружении движения. Включаем, выставляем on
ffmpeg_cap_new on
# Bitrate to be used by the ffmpeg encoder (default: 400000)
# This option is ignored if ffmpeg_variable_bitrate is not 0 (disabled)
# Битрейт кодирования. Оптимальный 1500000
ffmpeg_bps 1500000
# Codec to used by ffmpeg for the video compression.
# Timelapse mpegs are always made in mpeg1 format independent from this option.
# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.
# Используемый кодек. Выбран msmpeg4
ffmpeg_video_codec msmpeg4
# Use ffmpeg to deinterlace video. Necessary if you use an analog camera
# and see horizontal combing on moving objects in video or pictures.
# (default: off)
# Деинтерлейс. Убираем гребенку на изображении. Включаем, выставляем on
ffmpeg_deinterlace on
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
# Путь для записи файлов
target_dir /mnt/Arch/video/cam1
# Command to be executed when a movie file (.mpg|.avi) is created. (default: none)
# To give the filename as an argument to a command append it with %f
# Выполняемая команда, когда начинается запись в файл, при обнаружении движения.
# В этом примере запускается скрипт jm.pl
on_movie_start /web/./jm.pl -cam=%f
# Command to be executed when a movie file (.mpg|.avi) is closed. (default: none)
# To give the filename as an argument to a command append it with %f
# Выполняемая команда, когда заканчивается запись в файл, при обнаружении движения.
# В этом примере запускается скрипт motion.pl
on_movie_end /web/./motion.pl -cam=%f
Скрипт jm.pl
При исполнении скрипта происходит отправка уведомления в Jabber и E-mail на необходимые адреса. Скрипт стартует перед началом записи видео отрывка.
### jm.pl
#############################################################################
#!/usr/bin/perl -s
use Encode;
use Net::XMPP;
use Mail::Sender;
&Time_All;
#############################################################################
### Запись с камеры
#############################################################################
if ($cam ne '') {
$subject = "Внимание!!!
Перед камерой обнаружено движение.
Server Home.Ru $time_all
$cam";
$subject = encode("utf8", decode("cp1251", $subject));
@JID = ('monitor1@jabber.ru','monitor2@jabber.ru'); # На какие адреса идет отправка (если необходимо, перечисляем через запятую)
foreach $JID(@JID){
&JM($subject, $JID);
}
$subject = "Движениепередкамерой. Server Home.Ru $time_all";
$message = "Внимание!!!
Перед камерой обнаружено движение.
$cam";
&Email;
}
###############################################################################
#############################################################################
### Отправки в jabber
#############################################################################
sub JM {
$body_messages = $_[0];
$body_messages = decode('utf8', $body_messages);
$body_messages = "#
$body_messages";
$jid_to = $_[1];
my $con=new Net::XMPP::Client();
$err_Connect = $con->Connect(hostname=>'jabber.ru'); # СереверJabber
$err_AuthSend = $con->AuthSend(username=>'monitor',
password=>'123456',
resource=>"Alarm!"); # ЗарегистрированныйаккаунтJabber. От его имени будет идти отправка
my $msg=new Net::XMPP::Message();
$err_SetMessage = $msg->SetMessage(to=>$jid_to,
from=>'monitor@jabber.ru',
body=>$body_messages);
$err_Send = $con->Send($msg);
$con->Disconnect();
}
#############################################################################
#############################################################################
### Отправка уведомления на e-mail
#############################################################################
sub Email {
$subject = encode("utf8", decode("cp1251", $subject));
$message = encode("utf8", decode("cp1251", $message));
$from_email = 'monitor@mail.ru'; # От какого имени ящика идет отправка
@to_email = ('monitor1@mail.ru','monitor2@mail.ru'); # На какие адреса идет отправка (если необходимо перечисляем через запятую)
$hello_serv = $ENV{'SERVER_NAME'}; # $ENV{'SERVER_NAME'}
$host = "smtp.mail.ru"; # SMTP сервер
# Авторизация
$Email_auth_user = 'monitor@mail.ru'; # Логин ящика
$Email_auth_pass = '123456'; # Пароль
foreach $to_email(@to_email){
$sender = new Mail::Sender;
if ($sender->MailMsg({
smtp => $host,
from => $from_email,
to => $to_email,
subject => $subject,
msg => $message,
auth => 'PLAIN',
authid => $Email_auth_user,
authpwd => $Email_auth_pass
}) < 0) {
die "$Mail::Sender::Error\n";
}
$sender->Close;
sleep 10; # Пауза отправки письма
}
#
}
#############################################################################
###############################################################################
### Формирования временных меток
#############################################################################
sub Time_All {
@months = ('Января','Февраля','Марта','Апреля','Мая','Июня','Июля','Августа','Сентября','Октабря','Ноября','Декабря');
@days = ('Вс','Пн','Вт','Ср','Чт','Пт','Сб');
($min,$hour,$mday,$mon,$year,$wday) = (localtime(time+($offset*3600)))[1,2,3,4,5,6];
$min = "0$min" if ($min < 10);
$hour = "0$hour" if ($hour < 10);
$mday = "0$mday" if ($mday < 10);
$year += 1900;
$month = $mon+1;
$month = "0$month" if ($month < 10);
$time_all = "$days[$wday] $mday $months[$mon] $year $hour:$min"; # Вывод времени(Ср16 Мая2007 08:42)
}
#############################################################################
#############################################################################
Скрипт motion.pl
При исполнении скрипта происходит отправка уведомления в E-mail с вложенным файлом видео отрывка на необходимые адреса. Скрипт стартует после окончания записи видео отрывка.
### motion.pl
#############################################################################
#!/usr/bin/perl -s
#############################################################################
use Encode;
use Mail::Sender;
&Time_All;
$subject = "Движениепередкамерой. Server Home.Ru $time_all";
$message = "Внимание!!!
Перед камерой обнаружено движение.
$cam";
&Email;
#############################################################################
#############################################################################
### Отправка уведомления на e-mail и вложенного файла
#############################################################################
sub Email {
$subject = encode("utf8", decode("cp1251", $subject));
$message = encode("utf8", decode("cp1251", $message));
$from_email = 'monitor@mail.ru'; # От какого имени ящика идет отправка
@to_email = ('monitor1@mail.ru','monitor2@mail.ru'); # На какие адреса идет отправка (если необходимо перечисляем через запятую)
$hello_serv = $ENV{'SERVER_NAME'}; # $ENV{'SERVER_NAME'}
$host = "smtp.mail.ru"; # SMTP сервер
# Авторизацией
$Email_auth_user = 'monitor@mail.ru'; # Логин ящика
$Email_auth_pass = '123456'; # Пароль
foreach $to_email(@to_email){
$sender = new Mail::Sender;
if ($sender->MailFile({
smtp => $host,
from => $from_email,
to => $to_email,
subject => $subject,
msg => $message,
auth => 'PLAIN',
authid => $Email_auth_user,
authpwd => $Email_auth_pass,
file => $cam
}) < 0) {
die "$Mail::Sender::Error\n";
}
$sender->Close;
sleep 10; # Пауза отправки письма
}
#
}
#############################################################################
#############################################################################
### Формирования временных меток
#############################################################################
sub Time_All {
@months = ('Января','Февраля','Марта','Апреля','Мая','Июня','Июля','Августа','Сентября','Октабря','Ноября','Декабря');
@days = ('Вс','Пн','Вт','Ср','Чт','Пт','Сб');
($min,$hour,$mday,$mon,$year,$wday) = (localtime(time+($offset*3600)))[1,2,3,4,5,6];
$min = "0$min" if ($min < 10);
$hour = "0$hour" if ($hour < 10);
$mday = "0$mday" if ($mday < 10);
$year += 1900;
$month = $mon+1;
$month = "0$month" if ($month < 10);
$time_all = "$days[$wday] $mday $months[$mon] $year $hour:$min"; # Вывод времени(Ср16 Мая2007 08:42)
}
#############################################################################
#############################################################################
Таким образом, когда будет обнаружено движение, пакет motion начинает запись видео и запускается скрипт jm.pl, он отправляет уведомление на Jabber и E-mail адреса. После окончания записи видео, запускается скрипт motion.pl, он отправляет сообщение и вложенный файл видео отрывка. 30-ти секундный отрывок будет имеет размер около 3 - 5 мб.
В скриптах используются модули Net::XMPP, Mail::Sender, если их нет в системе, необходимо установить.
• комментарии (3)
[ Назад ]
|