我知道 ogg 视频和 mp4 视频之间的一个区别是 ogg 视频没有描述文件大小的元数据,因此当加载 ogg 视频时,控件无法显示文件完全加载之前的剩余时间。如果 ogg 视频的长度超过几分钟,这可能会成为问题。有没有办法在请求页面时获取此文件大小?
(客户端开发人员,提出一个我认为有服务器端答案的问题。如果您能想出更具体的方法,我欢迎对这个问题提出建议的编辑。)
我知道 ogg 视频和 mp4 视频之间的一个区别是 ogg 视频没有描述文件大小的元数据,因此当加载 ogg 视频时,控件无法显示文件完全加载之前的剩余时间。如果 ogg 视频的长度超过几分钟,这可能会成为问题。有没有办法在请求页面时获取此文件大小?
(客户端开发人员,提出一个我认为有服务器端答案的问题。如果您能想出更具体的方法,我欢迎对这个问题提出建议的编辑。)
好吧,虽然不是最直接的,但你可以试试这个。
首先,设置一个 .htaccess 以透明地抓取所有 .ogv 视频并使用 PHP 处理它们
.htaccess
RewriteEngine On
RewriteRule ^(.*)\.ogv$ ogv.php?file=$1
ogv.php
<?php
$file = $_GET['file'] . '.ogv';
while ( strpos($file, '..') !== false )
{
$file = str_replace('..', '', $file);
}
$filesize = filesize($file);
header("Content-Type: video/ogg");
header("Content-Transfer-Encoding: binary");
header("Content-Length: {$filesize}");
readfile($file);
exit()
?>
HTML:
<video src="video.ogv" id="video" controls></video>
<script>
var video_src = document.getElementById('video').src;
var xhr = new XMLHttpRequest();
xhr.open('GET', video_src, false);
xhr.send(null);
var size = xhr.getResponseHeader('Content-Length');
alert(size);
</script>
所以这就是这个系统的工作原理。只需像平常一样链接一个 .ogv 视频,但 .htaccess 文件首先捕获请求并将其发送到 ogv.php。然后,PHP 文件会专门发送一个文件大小标头,以防服务器不自动执行。好吧,那仍然对你没有多大好处,对吧?然后,您可以对视频发出 Ajax 请求并从 HTTP 标头中提取文件大小。
希望这可以帮助。