Сколько секунд требуется VLC, чтобы открыть видеофайл? - PullRequest
1 голос
/ 09 марта 2011

Я пишу сценарий с помощью плагина браузера VLC , чтобы определить длину любого видеофайла.Сначала я говорю VLC, чтобы попытаться воспроизвести файл.Затем я периодически проверяю его длину.Как только он говорит мне, что длина не равна нулю, я знаю, что видео успешно начало воспроизводиться, и длина является точной.

Сложная часть - обнаружение ошибок.Я должен определить, является ли предоставленный файл видео с ошибками или вообще не видео.Кто-то может лежать с текстовым файлом с неправильным названием video.avi, и VLC не сможет его воспроизвести.Я произвольно решил, что, если VLC сообщит, что длина равна 0 в течение 5 секунд подряд, то я считаю, что предоставленный файл будет лишним.Это точное предположение?Возможно ли, что сильно фрагментированный жесткий диск займет более 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 голосов
/ 13 марта 2011

Я обнаружил, что это может занять больше 5 секунд.Windows переведет жесткий диск в спящий режим, если он неактивен.Я пытался загрузить видео с неактивного диска.Привод занял больше 5 секунд.Мой код неверно пометил видео как дефектное.

...