Давным давно сделал себе пульт управления проигрыванием видео в виде приложения для мобильного телефона. Ведь это так приятно — лёжа на диване, прибавлять звук на компьютере или ставить фильм на паузу. Приложение было написано в режиме классического ночного безумия одним набегом.
Я пользуюсь дома замечательным видеоплеером VLC, чего и вам советую. Он отлично подходит для удалённого управления, поскольку имеет встроенный веб-интерфейс.
Приложение на GitHub diy-remote |
Релизы брать тут: https://github.com/jreznot/diy-remote/releases
Для работы вам потребуется:
- Wi-Fi сеть
- Запущенный сервер на вашем компьютере
- Настроенный веб-интерфейс в VLC
- Android приложение на телефоне
Пробуем
Запуск сервера:
- Распаковываем скрипты в каталог ~/.diy-remote/scripts
- Запускаем приложение
> diy-remote -port 9595
Находим приложение на телефоне:
- Вводим адрес компьютера в сети и порт сервера
- На главном окне тыкаем кнопку подключения
- Видим наши долгожданные кнопочки пульта
![]() |
![]() |
![]() |
Технологии
Внутри такой клубок технологий:
- Java — основной код проекта
- Spring Web MVC — сервис с общением в виде JSON
- Jetty — встроенный веб-сервер
- Groovy — скрипты действий
- Android — приложение на Java для телефона
Удалённое управление я постарался реализовать универсально, без специфики управления видеоплеером. Сервер удалённого управления выполняет команды от клиента при помощи скриптов на Groovy, в которых и реализована логика. В итоге у меня получился набор скриптов для управления VLC и пара скриптов для ОС Windows, например: выключение компьютера.
Приложение будет полезно также тем, кто интересуется Java и Spring, его можно использовать в качестве заготовки или прототипа. Приятная особенность: можно запускать отладку всего приложения прямо из IDE, поскольку Jetty встроен и не требует деплоймента. Достаточно запустить Main класс как обычное Java приложение!
Про встраивание Jetty можно прочитать тут: https://strangeway.org/?p=848
Подборка действий веб-интерфейса VLC:
play / pause | /requests/status.xml?command=pl_pause |
next | /requests/status.xml?command=pl_next |
previous | /requests/status.xml?command=pl_previous |
status | /requests/status.xml |
stop | /requests/status.xml?command=pl_stop |
volume | /requests/status.xml?command=volume&val=${volumeValue} |
fullscreen | /requests/status.xml?command=fullscreen |