PHP如何再次流式传输mp3流

时间:2017-08-30 13:14:39

标签: php curl mp3

我正在尝试从http中获取无线电流(MP3)中的数据,并希望以https方式将其流式传输出去。 这就是我的尝试:

<?php

define(URL, 'Mymp3stream.com');

$ch = curl_init(URL);

curl_setopt_array($ch, array(
  CURLOPT_CONNECTTIMEOUT => 60,
  CURLOPT_FOLLOWLOCATION => TRUE,
  CURLOPT_RETURNTRANSFER => TRUE, 
  CURLOPT_HEADER => TRUE
));

curl_exec($ch);

我怎样才能让它流式传输? 浏览器无法启动任何音频输出。 即使有标题

header('Content-type: audio/mpeg');
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");

浏览器中没有音频。 页面一直在加载。

我还尝试将流读入字符串缓冲区并用以下内容回显:

$stream=fopen($url, 'rb');
 while(!feof($stream)){
   $buffer=fread($stream, 128);
   echo $buffer;
   flush();
 }
fclose($stream); 

另一个尝试是在用fopen打开文件后使用get_stream_content。 添加标题后取得了一些小小的成功: 在Chrome中显示了音频播放器,但没有声音开始播放。

1 个答案:

答案 0 :(得分:0)

对于您的信息流,使用PHP readfile();就足够了。它实现了与将无线电链路直接放在<audio>标签中相同的结果。

PHP 代码(另存为testproxy.php):

<?php

$file = "http://mp3channels.webradio.antenne.de/antenne";
readfile($file);

?>

HTML (使用上述PHP文件作为某些<audio>代码的来源):

<!DOCTYPE html>
<html>
<body>

<audio id="audio" controls>
  <source crossorigin="anonymous" src="testproxy.php" type="audio/mpeg">
  Your browser does not support the audio element.
</audio>

</body>
</html>