【问题标题】:How to stream a media file using PHP?如何使用 PHP 流式传输媒体文件?
【发布时间】:2010-09-24 07:55:43
【问题描述】:

我正在尝试构建一个应用程序,我必须在其中将媒体文件(音频和视频)流式传输到浏览器。我正在通过 php 读取文件并将数据发送到浏览器。我正在使用以下代码。

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Content-Type: {$file->getMimetype()}");
header("Content-Disposition: inline; filename=".$filename.";");
header("Content-Length: ".strlen($file_content));

echo $file_content;

一切正常,除了当我尝试转发视频或音频时(我的意思是假设当前播放位置是 0:15,它直接转到 1:25),媒体停止并且当我按下播放按钮时再次,它从头开始。

我认为问题出在缓冲上,但无法弄清楚。我在标题中做错了什么还是需要其他东西。

谢谢。

【问题讨论】:

  • 我更喜欢 Flash-streaming ;) ,更小的文件大小 = 更快的加载速度。也更容易集成到网站中。
  • @Jordy AFAIK Flash 不执行服务器执行的流式传输。您仍然需要一个服务器端脚本来流式传输 flv,否则您必须等待整个文件加载才能查看它。

标签: php file-io buffering


【解决方案1】:

我认为您需要实现 Range 标头,以便客户端可以跳到文件中的特定位置。通过玩家发送的sniffing the request,您大概可以找出问题所在。

【讨论】:

【解决方案2】:

您想要的称为“内容范围请求”

看看这里Resumable downloads when using PHP to send the file?

【讨论】:

    【解决方案3】:

    我最近遇到了这个,可能对你有帮助:

    http://www.jasny.net/articles/how-i-php-x-sendfile/

    您可以使用 x-sendfile,而不是通过 PHP 传递整个文件(这会占用内存)。这是一个 Apache 模块,它允许您运行 PHP 程序,但在您的代码完成所需的操作(身份验证等)后,将控制权交还给 Web 服务器以处理实际的文件下载。

    这意味着您的 PHP 代码不必担心文件的服务方式;让网络服务器完成它的设计目标。

    希望对您有所帮助。

    【讨论】:

      【解决方案4】:

      这是一个很好的教程,你只想要 PHP 部分,但仍然: http://www.devshed.com/c/a/PHP/Video-Streaming-PHP-Script-Tutorial/3/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 2012-07-28
        • 2011-07-16
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 2011-10-18
        相关资源
        最近更新 更多