我想要向网站广播多个自托管网络安全摄像头(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
答案 0 :(得分:2)
我整晚在这里遇到了同样的问题,你的详细问题描述让我弄明白了我的问题是什么。
主要是:
...所以结论是服务器端必须是好的,问题原因必须是浏览器缓存相关!
如果你的php代码名为videoproxy.php
- direct browser calling of: http://serverip/videoproxy.php
- or calling some html file
<html><body><img src='videoproxy.php' /></body></html>
......会有问题。 但是这段代码不会:
<html><body><script>
document.write("<img src='videoproxy.php?dummy="
+(new Date().valueOf()) +"' />");
</script></body></html>
(用于保留img缓存的虚拟唯一编号)