Website: Mediaplayer auf verschiedenen PC gleichzeitig starten

rofu

Newbie
Registriert
Apr. 2014
Beiträge
4
Hallo zusammen,

da ich weder in diesem Forum noch über meinen Suchanbieter was zu meinem Problem gefunden habe, sezte ich nun auf eure Hilfe.

Ich möchte eine für mobile Endgeräte optimierte Webseite erstellen auf der ein Audioplayer (JPlayer) angezeigt wird.

Soweit eigentlich kein Problem. :) Nun möchte ich aber das dieser Player auf allen "verbundenen" Geräten die Wiedergabe startet wenn ich auf einer Steuerungsoberfläche den Befehl dafür gebe. Die Übergabe des Startbefehls muss sehr schnell erfolgen und die einzelnen Geräte sollen das Audiosignal möglichst synchron abspielen.

Mein erster Lösungsansatz ist wie folgt:
Zunächst wird beim Aufruf der Webseite der Puffer vollständig gefüllt.

Wenn ich auf der Steuerseite das Startsignal gebe, wird in einer MySql-Datenbank ein Wert eingetragen.

Diesen Wert lasse ich beim Client in regelmäßigen, sehr kurzen Abständen per jQuery/Ajax prüfen. Wenn der ausgelesene Wert dem Startsignal entspricht wird der Befehl zum starten der Wiedergabe ausgeführt.

Das Ganze funktioniert in der Praxis auch eigentlich ganz gut. Ich mache mir allerdings Sorgen das der Webserver bei 100 oder mehr Teilnehmern in die Knie geht. :pcangry:

Hat von euch vielleicht jemand eine Lösung wie man sowas besser und resourcenschonender lösen kann?

Für Lösungsvorschläge wäre ich sehr dankbar.

Viele Grüße
rofu
 
Das hört sich nach "Streaming" an...
 
Der Webserver geht dann in die Knie wenn Anzahl Streams mal Bitrate größer ist als die Netzwerkanbindung. Das kannst du dir sehr leicht ausrechnen.
Umgehen kannst du das nur via Multicast oder einer besseren Netzwerkanbindung.
 
Du könntest dir das Thema WebSockets einmal anschauen, damit hast du letzlich eine dauerhafte Verbindung und kannst Infos an die Clients geben. Wenn du jedes mal Clientseitig prüfst generierst du einen Aufwand in Höhe der verbundenen Clients inkl. einzelnen SQL-Statements - performant ist echt anders.
 
Eben, das schreit nach einer Art Push Notification via Websocket (die dann nur "Play" überträgt), in Verbindung mit einem CDN für den Audiotrack, z.B. CloudFlare.
 
Hi,

vielen Dank für die und zahlreichen Antworten! Ich bin beeindruckt das es so schnell ging. :)

Streaming/Webradio fällt für meine Problemstellung flach. Das Delay ist zu groß und vor allem bei jedem Benutzer unterschiedlich. Ich brauche die Musik möglichst synchron bei jedem Anwender. Synchron hatte ich es nur hinbekommen wenn ich den Stream per Telefon verteilte. Hier war die Tonqualität jedoch eher "suboptimal".

Die Sache mit den WebSockets klingt sehr vielversprechend. Werde mir das mal etwas näher anschauen. Falls ich Probleme bekomme melde ich mich wieder.

Nochmals vielen Dank für eure Hilfe!
 
Das mit der komplett synchronen Wiedergabe kannst du im Ethernet im Prinzip auch knicken, weil es Pakete mit zufälligem Delay an den Clients ankommen (mit und ohne Multicast). Wenn das ganze ohne Multicast geschieht, dann sendet der Server für jeden Client einzeln ein Paket ab, d.h. dass der erste Client (theoretisch) sein Paket n Zeiteinheiten vor dem letzten Client bekommt.
Telefone (also ECHTE Telefone, nicht VOIP) sind eine andere Welt, diese Datenströme werden anders gehandhabt. Da steht ganz oben auf der Liste "garantierte(!!) Qualität". Bei TCP/IP steht überall(!) auf der Liste "mir doch egal, was mit den Paketen passiert". Das Telefon arbeitet mit einer konstanten Bitrate, während sich das Äthernetz mit dem zufrieden geben muss, was es vorfindet. D.h. keine garantierten Antworten vom Gegenüber, kein garantiertes maximales Delay, kein garantierter minimaler Datendurchsatz, gar nichts. Man sollte eigentlich froh sein, dass das Internet so wie wir es kennen überhaupt funktioniert ;)

Dein Projekt klingt irgendwie danach, als wenn du irgendwelche IP-betriebenen Lautsprecher benutzen willst, um ein Gebäude zu beschallen. ?!

Wenn es aber um eine Art "Vorlesung" handelt, und die Clients hundert (oder mehr) Notebooks nebeneinander sind, dann gibt's große Probleme durch Interferenzen zum einen durch den Abstand der verschiedenen Tonquellen zum Ohr und wenn dann noch hier und da mal 10-50ms Delay drin sind, hat man einfach nur noch eine Wall of Sound.
Und wenn sich eh alle im selben Raum befinden, sollte man lieber vorne 2 große Lautsprecher aufstellen und das ganze umsetzen ;)

