2012-11-24 63 views
3

Shoutcast服務器不生成有效的HTTP資源。我們的移動播放器鏈接(Android)需要有效的HTTP資源。我如何使用PHP腳本shoutcast流?這個腳本提供了有效的http資源?有誰知道?現場音頻流有效HTTP資源

<?php 

$track = "shoutcaststream.mp3"; 

if (file_exists($track)) { 
    header("Content-Type: audio/mpeg"); 
    header('Content-Length: ' . filesize($track)); 
    header('Content-Disposition: inline; filename="shoutcaststream.mp3"'); 
    header('X-Pad: avoid browser bug'); 
    header('Cache-Control: no-cache'); 
    readfile($track); 
    exit; 
} else { 
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404); 
    echo "no file"; 
} 

更新2

現在一切罰款蝮 「布拉德」 的說明。我們使用set_time_limit(0)但是我的流仍然在3分鐘到5分鐘後關閉?怎麼修?請幫助我.. :)

+0

我的意思是shoutcast mp3輸出沒有「Content-Type」 – Joshua

+0

你問是否它是一個有效的** HTTP資源**,然後你說它意味着它有'Content-Type',而在你的代碼中你有'header(「Content-Type:audio/mpeg」);'。太模糊... – HamZa

+0

嘿,夥計們,他的問題沒有錯。他在使用SHOUTcast流時遇到的問題是一個衆所周知的問題。 – Brad

回答

0

是的,你有什麼是有效的。

關於SHOUTcast流的無效部分是它們在響應中返回ICY 200 OK而不是HTTP/1.0 200 OK。如果您希望更改腳本以代理SHOUTcast請求,則可能需要通過普通TCP連接(請參閱fsockopen())連接到SHOUTcast服務器,併發送原始請求數據。

一旦你有一個連接,並且正在接收數據,將這些數據回顯給你的客戶端。

另請注意,您將需要致電set_time_limit(0),以便您的腳本在30秒內不會超時。另外,請確保不要發送Content-Length標題,並將您的響應設置爲HTTP/1.0,以便您不必將數據發送爲分塊。 (分塊編碼播放僅適用於Android 2.3或更高版本。)

最後,如果您發現使用PHP盜用某些內容太麻煩了,我有一個stream hosting service available for testing,它完全符合您的要求,適用於Android上的內置音頻播放器。

+0

仍anroid 2.2不播放該流。我們粘貼上面的代碼.. – Joshua

+0

一切都很好。我們使用set_time_limit(0)但是我的流仍然在3分鐘到5分鐘後關閉?怎麼修?請幫助我.. :) – Joshua

+0

@Joshua,你可能有東西殺了PHP的過程。這是你的服務器嗎?許多主機會定期殺死PHP進程。沒有干擾,該過程可以無限期地運行。同時檢查內存泄漏。 – Brad