Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 将图像/视频流嵌入网页_Html_Image_Video_Embed_Man In The Middle - Fatal编程技术网

Html 将图像/视频流嵌入网页

Html 将图像/视频流嵌入网页,html,image,video,embed,man-in-the-middle,Html,Image,Video,Embed,Man In The Middle,我试图创建一个PHP网页,允许访问者查看来自网络摄像头的视频流或图像,而不允许访问者获取其原始URL/URI。 换句话说,我有一个ip摄像头在给定的地址:端口上运行,我可以看到嵌入在HTML主体中的流如下所示: <img src="http://5.246.77.89:8080/videostream.cgi?user=myusername&amp;pwd=mypass&amp;resolution=32&amp;rate=15" alt=""> 我

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

    <img src="http://5.246.77.89:8080/videostream.cgi?user=myusername&amp;pwd=mypass&amp;resolution=32&amp;rate=15" alt="">
我不希望用户能够做到这一点。因此,我有了一个想法:如果我能够将流包装成一个php网页,充当“中间人”,我可以给访问者视频,而不让他们知道原始来源。原始IP:端口将仅在我的服务器上可见。显然,他们将始终能够使用我的网页的URL,但他们永远不会看到相机的用户/密码,我可以随时锁定服务。 此外,为了提高安全性,我可以将承载网络摄像头的路由器设置为只接受来自我的网络服务器的连接。这将对试图直接连接到网络摄像头的恶意用户起到隐蔽作用。
我可以在服务器端做些什么来获得这种行为?

好吧,至少对于图像,您可以使用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'>

另外,虽然我认为这不是做事情的最佳方式,但它似乎解决了问题。img src中不再有私有数据。我从来没有任何类似的视频格式,但对于图像,它似乎很容易。
您可以在此处阅读有关curl的更多信息:

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

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


然而,它仍然只适用于图像,因为标题。。。如果您发现任何与视频/视频流有关的内容,请告诉我

只要您需要通过GET参数发送您的登录数据,就没有什么可以做的了,因为它本质上是为每个人打开的。我首先想到的是制作一个php页面,生成并输出一个图像(比如,使用GD.more info here:),然后执行类似的操作。但这个解决方案似乎有点。。。反正我是瘸子。我觉得最好查看cgi,看看登录凭据是否可以通过其他方式传递。@SamBraslavskiy感谢您的反馈。然而,我要强调的是,问题不在于HTTP传输的安全性,这是不可能的,因为GET的性质。我不想那样。我只是想让用户在我决定这样做后不可能继续观看视频。我的想法是将视频嵌入到一个可以让你在不提供用户名和密码的情况下观看视频的东西中,这将避免任何暴力行为。请你具体说明一下,你的相机是否只需要IMG,视频还是两者都需要?@SamBraslavskiy我希望有两个单独的脚本,一个用于视频,一个用于图片。但是,它们呈现给主机的方式始终相同。页面之间的唯一变化是源CGI:videostream.CGI用于视频,snapshot.CGI用于图片。我猜解决方案就是将页面从原始URL接收到的相同数据流出来。更新:PHP函数passthru似乎很有希望…非常感谢您的及时反馈!使用curl是一个非常好的主意,事实上,它对图像效果很好。您可以在这里看到我使用您的代码进行的测试:无法理解图片的原始来源。目前,它适用于图片,但我相信,在标题上工作也可以流式传输视频。我会通知你的!正如前面所说的,这看起来很有希望,但对图像和/或视频都不起作用。我仍然认为这是一个很好的起点,但我猜passthru函数的参数中有一个错误。我必须了解更多我以前从未使用过的函数。我也没有使用过它。。。但是我在php.net上发现了一个关于这个函数的注释:“当启用安全模式时,您只能在safe_mode_exec_dir中执行文件。出于实际原因,目前不允许在可执行文件的路径中包含..组件。”也许问题就在这里……我在这里打开了另一个答案,这次我将olso与测试凭证一起包含在视频流的真实来源中。希望能有帮助。
 <img src='my.php'>
<?php 
Header("content-type:image/jpeg"); 
passthru("pic.jpg?login=11&pass=22"); 
?>