我正在使用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
);
}
答案 0 :(得分:0)
我发现它可能需要5秒以上。如果它处于非活动状态,Windows将会使硬盘处于睡眠状态。我试图从非活动驱动器加载视频。驱动器上线需要5秒以上。我的代码错误地将视频标记为有缺陷。