Wenn sich die Geräte noch weiter verteilt aufhalten (Städteübergreifend, Client's nicht im selben Raum), ist die Synchronisation eigentlich schon wieder total egal. Selbst bei 500ms Abweichung kann man noch problemlos über den Inhalt diskutieren, ohne dass das jemandem auffällt.

Daher wäre mein Vorschlag:
1. Alle Clients synchronisieren ihre Uhren via NTP auf die Millisekunde genau.
2. Alle Clients buffern (am besten zu 100%) die Datei.
3. Der Server sendet an alle Clients einen Timestamp zu dem die Wiedergabe beginnt

Dieser Timestamp liegt natürlich ca. 1 Sekunde in der Zukunft, wenn sich die Geräte nicht alle im lokalen Netzwerk mit Ethernet Kabel befinden. Und vor allem auch dann, wenn jeder Client ein eigenes Paket bekommt und das ganze nicht via Multicast geschieht.

Insgesamt (für's LAN) wäre aber dennoch Multicast die schönere Lösung. Also Multicast + Buffering + NTP Synchronisation. Aber das ist vermutlich auch am Aufwändigsten. Wobei es über's Internet natürlich kein echtes Multicasting gibt (abgesehen von VPN Lösungen)


Also vielleicht wäre es ganz hilfreich, wenn du mal etwas genauer sagst, was du da vorhast.



EDIT: Den Plan aus deinem ersten Posting mit dem "Client fragt die Datenbank in regelmäßigen Abständen" kannst du komplett knicken, weil jeder Client sich anders im Netzwerk verhält. Vielleicht braucht der eine nur 30ms um die Antwort zu erhalten, aber beim nächsten ist die Datenautobahn ein wenig verstopft und dann sind es schon 500ms.
Dazu kommt dann noch, dass der Server natürlich nicht alle Anfragen zeitgleich beantwortet. Wieder dasselbe Problem wie oben: Irgendwer bekommt seinen Startbefehl 50ms vor dem anderen, einfach weil das Netzwerk nicht parallel arbeitet.

Hast du dir auch Gedanken über den Fall gemacht, was ist, wenn ein Client (aus welchen Gründen auch immer) aus der Reihe tanzt? Man müsste in regelmäßigen Abständen überprüfen, wie weit jeder mit der Wiedergabe ist und dann evtl. hier und da mal 10-20ms "skippen", um wieder alles synchron zu halten.
Es könnte natürlich auch passieren, dass ein Client den "Startschuss" um Sekunden verzögert erst mitbekommt, was machst du dann?
 
Zuletzt bearbeitet:
Hallo benneque,

danke für deine sehr ausführliche Antwort.

Um die Frage zu klären wofür ich das Ganze hier brauche. Ich bin Feuerwerker und möchte die Musik zur Show gerne allen Zuschauern zugänglich machen. Eine ganze Stadt inkl. der Leute die ggf. von zu Hause aus gucken zu beschallen ist leider nicht so einfach. :freak: Ein eigener UKW-Sender würde das Budget sprengen. Daher bin ich auf der Suche nach einer alternativen Lösung. Da die Musik zu jeweiligen Effekten passen soll habe ich nur einen sehr kleinen Spielraum.

Daher fand ich den Vorschlag mit den Websockets sehr vielversprechend.

1. Ich würde den Player so konfigurieren das die Musik beim Aufruf der Seite sofort in den Arbeitsspeicher geladen wird.
2. Nun müsste ich "nur" noch das Startsignal verteilen. Nun fangen meine Probleme allerdings an :D

Die Idee mit dem Timestamp hatte ich auch schon. Jedoch ist mir nichts eingefallen wie ich alle Clients (Handys, Tablets, Pcs etc.) mit der korrekten Zeit versorgen soll. Wenn ich diese vom Server aus sende wäre sie durch die Verarbeitungszeit bereits wieder falsch. Außerdem müsste ich auch gewährleisten das die Zeit korrekt weiterläuft. An der Stelle war ich leider ein wenig Ratlos.

Vielleicht hast du ja noch einen Ratschlag für mich.

Viele Grüße
rofu
 
Setz einen Shoutcast/Icecast - Server auf und erklär deinen Besuchern, wie sie selbigen ansprechen.
 
Also sollen die Leute aus dem Fenster gucken und dabei den Stream hören? Interessantes Projekt.

Ich hab gerad noch was gefunden, was TimeSync via JS ermöglicht: http://stackoverflow.com/questions/10585910/sync-js-time-between-multiple-devices

Vielleicht hilft es ja weiter. Und sonst wäre - wie bereits gesagt - Shoutcast auch 'ne Alternative. Mit den 1-2 Sekunden Latenz muss man dann wohl leben.
 
Ja, so war es gedacht. Ich schau mir den Link mal an.

Wenn ich eine Abschließende Lösung habe werde ich mich nochmal melden.

Vielen Dank schonmal für die Unterstützung. Ist echt ein gutes Forum. :daumen::
 
Zurück
Oben