【发布时间】:2023-03-10 20:25:01
【问题描述】:
所以我一直在尝试使用 PHP 的 fOpen 函数,并且在读取声音文件方面取得了很大的成功。现在,我正在尝试为广播流创建一种“中继”。
File_get_contents 可能是最糟糕的方法,因为数据是连续的。
使用 php 套接字会产生更好的结果吗?
Tl;dr 输出连续音频/mpeg 数据流的最佳方式是什么?
【问题讨论】:
标签: php stream output shoutcast mpeg
所以我一直在尝试使用 PHP 的 fOpen 函数,并且在读取声音文件方面取得了很大的成功。现在,我正在尝试为广播流创建一种“中继”。
File_get_contents 可能是最糟糕的方法,因为数据是连续的。
使用 php 套接字会产生更好的结果吗?
Tl;dr 输出连续音频/mpeg 数据流的最佳方式是什么?
【问题讨论】:
标签: php stream output shoutcast mpeg
我过去曾使用 PHP 和 SHOUTcast 流完成此操作。这当然是可能的,但请记住,您的所有 PHP 实例都将与您的 SHOUTcast 服务器建立单独的连接。如果您使用任何 PHP 虚拟主机,这些服务器通常配置为不可能运行 PHP 脚本超过几分钟。为此,您需要自己的 VPS 服务器(或合作托管服务提供商)。
您是正确的,因为您将无法为此使用file_get_contents()。根据您的 cURL 版本,您可能会使用它连接到 SHOUTcast 服务器。 http://php.net/manual/en/book.curl.php 问题通常是 SHOUTcast 服务器在其响应中的状态行是 ICY 200 OK 而不是 HTTP/1.0 200 OK,某些 HTTP 客户端会遇到问题。如果 cURL 确实适合您,请检查使用带有回调函数的 CURLOPT_WRITEFUNCTION 将数据回显到客户端。
如果 cURL 不起作用,您将需要使用 fsockopen() http://www.php.net/manual/en/function.fsockopen.php 连接到服务器并自己处理 HTTP 响应。
从那里,您所要做的就是将传入的数据回显给客户端。
【讨论】: