Przepraszamy za długość tej odpowiedzi - reprezentuje ona kilka tygodni badań metodą prób i błędów. Obawiam się, że szczegóły mogą mieć znaczenie, więc podałem więcej niż mniej. Koncentruje się na udostępnianiu dźwięku
Podobnie jak inni w tym wątku, byłem zainteresowany synchronizacją dźwięku w całym domu z przestrzeniami, w których środowiska akustyczne pokrywają się. Ponieważ dźwięk przemieszcza się z prędkością około stopy / milisekundy, wymaga to synchronizacji na poziomie około 10s poziomu milisekundy. Znalazłem sposób na to, aby ta praca działała z VLC i pozwalała na synchronizację przez wiele godzin bez wędrowania. Chociaż przyznam, że sprawdziłem kod źródłowy VLC, aby spróbować zrozumieć, które zegary są używane, nie udaję, że rozumiem, co się tam dzieje. Co więcej, wiele z tego, co zrobiłem, było empiryczne. Tak więc, jeśli ludzie, którzy naprawdę rozumieją VLC, oferują wyjaśnienie lepszego sposobu na zrobienie tego, jestem najbardziej otwarty. Z tymi przeszkodami na drodze, oto co zrobiłem, co wydaje się działać.
Konfiguracja
Mam cztery obszary, w których chciałbym dzielić się dźwiękiem i kolekcję komputerów z różnych roczników, które chcę poświęcić, aby zapewnić dźwięk. Niektóre z tych maszyn działają pod Linuksem (Ubuntu 12.04), podczas gdy inne z systemem Windows. Ogólnie rzecz biorąc, łatwiej było zsynchronizować urządzenia z systemem Linux niż urządzenia z systemem Windows, ale było to możliwe.
W systemach Linux konieczna była aktualizacja sterowników pulseaudio przy użyciu ppa: ubuntu-audio-dev / ppa, aby uzyskać wersję o niskim opóźnieniu. W przeciwnym razie konfiguracja była waniliowa. VLC skarżyło się na opóźnienia bez tej aktualizacji. Mam nadzieję, że kiedy otrzymamy 14.04, problem ten zniknie.
W pudełkach Windows używam Windows 7 Pro.
Dźwięk jest dostarczany z VLC Linux-a, który jest niezależny od odtwarzaczy. Jest tuż za firewallem, w którym sieć wchodzi do domu.
Sieć to połączenie gigabitowego przewodowego i bezprzewodowego (802.11g).
Rzeczy, które mogą nie mieć znaczenia
Ponieważ jestem wariatem czasu, wszystkie maszyny są zablokowane razem na poziomie poniżej milisekundy za pomocą NTP. W przypadku Linux-a jest to banalne. W oknie systemu Windows korzystam z implementacji ntp Meinberga (znalezionej pod adresem http://www.meinbergglobal.com/english/sw/ntp.htm ). Pole obsługujące dźwięk jest synchronizowane z normalnymi zewnętrznymi serwerami czasu . Jednak urządzenia odtwarzające synchronizują czas wyłącznie z serwerem audio i ściśle go śledzą. Linia z pliku ntp.config na urządzeniach odtwarzających, która to robi, jest
server 10.17.0.12 iburst burst minpoll 4 maxpoll 4 prefer
To gwarantuje, że kontrole czasu są wykonywane co 16 sekund - oczywiście nie martwię się o ruch w sieci.
serwer
Serwer jest skonfigurowany do monitorowania strumienia PulseAudio, dzięki czemu wszystko, co gram na serwerze, zostanie przekazane do strumienia wyjściowego.
Strumień wyjściowy jest strumieniem rtsp obsługującym dwa kanały przy 44,1 kHz. Znowu zapewne są rzeczy, które mógłbym zrobić, aby zaoszczędzić przepustowość, ale bardziej interesuje mnie poprawna synchronizacja niż minimalizacja przepustowości.
W Preferencjach (w Narzędziach)
W ustawieniach Prostych Audio - upewnij się, że dźwięk rozciągania w czasie jest włączony
W przypadku pozostałych ustawień kliknij „Wszystkie” u dołu strony Preferencji
Zezwalaj na priorytet w czasie rzeczywistym
- Synchronizacja sieci - sprawdź Zegar główny sieci i podaj adres IP serwera głównego (w tym przypadku to urządzenie)
- Audio - włącz Wysokiej jakości próbkowanie dźwięku i zaznacz opcję Włącz rozciąganie dźwięku
- Input / Codecs - ten wydaje się mieć największe znaczenie - przewiń w dół do dolnej części strony
- Ustaw buforowanie sieci na 300ms - być może będziesz musiał to zmienić w zależności od prędkości i rywalizacji twoich maszyn - na moim 300 wystarczy
- Średni licznik referencyjny zegara - stwierdziłem, że 1000 działało dobrze - wydaje się to wpływać na szybkość synchronizacji po małych zmianach w czasie
- Włącz synchronizację zegara
- Jitter zegara - 30 ms działa na moich systemach
- Sprawdź synchronizację sieci
- Podałem nazwy plików dla katalogu Record i katalogu Timeshift - nie wiem, czy to ma znaczenie
- Granulacja przesunięcia w czasie - ustawiłem na 1000, ponownie, nie jestem pewien, czy to ma znaczenie.
Klienci
Skonfiguruj klientów do odtwarzania strumienia dostarczanego przez serwer.
Klienci są skonfigurowani tak, aby pasować do wzorca z kilkoma wyjątkami - tutaj wymienię tylko różnice
Preferencje systemu Windows
- Zwiększ priorytet procesu
- Ustaw źródło zegara na Czas systemowy (Niebezpieczne!) - Wypróbowałem inne ustawienia i mają tendencję do dryfowania. To wydaje się działać dobrze, dopóki NTP wykonuje swoją pracę. Kiedy wyłączam NTP, rzeczy zaczynają dryfować. Patrząc na kod źródłowy, wydaje się, że ta opcja wykorzystuje
GetSystemTimePreciseAsFileTime ()
- w nowoczesnych systemach jest to zegar poniżej mikrosekundy i wydaje się być zegarem zarządzanym przez NTP. Jestem pewien, że istnieje powód, dla którego jest oznaczony jako Niebezpieczny, więc używaj go na własne ryzyko - wydaje się, że działa dla mnie.
- W synchronizacji sieci - nie sprawdzaj głównego zegara sieciowego (w końcu jest to klient) Podaj adres IP swojego głównego zegara.
W przeciwnym razie wszystko jest takie samo jak na kapitanie.
Linux -
Preferencje
- Nie masz wyboru zegara - musisz podać adres IP urządzenia nadrzędnego, tak jak w przypadku systemu Windows.
Ostrzeżenia
Powiedziawszy to wszystko, wszystkie skonfigurowane przeze mnie klienty Linuksa działają dobrze - nawet bardzo zabytkowy netbook o bardzo małej mocy.
Windows to inna historia. Wypróbowałem dwa urządzenia, oba z procesorami i7 - są stosunkowo nowe i szybkie. Po pierwsze, laptop Lenovo, działa z powyższym przepisem. Drugi, Shuttle Box, działał do pewnego stopnia, ale po kilku godzinach zaczął dryfować. W końcu poddałem się i ustawiłem na podwójne uruchamianie z Ubuntu. Gdy to zrobiłem, wszystko po prostu działało. Chociaż jestem przekonany, że Windows można uruchomić, ponieważ mam dowód na istnienie, Linux wydaje się być bliżej niezawodnego rozwiązania. Mam teraz trzy urządzenia klienckie z systemem Linux i wszystkie one działają bezbłędnie i synchronizują się w wielogodzinnych skalach czasowych bez konieczności ponownego uruchamiania klienta VLC.