Синхронизация видео на двух компьютерах
Я хотел бы воспроизвести одно и то же видео на двух разных компьютерах и синхронизировать их примерно через интернет. Я хотел бы смотреть видео вместе с моим другом во время разговора по Skype. Было бы предпочтительно, чтобы если один из нас останавливает / запускает видео, он также останавливается / запускается с другой стороны.
синхронизация не должна быть второй совершенной, но видео не должно со временем расходиться. Он должен работать на Windows, и не должно быть слишком трудно настройка (т. е. мне нужно поговорить с кем-то через настройки). Оба компьютера находятся за маршрутизаторами (подключение home adsl).
существуют ли какие-либо решения для этого?
после того, как я сам искал аналогичное решение (синхронизированное воспроизведение с файлами на обоих компьютерах, без потоковой передачи или многоадресной передачи), я нашел несколько решений, большинство из которых были бесплатными, а некоторые-с открытым исходным кодом.
настольные приложения
следующие приложения должны быть установлены на обоих компьютерах, чтобы обеспечить Синхронное воспроизведение:
SyncPlay: программное обеспечение с открытым исходным кодом для синхронизации воспроизведения видео и / или аудио файлов. Тот пакеты синхронизации будут проходить через серверы SyncPlay, но программное обеспечение opensource так что вы можете сделать свой собственный мастер-сервер, если вы хотите. Кроссплатформенная и работает с несколькими различными компаниями, как mpv или VLC (П2 поддерживаемых в последний SyncPlay, раньше вам нужно было установить дополнительные VLC-syncplay плагин -- for VLC v3 есть проблема , которые будут решены в будущем). SyncPlay сам по себе довольно прост в использовании: просто запустите SyncPlay и выберите (IRC-подобный) сервер, название комнаты и файл для синхронизации, и он запустит ваш видеоплеер со всем необходимым. Затем вы можете сказать своим друзьям, чтобы выбрать тот же сервер, имя комнаты и файл для синхронизации. Полный журнал покажет действия каждого в режиме реального времени.
RiftMax Театр медиа-проигрыватель который специфически сделан для того чтобы синхронизировать воспроизведение.
театры виртуальной реальности, как VRTV бесплатно и аналогичные приложения виртуальной реальности Cardboard/Occulus: если у вас обоих есть виртуальная гарнитура, приложения "виртуальный театр" обычно предлагают синхронизированное воспроизведение через интернет с пользователями одной и той же гарнитуры.
веб-приложения
эти приложения работают в браузере, но они позволяют использовать собственные файлы:
кажется, что mplayer позволяет синхронизировать видео через сеть.
есть несколько подходов.
1) супер легко не реальная синхронизация
программное обеспечение для видеоконференций, как GoToMeeting и, Adobe Connect, Microsoft NetMeeting и др. часто имеют функции потокового видео. Orb, TVersity и т. д. и другие медиа-стримеры также могут работать, если вы играете с ними. Вам придется изучить специфику, чтобы увидеть их предложения и функции, у меня нет практического опыта реализации того, что вы ищете здесь.
то, что вы, вероятно, ищете, чтобы "mutlicast" ваше видео. Это означает использование потоковой передачи протокол как RTP, такой же сигнал будет послан к множественным получателям. Используя VLC воспроизведения видео, вы можете сделать это. Вот основное руководство, которое я гуглил очень быстро (http://www.wikihow.com/Use-Vlc-to-Stream-Audio-and-Video-to-Multiple-Computers-on-Your-Network-Using-Multicast). Не проверял, хорошо ли это, но если вы ищете "vlc mutlicast", вы должны найти другие учебники. Он также должен работать с другими видеоплеерами, выполнять поиск.
в то время как вы можете запустить IP multicast через Интернет, что может быть трудно, проблематично, и привлечь вашего провайдера. Таким образом, вы, вероятно, захотите подключиться к другому пользователю через VPN - виртуальную частную сеть. Это означает, что вы подключаетесь друг к другу, как если бы Вы были в одной локальной сети, просто виртуально. Это позволяет запускать все виды локальных/LAN только протоколы и приложения. Такие программы, как Hamachi, TeamViewer и другие, помогут вам настроить VPN. Вы также можете настроить это на системном уровне, сделать некоторые исследуйте там или google для других упакованных решений.
особенности и тестирование вашего решения, я оставляю в качестве учебной деятельности для вас. При поиске этого для вас некоторые люди отметили, что их VPN не поддерживает многоадресные протоколы или что есть проблемы с задержкой. Попробуйте этот маршрут, если вы хотите поиграть с сетевыми настройками, но использовать программное обеспечение для синхронизации или видеоконференций будет проще.
другие предложения, я не буду останавливаться на если вы действительно не хотите знать:
- загрузить видео на сайт обмена где-то и просто обратный отсчет нажать кнопку go, там могут быть возможные задержки или задержки проблемы, так как нет синхронизации.
- попробуйте использовать приложение для совместного использования экрана (я думаю, что Skype имеет плагины для нескольких зрителей), vnc и т. д. Я предполагаю, что это приведет к довольно низкому качеству.
потому что всегда будет отставание сети, я думаю, что более простой вариант для обоих чтобы у вас была локальная копия
Не так давно у меня возникла необходимость синхронизации видео на двух компьютерах. Гугление готовых решений ничего не дало, поэтому решил реализовать данный сервис своими силами. В качестве просмотрщика видео была выбрана программа 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.
Недавно столкнулся со следующей задачей: дома три компьютера и работать случается на каждом из них. При этом захотелось раз и навсегда забыть о необходимости ручной синхронизации файлов между компьютерами. Компьютер на работе также захотелось включить в процесс синхронизации. А заодно решить, как сделать синхронизацию коммуникатора независимой от конкретного компьютера.
Полученное решение описано в виде рецептов.
Синхронизируем закладки
Начну с самого простого. Для синхронизации закладок в Firefox я использую плагин Xmarks (бывший Foxmarks). Пользуюсь им давно и всем доволен. Ставится отсюда.
Синхронизируем коммуникатор
Немного подумав, я понял, что у меня есть потребность только в синхронизации календаря. Остальную информацию достаточно только бэкапить. Поэтому решение получилось очень простым — я начал использовать Google Calendar, на каждый компьютер установил Google Calendar Sync, а на коммуникатор поставил OggSync.
Google Calendar Sync скачивается отсюда.
OggSync скачивается отсюда.
Бонус | На домашних компьютерах я установил Google Calendar Sync не только под своим аккаунтом, но и под аккаунтом жены, и также настроил его на свой календарь. Теперь жена может смотреть мой календарь у себя в аутлуке и добавлять напоминалки для меня. Сразу стало проще синхронизировать наши планы. |
Синхронизируем информацию между компьютерами
А теперь о самом интересном. Итак, мне было необходимо, чтобы на всех моих компьютерах был единый набор рабочих файлов, а синхронизация происходила надежно и с минимальным моим участием. Также требуется, чтобы файлы с рабочего компьютера попадали на домашние компьютеры, но не наоборот — информация личного характера должна оставаться дома.
Вариант с синхронизацией по сети я быстро отбросил — пропускная способность маловата, да и вообще не хочется зависеть от того, подключен ли ноутбук к домашней локалке. Таким образом, остался единственный вариант — использовать внешний накопитель.
Выбираем накопитель
Накопитель должен отвечать следующим требованиям: полностью использовать пропускную способность интерфейса USB 2.0; иметь приличный объем «с запасом»; быть компактным и ударопрочным; быть недорогим.
В результате я выбрал Transcend StoreJet 25 mobile 250gb.
Шифруемся
- как и в случае с флешкой, создать один большой зашифрованный файл. Чтобы это сделать, придется сначала переформатировать накопитель в NTFS;
- создать зашифрованный раздел. Минус в том, что негде будет хранить сам TrueCrypt, придется установить его на каждый синхронизируемый компьютер;
- разбить накопитель на два раздела, на обычный раздел установить TrueCrypt, второй раздел сделать зашифрованным.
Выбираем программу для синхронизации
- корректно поддерживает многонаправленную синхронизацию;
- корректно обрабатывает удаление файлов;
- позволяет иметь несколько конфигов;
- умеет работать из командной строки;
- может работать без инсталляции;
- не была замечена в глюках.
Настраиваем структуру файлов
Тут, конечно, возможно разнообразие вариантов. Я сделал следующим образом.
На каждом домашнем компьютере у меня появилась папка «d:\roaming_home», содержащая в себе папки «apps», «books», «home», «work» и другие. На рабочем компьютере, соответственно, появилась папка «d:\roaming_work».
GoodSync был настроен таким образом, чтобы синхронизировать с накопителем папки «roaming_home» и «roaming_work» при запуске дома и синхронизировать «roaming_work» при запуске на работе.
Ставим софт
Все нужные программы, в первую очередь способные работать без инсталляции и позволяющие задавать расположение настроек, были переустановлены в папку «roaming_home\apps» (например, firefox и, в отдельной папке, профиль для него). Дистрибутивы некоторых программ, не способных работать без инсталляции, были помещены на накопитель, а сами программы — переустановлены на каждом компьютере.
GoodSync запускается с накопителя и не установлен ни на одном из компьютеров. Также дело обстоит и с TrueCrypt, только в отличие от GoodSync он находится на незашифрованной части накопителя.
Особый случай
Один из моих домашних компьютеров — планшетный нетбук, на котором я не собираюсь заниматься программированием. Кроме этого, на нем нет диска «d:». Для него я создал отдельный конфиг GoodSync, который ссылается на «c:\roaming_home», и добавил в исключения папку «roaming_home\apps\dev». Чтобы нормально работали остальные программы из «apps», диск «d:» «создается» добавленным в автозапуск батником вида:
subst d: c:\
Последние штрихи
Остается написать несколько батников. Во-первых это autostart.bat и unmount.bat, которые будут монтировать и размонтировать диск TrueCrypt. Кроме монтирования диска TrueCrypt, я добавил в autostart.bat открытие окна проводника на корневом каталоге накопителя — лежащие в этом каталоге батники будут играть роль меню.
Заходим в Computer Management->Disk Management и присваиваем накопителю букву диска «v:». В параметрах запуска TrueCrypt присваиваем зашифрованному диску букву «w:».
Исправляем autorun.inf, который сгенерировал TrueCrypt. Поскольку на многих компьютерах Autorun выключен, пишем еще два батника mount.bat и dismount.bat вида:
v:
cd v:\
call v:\autorun.bat
Эти батники кладем на рабочий стол и куда-нибудь в незашифрованную часть накопителя, чтобы были под рукой.
Пишем батники для запуска GoodSync. У меня их четыре штуки: «синхронизация дома», «синхронизация дома с нетбуком», «синхронизация на работе», «запуск GoodSync без автоматического старта синхронизации». Эти батники имеют следующий вид:
w:
cd W:\roaming-home\apps\tools\GoodSync
call goodsync.bat /miniwin sync TranscendSync-Work
Настройки для GoodSync лежат в его же каталоге, а батник для его запуска выглядит примерно так:
start GoodSync.exe /profile=data /lf=logs /check-new-ver=no /cleanup-logs=yes %*
Бонус | Благодаря установке большей части необходимых программ на накопитель, я теперь могу работать вообще на любом подходящем компьютере, не тратя время на перенос данных и настройку среды. Достаточно подключить диск и запустить синхронизацию. |
Подводим итог
- Подключил накопитель к компьютеру.
- Вызвал mount.bat с рабочего стола (или дождался срабатывания Autorun).
- Ввел пароль TrueCrypt.
- Вызвал нужный батник для синхронизации (синхронизация занимает несколько минут).
- Проверил результаты работы GoodSync.
- Поработал. Закрыл все синхронизируемые программы.
- Вызвал нужный батник для синхронизации.
- Вызвал unmount.bat.
- Закрыл окно проводника с диском v:\.
- Безопасно отключил диск и отсоединил его от компьютера.
В качестве альтернативы можно попробовать работать прямо с переносного накопителя, тогда можно будет не ждать, пока пройдет синхронизация. Или опробовать «срединный» вариант, при котором синхронизируются только те данные, для которых важна скорость обращения. С другой стороны, я часто работаю, не подключая накопитель к компьютеру. GoodSync правильно выполняет многонаправленную синхронизацию, а его интерфейс позволяет достаточно удобно обрабатывать конфликтующие изменения.
В системе дистанционного надзора (СДН), обзор которой был сделан в предыдущей статье, для управления медиапотоками используется медиасервер Kurento, позволяющий записывать потоки, где каждый поток — это отдельный файл. Проблема заключается в том, что при просмотре протокола экзамена нужно воспроизводить три потока одновременно с синхронизацией потоков по времени (веб-камера испытуемого со звуком, веб-камера проктора со звуком и рабочий стол испытуемого), причем на протяжении всего экзамена каждый поток может быть разбит на несколько фрагментов. Эта статья о том, как удалось решить данную проблему, а также организовать сохранение видеозаписей на WebDAV сервер всего одним bash-сценарием.
Медиасервер Kurento сохраняет медиапотоки в оригинальном виде, как они передаются с клиента, фактически осуществляется дамп потока в файл формата webm, используются кодеки vp8 и vorbis (также есть поддержка формата mp4). Это приводит к тому, что сохраненные файлы имеют переменное разрешение видео и переменный битрейт, т.к. WebRTC динамически меняет параметры кодирования видео- и аудиопотков в зависимости от качества каналов связи. В течении каждой сессии прокторинга клиенты могут несколько раз устанавливать связь и прерывать соединение, что приводит к появлению множества файлов для каждой камеры и экрана, а также появляется рассинхронизация во времени, если потом все эти фрагменты склеить вместе.
Для корректного воспроизведения таких видеозаписей необходимо выполнить следующие шаги:
- перекодировать все видеопотоки, указав статическое разрешение для каждой камеры (у каждой камеры свое разрешение, у всех фрагментов одной камеры одно разрешение);
- добавить недостающие фрагменты видео, чтобы компенсировать рассинхронизацию при последующем объединении фрагментов;
- склеить все фрагменты каждой камеры, чтобы получилось три видеофайла;
- объединить три видеофайла в один комплексный экран.
Каждая сессия прокторинга в СДН имеет свой уникальный идентификатор, который передается Kurento при установлении соединения между испытуемым и проктором. В рамках этой сессии создаются три потока, которые могут прерываться и возобновляться по техническим причинам или по инициативе проктора. Для именования видеофайлов, которые сохраняются Kurento, был выбран формат “timestamp_camera-session.webm” (маска в виде регулярного выражения ^4+_[a-z0-9]+-[0-9a-f].webm$), где timestamp — временная метка создания файла в миллисекундах; camera — идентификатор камеры, чтобы отличать потоки с веб-камеры испытуемого (camera1), веб-камеры проктора (camera2) и поток с картинкой рабочего стола (screen); session — идентификатор сессии прокторинга. После каждой сессии прокторинга сохраняется множество видеофрагментов, возможные варианты фрагментации видеозаписей приведены на рисунке ниже.
Числа 1-12 это некие временные метки; жирная линия — это видеофрагменты различной продолжительности; пунктирная линия — недостающие фрагменты, которые нужно добавить; пустые промежутки — интервалы времени, в которых нет никаких видеофрагментов, должны быть исключены из итоговой видеозаписи.
Выходной видеофайл представляет собой блок из трех частей, две камеры с разрешением 320x240 (4:3) и один экран с разрешением 768x480 (16:10). Исходное изображение следует масштабировать до заданного размера. Если соотношение сторон не соответствует данному формату, то уместить всё изображение в центре заданного прямоугольника, пустые области закрасить черным цветом. В итоге расположение камер должно выглядеть как на картинке ниже (синий и зеленый — веб-камеры, красный — рабочий стол).
В итоге каждая сессия прокторинга вместо множества отрывков, имеет только один видеофайл с записью всей сессии. Помимо всего прочего, выходной файл занимает меньше места, т.к. уменьшается частота кадров видео до минимального приемлемого числа 1-5 кадров/с. Получившийся файл загружается на WebDAV-сервер, куда СДН обращается за этим файлом через соответствующий интерфейс с учетом необходимых прав доступа. Протокол WebDAV достаточно распространенный, потому хранилище может быть чем угодно, для этих целей можно даже использовать Яндекс.Диск.
Реализацию всех этих функций удалось уместить в небольшой bash-сценарий, для которого дополнительно понадобятся утилиты ffmpeg и curl. Для начала нужно перекодировать видеофайлы с динамическим разрешением и битрейтом, задав необходимые параметры для каждой камеры. Функция перекодирования исходного видеофайла с заданным разрешением и числом кадров в секунду выглядит так:
Особое внимание стоит уделить scale-фильтру ffmpeg, он позволяет подогнать картинку под заданное разрешение, даже если соотношение сторон различается, заполнив образовавшееся пустое пространство черным цветом. FRAME_RATE — глобальная переменная, в которой задается частота кадров.
Далее нужна функция, которая создаст файл-заглушку для заполнения пропусков между видеофайлами:
Здесь создается видеодорожка заданного разрешения, продолжительности (в миллисекундах) и частоты кадров, а также звуковая дорожка с тишиной. Все это кодируется теме же кодеками, что и основные видеофрагменты.
Получившиеся видеофрагменты каждой камеры нужно объединить, для этого используется следующая функция (OUTPUT_DIR — глобальная переменная, содержащая путь к директории с видеофрагментами):
Также понадобится функция для определения продолжительности видеофайла в миллисекундах, здесь используется утилита ffprobe из пакета ffmpeg:
Теперь, когда есть функция перекодирования, функция создания недостающих фрагментов заданной длины, а также функция склеивания всех этих фрагментов, нужна функция синхронизации видеофрагментов с разных камер, которая будет решать какие фрагменты и какой продолжительности надо воссоздать. Алгоритм следующий:
- Получить список файлов с видеофрагментами, отсортированный с учетом их временной метки, которая составляет первую часть имени файла.
- Просмотреть список сверху вниз, попутно создавая другой список вида “отметка_времени: флаг: имя_файла”. Суть этого списка — отметить все точки начала и окончания каждого видеофайла (см. картинку с иллюстрацией фрагментации видеозаписей). Для нашего примера это будет следующий список:
- Полученный список дополнить записями с нулевой продолжительностью (одинаковыми отметками времени) для первого и последнего файла исходного списка видеофрагментов. Это понадобится на этапе расчета недостающих промежуточных видеофрагментов.
- Дополнить полученный список записями, которые соответствуют началу и окончанию фрагментов, когда нет видео ни с одной из камер. В нашем примере это будут записи “6:1. ” и “7:-1. ”.
- Полученный список разбить на три части, получаем для каждой камеры свой список. Пройтись по каждому списку и инвертировать его, т.е. вместо списка существующих фрагментов должен получиться список недостающих фрагментов.
- Преобразовать полученный список к формату “отметка_времени: продолжительность: имя_файла”, чтобы на основе него можно было создать недостающие видеофрагменты.
После того, как воссозданы недостающие видеофрагменты, можно приступить к их объединению. Для этого понадобится следующая функция, которая объединяет все видеофайлы одной группы (т.е. с одним идентификатором камеры):
Теперь, когда есть все три видеофайла, синхронизированные по времени, их нужно объединить в один комплексный экран, расположив эти файлы в нужных частях комплексного экрана:
Здесь с помощью фильтра ffmpeg создается пустая область черного цвета (pad), затем на ней размещаются в заданном порядке камеры. Звук с первых двух камер микшируется.
После обработки видео и получения выходного файла, закачаем его на сервер (глобальные переменные STORAGE_URL, STORAGE_USER и STORAGE_PASS содержат адрес сервера WebDAV, имя пользователя и пароль к нему соответственно):
Полный код рассмотренного сценария выложен на GitHub.
Для проверки работы алгоритма можно использовать следующий генератор, который создает видеофрагмены из рассмотренного примера:
В итоге задача решена, получившийся сценарий можно разместить на сервере Kurento и запускать его по расписанию. После успешной загрузки созданных видеофайлов на WebDAV-сервер можно удалять исходные файлы, таким образом осуществляется архивирование видео для последующего просмотра в удобочитаемом виде.
С мотреть фильмы с друзьями лучше всего вместе, собравшись в реале, но можно это делать и в виртуальном пространстве, предварительно договорившись через Skype или социальную сеть. Есть только одна загвоздка: как заставить или убедить всех не перематывать и не стопить видео? Да и запустить воспроизведение все должны одновременно, иначе в итоге получится полная неразбериха и интерес к просмотру у всех просто пропадёт.
В такой ситуации может выручить Syncplay — программа для синхронизации удалённого управления воспроизведением мультимедиа. Суть работы программы заключается в следующем: все проигрыватели на локальных компьютерах подключаются к одному серверу, который берёт на себя управление функциями перемотки, воспроизведения и паузы.
Сервером же может служить любой десктопный компьютер, нужно только определиться, кто из пользователей будет выполнять задачи оператора. Кроме этого, участники просмотра могут подключаться к публичному серверу, предлагаемому Syncplay, что намного удобнее и проще.
В настоящее время приложение работает с четырьмя плеерами: VLC, MPC-HC, mpv и mplayer2, правда, не всегда корректно. В VLC, например, программа может потребовать установки дополнительного скрипта. Но несмотря на определённые нюансы, могущие вызвать трудности в настройке, в целом работать с Syncplay довольно просто.
Интерфейс приложения имеет лёгкий, удобный и полностью русифицированный. По большому счёту пользователю нужно выбрать сервер, придумать название комнаты, задать путь к плееру и воспроизводимому файлу. Логин и пароль указывается по желанию.
В процессе воспроизведения все действия участников просмотра отображаются в специальной текстовой форме. Дополнительные параметры поведения программы при отключении участника сеанса или опережении/отставании воспроизведения можно задать в настройках. В следующих версиях разработчики обещают добавить чат, что явно не помешало бы, но лучше было если бы они устранили все мелкие недостатки, а также сделали процедуру настройки сервера более понятной.
Загрузить синхронизатор плееров можно с официального сайта syncplay.pl. распространяется программа на бесплатной основе в виде обычной и портативной редакциях. Помимо версии для Windows, предусмотрены редакции для Linux и Mac.
Читайте также: