我試圖用PHP流媒體文件並在瀏覽器上播放它。 我使用Ubuntu的服務器(Apache)和客戶端進行測試。我的代碼適用於Chrome,但不適用於FireFox。 當我直接訪問mp3(所以它是由Web服務器提供的)時,它也可以在FireFox上工作,但是將Web服務器生成的頭文件與我用PHP發送的頭文件進行比較,我找不到如何解決該問題。 (我使用間諜的螢火頭)使用PHP在Linux +流媒體MP3 + FireFox
這裏是Web服務器生成的標頭(即不工作):
Accept-Ranges bytes
Connection Keep-Alive
Content-Length 490265
Content-Type audio/mpeg
Date Sun, 11 Mar 2012 04:01:45 GMT
Etag "22064e-77b19-4badff4a88200"
Keep-Alive timeout=5, max=100
Last-Modified Sat, 10 Mar 2012 09:15:52 GMT
Server Apache/2.2.20 (Ubuntu)
下面是從我的PHP腳本發送到瀏覽器的標題:
Accept-Ranges bytes
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection Keep-Alive
Content-Length 490265
Content-Type audio/mpeg
Date Sun, 11 Mar 2012 04:16:00 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive timeout=5, max=100
Pragma no-cache
Server Apache/2.2.20 (Ubuntu)
X-Powered-By PHP/5.3.6-13ubuntu3.6
這是我使用流式傳輸的MP3代碼:
header('Content-length: ' . filesize($path));
header('Content-Type: audio/mpeg');
header('Accept-Ranges: bytes');
readfile($path);
exit;
我也試過其他頭沒有幫助,如:
header('Content-Disposition: inline; filename="name.mp3"');
header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
header('Pragma: no-cache');
header('Cache-Control: no-cache');
但就像我說的,這些都沒有解決這個問題。
非常感謝您的幫助,
Oded。
編輯:好吧,這似乎是非常奇怪的。經過很多調試之後,我確信PHP版本和Web服務器版本的標頭和內容是相同的,然後我發現它破壞了它,但我不知道爲什麼。這是它打破它的場景:
- 1)在前面的腳本中存儲$ _SESSION的路徑的字符串。
- 2)在流式傳輸mp3的腳本中讀取此字符串。
- 3)使用此字符串作爲加載mp3文件的路徑。
如果我這樣做,FireFox無法播放該文件,當我按下MP3播放器時,它會打印一個「GstDecodeBin2:這看起來像是一個文本文件」消息。 如果我硬編碼的路徑,而不是使用$ _SESSION,它的作品。瘋狂的事情是我絕對確信$ _SESSION中的路徑是正確的!請記住PHP和Web服務器版本的標題和內容是相同的!
*你的腳本實際上是否在範圍內? – 2012-03-11 04:49:04
我不這麼認爲,我不知道範圍是什麼意思,我只是添加了這個標題,因爲我看到web服務器添加了它。 – 2012-03-11 08:38:12