2

我正在尝试创建一个PHP 网页,允许访问者查看来自网络摄像头的视频流图像,而不允许访问者获取它的原始 URL/URI。换句话说,我有一个在给定地址运行的网络摄像机:端口,我可以看到嵌入在 HTML 正文中的流,如下所示:

    <img src="http://5.246.77.89:8080/videostream.cgi?user=myusername&amp;pwd=mypass&amp;resolution=32&amp;rate=15" alt="">

或者,如果我们想要一个静态图像:

    <img src="http://5.246.77.89:8080/snapshot.cgi?user=myusername&amp;pwd=mypass&amp" alt="">

现在的问题是,如果有人查看页面后面的 HTML 代码,显然会看到摄像头的 URL 及其用户/密码凭据。这允许访问者随时连接到相机,即使无需访问托管此服务的页面,他们只需在任何浏览器中输入 URL

http://myip:myport/videostream.cgi?user=admin&amp;pwd=fewf2d53BVH&amp;resolution=32&amp;rate=15

我不希望用户能够做到这一点。所以我有了一个想法:如果我能够将流包装到一个充当“中间人”的 php 网页中,我可以在不让访问者知道原始来源的情况下向访问者提供视频。原始 IP:PORT 仅在我的服务器上可见。显然,他们将始终能够使用我网页的 URL,但他们永远不会看到相机的用户/密码,我可以随时锁定服务。此外,为了提高安全性,我可以将托管网络摄像头的路由器设置为仅接受来自我的网络服务器的连接。这将对试图直接连接到 webcabm 的恶意用户起到隐蔽作用。我可以在服务器端做什么来获得这种行为?

4

2 回答 2

1

好吧,至少对于您可以使用 curl 的图像...正如我在评论中指出的那样,您可以创建一个包含以下内容的 php 文件(例如 my.php):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/?password=4444&login=1111');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$picture = curl_exec($ch);
curl_close($ch);
//Display the image in the browser
header('Content-type: image/jpeg');
echo $picture;

而不仅仅是写:

 <img src='my.php'>

PS虽然我认为这不是最好的做事方式,但看起来它可以解决问题。img src 中不再有私人数据。我从来没有像视频格式一样,但至于图像似乎很容易。您可以在此处阅读有关 curl 的更多信息:http: //php.net/manual/en/book.curl.php

于 2014-10-04T18:05:57.280 回答
1

使用上述 passthru 的另一种解决方案:

<?php 
Header("content-type:image/jpeg"); 
passthru("pic.jpg?login=11&pass=22"); 
?>

但是,由于标题,它仍然仅适用于图像...如果您发现任何适用于视频/视频流的内容,请告诉我!

于 2014-10-04T18:18:08.787 回答