Не так давно у меня возникла необходимость синхронизации видео на двух компьютерах. Гугление готовых решений ничего не дало, поэтому решил реализовать данный сервис своими силами. В качестве просмотрщика видео была выбрана программа VLC. Решил поделиться результатами труда и с вами. Думаю, что найдутся люди, кому эта программа будет полезна.
Программа состоит из двух частей: клиентской и серверной. Серверная часть запускается на одном из компьютеров и играет роль эхо-сервера с небольшой особенностью: сообщения, полученные от одного из клиентов, отправляются всем подключенным клиентам, кроме его самого. Клиентская часть, в свою очередь, запускается на каждом компьютере с работающим vlc плеером и осуществляет управление работой vlc с одной стороны и общение с сервером с другой. Если на одном из компьютеров пользователь нажимает на паузу, клиентская часть обрабатывает это событие и тут же отправляет на сервер. Сервер передаёт это событие всем остальным клиентам и на остальных компьютерах воспроизведение тоже останавливается. Аналогичный процесс происходит во время запуска на воспроизведение или перемотки.
Также к серверу можно присоединиться и с помощью обычного telnet клиента и управлять воспроизведением с помощью консоли, посылая те или иные команды на сервер. Команды следующие:
1. pause – приостанавливает воспроизведение
2. start – запускает воспроизведение с текущего момента
3. seek — изменяет текущую позицию на N миллисекунд от начала (пример: seek 60000)
4. play — запускает воспроизведение, начиная с позиции N миллисекунд от начала.
Для работы программ необходима операционная система семейства Linux или же Cygwin под Windows с установленными библиотеками glib-2.0 и dbus-glib-1.
Да очень просто:
./server 0.0.0.0 9888
./client 192.168.0.5 9888
Где 0.0.0.0 – адрес сетевого интерфейса (в данном случае все интерфейсы), на котором будет запущен сервер, 192.168.0.5 – адрес сервера, 9888 – порт (может быть указан любой другой, но один и тот же). Любое из приложений может быть штатно остановлено с помощью комбинации Ctrl+C. Если по каким-то причинам программа-клиент не запускается, проверьте, запущен ли сервер (а также правильность его адреса) и vlc плеер. Если всё запустилось, можете смело открывать нужную видеозапись на компьютерах и жать на play на каком-либо их них.
Также в vlc необходимо включить возможность управления через d-bus. Это делается здесь: Инструменты -> настройки -> показывать настройки: все -> интерфейс -> элементы управления -> галочка на «интерфейс управления d-bus». Возможно, потребуется перезапуск vlc.
Скачать исходный код можно здесь, скомпилированную версию здесь.
Зачем она нужна?
- Вы хотите посмотреть фильм с друзьями/знакомыми вместе, но ехать друг к другу или в кинотеатр лень.
- Необходимо вывести одно и то же видео на нескольких мониторах, подключенных к разным компьютерам.
- Необходимо управлять воспроизведением видео удалённо.
Как это работает?
Программа состоит из двух частей: клиентской и серверной. Серверная часть запускается на одном из компьютеров и играет роль эхо-сервера с небольшой особенностью: сообщения, полученные от одного из клиентов, отправляются всем подключенным клиентам, кроме его самого. Клиентская часть, в свою очередь, запускается на каждом компьютере с работающим vlc плеером и осуществляет управление работой vlc с одной стороны и общение с сервером с другой. Если на одном из компьютеров пользователь нажимает на паузу, клиентская часть обрабатывает это событие и тут же отправляет на сервер. Сервер передаёт это событие всем остальным клиентам и на остальных компьютерах воспроизведение тоже останавливается. Аналогичный процесс происходит во время запуска на воспроизведение или перемотки.
Также к серверу можно присоединиться и с помощью обычного telnet клиента и управлять воспроизведением с помощью консоли, посылая те или иные команды на сервер. Команды следующие:
1. pause – приостанавливает воспроизведение
2. start – запускает воспроизведение с текущего момента
3. seek — изменяет текущую позицию на N миллисекунд от начала (пример: seek 60000)
4. play — запускает воспроизведение, начиная с позиции N миллисекунд от начала.
Для работы программ необходима операционная система семейства Linux или же Cygwin под Windows с установленными библиотеками glib-2.0 и dbus-glib-1.
Как запустить?
Да очень просто:
./server 0.0.0.0 9888
./client 192.168.0.5 9888
Где 0.0.0.0 – адрес сетевого интерфейса (в данном случае все интерфейсы), на котором будет запущен сервер, 192.168.0.5 – адрес сервера, 9888 – порт (может быть указан любой другой, но один и тот же). Любое из приложений может быть штатно остановлено с помощью комбинации Ctrl+C. Если по каким-то причинам программа-клиент не запускается, проверьте, запущен ли сервер (а также правильность его адреса) и vlc плеер. Если всё запустилось, можете смело открывать нужную видеозапись на компьютерах и жать на play на каком-либо их них.
Также в vlc необходимо включить возможность управления через d-bus. Это делается здесь: Инструменты -> настройки -> показывать настройки: все -> интерфейс -> элементы управления -> галочка на «интерфейс управления d-bus». Возможно, потребуется перезапуск vlc.
Скачать исходный код можно здесь, скомпилированную версию здесь.