【问题标题】:Restream a Shoutcast/Icecast Stream Using PHP使用 PHP 重新流式传输 Shoutcast/Icecast 流
【发布时间】:2020-05-01 09:00:59
【问题描述】:

我需要以某种方式使用 PHP 重新流式传输 Shoutcast/Icecast 流。

为什么?

因为 Shoutcast/Icecast 流不是 https。而且它不是通过80和443端口发送的,而是通过一些不同的奇怪端口发送的。而且我需要普通/标准端口(如 80 或 443)上的 https 链接。这是最大的原因,尽管我认为还有一些更多但不太重要的原因。

这些链接类似于http://hostname.com:5921/stream,而我需要https://hostname.com/stream?user=x 之类的链接。

我进行了深入研究,但没有发现太多。

我发现了类似的东西:

https://stackoverflow.com/questions/7998773/is-it-possible-to-restream-an-internet-radio-using-php-php-guru-needed
https://www.svnlabs.com/blogs/radio-icecast-shoutcast-php-proxy-to-re-stream-radio-stream-on-https/
https://stackoverflow.com/questions/36306457/read-mp3-stream-and-echo-back-to-client-in-php

目前我从所有资源和我自己的尝试中收集到的最好的代码是:

$link = 'http://shoutStreame.streamland.com/proxy/radioGame?mp=/1'; //example link to a Shoutcast stream (not working, only example)

ob_start();
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-Disposition: attachment; filename="stream.mp3"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
$handle = fopen($link, 'r');

while (($data = fread($handle, 1024))) {
    echo $data;
    ob_flush();
    flush();
}

而且这段代码似乎不是……很好?优秀吗?

我只是觉得我用这段代码做错了,效率不高,可能会导致问题。

我主要担心的是:

  • 效率,尤其是在许多请求下
  • 法律问题?以这种方式做事有什么真正的问题吗?使用 php 重新流式传输?
  • 崩溃问题?像整个 php、nginx 甚至机器的崩溃?
  • 失去连接,像这个 php 脚本会在一段时间后死掉或什么的

也许还有更多。

我真的很难找到更多关于使用 PHP 重新流式传输音频流的特定主题的资源、数据和信息。

现在我真的不知道该怎么办。我只是在研究和思考,但正如我所说,真的很难找到更多关于这个话题的东西。这是我目前唯一的代码,我不知道它是否好用...... :)

【问题讨论】:

  • 这些担忧是否已通过测试得到证实,还是只是理论上的担忧?附言我们大多数人(如果不是全部)可能没有资格就法律方面向您提供建议
  • @ADyson 这只是我自己理论上的担忧和感受
  • P.S.在您提到的问题中,您需要此代码,因为您要访问的流是非 HTTP 并且通过不是标准 HTTP/HTTPS 的端口提供服务(我假设您想通过公司防火墙或其他东西进行流传输)。然而,在示例代码中,您似乎是从 HTTP URL 获取数据......所以说实话,有点不清楚问题是什么。您是否还想下载其他不基于 HTTP 的链接?如果是这样,那么演示它们可能是有意义的。
  • 关于担忧,你真的需要做一些具体的负载测试,看看它在重度使用下的表现,看看这些担忧是否可能是真实的。我们对部署的服务器环境或预期的使用水平、您从中流式传输的站点的容量以及这些站点与您的站点之间的网络连接容量一无所知,因此很难预测。
  • @ADyson 这些直播/冰播链接类似于:hostname.com:5921/stream,您可以看到端口 5921 + 不是 https。我需要更多的链接:hostname.com/stream?user=x

标签: php streaming icecast shoutcast internet-radio


【解决方案1】:

因为 Shoutcast/Icecast 流不是 https。

错误! Icecast 支持 HTTPS 就好了。查看配置文件中的<ssl-certificate> 标签。 http://www.icecast.org/docs/icecast-2.4.1/config-file.html

而且它不是通过80和443端口发送的,而是一些不同的奇怪端口。

也是假的! SHOUTcast 和 Icecast 都可以配置为在您想要的任何端口上运行。大多数站点使用标准端口,您也可以。

这些链接类似于http://hostname.com:5921/stream,而我需要https://hostname.com/stream?user=x 之类的链接。

为什么你需要这样做?可能最简单的做法是从您的脚本重定向到/stream 的流 URL。这将满足大多数需求。

您的所有技术问题都是有效的。我绝对不建议通过 PHP 中继流。随着你正在做的事情,你每次都会导致上游连接,而且真的没有任何好处。此外,如果您代理连接,Icecast 中存在一些客户端兼容性漏洞,您会丢失这些漏洞。

【讨论】:

  • 错误! Icecast 支持 HTTPS 就好了。 - 但它也是关于喊话的,他们俩也是假的! SHOUTcast 和 Icecast 都可以配置为在您想要的任何端口上运行。 -不知道能不能处理1000+站左右
  • 为什么需要这样做?可能最简单的做法是从 /stream 的脚本重定向到流 URL。这将满足大多数需求。 -我认为它不会起作用,因为它只是重定向,并且重定向后面的最终链接就像http://hostname.com:5921/stream
  • @KrystianWalicki 为什么不能只使用 Icecast?为什么你不能配置你的服务器来使用你想要的端口?为什么重定向对您不起作用?您能否详细说明您的具体用例?
  • 1.我有用户,很多用户,很多。其中一些使用 Icecast 和一些 Shoutcast。 2.这些在 centovacast 和 everestcast 等面板上,每个帐户都有自己的特定端口到他们的 icecast/shoutcast 服务器,链接到不同和奇怪的端口流。我需要到这些流和正常端口的正常 https 链接。 3.重定向只是重定向,重定向后面的最终链接仍然在奇怪的端口上,没有https
  • 这些面板也提供代理链接(在普通端口上,更像是 www 链接)- 不知道怎么做,但它们有我想创建的代理链接。但没有 https。
猜你喜欢
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 2011-04-19
  • 1970-01-01
相关资源
最近更新 更多