Системный вызов Perl mplayer, переход между видео варьируется - PullRequest
0 голосов
/ 14 января 2012

У меня всего несколько недель в Perl, и я пытаюсь запустить приведенные ниже коды:

sub runVideo {
    system('mplayer -fs video1.mpeg2 video2.mpeg2');
    return;
}

runVideo();
system('some other processes in background&');
runVideo();

В основном я запускаю video1 и video2 два раза, первый раз - только видео, второйвремя, когда какое-то приложение работает в фоновом режиме, не имеет значения, какие приложения работают, так как я запускаю видео в полноэкранном режиме.

Проблема:

При первом запуске переход с видео1 на видео2 занимает около 1-2 секунд.Во время второго запуска переход с видео1 на видео2 занимает менее секунды.

Вопрос:

Почему время перехода отличается?Может быть, видео все еще находится в памяти, поэтому его загрузка заняла меньше времени?

Какие другие альтернативы или обходные пути позволяют получить такое же время перехода?

1 Ответ

0 голосов
/ 15 января 2012

Ответ, скорее всего, в эффектах кэширования.Видео или кодеки, необходимые для его воспроизведения, не были в памяти для видео2.Но, конечно, во второй раз, когда вы делаете это, они есть.

Есть несколько вещей, которые вы можете попробовать - в зависимости от точной причины задержки:

  • Выможно попробовать опцию -fixed-vo для mplayer (если вы используете mplayer 1.x; я полагаю, по умолчанию в 2.x).Это предотвратит цикл jarring vo deinit / reinit.
  • Вы можете (и, вероятно, должны) запустить mplayer в режиме -slave (также, вероятно, с -idle).Это даст вам гораздо больший контроль над этим.
  • Вы можете предварительно кэшировать любые данные, которые требуют времени.Способ сделать это в Unix-подобных системах - posix_fadvise(int fd, off_t offset, off_t len, int advice) с рекомендацией POSIX_FADV_WILLNEED.В качестве альтернативы в Linux readahead(int fd, off64_t offset, size_t count).Или, наконец, mmap в файле, за которым следует madvise(void *addr, size_t length, int advice) с советом MADV_WILLNEED.К сожалению, ни один из posix_fadvise, readahead и madvise не экспортируется модулем POSIX .Таким образом, вам придется найти другой модуль (проверьте CPAN) или прибегнуть к Inline или XS.Или open / sysread (менее эффективно).
  • Вы можете объединить свои видео вместе.Это должно полностью исключить время перехода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...