【问题标题】:Is there a way to tell the file size of an .ogg video before it is fully loaded?有没有办法在完全加载之前告诉 .ogg 视频的文件大小?
【发布时间】:2011-07-17 01:39:48
【问题描述】:

我知道 ogg 视频和 mp4 视频之间的一个区别是 ogg 视频没有描述文件大小的元数据,因此当加载 ogg 视频时,控件无法显示文件完全加载之前的剩余时间.如果 ogg 视频的长度超过几分钟,这可能会成为问题。有没有办法在请求页面时获取此文件大小?

(客户端开发人员,提出一个我认为有服务器端答案的问题。如果您能想出更具体的方法,我欢迎对这个问题提出修改建议。)

【问题讨论】:

    标签: html html5-video mp4 filesize ogg


    【解决方案1】:

    虽然不是最直接的,但你可以试试这个。

    首先,设置一个.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 标头中提取文件大小。

    希望这会有所帮助。

    【讨论】:

    • 投了赞成票——就像答案一样,我认为它在正确的轨道上,但还没有准备好接受。当您说“以防服务器不自动发送文件大小标头”时,它通常会这样做吗?如果是这样,有没有办法读取该文件大小的标题?此外,当您说“从 HTTP 标头中提取文件大小”时,我认为这就是我最初想要做的,但我不确定如何做。
    • 我明天会用一个实际的文件试试这个,看看我是否可以让它来填充 $filesize 数据。
    • 现在最后的评论:你说“虽然不是最直接的”——什么最直接的?有没有我不知道的明显方法?
    • 许多服务器只为图像发送文件大小标题...而不是为 HTML 和视频发送文件大小标题。这是一个小技巧。 JavaScript 大小变量以字节为单位保存文件大小,因此您可以对它做任何您想做的事情。最后,不,我想不出更好的方法,除非您可以完全访问服务器。这是一个 hack,但至少它应该在多种环境中工作。
    • 我自己尝试过;它没有用,但我认为它在正确的轨道上。这就是问题所在(我认为):当 .htaccess 文件将 ogg 文件更改为 php 处理时,它会将 Content-Type 更改为 text/html。即使 php 文件试图将 header 设置为 video/ogg,它已经被设置了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多