2013-11-22 62 views
3

我有一个IP摄像机,我想在我的网页上显示liveview。自动登录到IP摄像机

IP摄像机不允许匿名登录,所以我需要在连接时输入用户名和密码。

我的javascript:

<img src="http://user:[email protected]_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:[email protected]_ip_number 

不要在其他浏览器(它弹出一个形式输入用户名和密码)。

但在PHP中您可以使用用户名:密码我已经通过检查:

<?php 
header('Content-type: image/jpeg'); 
print(file_get_contents('http://user:[email protected]_ip_address/cgi-bin/jpg/image.cgi?')); 
?> 

当然这仅显示一个框架,但你不必输入用户名和密码。

如何使用PHP登录到IP Camera?如果我在登录网页时可以登录一次,那么我的JavaScript将会正常工作,因为浏览器会记住用户名和密码,直到关闭浏览器为止。

我不知道如何发送用户名和密码进行登录。

对不起,我的英语水平。

+0

你在为你的网站(而不是相机)运行Apache吗? –

回答

4

好的,所以我已经使用PHP和JavaScript工作。也许它会对别人有帮助:

将PHP文件保存为例如快照。PHP:

<?php 
$img="http://user:[email protected]_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,则会有一些滞后。我不知道为什么会造成这种情况;也许互联网连接或网站速度。

0

您也许能够使用Apache mod_rewrite - 从PHP堆栈中减少开销,并且可能通常更快。有关更多信息,请参阅this page

选择其中之一。

Apache .htaccess - 您的页面请求http://yoursite/livecam/image.jpg,它通过Apache的代理服务器运行到您的相机。

RewriteEngine on 
RewriteBase /livecam/ 
RewriteRule ^image.jpg$ http://user:[email protected]_ip_address/cgi-bin/jpg/image.cgi [P] 
ProxyPassReverse /livecam/image.jpg http://user:[email protected]_ip_address/cgi-bin/jpg/image.cgi 

在PHP中,创建一个名为image.php文件 - 你的页面请求http://yoursite/image.php,该图像流到任何请求它。

<?php 
$file = 'http://user:[email protected]_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; 
} 
?> 

两者都会通过您的服务器代理映像。在任何公共页面上提供用户名和密码通常是不好的做法,即使攻击者不能损害任何关注的内容。

查看PHP.net

readfile()你的代码是这样(如果使用Apache的版本livecam/image.jpg的替代image.php)。我也缩短了你的代码。

<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> 
+0

Apache和php解决方案不起作用。有了htaccess我有500内部服务器错误,并与PHP我有空白字段的图像应该。如果我去http://yourserver/image.php它是空白的,它应该显示相机的一帧,所以它必须是与PHP文件的东西。 – Odin

0
IP:port/cgi-bin/jpg/image.cgi?&user=XXX&pwd=XXX 
    IP:port/cgi-bin/jpg/image.cgi?&usr=XXX&pwd=XXX 
    IP:port/snapshot.cgi?&user=XXX&pwd=XXX'; 
    IP:port/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=XXX&pwd=XXX';