通过php打开mp4导致播放前完全下载

时间:2012-10-02 17:53:41

标签: php flash video fopen mp4

我正在尝试通过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');

我尝试过类似的卷曲。是什么导致了这种延迟?

2 个答案:

答案 0 :(得分:2)

您的Flash播放器很可能希望您处理HTTP Range请求,以便在播放时更快地启动。

HTML5 / Flash音频播放器jPlayer has a section in their developer guide about this。滚动到有关字节范围请求的部分:

  

您的服务器必须启用范围请求。这很容易检查   查看服务器的响应是否包含其中的Accept-Ranges   报头中。

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

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

答案 1 :(得分:0)

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

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

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

这通常比通过PHP更快。