使用PHP和cURL从安全摄像头获取MJPEG视频流

使用PHP和cURL从安全摄像头获取MJPEG视频流,php,curl,web,Php,Curl,Web,我有多个自托管网络安全摄像头(Axis 2100,它们很旧),我想向网站广播。摄像头支持MJPG格式的实时流媒体,但为了流媒体播放这些摄像头的视频,我必须将其公开。出于安全原因,我想限制通过我的网站查看这些摄像头,在那里我可以验证用户的身份。由于网络摄像头位于单独的主机上,因此我使用cURL和PHP登录摄像头,获取MJPG图像流,并将实时流回显在网页上 header('content-type: multipart/x-mixed-replace; boundary=--myboundary')

我有多个自托管网络安全摄像头(Axis 2100,它们很旧),我想向网站广播。摄像头支持MJPG格式的实时流媒体,但为了流媒体播放这些摄像头的视频,我必须将其公开。出于安全原因,我想限制通过我的网站查看这些摄像头,在那里我可以验证用户的身份。由于网络摄像头位于单独的主机上,因此我使用cURL和PHP登录摄像头,获取MJPG图像流,并将实时流回显在网页上

header('content-type: multipart/x-mixed-replace; boundary=--myboundary');

while (@ob_end_clean()); 
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://XX.XXX.XXX.XX/axis-cgi/mjpg/video.cgi?resolution=320x240'); 
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY | CURLAUTH_ANYSAFE );
    curl_setopt($ch, CURLOPT_USERPWD, 'USERNAME:PASSWORD');
    $im = curl_exec($ch);


echo $im;
curl_close($ch);
问题是,当我有多个会话试图在同一个浏览器上使用上面的代码访问同一个php页面时,只有一个会话被加载,而其余会话保持空白,最终显示500个内部服务器错误。但是,当通过多个不同的浏览器打开它时,它会工作,性能会降低

最终,我想让它成为一个网络摄像头服务器,在那里我可以从摄像头建立一个输入流连接,并将其广播到多个客户端

我的网站是由GoDaddy在linux服务器上托管的,而我不是在专用服务器上,所以我认为我无法安装任何花哨的开源视频流托管服务器

谢谢你,很抱歉这么长的帖子


-T.Ho

我在这里与同一个问题进行了一整夜的殊死搏斗,你详细的问题描述帮助我找出了我的问题所在

  • windows上的nginx+phpFastcgi必须使用多个php-cgi.exe配置(某些重新启动的进程问题)。。。但这并不是主要问题(因为您的案例是linux…)
最主要的是:

  • 从命令行运行多个简单的“WGET httpTargetImgSite”-不要重现问题-可以
。。。所以结论是服务器端必须是好的,问题的原因必须与浏览器缓存相关

如果您的php代码名为videoproxy.php

- direct browser calling of: http://serverip/videoproxy.php
- or calling some html file
<html><body><img src='videoproxy.php' /></body></html>
-直接浏览器调用:http://serverip/videoproxy.php
-或者调用一些html文件
。。。会有问题的。 但该代码不会:

<html><body><script> 
document.write("<img src='videoproxy.php?dummy=" 
               +(new Date().valueOf()) +"' />"); 
</script></body></html>

文件。填写(“”);
(保留img缓存的虚拟唯一编号)