【问题标题】:Live audio stream valid HTTP resource实时音频流有效的 HTTP 资源
【发布时间】:2012-11-24 15:18:06
【问题描述】:

Shoutcast 服务器无法生成有效的 HTTP 资源。我们的移动播放器链接 (Android) 需要有效的 HTTP 资源。我如何使用 php 脚本进行直播流?此脚本提供有效的 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

按照“Brad”的指示,现在一切正常。我们使用 set_time_limit(0) 但是我的流在 3 分钟到 5 分钟后仍然关闭?怎么修?请帮助我.. :)

【问题讨论】:

  • 我的意思是shoutcast mp3输出没有“Content-Type”
  • 你问它是否是一个有效的 HTTP 资源,然后你说它有Content-Type,而在你的代码中你有header("Content-Type: audio/mpeg");。太模糊了……
  • 大家好,他的问题没有错。他遇到的问题是使用 SHOUTcast 流时的一个众所周知的问题。

标签: php streaming mp3 shoutcast


【解决方案1】:

是的,你所拥有的是有效的。

关于 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 上的内置音频播放器。

【讨论】:

  • 现在一切正常。我们使用 set_time_limit(0) 但是我的流在 3 分钟到 5 分钟后仍然关闭?怎么修?请帮助我.. :)
  • @Joshua,你可能有一些东西杀死了 PHP 进程。这是你的服务器吗?许多主机会定期终止 PHP 进程。在没有干扰的情况下,该过程可以无限期地运行。还要检查内存泄漏。
猜你喜欢
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2015-08-10
相关资源
最近更新 更多