Получить состояние проигрывателя интерфейса дистанционного управления VLC - PullRequest
1 голос
/ 28 декабря 2011

Я в настоящее время нахожусь в проекте Java, который использует интерфейс удаленного управления сокетом vlc для воспроизведения аудиовизуального контента (например, vlc -I rc --rc-host=localhost:[portnumber]). Интерфейс приводит к некоторым частным случаям, которые кажутся сложными для решения:

  • Согласно справке по дистанционному управлению vlc, команда паузы является функцией переключения, поэтому вы должны следить за текущим состоянием игрока.

  • Команда add запустит видео, только если текущее видео не приостановлено.

  • Команда is_playing всегда выводит 1, когда она приостановлена ​​или нет, и status Команда не говорит, приостановлена ​​она или нет.

Ограничение клиента заключается в том, что видео нужно ставить на последний кадр. К счастью, есть параметр для решения этой проблемы: --play-and-pause.

Проблема заключается в следующем. Если vlc доходит до последнего кадра и останавливает видео самостоятельно, как я могу узнать об этом? На данный момент я использую get_time в надежде просто считать видео приостановленным, если обратный отсчет равен 0. Однако, оказывается, что vlc приостанавливает само видео в 0:01, заставляя меня также выдать 0:01 в качестве финала значение. Это приводит к сбою, когда пользователь запускает другое видео, в то время как перед последним кадром действительно остается одна секунда, поскольку проверка 0:01 считает его приостановленным, а это не так. Вот краткое изложение того, что происходит:

  • 0: 20 (без паузы) + кнопка воспроизведения: send ("add [filepath]");

    Fine

  • 0: 00 (пауза) + кнопка воспроизведения: отправить ( "пауза"); send ("add [filepath]");

    Fine

  • 0: 01 (пауза) + кнопка воспроизведения: отправить ( "пауза"); send ("add [filepath]");

    Fine

  • 0: 01 (без паузы) + кнопка воспроизведения: отправить ( "пауза"); send ("add [filepath]");

    Неожиданное поведение: оно не будет играть, потому что оно приостановлено, и мы не знаем об этом

Существует ли безопасный подход к состоянию игрока, чтобы не было неопределенного поведения? Я заметил, что консоль удаленного управления иногда выводит что-то, когда vlc делает паузу самостоятельно. Однако это кажется небезопасным, поскольку может выводить некоторые события, которые срабатывают до или после этого события.

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Какова гранулярность таймера обратного отсчета? Не могли бы вы сэмплировать оставшееся время дважды с разрывом, равным наименьшей поддерживаемой единице времени? Например, если это секунды, вы проверяете время, подождите секунду, а затем проверьте его снова. Если время изменилось, оно все еще играет, если оно не остановлено. Единственным недостатком является то, что он вносит задержку реагирования вашего приложения на одну секунду.

0 голосов
/ 09 июля 2012

Почему вы не мешаете игроку достигнуть 00:01? Например. если обратный отсчет = 00:02 начните дальше.

...