Synchronizuj odtwarzacze VLC na dwóch komputerach


15

Czy można zsynchronizować odtwarzanie VLC na dwóch różnych komputerach? Chciałbym, aby dwa komputery w różnych częściach domu odtwarzały ten sam film - więc wszelkie inne sugestie, które mogłyby rozwiązać ten problem, również są mile widziane!

Odpowiedzi:


9

Używam multiemisji. To wysyła jeden strumień do wszystkich odbiorników jednocześnie.

Sieć ma segmenty przewodowe i Wi-Fi.

W przypadku multiemisji strumień używa tylko raz przepustowości w każdym segmencie

Oznacza to również, że wszystkie komputery otrzymują ten sam pakiet mniej więcej w tym samym czasie, mniej opóźnień propagacji przez moje przełączniki. Opóźnienia propagacji są nieistotne dla dźwięku i widzialnego wideo (30 klatek na sekundę).

Jedyne, co może się zdarzyć, to to, że różne komputery działają w różnych miejscach w pamięci podręcznej sieci. Aby trzymać je jak najbliżej, odrzuciłem buforowanie, dopóki najwolniejszy system (32-bitowy laptop z Wi-Fi) nie zacznie się czasami wyłączać, a potem daję mu trochę więcej.

Powód: kiedy VLC zacznie jeść bufor, powrót do początku bufora zajmuje dużo czasu, wydaje się, że kodowanie nie ma priorytetu, aby powrócić do „bufora zerowego”, ale wygodnie tam pozostać.

Używam również na „serwerze” dwóch klientów VLC: jeden generuje strumień i nie wyświetla lokalnie. Drugim jest klient wyświetlający, który nasłuchuje strumienia, tak jak wszystkie inne systemy, z tym samym ustawieniem pamięci podręcznej sieci.

W wierszu poleceń:

klient generujący strumień, który łączy się ze strumieniem internetowym (ten ma dużą pamięć podręczną, aby się nie odcinał i zapewnia ciągły strumień do mojej sieci multiemisji):

vlc -vvv http://yp.shoutcast.com/sbin/tunein-station.pls?id=154 --sout udp:239.0.0.1 --no-sout-display --sout-keep --ttl 4 (który powinien znajdować się w jednej linii)

Jak widać, podano --no-sout-display: generowany jest strumień wyjściowy, ale nie ma lokalnego sygnału wyjściowego. Robię to samo, bez względu na to, czy odtwarzam lokalne pliki / DVD lub zawartość sieci.

I upewnij się, że masz opcję --ttl ustawioną na> 1, jeśli gdzieś masz router bezprzewodowy. Zawsze ustawiam na 4, aby nie dostawać „niespodzianek”. Jeśli jednak masz sieć z wieloma routerami, a hosty w jednej sieci nie widzą multiemisji, może być konieczne zwiększenie ttl o jeden lub dwa (lub sprawdzenie, czy router w ogóle nie przepuszcza multiemisji, nie wszystkie routery bezprzewodowe są ustaw na to domyślnie).

W każdym systemie, w tym w tym, który generuje strumień i ma uruchomioną nie-wyjściową wersję VLC, mam następującą wersję VLC:

vlc udp://@239.0.0.1 --network-caching 60 --sout-keep

To ustawia buforowanie sieciowe w mojej sieci i wydajność najwolniejszego systemu na maks. Pamięć podręczna o wartości 0,06 sekundy.

W przypadku dźwięku odpowiada to odległości propagacji do około 100 stóp, co oznacza, że ​​jeśli pamięć podręczna zostanie zjedzona na maksimum, wówczas wolny system brzmi, jakby był oddalony o 100 stóp.

Moje opóźnienie sieci wynosi 0,5 ms lub więcej (nie ping, jest to wycieczka w obie strony o niskim priorytecie i kilka ms).

W moim miejscu, gdzie nigdy nie widzę ani nie słyszę jednocześnie dwóch systemów, które są oddalone od siebie o więcej niż 100 stóp (nie wysadzam na górze i piwnicy, zaletą robienia tego w ten sposób jest wszędzie to samo, bez wysadzania wzmacniacza w salonie).

Laptop w sypialni: jeśli zbyt często się wyłącza, po prostu podkręcam jego pamięć podręczną lokalnie, nie słyszę jej w piwnicy ani na górze, a kiedy tam jestem, prawdopodobnie wyłączam pozostałe :-).

Bardzo ważne: ilekroć potrzebuję transkodowania, mam wszystkie odbiorniki na tym samym protokole i kodowaniu, i wykonuję transkodowanie na niewydajającym VLC generującym strumień.

Nie transkoduję na klientach multiemisji. Spowodowałoby to poważne opóźnienia, ponieważ każdy system ma inną wydajność.

W tym przykładzie audio w ogóle nie ma transkodowania, wszyscy mogą zrozumieć kodowanie pochodzące z wiadomości typu shoutcast. (właściwie nie muszę transkodować vidów, aby ... vid wszystkie mają pełne zestawy kodeków).

czy to pomaga?

Tak, w sieci są przykłady wykonywania zsynchronizowanego vlc przy użyciu --net / masterwork-synization master / client i wielu strumieni emisji pojedynczej (ciąg docelowy o długości 10 mil na serwerze :-D).

