【发布时间】: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