阅读MP4文件用PHP(Reading mp4 files with PHP)

2019-08-19 08:00发布

我想阅读与PHP和我现在做的MP4文件是这样的:

<?php
header("Content-Length: filesize");
readfile('file.mp4');
?>

但这种方式,我不能跳过,甚至回去,直到视频没有加载100%。 当然,当我直接从文件读取(video.mp4)一切顺利。

谢谢。

Answer 1:

你需要自己实现跳跃功能在PHP。 这是一个代码片段,将这样做。

<?php

$path = 'file.mp4';

$size=filesize($path);

$fm=@fopen($path,'rb');
if(!$fm) {
  // You can also redirect here
  header ("HTTP/1.0 404 Not Found");
  die();
}

$begin=0;
$end=$size;

if(isset($_SERVER['HTTP_RANGE'])) {
  if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) {
    $begin=intval($matches[0]);
    if(!empty($matches[1])) {
      $end=intval($matches[1]);
    }
  }
}

if($begin>0||$end<$size)
  header('HTTP/1.0 206 Partial Content');
else
  header('HTTP/1.0 200 OK');

header("Content-Type: video/mp4");
header('Accept-Ranges: bytes');
header('Content-Length:'.($end-$begin));
header("Content-Disposition: inline;");
header("Content-Range: bytes $begin-$end/$size");
header("Content-Transfer-Encoding: binary\n");
header('Connection: close');

$cur=$begin;
fseek($fm,$begin,0);

while(!feof($fm)&&$cur<$end&&(connection_status()==0))
{ print fread($fm,min(1024*16,$end-$cur));
  $cur+=1024*16;
  usleep(1000);
}
die();

更高的性能

请注意,这是不是最有效的方式做到这一点,因为整个文件需要经过PHP,那么你只需要尝试它是如何为您服务。

假设你想这样做的原因是为了限制访问,你需要更高的效率后,您可以使用标志为Web服务器。

阿帕奇与X-SENDFILE模块或lightty( nginx的信息在这里 )

$path = 'file.mp4';
header("X-Sendfile: $path");
die();

这是一个比较先进的,如果你需要它,你应该只使用它,但它是轻松的知道,当你的东西,是相当容易的,但具有业绩平平开始时你有一个升级选项。



Answer 2:

我通过接受的解决方案实验发现了一个便宜得多PHP的唯一途径。 虽然我没有测试过这对X-SENDFILE,我怀疑的性能更出色的整体为您的网站,因为它意味着更短的Apache文件。

你只需要下面的代码从PHP推出的MP4可查找视频(未与.webm或其他类型的测试):

$file='path/file.mp4';

header('Content-Type: video/mp4'); #Optional if you'll only load it from other pages
header('Accept-Ranges: bytes');
header('Content-Length:'.filesize($file));

readfile($file);

更清洁,更快速; 接受答案的代码导致了视频拍摄很长的时间来加载由于某种原因,加载此代码中的视频是瞬间完成的(这两项测试分别有7.25 MB的视频文件在本地服务器上)。

测试了Chrome浏览器,Firefox和边缘的默认视频播放器。

编辑:没有测试header('Content-Type: video/mp4'); 如果该文件的从另一个页面加载时,它仍然有效! 如果直接访问URL,就没有视频播放器; 代码将刚刚被打印出来。



文章来源: Reading mp4 files with PHP
标签: php mp4 readfile