Автоматический вход в IP-камеру

У меня есть IP-камера, и я хотел бы показывать видео в реальном времени на своей веб-странице.

IP-камера не позволяет анонимный вход в систему, поэтому мне нужно ввести имя пользователя и пароль при подключении.

У меня есть javascript:

<img src="http://user:password@camera_ip_address/cgi-bin/jpg/image.cgi?" width="640" height="480" name="refresh">

<script language="JavaScript" type="text/javascript">     
image = "http://camera_ip_address/cgi-bin/jpg/image.cgi?"
function Start() {
tmp = new Date();
tmp = "?"+tmp.getTime()
document.images["refresh"].src = image+tmp
setTimeout("Start()", 100)
}
Start();       
</SCRIPT>

И это нормально работает в Firefox, но:

http://user:password@camera_ip_number

не работает в других браузерах (выскакивает форма для ввода логина и пароля).

Но в PHP вы можете использовать user:password. Я проверил это, используя:

<?php
header('Content-type: image/jpeg');
print( file_get_contents( 'http://user:password@camera_ip_address/cgi-bin/jpg/image.cgi?' ));
?>

конечно, он показывает только один кадр, но вам не нужно вводить имя пользователя и пароль.

Как я могу войти в IP-камеру с помощью PHP? Если бы я мог войти в систему один раз при входе на веб-страницу, мой javascript будет работать нормально, потому что браузер будет помнить имя пользователя и пароль, пока я не закрою браузер.

Я не знаю, как отправить логин и пароль для входа.

Извините за мой английский.


person Odin    schedule 22.11.2013    source источник
comment
Вы используете Apache для своего веб-сайта (не для камеры)?   -  person Mat Carlson    schedule 22.11.2013


Ответы (2)


Итак, я заставил это работать, используя PHP и JavaScript. Может быть, это будет полезно для кого-то еще:

Сохраните файл PHP, например, как snapshot.php:

<?php
$img="http://user:password@camera_ip/cgi-bin/jpg/image.cgi?"; 
header ('content-type: image/jpeg'); 
readfile($img); 
?> 

В файле HTML добавьте этот скрипт:

<img src="http://domain.com/snapshot.php" width="640" height="380" name="refresh">

<script language="JavaScript" type="text/javascript">     
image = "http://domain.com/snapshot.php"
function Start() {
tmp = new Date();
tmp = "?"+tmp.getTime()
document.images["refresh"].src = image+tmp
setTimeout("Start()", 300)
}
Start();       
</script>

Он нормально работает под любым браузером. Если я установлю тайм-аут менее 300, будет некоторая задержка. Я не знаю, почему это было вызвано; возможно, подключение к Интернету или скорость веб-сайта.

person Odin    schedule 13.01.2014

Вместо этого вы можете использовать Apache mod_rewrite - меньше накладных расходов из стека PHP и, вероятно, в целом быстрее. Дополнительную информацию см. на этой странице.

Выберите один из них.

Apache .htaccess — ваша страница запрашивает http://yoursite/livecam/image.jpg, который запускается через прокси-сервер Apache на вашу камеру.

RewriteEngine on
RewriteBase /livecam/
RewriteRule ^image.jpg$ http://user:password@camera_ip_address/cgi-bin/jpg/image.cgi [P]
ProxyPassReverse /livecam/image.jpg http://user:password@camera_ip_address/cgi-bin/jpg/image.cgi

В PHP создайте файл с именем image.php — ваша страница запрашивает http://yoursite/image.php, который передает изображение тому, кто его запрашивает.

<?php
$file = 'http://user:password@camera_ip_address/cgi-bin/jpg/image.cgi';

if (file_exists($file)) {
    header('Content-Type: image/jpeg');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}  
?>

Оба будут проксировать изображение через ваш сервер. Как правило, указывать имя пользователя и пароль на любой общедоступной странице — плохая практика, даже если злоумышленник не может повредить ничего интересного.

См. readfile() на PHP.net.

Ваш код будет выглядеть так (замените image.php на livecam/image.jpg при использовании версии Apache). Я также немного сократил ваш код.

<img src="http://yourserver/image.php" width="640" height="480" name="refresh">
<script language="JavaScript" type="text/javascript">setTimeout(function() {document.images["refresh"].src = "http://yourserver/image.php?"+math.random();}, 100);</SCRIPT>
person Mat Carlson    schedule 22.11.2013
comment
Решения Apache и php не работают. С htaccess у меня есть внутренняя ошибка сервера 500, а с PHP у меня есть пустое поле, где должно быть изображение. Если я перейду к yourserver/image.php, он будет пустым, и он должен показать один кадр с камеры, поэтому он должен быть что-то с файлом php. - person Odin; 23.11.2013