我试图用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