1

我正在尝试通过 php 将 mp4 文件提供给 flash 播放器,并且视频在开始播放之前已完全下载。

$src = '/var/www/user/data/www/domain.com/video.mp4';
if(file_exists($src) and is_readable($src)) {
    header('Content-Type: video/mp4');
    header('Content-Length: '.filesize($src));
    readfile($src);
} else die('error');

我试过 curl 有类似的结果。任何想法是什么导致了这种延迟?

4

2 回答 2

2

您的 Flash 播放器很可能希望您能够处理 HTTPRange请求,以便它可以更快地开始播放。

HTML5/Flash 音频播放器jPlayer 在其开发人员指南中有一个关于此的部分。滚动到有关字节范围请求的部分:

您的服务器必须启用 Range 请求。这很容易通过查看服务器的响应是否在其标头中包含 Accept-Ranges 来检查。

另请注意,Range如果您必须使用 PHP 而不是直接下载,它们会提供用于处理请求的 PHP 解决方案。

smartReadFile.php
https://groups.google.com/forum/#!msg/jplayer/nSM2UmnSKKA/bC-l3k0pCPMJ

于 2012-10-02T18:08:54.347 回答
0

另一种选择是让 apache 自己发送文件,而不是在 php 中读取它并使用 X-Sendfile 将其转储到输出。

首先确保使用 sendfile 支持编译 apache,然后将输出代码更改为:

header ('X-Sendfile: ' . $src);
header ('Content-Type:  video/mp4');
header ('Content-Disposition: attachment; filename="' . $filename . '"');
exit;

这通常比通过 PHP 更快。

于 2012-10-02T18:15:45.207 回答