У меня есть камера видеонаблюдения, которая загружает изображение JPG в папку на моем сервере дважды в секунду.Я хочу отправить это изображение в браузер после его загрузки.Готовый результат будет выглядеть как видео 2fps.Я не хочу использовать видеосигнал в какой-либо форме или какой-либо медиа-сервер, так как по соображениям конфиденциальности я не хочу, чтобы канал камеры записывался где-либо, или чтобы была возможность перемотки назад, паузы и т. Д. (Вот почемуЭффект 2fps из изображения JPG в порядке)
Я нашел следующий код в Интернете, но я не могу заставить его работать.HTML и Javascript работают нормально.Но элемент PERL это не так.Я получаю сообщение об ошибке «ERR_EMPTY_RESPONSE».В то время как мои навыки работы с HTML / Javascript / PHP хороши, мои знания по PERL отсутствуют, поэтому я не вижу, где происходит ошибка.Если кто-то может указать мне правильное направление, я был бы очень благодарен.
Я запускаю это на сервере Linux с Ubuntu 14, PHP 7.1 и Plesk Onyx 17.
#!/usr/bin/perl
#
#
require 'stat.pl';
#########################################################
# Path to where the image file is stored
$DIR = "/var/www/vhosts/mydomain.com/img/";
#Filename the image is stored as
$fileName = "image.jpg";
#Maximum of images/s sent
$freq = 3;
#Max number of images to send on a connection
$maxImages = 900;
#Max number of seconds until update is considered stopped
#(ie the camera is no longer updating the image)
$maxNoUpdate = 30;
#########################################################
$con_type = "jpeg";
# Unbuffer the output so it streams through faster and better.
$| = 1;
# No input record separator when reading from file via <>.
undef $/;
# Print HTTP headers...
# NOTE: If your web server returns "Error, faulty header"
# The Line below must be commented away since your web server includes the
# HTTP/1.0 200 OK on its own.
print "HTTP/1.0 200 OK\n";
print "Content-type: multipart/x-mixed-replace; boundary=--myboundary\r\n\r\n";
$rounds=0;
#max 400 images
while ($rounds < $maxImages)
{
$rounds = $rounds +1;
$basefile = $DIR . $fileName;
@fstat = stat($basefile);
# If the same image time stamp is on the image file for more then
# X seconds then I presume that the image is no longer updated and will
# End the connection
if ($fstat[$ST_MTIME] ne $oldimagetime)
{
$sameCount = 0;
$oldimagetime = $fstat[$ST_MTIME];
}
#We may send the same image multiple times but there is a strict limit
if ($sameCount > ($maxNoUpdate * $freq))
{
die;
}
$sameCount = $sameCount +1;
$rounds=$rounds +1;
print "--myboundary\r\n";
print "Content-type: image/$con_typen\r\n\r\n";
# This is where we act
open(PIC,"$basefile");
print STDOUT <PIC>;
close(PIC);
# Pause for 1/$freq seconds, if this time is more then a second
# we recomend you replace with sleep(NbrOfSeconds)
select(undef,undef,undef,(1/$freq));
}