Synchronisieren Sie VLC-Player auf zwei Computern

15

Ist es möglich, die Wiedergabe von VLC auf zwei verschiedenen Computern zu synchronisieren? Ich möchte, dass zwei PCs in verschiedenen Teilen des Hauses dasselbe Video abspielen - daher sind auch andere Vorschläge zur Lösung dieses Problems willkommen!

Kugelfisch
quelle

Antworten:

9

Ich benutze Multicast. Dadurch wird ein Stream gleichzeitig an alle Empfänger gesendet.

Das Netzwerk verfügt über Kabel- und WLAN-Segmente.

Bei Multicast verwendet der Stream nur einmal seine Bandbreite in jedem Segment

Das bedeutet auch, dass alle Computer ungefähr zur gleichen Zeit dasselbe Paket empfangen und weniger Verzögerungen bei der Übertragung über meine Switches auftreten. Die Ausbreitungsverzögerungen sind für Ton und für vom Menschen sichtbares Video (30 fps) vernachlässigbar.

Das Einzige, was passieren kann, ist, dass verschiedene Computer an verschiedenen Stellen im Netzwerkcache arbeiten. Um sie so nah wie möglich zu halten, habe ich das Caching heruntergefahren, bis das langsamste System (ein 32-Bit-Laptop mit WLAN) manchmal ausfällt, und dann etwas mehr.

Grund: Sobald vlc beginnt, Puffer zu essen, dauert es lange, bis der Anfang des Puffers wiederhergestellt ist. Es scheint, dass die Codierung keine Priorität hat, um wieder auf "Null-Puffer" zurückzugelangen, es jedoch angenehm ist, dort oben zu bleiben.

Ich benutze auch auf dem "Server" zwei vlc-Clients: Einer generiert den Stream und wird nicht lokal angezeigt. Der andere ist der angezeigte Client, der den Stream wie alle anderen Systeme mit derselben Netzwerk-Cache-Einstellung abhört.

In der Kommandozeile:

Stream-Generator-Client, der eine Verbindung zum Internet-Stream herstellt (dieser hat einen großen Cache, damit er nicht ausschneidet und einen konstanten Stream in mein Multicast-Netzwerk liefert):

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 (das soll in einer Zeile stehen)

Wie Sie sehen, wird --no-sout-display ausgegeben: Die Stream-Ausgabe wird generiert, aber keine lokale Ausgabe. Ich mache dasselbe, egal ob ich lokale Dateien / DVDs oder Netzwerkinhalte abspiele.

Und stellen Sie sicher, dass --ttl auf> 1 gesetzt ist, wenn Sie irgendwo einen WLAN-Router haben. Ich habe es immer auf 4 gesetzt, um keine "Überraschungen" zu bekommen. Wenn Sie jedoch ein Netzwerk mit mehreren Routern haben und Hosts in einem Netzwerk den Multicast nicht sehen können, müssen Sie möglicherweise ein oder zwei Punkte erhöhen (oder prüfen, ob Ihr Router Multicast überhaupt durchlässt, nicht alle WLAN-Router voreingestellt).

Auf jedem System, einschließlich des Systems, das den Stream generiert und auf dem die nichtausgebende VLC ausgeführt wird, gibt es die folgende VLC:

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

Dadurch wird das Netzwerk-Caching in meinem Netzwerk und bei der Leistung des langsamsten Systems auf max. 0,06 Sekunden Cache.

Für Sound entspricht dies einer Ausbreitungsentfernung von etwa 30 Metern. Wenn der Cache also maximal ausgelastet ist, klingt das langsame System so, als wäre es 30 Meter entfernt.

Meine Netzwerkverzögerung beträgt 0,5 ms oder besser (kein Ping, das ist ein Stack-Roundtrip mit niedriger Priorität und mehrere ms).

An meinem Platz, an dem ich nie zwei Systeme sehe oder gleichzeitig höre, die einen Abstand von mehr als 100 Fuß haben (ich sprenge nicht die Treppe und den Keller hinauf), ist es der Vorteil, dass ich auf diese Weise überall dasselbe bekomme, ohne den Wohnzimmerverstärker zu sprengen).

Der Laptop im Schlafzimmer: Wenn es zu oft ausfällt, schalte ich den Cache nur lokal auf, höre ihn nicht im Keller oder oben, und wenn ich dort bin, habe ich wahrscheinlich die anderen abgeschaltet :-).

Sehr wichtig: Wenn ich eine Transcodierung benötige, haben alle Empfänger dasselbe Protokoll und dieselbe Codierung, und die Transcodierung wird auf der nicht ausgegebenen VLC durchgeführt, die den Stream generiert.

Ich transcodiere nicht auf den Multicast-Clients. Dies würde zu schlechten Verzögerungen führen, da jedes System eine andere Leistung aufweist.

Für dieses Audiobeispiel gibt es überhaupt keine Transcodierung, alle können die von Shoutcasts stammenden Codierungen verstehen. (eigentlich muss ich auch nie für vid umcodieren ... alle haben die vollständigen codec-sätze).

Hilft das?

Ja, es gibt Beispiele im Netz, um eine synchronisierte VLC mit --network-synchronization master / client und mehreren Unicast-Streams durchzuführen (eine 10 Meilen lange Zielzeichenfolge auf dem Server :-D).

