2012-02-01 101 views
2

我有多個自我託管的網絡安全攝像頭(Axis 2100,它們很舊),我想要將它們廣播到網站。這些攝像機支持MJPG格式的實時流式傳輸,但爲了從這些攝像機流式傳輸視頻,我必須公開它們。出於安全原因,我想限制通過我的網站查看這些相機,以便我可以對用戶進行身份驗證。由於攝像頭位於單獨的主機上,因此我使用cURL和PHP登錄到攝像頭,獲取MJPG圖像流,並將實時流回顯以顯示在網頁上。來自使用PHP和cURL的安全攝像頭的MJPEG視頻流

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

回答

2

我這裏有殊死搏鬥了一夜同樣的問題,你的問題的詳細說明幫我想通了,什麼是我的情況的問題。在Windows

  • 的nginx + phpFastcgi必須使用多個名爲php-cgi.exe配置(一些重生過程中的問題)......但這還不是最主要的(因爲你的情況是Linux ...)

而且最主要的是:

  • 從命令行運行多個簡單的「WGET httpTargetImgSite」 - 不要重現了一個問題 - 是OK!

...這樣的結論是,服務器端必須是好的,問題原因必須瀏覽器緩存無關!

如果你的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緩存)

相關問題