Stefan Schuermans commited on 2014-01-15 22:03:27
Showing 1 changed files, with 144 additions and 0 deletions.
| ... | ... |
@@ -0,0 +1,144 @@ |
| 1 |
+Synchronisierungs-Protokoll für Po.W.E.R. |
|
| 2 |
+========================================= |
|
| 3 |
+ |
|
| 4 |
+Version: 20131106 |
|
| 5 |
+Autor: Stefan Schürmans |
|
| 6 |
+ |
|
| 7 |
+Aufgabenstellung |
|
| 8 |
+---------------- |
|
| 9 |
+ |
|
| 10 |
+Für die Theateraufführung Po.W.E.R.ist es notwendig, verschiedene Rechner, die |
|
| 11 |
+Audio, Video und/oder Effekte abspielen miteinander zu synchronisieren. Dabei |
|
| 12 |
+soll nicht nur die aktuelle Zeit innerhalb eines Audio-Stücks bzw. Films |
|
| 13 |
+synchronisiert werden, sondern auch das aktuelle Stück (z.B. der Dateiname) |
|
| 14 |
+mit behandelt werden. Da kein Standard-Protkoll für diese Aufgabe gefunden |
|
| 15 |
+werden konnte, soll nun ein einfaches Protokoll neu definiert werden. |
|
| 16 |
+ |
|
| 17 |
+Grundprinzip |
|
| 18 |
+------------ |
|
| 19 |
+ |
|
| 20 |
+Ein sogenannter Master soll als zentrale Instanz die Synchronisations- |
|
| 21 |
+Informationen periodisch per Ethernet/WLAN an die einzelnen Abspielrechner |
|
| 22 |
+(auch Clients genannt) verteilen. Die Abspielrechner empfangen den Namen |
|
| 23 |
+des aktuellen Stücks und die aktuelle Position in diesem Stück. Sie |
|
| 24 |
+vergleichen diese Soll-Information mit der lokalen Ist-Information und passen |
|
| 25 |
+das Stück und die Position eigenständig an, wenn eine signifikante Abweichung |
|
| 26 |
+vorliegt. |
|
| 27 |
+ |
|
| 28 |
+Die Übermittlung der Synchronisations-Informationen soll ohne An-/Abmeldung |
|
| 29 |
+der Clients beim Server erfolgen und keine Speicherungs eines Zustands der |
|
| 30 |
+Gegenstelle auf Seiten des Servers oder der Clients erfordern, damit die |
|
| 31 |
+einzelnen Geäte autonom arbeiten können. Es soll gewährleistet sein, |
|
| 32 |
+dass der Ausfall eines Gerätes (Client oder Server) die Funktion der anderen |
|
| 33 |
+Geräte nicht beeinträchtigt. Im Falle des Ausfalls des Servers steht |
|
| 34 |
+allerdings die Synchronisations-Funktion nicht mehr zur Verfügung und die |
|
| 35 |
+Clients laufen unsynchronisert weiter. Wird das ausgefallene Gerät |
|
| 36 |
+neu gestartet, soll es direkt wieder den Normalbetrieb aufnehmen, ohne |
|
| 37 |
+dass die anderen Geräte mitwirken. |
|
| 38 |
+ |
|
| 39 |
+Datenformat |
|
| 40 |
+----------- |
|
| 41 |
+ |
|
| 42 |
+Die Synchronisations-Informationen werden periodisch per UDP-Broadcast |
|
| 43 |
+gesendet. Sowohl Quell- als auch Ziel-Port sind 5740. Die Sendung erfolgt |
|
| 44 |
+alle 0.1 Sekunden. Jedes gesendete Informations-Paket enthält den Namen des |
|
| 45 |
+aktuellen Stücks und die aktuelle Position im Stück. |
|
| 46 |
+ |
|
| 47 |
+Da die Informations-Pakete häufig versand werden und schnell bearbeitet werden |
|
| 48 |
+müssen, soll sowohl deren Erstellung als auch deren Verarbeitung möglichst |
|
| 49 |
+effizient sein. Es wir daher ein einfaches Binärformat verwendet. Die |
|
| 50 |
+Nutzdaten des UDP-Pakets sind wie folgt aufgebaut: |
|
| 51 |
+ |
|
| 52 |
+Start Länge Typ Beschreibung |
|
| 53 |
+----- ----- --- ------------ |
|
| 54 |
+ 0 4 ASCII feste Kennung, immer "PoSy" |
|
| 55 |
+ (steht für "Po.W.E.R. Synchronisation") |
|
| 56 |
+ 4 4 U32be Bitfeld mit Steuerinformationen |
|
| 57 |
+ 8 64 UTF-8 Name des aktuellen Stücks |
|
| 58 |
+ 72 4 U32be aktuelle Position im Stück (in Millisekunden) |
|
| 59 |
+ |
|
| 60 |
+Die Bedeutung der Typkürzel ist wie folgt: |
|
| 61 |
+ |
|
| 62 |
+Typ Bedeutung |
|
| 63 |
+--- --------- |
|
| 64 |
+ASCII ASCII-String mit fester Maximal-Länge, ggf. mit Null-Zeichen aufgefüllt |
|
| 65 |
+UTF-8 UTF-8-String mit fester Maximal-Länge, ggf. mit Null-Zeichen aufgefüllt |
|
| 66 |
+U32be vorzeichenlose Ganzzahl, 32 bit Länge, byte order big-endian |
|
| 67 |
+ |
|
| 68 |
+Das Bitfeld für Steuerinformationen enthält folgende Informationen (mit |
|
| 69 |
+bitweisem Oder verknüpt): |
|
| 70 |
+ |
|
| 71 |
+Wert Beschreibung |
|
| 72 |
+---- ------------ |
|
| 73 |
+ 1 Pause aktiv |
|
| 74 |
+ |
|
| 75 |
+Bei der Generierung der Pakete muss das Datenformat strikt eingehalten werden. |
|
| 76 |
+In späteren Versionen des Protokoll können ggf. weitere Felder angefügt werden. |
|
| 77 |
+Daher ist nicht erlaubt, nicht benutzerspezifische Felder anzuhängen. Nicht |
|
| 78 |
+definierte Werte in Bitfeldern sind stets mit 0 zu kodieren. |
|
| 79 |
+ |
|
| 80 |
+Beim Empfang eines Pakets ist die Länge und die Kennung zu überprüfen. Pakete |
|
| 81 |
+mit zu geringer Länge und/oder anderer Kennung sind zu verwerfen. Längere |
|
| 82 |
+Pakete sind abzuschneiden und wie Pakete korrekter Länge zu behandeln. Nicht |
|
| 83 |
+definierte Werte in Bitfeldern sind zu ignorieren. |
|
| 84 |
+ |
|
| 85 |
+Anhang (nicht normativ) |
|
| 86 |
+======================= |
|
| 87 |
+ |
|
| 88 |
+Master |
|
| 89 |
+------ |
|
| 90 |
+ |
|
| 91 |
+Der Synchronisierungs-Master verwaltet die globale Playliste und spielt diese |
|
| 92 |
+ab. Dabei ist unter Abspielen nur das Aussenden der Synchronisations-Pakete |
|
| 93 |
+zu verstehen. Auf dem Bildschirm wir dem Benutzer eine Fenster ähnlich zu dem |
|
| 94 |
+eines normalen PC-Video-Players angeboten, welches die Playliste mit den |
|
| 95 |
+einzelnen Stücken beinhaltet und außerdem Knöpfe für Abspielen, Pause, Stopp, |
|
| 96 |
+nächstes Stück, vorheriges Stück und eine Positionsleiste (Scrollbalken) |
|
| 97 |
+anbietet. Damit kann der Master wie ein Video-Player bedient werden. Die |
|
| 98 |
+verschiedenen Clients passen sich dann über das Synchronisations-Protokoll |
|
| 99 |
+automatisch an den Master an. |
|
| 100 |
+ |
|
| 101 |
+Master Web-Interface (bisher nur Idee, optional) |
|
| 102 |
+-------------------- |
|
| 103 |
+ |
|
| 104 |
+Der Master bietet zusätzlich zum Fenster auf dem lokalen bildschirm ein |
|
| 105 |
+Webinterface an, auf dem die gleichen Elemente wie im Fenster zu sehen sind. |
|
| 106 |
+Damit kann der Master auch über mobile Geräte aus dem WLAN heraus gesteuert |
|
| 107 |
+werden. |
|
| 108 |
+ |
|
| 109 |
+Video-Abspieler für Pixelwände |
|
| 110 |
+------------------------------ |
|
| 111 |
+ |
|
| 112 |
+Alle Pixelwände werden von einem zentralen Rechner angesteuert. Die Filme |
|
| 113 |
+für die einzelnen Wände werden zur Unterscheidung in verschiedenen |
|
| 114 |
+Verzeichnissen abgelegt. In jedem dieser Verzeichnisse liegen die Filme mit |
|
| 115 |
+Namen gemäß der Playliste des Masters (plus eine geeignete Dateinamen- |
|
| 116 |
+Erweiterung). Außerdem besitzt der Rechner eine Kopie Playliste, so dass er |
|
| 117 |
+bei Ausfall des Masters autonom die Stücke abspielen kann. |
|
| 118 |
+ |
|
| 119 |
+Audio-Abspieler für Roboter |
|
| 120 |
+--------------------------- |
|
| 121 |
+ |
|
| 122 |
+Auf jedem Roboter befindet sich ein Rechner, der die Audiodateien für den |
|
| 123 |
+jeweiligen Roboter sowie eine Kopie der Playliste besitzt. Im Normalbetrieb |
|
| 124 |
+wird das abzuspielende Stück und die Position über das Synchronisations- |
|
| 125 |
+Protokoll gesteuert. Durch die lokale Kopie der Playliste ist aber bei |
|
| 126 |
+Ausfall des Masters ein autonomes Abspielen möglich. |
|
| 127 |
+ |
|
| 128 |
+Ein mögliche Implementierung könnte das MPlayer slave interface verwenden: |
|
| 129 |
+mplayer -slave -quiet -input nodefault-bindings -noconfig all -idle |
|
| 130 |
+Über "get_file_name" und "get_time_pos" ist das aktuelle Stück und die aktuelle |
|
| 131 |
+Position auf 0.1s genau ermittelbar. Im Falle einer signifikanten Abweichung |
|
| 132 |
+kann die Postion mittels "seek <pos> 2" neu eingestellt werden. Die |
|
| 133 |
+abzuspielende Datei kann mit "loadfile <file>" geändert werden. |
|
| 134 |
+ |
|
| 135 |
+Effekt-Abspieler für Roboter |
|
| 136 |
+---------------------------- |
|
| 137 |
+ |
|
| 138 |
+Der Rechner auf jedem Roboter steuert zusätzlich Effekt-Beleuchtungen. Diese |
|
| 139 |
+können entweder durch Zusatz-Informationen in den Audio-Datein (z.B. Matroska) |
|
| 140 |
+enthalten sein und von einem entsprechen MPlayer-Plugin ausgewertet werden. |
|
| 141 |
+Alternativ können die Effekte in einer Textdatei (Zeilen mit Zeitstempel |
|
| 142 |
+und Effekt) gespeichert werden und von einem separaten Player ausgelöst werden, |
|
| 143 |
+der durch das Synchronisations-Protokoll passend gesteuert wird. |
|
| 144 |
+ |
|
| 0 | 145 |