1

我有一个问题。我想从(zip)文件中订购以断开连接的方式播放视频,以便您可以将其包含在 HTML5 徽章中。正如我举的例子。但这不起作用。

<?php $video = fopen('zip://video.zip#video.mp4', 'r'); ?>
<video>
    <source src='<? echo $video; ?>' type='video/mp4' /> 
</video>
4

1 回答 1

2

$video在上面的代码中只是一个服务器端文件句柄,您可以使用它从 zip 中读取文件。它不能直接用于浏览器。

您需要处理读取文件并在单独的 HTTP 请求中返回它。通常你会为此使用第二个脚本。(或者,如果您的视频相对较小,您也许可以使用数据 url,但这不是我想做的事情。)此外,如果您想允许字节范围请求,您必须自己处理在您的视频服务逻辑中。

这是一个相当简单的场景:

我的videos.zip文件包含几个不同的视频,我想检索一个特定的视频并将其显示在名为video.php

首先,我有我的查看器,比如说video.php,[编辑:包含视频标签和我的第二个脚本的 URL 作为源。由于我可能想在某个时候提供其他文件,因此我将其设置为接受 v 查询参数中的文件名。]

..some html/php..
<video>
   <source src='zipserve.php?v=itsrainintoast.mp4' type='video/mp4' /> 
</video>
..more html/php..

然后,在zipserve.php我有这样的事情:

$filename = $_GET['v']; //You probably want to check that this exists first, btw.
$fp = fopen('zip://videos.zip#'.$filename, 'r');
if($fp)
{
   header('content-type: video/mp4');
   //Note: you should probably also output an appropriate content-length header.
   while(!feof($fp))
   {
      echo fread($fp, 8196);
   }
   fclose($fp);
}
else
{
   echo 'Some error message here.';
}

--附录-- 还应该注意的是,这需要zip启用 php 扩展。

一个更完整的具有范围处理等的视频获取脚本示例可以在来自 PHP 的 mp4 的问题中找到 - 不在 HTML5 视频标签中播放,但您需要对其进行调整以允许从 zip 文件中读取。

于 2013-09-10T05:51:22.607 回答