【问题标题】:Php output continuous streamphp输出连续流
【发布时间】:2023-03-10 20:25:01
【问题描述】:

所以我一直在尝试使用 PHP 的 fOpen 函数,并且在读取声音文件方面取得了很大的成功。现在,我正在尝试为广播流创建一种“中继”。

File_get_contents 可能是最糟糕的方法,因为数据是连续的。

使用 php 套接字会产生更好的结果吗?

Tl;dr 输出连续音频/mpeg 数据流的最佳方式是什么?

【问题讨论】:

    标签: php stream output shoutcast mpeg


    【解决方案1】:

    我过去曾使用 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 响应。

    从那里,您所要做的就是将传入的数据回显给客户端。

    【讨论】:

    • 我会对此进行测试并回到问题上来。如果它有效,我将发布我正在使用的工作代码。感谢您的帮助!
    • 只是一个关于 cURL 的问题,curl_exec 的示例之一提到将“example.com” URL 传递给浏览器。如果我试图将此脚本创建为一种“代理”,这样用户就不需要在 HTML 中显示他们易受攻击的 IP 地址,那么该 IP 到浏览器的通道是否会显示在数据包嗅探器中?需要明确的是,我在 cURL 中使用的是 IP 与 URL。
    • “HTML 中的易受攻击的 IP 地址” - 什么?是什么让您认为用户的 IP 地址在任何方面都容易受到攻击?这就是互联网的运作方式。无论如何,HTML 与 SHOUTcast 有什么关系?而且,您在哪里担心数据包嗅探器?
    • 我写这个脚本的全部原因是为了 DDoS 保护 SHOUTCast 流。而不是将声音文件链接为ipaddress:port;你可以使用shoutcastprotected.web/streamProxy.php?id=352。我担心数据包嗅探器,因为我不了解 cURL 将 URL 传递回浏览器或其他任何东西的整个部分。在此处查看“示例 #1”:php.net/manual/en/function.curl-exec.php
    • 该示例评论非常具有误导性。它不会将 URL 传递给浏览器,而是将该 URL 处的资源内容传递回浏览器。除非您公开此信息,否则命中此脚本的任何内容都将不知道它在内部做什么以及它连接到什么。此外,您的脚本不会对 DDoS 攻击起到什么保护作用,因为有人可能会攻击您的代理脚本。事实上,我认为这会使问题变得更糟,因为您正在以可能效率最低的方式代理 SHOUTcast 流。 PHP 不是这项工作的合适工具。
    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 2012-12-10
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2021-02-13
    相关资源
    最近更新 更多