我有一个问题。我想从(zip)文件中订购以断开连接的方式播放视频,以便您可以将其包含在 HTML5 徽章中。正如我举的例子。但这不起作用。
<?php $video = fopen('zip://video.zip#video.mp4', 'r'); ?>
<video>
<source src='<? echo $video; ?>' type='video/mp4' />
</video>
我有一个问题。我想从(zip)文件中订购以断开连接的方式播放视频,以便您可以将其包含在 HTML5 徽章中。正如我举的例子。但这不起作用。
<?php $video = fopen('zip://video.zip#video.mp4', 'r'); ?>
<video>
<source src='<? echo $video; ?>' type='video/mp4' />
</video>
$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 文件中读取。