Oni*_*sha 3 php android shoutcast
我们有shoutcast/icecast音频流.我希望能够在我们的网站上提供一个名为mobiledroid.php的链接,该链接将使用默认播放器打开.我已经在另一个网站上看到了这一点,所以我知道这是可能的.
我假设它使用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);
Run Code Online (Sandbox Code Playgroud)
在android上,它说"抱歉,这个播放器不支持这种类型的音频文件"
更新2:
删除"Transfer-Encoding"将在Android上播放,但由于实时流没有"内容长度",通常需要很长时间才能以"准备"状态开始流式传输
header("Transfer-Encoding: none"); 也从上面的代码中删除:
引用布拉德:
Android 2.3及更高版本的Transfer-Encoding设置为"none"存在问题.删除该硬集头会将流返回到分块的Transfer-Encoding.这适用于Android 2.3+.最初我禁用了分块编码,因为VLC不支持它.似乎Android 2.2及更早版本不支持分块编码.
注意到虽然它适用于Android,但大多数直播流将需要花费大量时间才能开始.
传统上,您将提供一个播放列表文件,该文件将由您的浏览器保存,然后在配置为打开此类播放列表的任何播放器软件中打开.然后,播放器将读取流的URL,连接到它,然后开始流式传输.
在Android上,他们(出于某些疯狂的原因)选择不支持播放列表文件作为支持的媒体.因此,没有直接的方法来使用传统方法启动播放器.
在Android上,似乎如果您直接链接到MP3文件/流,而不是下载文件,默认操作是打开媒体播放器并尝试流式传输.这意味着您可以轻松直接链接到流的URL(完全绕过播放列表步骤).
有一个捕获... SHOUTcast提供的流不完全符合HTTP标准.它们很接近,但并不完美.这里真正的挂起似乎是内容长度之一.通常,HTTP服务器发送Content-Length响应头.使用流媒体,长度未知.有两种解决问题的方法:
Transfer-Encoding: chunked Transfer-Encoding: none Connection: close您的示例链接使用方法一.我也成功使用方法二.
一旦您的服务器正在使用有效的HTTP,在Android上播放似乎是轻而易举的事.
有几种方法可以实现此修复程序.您已经提到过PHP解决方案.如果cURL不起作用,您可以始终fsockopen()或stream_socket_client()直接建立TCP连接,并自行处理传入的流数据.从那里,你只需要发送正确的响应头并在数据传入时中继数据.请记住,每个连接的客户端都将运行一个PHP实例,每个实例也会连接到你的服务器.这不是理想的,但根据您的可用情况,可能是您的唯一方法.