VLC打开视频文件需要多少秒?

时间:2011-03-08 21:41:55

标签: javascript file-io vlc

我正在使用VLC浏览器插件编写脚本以确定任何视频文件的长度。我首先告诉VLC尝试播放该文件。然后我定期探测它的长度。一旦它告诉我长度不为零,我知道视频已经成功开始播放,长度是准确的。

困难的部分是错误检测。我必须检测提供的文件是否是一个被破坏的视频,甚至根本不是视频。有人会因错误地命名为video.avi的文本文件而撒谎,而VLC将无法播放它。我随意决定,如果VLC连续5秒报告长度为0,那么我会认为提供的文件是哑巴。这是一个准确的假设吗?是否有可能严重碎片化的硬盘驱动器需要5秒以上才能为VLC提供视频文件?文件的比特率是否与读取时间有关?

在我的Javascript片段下面确定文件长度。你不必阅读它来理解我的问题,但你们中的一些人可能希望看到它。

/**
 * Find the total length of a playlist item.
 *
 * @param PlaylistItem playlistItem
 * @param options
 *    onSuccess: void function(int length)
 *    onFailure: void function() - timeout
 *    onComplete: void function() - called after onSuccess or onFailure
 * @return void
 */
findLength: function(playlistItem, options) {
    var option = {
        onSuccess: Prototype.emptyFunction,
        onFailure: Prototype.emptyFunction,
        onComplete: Prototype.emptyFunction
    };

    Object.extend(option, options);

    if (playlistItem.getLength() > 0) {
        option.onSuccess(playlistItem.getLength());
        option.onComplete();
    }

    if (this.lengthPoller) {
        this.lengthPoller.stop();
    }

    this.preview(playlistItem);

    this.lengthPoller = new PeriodicalExecuter(
        function(poller) {
            if (this.secondsInComa >= MYAPP.Vlc.MAX_SECONDS_IN_COMA) {
                this.secondsInComa = 0;
                option.onFailure();
                this.stop();
                poller.stop();
                option.onComplete();
            } else {
                var currLength = this.vlc.input.length;
                if (currLength > 0) {
                    currLength /= 1000;
                    playlistItem.setLength(currLength);
                    option.onSuccess(currLength);
                    this.secondsInComa = 0;
                    this.stop();
                    poller.stop();
                    option.onComplete();
                } else {
                    this.secondsInComa += MYAPP.Vlc.LENGTH_POLLING_PERIOD;
                }
            }
        }.bind(this),
        MYAPP.Vlc.LENGTH_POLLING_PERIOD
    );
}

1 个答案:

答案 0 :(得分:0)

我发现它可能需要5秒以上。如果它处于非活动状态,Windows将会使硬盘处于睡眠状态。我试图从非活动驱动器加载视频。驱动器上线需要5秒以上。我的代码错误地将视频标记为有缺陷。