【问题标题】:PHP how to stream a mp3 stream againPHP如何再次流式传输mp3流
【发布时间】:2017-08-30 13:14:39
【问题描述】:

我正在尝试从 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 中显示了音频播放器,但没有声音开始播放。

【问题讨论】:

  • PS: 你有链接到Mymp3stream.com 来检查吗?我刚刚看到我的方法涉及了解正在提供的 mp3 数据的 url(可以尝试为您查找)。我用PHP做代理,实现广播流的可视化。
  • @VC.One:感谢您的帮助,这是我们当地广播电台的示例流:mp3channels.webradio.antenne.de:80/antenne
  • 如果我的回答对你有用,请告诉我。

标签: php curl mp3


【解决方案1】:

对于您的流,使用 PHP 的 readfile(); 就足够了。它与将无线电链接直接放在&lt;audio&gt; 标记中达到相同的结果。

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

<?php

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

?>

HTML(使用上面的PHP文件作为&lt;audio&gt;标签的来源):

<!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>

【讨论】:

  • 感谢您的方法,它适用于您的系统吗?我在两台不同的电脑上用 Internet Explorer 和 chrome 试了一下。两者都加载到无穷大。任何的想法? php文件中是否声明了buffersize?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多