Wenn Sie jedoch Unicast an n Clients in einem Segment streamen, wird der Stream n-mal in diesem Segment angezeigt. Je weiter Sie zum Ursprungsserver vordringen, desto mehr Multiplikationen desselben Streams belegen die Bandbreite. Ich könnte mein 1080p-Video nicht sehen. Mein Wireless-Gerät kann mit so etwas kaum umgehen, nicht immer (56 MB).

Oh, Sie fragen, wie in der GUI:

Klicken Sie im Streaming-Fenster auf "Weitere Optionen" und deaktivieren Sie "Lokal abspielen" für die VLC-Instanz, die den Stream generiert (als Eingabe eine lokale Datei, eine Wiedergabeliste oder einen Internet-Stream). Behalten Sie die Standardeinstellung für das Caching bei (Cache im Wert von 1000 ms). Wenn einer der anderen Clients Ihren Codec nicht versteht, entscheiden Sie sich für einen, den alle verstehen, und codieren Sie ihn auf demselben System.

Bei den Optionen der Ziele lassen Sie die Standardeinstellung "Lokal anzeigen" aktiviert und ändern das Caching: Spielen Sie damit (beginnen Sie bei 100 und drehen Sie es herunter), bis Ihr langsamstes System ausfällt, und stellen Sie dann alle schnelleren Systeme auf dasselbe ein. Mit kurzen Puffern: Wenn ein Client gestartet wird, dauert es ungefähr 10 bis 15 Sekunden, bis er es "bekommt".

Meine Kunden sind zu 100% in Betrieb, und wenn ich aufhöre zu streamen, hören sie immer nur die Multicast-Adresse.

Kein Port angegeben: Standard ist überall 1234, ich betreibe einen Ursprungsserver. Wenn Sie mehr als eine ausführen, müssen Sie eine Portnummer wie folgt angeben: ... 239.0.0.1:65535. Meine Beispielnummern: Wählen Sie eine beliebige Multicast-Adresse in 239/8. Ports: Wählen Sie einen Wert über 1024 (Ja, 1024, da Microsoft 1024 auch auf MC verwendet).

Wenn niemand zuhört, wird der Stream überhaupt nicht im Netzwerk angezeigt. Er wird erst gestartet, wenn der erste Listener der Multicast-Sitzung beitritt. Wenn Sie also zehn definiert haben und nur einen hören, haben Sie einen Stream, der Bandbreite frisst. Wenn Sie verschiedene Streams anhören, erhalten Sie das N-fache der Bandbreite, die für n Streams aufgewendet wurde.

Multicast: Die verwendete Bandbreite ist für einen oder 10000 Clients pro Stream gleich.

Verwenden von Unicast: Jeder Client springt zu einer anderen Zeit auf den Stream des Absenders, was bedeutet, dass Ihre Verzögerungen auch dann noch vorhanden sind, wenn Sie die Zwischenspeicherung verschärfen würden. Unicast und Multicast funktionieren völlig unterschiedlich. Aus diesem Grund verfügt Unicast über die Synchronisierungsfunktion.

Es gibt eine andere Möglichkeit, wenn Sie dasselbe streamen, um einen gesamten Zielspeicher auszudrücken: Dann würden Sie Unicast mit Synchronisation an Satelliten-VLC-Clients streamen und diejenigen bedienen, die sich von dort aus in „akustischer Reichweite“ befinden. In Büros mache ich ein oder zwei pro Etage, sodass alle Etagen mithilfe von Unicast und Netzwerksynchronisierung eng synchronisiert sind. Innerhalb des Stockwerks ist die Netzwerklaufzeit in der Regel viel kürzer als die akustische Verzögerung, und die akustische Verzögerung ist leiser, sodass Sie nicht alle Lautsprecher hören, sondern nur die in Ihrer Nähe.

E-Mail an [email protected] Wenn Sie Hilfe benötigen, kann ich diese auch auf YouTube veröffentlichen.

:-)

Sirhelpsalot
quelle
3
Willkommen bei SuperUser und vielen Dank für Ihren Beitrag! Könnten Sie Ihre Antwort ein wenig einschränken, indem Sie unnötige Kommentare entfernen? Im Moment ist es eine wahre Textwand und die eigentliche Antwort ist ziemlich schwer zu verstehen.
Indrek
1
Wie zuverlässig ist Streaming / Multicast für die Synchronisierung von Videos? Wenn ich einen Hex-Core-Desktop mit VLC und einen Himbeer-Pi mit Omxplayer habe, welche Garantie habe ich, dass dieser Omxplayer nicht 3 Sekunden länger braucht, um den Stream zu öffnen?
Puk
4

VLC kann die Ausgabe sowohl über ein Netzwerk streamen als auch lokal wiedergeben. Daher würde ich vorschlagen, dass Sie die Ausgabe von einem Computer über das Netzwerk streamen lassen. Aktivieren Sie jedoch auf der Registerkarte "Ziele" die Option "Lokal anzeigen".

Hier ist eine kurze Beschreibung der Einstellungen, die für das Streaming verwendet werden sollen.

Neal
quelle
1

Die Verwendung von VLC für ein Modul mit dem Namen Netsync (oder wird die Dokumentation nie aktualisiert), aber wie die meisten ungewöhnlichen VLC-Module ist es fehlerhaft , kaum dokumentiert und wird vernachlässigt. Ich habe es nie zum Arbeiten gebracht.

spc-stm
quelle
1

Wie spc-stm bereits sagte, können Sie mit VLC das Streaming synchronisieren. Überprüfen Sie dies: http://www.hackedexistence.com/project-vlc.html

Roy
quelle
2
Willkommen bei Super User! Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Slhck