【发布时间】:2012-07-13 10:51:33
【问题描述】:
我们有直播/冰播音频流。我希望能够在我们的网站上提供一个链接,例如 mobiledroid.php,该链接将使用默认播放器打开。我看过这个done on another site,所以我知道这是可能的。
我假设它通过 php 文件使用 php 标头和流作为流?
使用 Brad 的说明,android 实际上提供了使用声音播放器打开的选项。不错。
它也可以通过 PC 在 WMP 上播放,但不能在 android 上播放上述链接的播放方式
header("Content-type: audio/mpeg");
header("Transfer-Encoding: chunked");
header("Connection: close");
$sock = fsockopen($streamname,$port); //$streamname is the IP
fputs($sock, "GET $path HTTP/1.0\r\n"); //path in my case is /;stream.mp3
fputs($sock, "Host: $ip\r\n");
fputs($sock, "User-Agent: WinampMPEG/2.8\r\n");
fputs($sock, "Accept: */*\r\n");
fputs($sock, "Icy-MetaData:1\r\n");
fputs($sock, "Connection: close\r\n\r\n");
fpassthru($sock);
fclose($sock);
在android上,它说“对不起,这个播放器不支持这种类型的音频文件”
更新 2:
删除"Transfer-Encoding" 将在 android 上播放,但由于直播没有“Content-Length”,因此像往常一样需要很长时间才能开始以“Preparing”状态进行直播
header("Transfer-Encoding: none"); 也从上面的代码中删除:
引用布拉德:
Android 2.3 及更高版本存在将 Transfer-Encoding 设置为“none”的问题。删除该硬设置的标头会将流放回分块传输编码。这适用于 Android 2.3+。最初我禁用了分块编码,因为 VLC 不支持它。 Android 2.2 及更早版本似乎也不支持分块编码。
请注意,尽管它适用于 android,但大多数直播流需要很长时间才能开始。
【问题讨论】:
-
这里有什么有用的 -> stackoverflow.com/questions/2568665/…
-
我已经检查了您发布的内容和之前发布的大量链接。所以我不能使用 fopen 等,因为 php 不会读取 mp3 流。你会得到 HTTP 请求失败! ICY 200 OK - 仍在检查
-
@Onimusha,当然你可以用 PHP 阅读 SHOUTcast/Icecast 流......我每天都这样做。另外,我非常很好奇您发现哪个网站可以按照您想要的方式运行。
-
@Brad 我遇到的网站保存在此链接中textsave.de/?p=127811 - 必须保存链接抱歉
-
在 Android 上的工作方式是直接链接到 MP3 流。我过去曾用 SHOUTcast/Icecast 试过这个,但永远无法让它直接工作。但是,使用我已经准备好的一些测试服务器,它确实有效。我会弄清楚有什么区别,并会尽快回复您。