Jednak: przesyłanie strumieniowe emisji pojedynczej do n klientów w segmencie powoduje, że strumień pojawia się n razy w tym segmencie, a im wyżej przechodzisz w kierunku serwera źródłowego, tym więcej krotności tego samego strumienia zjada przepustowość. Nie byłbym w stanie zobaczyć mojego wideo 1080p. Mój bezprzewodowy z trudem radzi sobie z jednym z nich, nie zawsze (56 Mb).

Och, pytasz jak w GUI:

w oknie przesyłania strumieniowego kliknij „więcej opcji” i usuń zaznaczenie „odtwarzaj lokalnie” dla instancji vlc, która generuje strumień (ma jako dane wejściowe plik lokalny, listę odtwarzania lub strumień internetowy). Pozostaw buforowanie w ustawieniu domyślnym (pamięć podręczna o wartości 1000 ms). Jeśli którykolwiek z pozostałych klientów nie może zrozumieć twojego kodeka, zdecyduj się na taki, który wszyscy rozumieją i transkoduj do tego w tym samym systemie.

W opcjach miejsc docelowych pozostaw domyślną opcję „wyświetl lokalnie” i zmień buforowanie: baw się tym (zacznij od 100 i wyłącz go), aż do wyłączenia najwolniejszego systemu, a następnie ustaw wszystkie szybsze systemy na takie same. Z krótkimi buforami: kiedy klient się uruchamia, zajmuje około 10 do 15 sekund rozpylania, aż „dostanie”.

Moi klienci działają przez 100% czasu, ilekroć przestanę streamować, po prostu słuchają adresu multiemisji.

Nie podano portu: domyślnie jest to 1234, uruchamiam jeden serwer źródłowy. Jeśli korzystasz z więcej niż jednego, musisz podać numer portu w następujący sposób: ... 239.0.0.1:65535. Moje przykładowe numery: wybierz dowolny adres multiemisji w 239/8. Porty: wybierz dowolną powyżej 1024 (tak, 1024, ponieważ Microsoft używa 1024 również na MC).

Jeśli nikt nie nasłuchuje, strumień w ogóle nie pojawia się w sieci, rozpoczyna się dopiero po dołączeniu pierwszego detektora do sesji multiemisji. Więc jeśli masz dziesięć zdefiniowanych i słuchasz tylko jednego, to masz jeden strumień jedzenia pasma. Jeśli słuchasz różnych strumieni, dostajesz n razy przepustowość zjedzoną dla n strumieni.

Multicast: używana przepustowość jest taka sama dla jednego lub 10000 klientów na strumień.

Korzystanie z emisji pojedynczej: każdy klient przeskakuje w strumieniu nadawcy w innym czasie, co oznacza, że ​​Twoje opóźnienia są nadal obecne, nawet jeśli ograniczysz buforowanie. Unicast i multicast działają zupełnie inaczej. Dlatego unicast ma funkcję synchronizacji.

Istnieje inny sposób, jeśli przesyłasz to samo, aby powiedzieć cały sklep docelowy: wtedy przesyłałeś strumieniowo emisję pojedynczą z synchronizacją do klientów satelitarnych vlc i obsługiwałbyś tych, którzy znajdują się w „zasięgu akustycznym”. W biurach wykonuję jeden lub dwa na każde piętro, więc wszystkie piętra są ściśle zsynchronizowane przy użyciu emisji pojedynczej i synchronizacji sieci. W podłodze zwykle opóźnienie propagacji sieci jest znacznie krótsze niż opóźnienie akustyczne, a akustyka jest zmniejszona, więc nie słyszysz wszystkich głośników, ale tylko te w pobliżu.

napisz do mnie na sirhelpsalot@gmail.com, jeśli potrzebujesz pomocy, mogę umieścić to również na youtube.

:-)


3
Witamy w SuperUser i dziękuję za pomoc! Czy możesz nieco skrócić swoją odpowiedź, usuwając niepotrzebny komentarz? Obecnie jest to prawdziwa ściana tekstu, a faktyczna odpowiedź jest trudna do zrozumienia.
Indrek

1
Jaka jest niezawodność przesyłania strumieniowego / multiemisji w celu synchronizacji wideo? Jeśli mam sześciokątny pulpit z VLC i Raspberry Pi z Omxplayerem, to jaką mam gwarancję, że Omxplayer nie zajmie 3 s, aby otworzyć strumień?
puk

4

VLC może przesyłać strumieniowo dane wyjściowe przez sieć, a także odtwarzać je lokalnie, więc sugerowałbym, że masz jedną maszynę przesyłającą dane wyjściowe przez sieć, ale zaznacz opcję „wyświetlaj lokalnie” w zakładce „miejsca docelowe”.

Oto krótki opis ustawień używanych do przesyłania strumieniowego.


1

Wykorzystanie VLC do (lub robi, dokumentacja nigdy nie jest aktualizowana) ma moduł o nazwie netsync, ale jak większość niezwykłych modułów VLC, jest wadliwy, ledwo udokumentowany i zaniedbany. Nigdy nie udało mi się tego uruchomić.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.