Извините за длину этого ответа - он представляет собой несколько недель исследований методом проб и ошибок. Боюсь, детали могут иметь значение, поэтому я предоставил больше, чем меньше. Он ориентирован на обмен аудио
Как и другие участники этой темы, мне было интересно, чтобы синхронизированный звук распространялся по всему дому с местами, где акустическая среда перекрывается. Поскольку звук распространяется со скоростью около фута / миллисекунды, для этого требуется синхронизация на уровне примерно 10 секунд миллисекунды. Я нашел способ заставить это работать с VLC и заставить его оставаться в синхронизации часами без блужданий. Хотя я признаю, что посмотрел на исходный код VLC, чтобы попытаться понять, какие часы используются, я не претендую на то, чтобы понять, что там происходит. Кроме того, многое из того, что я сделал, было эмпирическим. Таким образом, если люди, которые действительно понимают VLC, предлагают разъяснения о лучшем способе сделать это, я наиболее восприимчив. С этими предостережениями, вот что я сделал, похоже, работает.
конфигурация
У меня есть четыре области, где я хотел бы поделиться аудио и коллекцией компьютеров различных винтажей, которые я готов посвятить аудио. Некоторые из этих машин работают под управлением Linux (Ubuntu 12.04), а другие - под Windows. В целом синхронизировать блоки Linux было проще, чем блоки Windows, но это было возможно.
На компьютерах с Linux необходимо было обновить драйверы pulseaudio с помощью ppa:ubuntu-audio-dev/ppa, чтобы получить версию с низкой задержкой. В остальном конфигурация была ванильной. VLC пожаловался на задержку без этого обновления. Я надеюсь, что когда мы получим 14.04, эта проблема исчезнет.
На Windows-боксах я работаю под управлением Windows 7 Pro.
Звук подается от VLC, Linux-бокса, который не зависит от машин воспроизведения. Это просто вниз по течению от брандмауэра, где сеть входит в дом.
Сеть представляет собой смесь гигабитных проводных и беспроводных сетей (802.11g).
Вещи, которые могут не иметь значения
Поскольку я гайка времени, все машины связаны во времени на уровне менее миллисекунды с помощью NTP. На Linux-боксах это тривиально. В окне windows я использую реализацию Meinberg для ntp (находится по адресу http://www.meinbergglobal.com/english/sw/ntp.htm). Блок, который обслуживает аудио, синхронизируется с обычными внешними серверами времени. , Тем не менее, устройства воспроизведения синхронизируются исключительно с аудиосервером и внимательно следят за ним. Строка из файла ntp.config на машинах воспроизведения, которая делает это,
server 10.17.0.12 iburst burst minpoll 4 maxpoll 4 prefer
Это гарантирует, что проверка времени выполняется каждые 16 секунд - очевидно, меня не беспокоит сетевой трафик.
сервер
Сервер настроен на мониторинг потока PulseAudio, так что все, что я играю на сервере, будет передано в выходной поток.
Выходной поток является потоком RTSP, обслуживающим два канала с частотой 44,1 кГц. Опять же, есть некоторые вещи, которые я мог бы сделать, чтобы сохранить пропускную способность, но меня больше интересует правильная синхронизация, чем минимизация пропускной способности.
В настройках (в разделе Инструменты)
В разделе "Простые настройки" - "Аудио" - убедитесь, что включен режим "Растягивание по времени".
Для остальных настроек нажмите "Все" внизу страницы настроек.
Разрешить приоритет в реальном времени
- Синхронизация сети - проверьте главные часы сети и укажите IP-адрес главного сервера (в моем случае это устройство)
- Аудио - включить высококачественную передискретизацию звука и установить флажок Включить время растяжения звука
- Ввод / Кодеки - этот, кажется, имеет наибольшее значение - прокрутите вниз до нижней части страницы
- Установите сетевое кэширование на 300 мс - вам может потребоваться изменить это в зависимости от скорости и конкуренции ваших машин - на моем 300 достаточно
- Счетчик среднего значения часов - я обнаружил, что 1000 работал хорошо - это, кажется, влияет на то, как быстро синхронизация следует за небольшими изменениями во времени
- Включить синхронизацию часов
- Джиттер часов - 30 мс работает на моих системах
- Проверьте синхронизацию сети
- Я предоставил имена файлов для каталога Record и Timeshift - я не знаю, имеет ли это значение
- Детализация временного сдвига - я установил 1000, опять же, я не уверен, что это имеет значение.
клиенты
Настройте клиенты для воспроизведения потока, который обеспечивает ваш сервер.
Клиенты настроены так, чтобы соответствовать мастеру с несколькими исключениями - здесь я перечислю только различия
Windows- Настройки
- Повысить приоритет процесса
- Установите источник часов на Системное время (Опасно!) - я пробовал другие настройки, и они имеют тенденцию дрейфовать. Это, кажется, работает хорошо, пока NTP делает свою работу. Когда я выключаю NTP, все начинает дрейфовать. Из исходного кода видно, что эта опция использует
GetSystemTimePreciseAsFileTime ()
- в современных системах это субмикросекундный таймер и, по-видимому, часы, которыми управляет NTP. Я уверен, что есть причина, по которой он помечен как «Опасный», поэтому используйте его на свой страх и риск - похоже, он мне подходит.
- В синхронизации по сети - не проверять главные часы сети (в конце концов, это клиент). Укажите IP-адрес ваших главных часов.
В остальном все так же, как на мастере.
Linux -
предпочтения
- У вас нет выбора по часам - вам нужно предоставить IP-адрес мастера так же, как вы делаете это для Windows.
Предостережения
Сказав все вышесказанное, кажется, что все настроенные мной клиенты Linux работают хорошо - даже очень старый нетбук с очень маленькой мощностью.
Windows это отдельная история. Я попробовал два бокса с процессорами i7 - они относительно новые и быстрые. Один, ноутбук Lenovo, работает по рецепту выше. Другой, Shuttle Box, работал в определенной степени, но через несколько часов начинал дрейфовать. Я наконец сдался и установил двойную загрузку с Ubuntu. Как только я это сделал, все просто заработало. Хотя я убежден, что Windows можно заставить работать, поскольку у меня есть доказательства существования, Linux, похоже, ближе к надежному решению. Теперь у меня есть три блока с клиентом Linux, и все они работают безупречно и синхронизируются в течение многих часов без необходимости перезапуска клиента VLC.