Technischer Bericht Bachelor Thesis

Transcription

Technischer Bericht Bachelor Thesis
Media-Streaming
in Hotels
Technischer Bericht
Bachelor Thesis
Joël Dubois, Fabrice Thut
Studiengang Informatik, 6. Semester
Betreuer:
Prof. Dr. Christoph Stamm
MSc. Matthias Krebs
Auftraggeber:
hotelplus GmbH
Alain Schwaller (GL/Administration)
Biagio Aeberhard (Technik & Beratung)
Windisch, 14. August 2015
Studiengang Informatik
Zusammenfassung
Das Ziel dieser Projektarbeit ist eine Mediastreaming-Lösung für Hotelbetriebe zu entwickeln. Damit soll ein Gast
den Hotel-Fernseher in seinem Zimmer über eine Webapplikation kontrollieren und Filme vom hoteleigenen Server
mieten und abspielen können. Sowohl eine Software-Architektur als auch ein Sicherheitskonzept wurden in der
ersten Projektphase erarbeitet. Für die anschliessende Umsetzung wurden Java und das Applikationsframework
Spring eingesetzt. Benutzerinteraktion wird durch eine REST-Schnittstelle ermöglicht. Das Steuern der Fernseher
erfolgt über Universal Plug and Play (UPnP), einer Technologie, die einfache Peer-to-Peer-Kommunikation über
ein Netzwerk ermöglicht. Die Webapplikation wurde in eine bestehende CMS-Lösung als eigenes Modul integriert.
Die Interaktion aller Komponenten funktioniert anforderungserfüllend. Sowohl das Starten, Pausieren und Stoppen,
als auch das Vor- oder Zurückspulen eines Streams, funktionieren erwartungsgemäss. Die Performance wird durch
die vorhandene Netzwerkleitung und die Hardware-Ressourcen des Servers limitiert.
Studiengang Informatik
Inhaltsverzeichnis
Zusammenfassung ........................................................................................................................ 1
1
Einleitung.............................................................................................................................. 1
2
Theorie ................................................................................................................................. 2
2.1
Universal Plug and Play (UPnP) ............................................................................................... 2
2.2
UPnP Audio/Video (AV) ........................................................................................................... 6
2.3
DLNA ...................................................................................................................................... 10
3
Konzept .............................................................................................................................. 12
3.1
Infrastruktur-Anforderungen................................................................................................. 12
3.2
Use-Cases .............................................................................................................................. 12
3.3
Aufbau ................................................................................................................................... 13
3.4
Mögliche Lösungsansätze für direktes Streamen .................................................................. 14
3.5
Definitives Lösungskonzept ................................................................................................... 18
4
Streaming-System ............................................................................................................... 35
4.1
CMS-Server ............................................................................................................................ 35
4.2
Streaming-Server ................................................................................................................... 37
4.3
Media Renderer ..................................................................................................................... 45
5
Testkonzept ........................................................................................................................ 47
5.1
Unit-Tests .............................................................................................................................. 47
5.2
Integrationstests ................................................................................................................... 47
6
Ausblick .............................................................................................................................. 48
6.1
Netzwerk und CMS überarbeiten .......................................................................................... 48
7
Bekannte Fehler .................................................................................................................. 49
8
Fazit .................................................................................................................................... 50
9
Abkürzungsverzeichnis ........................................................................................................ 51
10
Ehrlichkeitserklärung ....................................................................................................... 52
11
Literaturverzeichnis ......................................................................................................... 53
12
Anhang ........................................................................................................................... 55
12.1
REST-API Beschreibung .......................................................................................................... 55
12.2
Device Description Document ............................................................................................... 62
12.3
Abnahmetests........................................................................................................................ 64
12.4
Mailverkehr mit Herrn Dr. Dominik Gruntz über Probleme mit Cling Library ....................... 68
12.5
Mailverkehr mit Samsung-Support ....................................................................................... 72
Studiengang Informatik
1
Einleitung
Diese Arbeit befasst sich mit Media-Streaming in Hotelbetrieben. Im Auftrag der Firma hotelplus
GmbH wird ein zugeschnittenes Produkt konzipiert und umgesetzt.
Hotelplus installiert WLAN- und Multimedia-Infrastrukturen in Hotels unter Berücksichtigung aktueller
Anforderungen wie Benutzerauthentifizierung, Client Isolation und Bandbreitenkontrolle. Eine bestehende Webapplikation ermöglicht den Gästen Informationen über das Hotel und die Region abzurufen, sowie Essensbestellungen zu tätigen.
Immer häufiger steht auch ein Smart-TV in jedem Hotelzimmer. Dieser bietet den Gästen ein grossflächiges Display zur Wiedergabe unterschiedlichster Medien. Eine beliebte Funktion ist das Mieten und
Abspielen von Filmen aus der Videothek des Hotels. Für diese Funktion existieren bereits einige
Lösungen. Das aktuell eingesetzte Produkt bezieht hotelplus über einen Drittanbieter. Es umfasst eine
Serverapplikation, die zentral auf einem internen Server gehostet wird und eine Clientapplikation, die
jeweils auf den Smart-TVs installiert werden muss. Da die Fernseherapplikation geräteabhängig ist,
müssen Offerten für neue Installationen immer den aktuell unterstützten Fernsehern angepasst werden. Wenn die TV-Hersteller neue Modelle herausgeben, so muss gewartet werden, bis der Drittanbieter eine Aktualisierung der Clientapplikation zur Verfügung stellt.
Das Ziel dieser Projektarbeit ist ein Konzept für das Mediastreaming im Kontext von Hotels zu erarbeiten und umzusetzen. Der Benutzer soll die Möglichkeit haben, über eine Webapplikation mit seinem
persönlichen Gerät (Computer, Tablet oder Smartphone), den Fernseher im Zimmer zu kontrollieren.
Grundsätzlich müssen zwei Anwendungsfälle abgedeckt sein. Einerseits soll ein Gast aus einem
Angebot von Filmen einen mieten und abspielen können. Andererseits muss er auch in der Lage sein,
seine eigenen Medien von seinem Endgerät auf dem Fernseher wiederzugeben. Die korrekte Funktion der Webapplikation kann über manuelle Tests sichergestellt werden. Das robuste Streamen der
Daten soll über eine Test-Applikation automatisiert geprüft werden.
Als Streaming-Technologie wird Universal Plug and Play Audio Video (UPnP AV) eingesetzt. Benutzerfreundlichkeit und Robustheit haben hohe Priorität. Auch den Aspekten Pausieren, Wiederaufnehmen und Wechsel von Medien soll besondere Beachtung geschenkt werden. Die neuen Funktionalitäten werden in die bestehende Webapplikation integriert. Ein besonderes Augenmerk muss auf die
lose Koppelung von Soft- und Hardware gelegt werden. Auch darf keine Middleware, wie beispielsweise eine Settop-Box, benötigt werden.
In Kapitel 2 dieser Arbeit werden theoretische Aspekte zu UPnP und dem darauf aufbauenden DLNA
behandelt. Danach folgen in Kapitel 3 konzeptionelle Überlegungen zum Ablauf der Anwendungsfälle.
Auch Sicherheitsaspekte sind Teil der Konzeptphase. In Kapitel 0 wird die Software-Architektur erklärt. Dabei wird vom grossen Gesamtbild aus Schritt für Schritt auf die wichtigen Details eingegangen. Zum Schluss wird das Testkonzept erläutert und ein Ausblick für mögliche Erweiterungen gegeben.
Studiengang Informatik
Seite 1
2
Theorie
2.1
Universal Plug and Play (UPnP)
Die UPnP-Technologie definiert eine Architektur, um möglichst einfach intelligente Geräte in einem
Netzwerk miteinander zu verbinden (Peer-to-Peer). Die einzigen Anforderungen an ein Netzwerkgerät
sind, dass es mit einem Netzwerk verbunden ist, eine gültige IP-Adresse besitzt und UPnP unterstützt.
Für die Netzwerkkonnektivität können sämtliche Transportmedien (Ethernet, WLAN, etc.), die IPbasierte Kommunikation unterstützen, eingesetzt werden [1]. Die IP-Adresse kann entweder statisch
konfiguriert sein, über DHCP bezogen oder, wenn die ersten beiden Methoden nicht funktionieren,
automatisch generiert werden. In letzterem Fall handelt es sich um eine Link-Local-Address aus der
IP-Range 169.254.0.0/16. Dieses Feature ist nativ aber nur in Windows und Mac OS X implementiert.
[2]
UPnP kennt zwei Gerätetypen: Devices und Control Points. Ein Device bietet Schnittstellen um sich
steuern zu lassen. Ein Control Point kann Devices im Netzwerk suchen und steuern.
Damit über UPnP kommuniziert werden kann, sind keine Gerätetreiber notwendig. Anstelle von Treibern werden bekannte Netzwerkprotokolle wie IP, TCP, UDP, HTTP und SOAP verwendet. UPnP ist
weder an ein Betriebssystem, noch an eine Programmiersprache gebunden, lediglich die Spezifikationen für die Datenübertragung muss exakt eingehalten werden.
2.1.1
Sicherheit
Zero-Configuration ist ein Hauptmerkmal von UPnP. Damit dieses Feature auch ohne Probleme
funktioniert, ist eine Authentifizierung oder Autorisierung der Geräte untereinander weder vorgesehen,
noch in irgendeiner Art implementiert. Jeder Control Point im Netzwerk kann also auf ein UPnPDevice zugreifen und dessen Funktionen abfragen und nutzen. [3]
2.1.2
Geschichte
UPnP wurde ursprünglich von Microsoft entwickelt und bereits in Windows ME eingeführt. Am 18.
Oktober 1999 wurde das Universal Plug and Play Forum gegründet. Es ist eine Vereinigung von
mittlerweile über 1000 Herstellern aus den Bereichen Unterhaltungselektronik, Computer, Home
Automation und Haushaltsgeräten. Die Arbeit des Universal Plug and Play Forum ist das Definieren
von Spezifikationen. [4]
Die Website www.upnp.org ist das zentrale Repository für XML-Schemas und Spezifikationen. Auch
Informationen über Aktivitäten und Fortschritte des Forums werden publiziert.
Die UPnP Device Architecture liegt aktuell in Version 2 vor. Die Spezifikation wurde am 20. Februar
2015 zuletzt revidiert. [5]
2.1.3
Einsatzgebiet von UPnP
UPnP hat zwei Haupteinsatzzwecke. Einerseits im Bereich Netzwerkkonnektivität, andererseits beim
Verteilen von Multimediainhalten über das Netzwerk.
In ersterem geht es darum, Geräte einfach miteinander über das Internet zu verbinden. Dafür spezifiziert UPnP ein Internet Gateway Device (IGD) [6]. Dieses schliesst ein Local Area Network (LAN) an
das Wide Area Network (WAN) an. Es kann von anderen Geräten konfiguriert werden. Beispielsweise
können Portweiterleitungen eingerichtet werden, ohne dass der Benutzer etwas davon sieht. Dies ist
auf der einen Seite sehr benutzerfreundlich, auf der anderen Seite aber auch eine Sicherheitslücke,
da sich Drittpersonen Zugriff auf das gesamte LAN verschaffen können [7].
Der zweite Teil, Verteilen von Medien über das Netzwerk, wird in Kapitel 2.2 detailliert erklärt.
Studiengang Informatik
Seite 2
2.1.4
Komponenten
Services
Services, im Sinne von UPnP, sind logische Gruppierungen von Funktionen (Actions) und Zustandsvariablen (State Variables). Zustandsvariablen haben einen definierten Datentyp und teilweise auch
definierte Werte, die sie annehmen können. [8] Ein Beispiel für einen Service wäre der Connection
Manager Service (CMS). Seine Aufgabe ist es UPnP-Geräte miteinander zu verbinden und wieder zu
trennen. Eine State Variable wäre ConnectionManager. Sie speichert den Identifier für den verbunden Connection Manager Service des Nachbarn. Ein Beispiel für eine Action ist
GetCurrentConnectionInfo(). Sie liefert einige Informationen über den Status der aktuellen Verbindung, unter anderem den Wert der State Variable ConnectionManager. [9]
Devices
Mit UPnP-Device ist nicht das physikalische Gerät gemeint, sondern eine softwarebasierte Umsetzung
der UPnP-Spezifikation. Ein UPnP-Device kann als Container angesehen werden, der wiederum
eingebettete Devices oder Services enthalten kann. Welche Funktionalität ein Device zur Verfügung
stellt, muss jeweils im Device Description Document (DDD) des Devices nachgelesen werden (Beispiel in Snippet 9). Snippet 1 zeigt die Tags, die die Funktionalitäten anzeigen.
…
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:serviceType:v</serviceType>
<serviceId>urn:upnp-org:serviceId:serviceID</serviceId>
<SCPDURL>URL to service description</SCPDURL>
<controlURL>URL for control</controlURL>
<eventSubURL>URL for eventing</eventSubURL>
</service>
</serviceList>
<deviceList>
<!-- devices -->
</deviceList>
…
Snippet 1: serviceList und deviceList in DDD
Nebst der Serviceliste und der Deviceliste enthält das DDD auch allgemeine Information über das
Device (z.B. Herstellerinformationen, Modellnamen und eine Beschreibung). [8]
Control Points
Ein Control Point kann UPnP-Devices im Netzwerk finden und Actions auf den Devices ausführen.
Ausserdem kann er auf Events von Devices reagieren. Er hat selber aber keine Services implementiert.
2.1.5
UPnP Device Architecture
Die UPnP Device Architecture spezifiziert wie Devices und Control Points miteinander kommunizieren.
Abbildung 1 zeigt die verwendeten, allgemein bekannten Netzwerkprotokolle.
Dieses Kapitel orientiert sich an der offiziellen Spezifikation [10]. Wenn ein Gerät neu mit einem
UPnP-Netz verbunden wird, so durchläuft es folgende 6 Schritte:
Studiengang Informatik
Seite 3
Abbildung 1: Von UPnP verwendete Netzwerkprotokolle
Phase 0: Addressing
Damit ein UPnP-Gerät in ein UPnP-Netz aufgenommen werden kann, muss es eine valide IP-Adresse
besitzen. Diese kann es, wie erwähnt, statisch konfiguriert haben, dynamisch über DHCP beziehen
oder je nachdem automatisch generieren.
Phase 1: Discovery
Wenn das Device eine gültige IP hat, muss es seine Anwesenheit mittels einer Discovery Message
den Control Points melden. Dafür nutzt es das System Service Discovery Protocol (SSDP) über die
Multicastadresse 239.255.255.250 und den UDP-Port 1900.
Wenn ein Control Point neu ins Netz kommt, so sucht er ebenfalls mit SSDP nach aktiven Devices.
Snippet 2 zeigt die Discovery Message von einem Control Point. Die Devices antworten mit einer
Response wie in Snippet 3 dargestellt.
M-SEARCH * HTTP/1.1
ST: upnp:rootdevice
MX: 3
MAN: "ssdp:discover"
HOST: 239.255.255.250:1900
Snippet 2: Discovery Message von Control Point
HTTP/1.1 200 OK
Location: http://192.168.1.103:1371/
Cache-Control: max-age=1800
Server: UPnP/1.0 DLNADOC/1.50 Kodi
EXT:
BOOTID.UPNP.ORG: 0
CONFIGID.UPNP.ORG: 8165443
USN: uuid:11b12bb8-9d0a-2f44-1e7b-bfaf71b6cd0d::upnp:rootdevice
ST: upnp:rootdevice
Date: Thu, 01 Jan 1970 00:00:24 GMT
Snippet 3: Antwort von Device auf Discovery Message
Phase 2: Description
Zum jetzigen Zeitpunkt hat der Control Point, ausser den Informationen aus der Antwort in Snippet
3Date: Thu, 01 Jan 1970 00:00:24 GMT, keine weiteren Kenntnisse über das Device. Damit er dessen
Funktionalitäten nutzen kann, muss er wissen, welche Services das Device anbietet. Dafür setzt der
Control Point einen HTTP-GET-Request (Snippet 4) auf dem Device ab.
Studiengang Informatik
Seite 4
GET / HTTP/1.1
User-Agent: Java/1.8.0_45
Host: 192.168.1.103:1371
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Snippet 4: GET-Request für Device Description Document
Die Antwort ist ein DDD, ein XML-File, das nebst allgemeinen Informationen über das Device auch die
Liste mit verfügbaren Services enthält. Ein Beispiel ist im Snippet 9 im Anhang zu finden.
Phase 3: Control
Da der Control Point nun weiss, welche Services das Device anbietet, kann er Actions auf dem Device
aufrufen. Welche Actions aufgerufen werden können, hängt von den verfügbaren Services ab und
kann in der Servicebeschreibung nachgelesen werden. Für den Aufruf einer Action wird das Simple
Object Access Protocol (SOAP) genutzt.
Phase 4: Eventing
UPnP spezifiziert eine Architektur für einen Benachrichtigungsmechanismus. Ereignisse in UPnP sind
Änderungen von Zustandsvariablen in Services. Welche Zustandsvariablenänderungen gemeldet
werden können, muss in der jeweiligen Spezifikation des Services nachgelesen werden. Grundsätzlich kann sich ein Control Point bei einem Device anmelden (subscribe), um über Zustandsänderungen informiert zu werden und wieder abmelden (unsubscribe), wenn keine Benachrichtigungen mehr
erwünscht sind.
Für die Registrierung bei einem Device muss der Control Point diesem einen Request senden. Der
Request ist wie folgt aufgebaut (Abbildung 2):
Abbildung 2: UPnP Subscribe-Request [5]
Wenn das Device genügend Ressourcen frei hat, sollte es die Subscripition annehmen und eine
Antwort (Abbildung 3) zurück schicken. Die Subscription-ID (SID) wird vom Device generiert und muss
universell eindeutig sein.
Abbildung 3: UPnP Subscribe-Response [10]
Falls die Subscription nicht angenommen werden kann, muss ein Paket mit HTTP Status Code 400
(inkompatible Header-Felder), 412 (Voraussetzungen nicht erfüllt) oder ein 5xx (Aktualisierung nicht
akzeptiert) gesendet werden.
Wenn das Timeout abgelaufen ist, werden keine Notifikationen mehr gesendet. Um Benachrichtigungen über einen längeren Zeitraum zu erhalten, muss die Subscription erneuert werden, bevor das
Timeout abgelaufen ist. Hierfür sendet der Control Point einen Request gemäss Abbildung 4.
Studiengang Informatik
Seite 5
Abbildung 4: UPnP Subscription-Renewal-Request [10]
Wenn ein Control Point die Notifikationen nicht mehr erhalten möchte, muss er sich beim Device
abmelden, damit dieses die Ressourcen wieder freigeben kann. Dies macht der Control Point, indem
er einen Unsubscribe-Request absetzt (siehe Abbildung 5)
Abbildung 5: Unsubscribe-Request [10]
Das Device bestätigt mittels einer Antwort mit HTTP-Status-Code 200.
Phase 5: Presentation
Jedes Device hat eine Presentation-URL. Diese kann mit einem Browser aufgerufen werden. Je nach
Device und Implementierung werden auf dieser Seite lediglich Informationen angezeigt oder aber sie
erlaubt gewisse Actions aufzurufen.
2.2
UPnP Audio/Video (AV)
UPnP AV ist eine Erweiterung von UPnP. Das folgende Kapitel orientiert sich an der offiziellen Spezifikation von UPnP AV [11]. Sie definiert die Interaktionen zwischen Control Point und Device zur
Wiedergabe von Medieninhalten, wobei weder das Transportprotokoll, noch das Medienformat eingeschränkt werden. Im Prinzip gibt der Control Point einem Device lediglich Befehle, was es zu tun hat.
Der eigentliche Datenfluss (Stream) ist nicht Bestandteil von UPnP AV. Dieses typische InteraktionsModell ist in Abbildung 6 dargestellt.
Abbildung 6: Interaktions-Modell [11]
Explizit keine Berücksichtigung im Design von UPnP AV hat bidirektionale Kommunikation zwischen
zwei Devices (zum Beispiel Audio- oder Videokonferenz). [11]
Mit UPnP AV sind zwei neue Gerätetypen, der Media Server und der Media Renderer, und einige
Services eingeführt worden.
Ein Media Server stellt Daten im Netzwerk zur Verfügung. Daher sollte er je nach Anwendungsfall die
in der Tabelle 1 aufgelisteten Service implementiert haben.
Studiengang Informatik
Seite 6
Service
Beschreibung
Content Directory Service
Bietet eine Action Browse() an, welche einem Control Point die
verfügbaren Ressourcen auflistet.
Connection Manager Service
Die beiden Actions PrepareForConnection() und
ConnectionComplete() sind optional zu implementieren.
Wenn die beiden Actions implementiert sind, können mehrere
(virtuelle) Instanzen eines AV Transport Service unterschieden
werden. Wenn sie nicht implementiert sind, wird nur eine Instanz mit InstanceID=0 verwendet.
AV Transport Service
Ermöglicht dem Control Point den Datenfluss zu steuern. So
können Play(), Stop(), Pause() oder Seek()-Actions aufgerufen werden. Eine detaillierte Erklärung folgt im nächsten
Kapitel.
Tabelle 1: Services eines Media Servers.
Ein Media Renderer spielt Inhalte ab. Er hat neben den beiden Services Connection Manager und AV
Transport noch den Rendering Control Service implementiert (siehe Tabelle 2). Der Connection Manager Service ist jedoch um die Action GetProtocolInfo() erweitert. Diese ermöglicht einem
Control Point die unterstützten Formate und Transportprotokolle abzufragen.
Service
Beschreibung
Rendering Control Service
Stellt Actions zur Verfügung, um die Art der Wiedergabe zu
steuern. So kann die unter anderem die Helligkeit, der Kontrast
und die Lautstärke eingestellt werden.
Tabelle 2: Services eines Media Renderers.
AV Transport Service
Hierbei handelt es sich um eine Gruppe von Actions und Zustandsvariablen zur Steuerung einer
Wiedergabe. Die Zustandsvariable TransportState definiert, ob der Renderer gestoppt oder ob
gerade ein Stream aktiv ist. Je nach Zustand machen einige Actions Sinn und anderer nicht. Beispielsweise macht es keinen Sinn, Pause() aufzurufen, wenn das Device im Zustand STOPPED ist.
Zustandsmaschine
Die Spezifikation schreibt vor, welche Werte die Variable TransportState annehmen darf. Anhand
des aktuellen Zustands des Services und der Action, die darauf ausgeführt werden soll, kann bei
einem Übergang der neue Zustand vorausgesagt werden.
Studiengang Informatik
Seite 7
Abbildung 7: Zustandsdiagramm von AV Transport Service [12]
Abbildung 7 zeigt die minimale Zustandsmaschine mit ihren Übergängen. Jede Implementation muss
die Zustände STOPPED, PLAYING und TRANSITIONING unterstützen. Ebenfalls erforderlich sind PAUSED_PLAYBACK, PAUSED_RECORDING und RECORDING, wenn die jeweiligen Actions, um in diesen Zustand zu kommen, ebenfalls implementiert sind. Optional ist der Zustand NO_MEDIA_PRESENT. UPnP
erlaubt je nach Anwendungsfall das Erweitern dieses Diagramms durch zusätzliche Zustandsübergänge. Die Action GetCurrentTransportActions() retourniert eine kommaseparierte Liste mit allen
möglichen Actions, die das Gerät unterstützt. Ein Aufruf einer Action, die nicht in dieser Liste vorhanden ist, wird einen Fehler mit dem Code 701 (Transition nicht möglich) zur Folge haben. Daher sollte
beim Aufruf von erweiterten Actions immer geprüft werden, ob die Action auch tatsächlich existiert.
Actions
In der Tabelle 3 sind die, für dieses Projekt relevanten, Actions von AV Transport Service aufgelistet.
Grundsätzlich nimmt jede Action eine Instanz-ID (InstanceID) als Input-Parameter. Die vollständige
Liste aller Actions kann in der Spezifikation nachgelesen werden. [12]
Action
SetAVTransportURI()
Beschreibung
R
Setzt den Uniform Resource Identifier (URI) zu einer Mediendatei. Die Wiedergabe selbst ist nicht Teil dieser Action,
sondern würde über eine Play()-Action initiiert werden.
Input-Parameter sind die zu setzende URI CurrentURI und
allfällige Meta-Informationen zu dieser URI CurrentURIMetaData. Wobei CurrentURIMetaData auch ein Leerstring sein
darf, wenn das Feature nicht unterstützt oder benötigt wird.
GetMediaInfo()
R
Liefert verschiedene Informationen zur aktuellen Wiedergabe
auf einem Device.
Die Antwort des Devices auf diese Action beinhaltet insgesamt neun Argumente. Unter anderem die Dauer der aktuellen Wiedergabe (MediaDuration).
Studiengang Informatik
Seite 8
GetTransportInfo()
R
Retourniert Informationen zum aktuellen Transportstatus.
Rückgabe-Werte sind der aktuelle Transportzustand
CurrentTransportState, der TransportStatus
CurrentTransportStatus, sowie die aktuelle Abspielgeschwindigkeit CurrentSpeed. Mögliche Werte für den
TransportState sind in Abbildung 7 ersichtlich. Der Transport-Status kann die Werte OK, ERROR_OCCURRED oder eine
herstellerdefinierte Erweiterung annehmen.
GetPositionInfo()
R
Abfragen der Position der aktuellen Wiedergabe.
Insgesamt werden acht Argumente zurückgegeben. Eines
dieser acht ist RelTime, also die aktuelle Position im Format
„hh:mm:ss“.
Stop()
R
Versetzt das Device in den Transport-State STOPPED. Eine
laufende Wiedergabe wird gestoppt.
Play()
R
Starten der Wiedergabe auf einem Device. Falls keine Ressource spezifiziert ist, kann ein Fehler mit Error-Code 702
(Keine Medien verfügbar) zurückgegeben werden. Ansonsten
wird die Wiedergabe gestartet.
Nebst der Instanz-ID wird die Abspielgeschwindigkeit Speed
übergeben.
Pause()
O
Pausiert eine Wiedergabe. Wenn anschliessend wieder
Play() ausgeführt wird, so muss die Wiedergabe an exakt
derselben Stelle weiterlaufen, wie sie pausiert wurde. Diese
Action ist erlaubt, wenn der aktuelle Transportzustand
PLAYING ist. In allen anderen Transportzuständen kann ein
Fehler mit Error-Code 701 (Übergang nicht möglich) zurückgegeben werden.
Seek()
R
Ermöglicht das Fortsetzen einer Wiedergabe an einem beliebigen Zeitpunkt.
Input-Parameter sind nebst InstanceID eine Einheit Unit
und ein Ziel Target. Die Einheit ist notwendig, weil das Target in verschiedenen Formaten übergeben werden kann und
das Device wissen muss, wie die Zielposition interpretiert
werden soll.
Mögliche Einheiten sind unter anderem TRACK_NR, REL_COUNT
oder REL_TIME. Bei Letzterem wird das Target im Format
„hh:mm:ss“ übergeben, die ersten beiden nehmen eine positive Ganzzahl entgegen.
Diese Action ist möglich, wenn das Device STOPPED oder
PLAYING ist. Wenn sich das Gerät in einem anderen Transportzustand befindet, wird ein Fehler mit Error-Code 701
zurückgegeben.
Nach dem Start dieser Action wird der Variable
TransportState, während dem Suchen, der Wert
TRANSITIONING zugewiesen und anschliessend auf den
vorherigen zurückgesetzt.
Tabelle 3: Actions des AV Transport Service. R = REQUIRED, O = OPTIONAL
Eventing
Beim AV Transport Service wurde eine zusätzliche Zustandsvariable LastChange eingeführt. Dies ist
die einzige Variable, über dessen Änderungen Subscribers informiert werden.
Studiengang Informatik
Seite 9
Sie enthält Informationen über andere Zustandsvariablen in Form von Schlüssel-Wert-Paaren (siehe
Abbildung 8). Somit werden Änderungen in den anderen Zustandsvariablen indirekt über LastChange
notifiziert.
Änderungen in den Zustandsvariablen RelativeTimePosition, AbsoluteTimePosition, RelativeCounterPosition und AbsoluteCounterPosition werden nicht notifiziert. Wenn diese Informationen vom Control Point benötigt werden, beispielsweise um eine graphische Benutzeroberfläche
zu aktualisieren, muss der Wert der Variable in einem geeigneten Intervall beim Device abgefragt
werden.
<?xml version="1.0" encoding="UTF-8"?>
<e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0">
<e:property>
<LastChange>
<Event xmlns="urn:schemas-upnp-org:metadata-1-0/AVT/">
<InstanceID val="0">
<NumberOfTracks val="1" />
<CurrentTrack val="1" />
<CurrentTrackDuration val="02:07:10" />
<CurrentMediaDuration val="02:07:10" />
</InstanceID>
</Event>
</LastChange>
</e:property>
</e:propertyset>
Abbildung 8: Beispiel für LastChange-Event
2.3
DLNA
DLNA steht für Digital Living Network Alliance. Dabei handelt sich um eine Organisation mit mehr als
200 Mitgliedern, wobei es sich bei diesen Mitgliedern um namhafte Hersteller wie Samsung, Sony,
Panasonic oder Intel handelt. Gegründet wurde die Organisation im Jahre 2003 mit dem Ziel, mittels
verbindlichen Richtlinien, die Interoperabilität von Komponenten verschiedener Hersteller im Bereich
Multimedia über das Heim-Netzwerk zu gewährleisten.
Damit die Zusammenarbeit dieser Geräte auch garantiert ist, hat die Allianz ein Zertifikationsprogramm ins Leben gerufen. Jedes Produkt, das die Tests bestanden und das Zertifikat erhalten hat,
wird mit einem DLNA-Logo versehen. Somit sieht der Endkunde auf Anhieb, ob er ein neues Gerät
problemlos in sein vernetztes Heim integrieren kann. [13]
DLNA und UPnP
In der über 900-seitigen DLNA Richtlinie Teil 1-1 geht es um die Architektur und die Protokolle. Kapitel
4.3 beschreibt, dass UPnP für das Auffinden und Kontrollieren von Geräten im Netzwerk genutzt wird
und alle erwarteten Anforderungen erfüllt.
„Device discovery and control enables a device on the home network to discover the presence and
capabilities of other devices on the network and collaborate with these devices in a uniform and consistent manner. The UPnP Device Architecture, version 1.0 (ISO/IEC 29341-1:2011), addresses all of
these needs and simplifies device networking in the home. For this reason, UPnP Device Architecture
is the device discovery and control solution for DLNA devices. Subclause 7.2.5.5.27.6 specifies the
detailed guidelines to enable interoperability between DLNA devices in the digital home.“ [14]
Für die Verteilung von Medieninhalten im Netzwerk wird UPnP AV mit seinem Interaktionsmodell
verwendet.
UPnP AV selber hat keine Einschränkungen bezüglich Medienformaten. DLNA hingegen spezifiziert
sowohl eine Menge an Formaten für jede Kategorie (Video, Audio, Bilder), die als Mindestanforderung
verstanden werden müssen, als auch eine Menge von Formaten, die optional unterstützt werden
können.
Studiengang Informatik
Seite 10
Das heisst, grundsätzlich können UPnP-Geräte und DLNA-zertifizierte Geräte im selben Netz betrieben werden. Es gibt aber keine Garantie dafür, dass alle Medieninhalte untereinander geteilt werden
können. Wenn aber nur DLNA-zertifizierte Geräte eingesetzt werden, dann ist die Zusammenarbeit
durch eine gemeinsame Grundausstattung an unterstützten Formaten gewährleistet. [14]
DLNA-Komponenten
DLNA definiert ausserdem verschiedene Rollen für Komponenten, wobei eine Komponente je nach
Funktionalität eine oder zwei Rollen einnehmen kann (Tabelle 4).
UPnP Rolle
Beschreibung
Digital Media Server (DMS)
Stellt Medieninhalte im Netzwerk bereit.
Digital Media Player (DMP)
Kann im Netzwerk bereitgestellte Inhalte suchen
und abspielen.
Digital Media Renderer (DMR)
Wird von einem Controller kontrolliert und spielt
Medien ab.
Digital Media Controller (DMC)
Sucht einerseits im Netzwerk bereitgestellte
Inhalte. Andererseits sucht er im Netzwerk nach
vorhanden Renderer und weist anschliessend
einen Renderer an, eine Ressource wiederzugeben.
Tabelle 4: Komponenten von DLNA und Beschreibung der Rolle.
Studiengang Informatik
Seite 11
3
Konzept
3.1
Infrastruktur-Anforderungen
Im Folgenden wird die mögliche Anzahl paralleler Streams auf einer Gigabit-Leitung und einer Harddisk evaluiert. Angenommen wird, dass ein HD-Stream je nach Kodierung und Komprimierung eine
Bitrate zwischen 8 und 12 Mbit/s [15] benötigt, wobei vom Maximum ausgegangen wird.
Media-Streaming stellt besondere Anforderungen an die Netzwerkinfrastruktur. Normaler Netzwerkverkehr verläuft so, dass ein Benutzer eine Webseite aufruft, diese geladen wird und das Netz danach, während dem der Benutzer die Webseite liest, nicht weiter belastet wird. Media-Streaming
hingegen, belastet das Netz konstant, da ständig Daten nachgeladen werden. Ein Gigabit-Netzwerk
hat eine Bandbreite von 1000 Mbit/s. Das heisst, über eine solche Leitung gehen in etwa 83 parallele
Streams (1000 Mbit/s / 12 Mbit/s). Mit üblichen, netzwerktechnischen Massnahmen wie Erhöhung der
Bandbreite durch Einsetzen einer 10-Gibabit-Leitung oder Link Aggregation (Bündeln von mehreren
Leitungen zu einer logischen Leitung) können bessere Werte erzielt werden.
Bei der Harddisk ist vor allem die Lesegeschwindigkeit wichtig. Diese variiert je nach FestplattenModell stark [16]. Auch ist sie abhängig von der gewählten Blockgrösse. Für die Berechnung wird von
einer durchschnittlichen Lesegeschwindigkeit von 150 MB/s ausgegangen. 150 MB/s entsprechen
1200 Mbit/s. Das heisst, es können theoretisch 100 Streams gleichzeitig lesen. In der Praxis ist die
Anzahl Streams aber kleiner, weil andere Systemdienste ebenfalls die Festplatte benutzen. Eine
höhere Performance kann durch den Einsatz von RAIDs erzielt werden.
Zusammenfassend kann man festhalten, dass der erste limitierende Faktor das Netzwerk und der
zweite die Festplatte ist. Je nach Anzahl parallel erwarteter Streams müssen diese Parameter durch
geeignete Massnahmen angepasst werden.
3.2
Use-Cases
3.2.1
Video on Demand
Der Hotelgast kann aus einer Videothek, welche das Hotel zu Verfügung stellt, Filme mieten.
Ablauf:
1. Der Hotelgast ruft mit seinem mobilen Device eine definierte Seite auf, auf der alle Filme aufgelistet sind, die das Hotel für den „Video on Demand“-Service zur Verfügung stellt.
2. Der Hotelgast kann einzelne Filme zu einem definierten Preis mieten.
3. Der Hotelgast kann gemietete Filme abspielen, vor- und zurückspulen, pausieren und stoppen.
3.2.2
Streaming von eigenen Medien
Der Hotelgast kann eigene Inhalte, welche er auf seinem mobilen Device hat, auf dem im Zimmer
vorhandenen Smart-TV abspielen.
Studiengang Informatik
Seite 12
3.3
Aufbau
Abbildung 9: Schematischer Aufbau der verschiedenen, miteinander interagierenden Komponenten
Abbildung 9 zeigt die benötigten Komponenten um die definierten Use-Cases umzusetzen, wobei
Tabelle 5 die eigentliche Rolle der einzelnen Geräte im gesamt System erläutert. Tabelle 6 weist den
Komponenten die UPnP-spezifischen Rollen zu.
Komponente
Name
Beschreibung
PMS
Das PMS ist ein Hotelreservierungssystem. Es ermöglicht das
computergestützte Verwalten und Steuern eines Hotels [17].
Property Management System
Zusätzliche Dienstleistungen wie die Benutzung der Minibar,
des Zimmerservices oder auch dem Mieten von Filmen, werden im PMS erfasst und dem Hotelgast in Rechnung gestellt.
Damit die Mietgebühren verrechnet werden können, wird eine
bestehende Schnittstelle genutzt.
CMS
ContentManagementSystem
Ein CMS (Inhaltsverwaltungssystem) ist eine Software zur
gemeinschaftlichen Erstellung, Bearbeitung und Organisation
von Inhalten (Content) [18].
Das CMS ist die Benutzeroberfläche für die Filmverwaltung
seitens des Hotels. Das Hotel kann neue Filme hochladen und
Beschreibungen zu jedem Film erfassen.
Des Weiteren ist es der Zugang für den Hotelgast, der über die
Weboberfläche Filme mieten und abspielen oder auch seine
eigenen Dateien hochladen und wiedergeben kann.
Streaming-Server
Der Streaming-Server ist zuständig für die Bereitstellung der
Filme und die Verwaltung der Streams. Alle Filme, die das
Hotel anbietet, sind auf dem Streaming-Server abgelegt.
Die Hardware des Streaming-Servers muss sehr leistungsfähig
sein. Ansonsten ist nicht gewährleistet, dass der StreamingService auch ohne Einbussen funktioniert.
Smart-TV
Studiengang Informatik
Der Smart-TV spielt den angeforderten Inhalt ab. Damit dies
reibungslos funktioniert, muss der Smart-TV den UPnPStandard unterstützen.
Seite 13
Device
Das Device ist das mobile Endgerät (Computer, Tablet, Smartphone) des Gastes. Mittels diesem Gerät wird auf das CMS
zugegriffen und die Wiedergabe gesteuert.
Tabelle 5: Beschreibung der einzelnen Komponenten und deren Aufgabe im Gesamtsystem
Komponente
Name
UPnP Aufgabe
Smart-TV
Media Renderer
Streaming-Server
Control Point
Media Server
Tabelle 6: UPnP Rolle der Komponenten
Der Control Point sendet die eigentlichen Aktionen (Play(), Pause(), Stop()) an die Renderer. Der
Media Server stellt den Renderer die Multimediainhalte zur Verfügung. Der aktuelle Zustand der
Wiedergabe wird auf dem Device des Gastes visualisiert.
3.4
Mögliche Lösungsansätze für direktes Streamen
Um direkt vom mobilen Device auf den Smart-TV streamen zu können, muss eine entsprechende
Anwendung installiert sein. Bei Apple Produkten ist AirPlay standardmässig vorhanden. Andere Betriebssysteme können eine alternative Streaming-Applikation über den App-Store nachinstallieren.
3.4.1
Ansatz: Samsung Applikation und Soft-AP
Für Android-Geräte bietet Samsung eine App. Wenn der Soft Access Point des Smart-TVs aktiviert ist,
können, mittels dieser App, Medien auf dem Fernseher wiedergegeben werden. Da es sich aber um
eine proprietäre Applikation handelt, wurde dieser Ansatz verworfen.
3.4.2
Ansatz: Smart-TV und mobiles Device im selben Netz
Wenn der Smart-TV und die eigenen Geräte der Gäste im selben Netz sind, kann direktes Streaming
sehr einfach umgesetzt werden. Sicherheitstechnisch ist dieser Aufbau aber heikel, da jeder Gast die
Möglichkeit hat, auf andere Smart-TVs zu streamen (siehe Abbildung 10). Diese Lösung genügt nicht
den Anforderungen des Kunden.
Studiengang Informatik
Seite 14
Abbildung 10: Keine Garantie der Sicherheit, wenn alle Geräte im selben Netz sind
Icon
Information
Film vom eigenen Gerät auf den Smart-TV streamen.
Versendete Filmpakete
Tabelle 7: Legende zu Ablaufdiagram
3.4.3
Ansatz: Ein Netz pro Zimmer
Eine weitere Möglichkeit ist, dass in jedem Hotelzimmer ein eigener Access Point mit eigenem IP-Netz
installiert wird (Abbildung 11: Eigenes IP-Netz pro Zimmer). Dies garantiert, dass nur die Geräte des
Gastes und der Smart-TV des Zimmers im gleichen Netz sind. Dadurch ist die Sicherheit zwar garantiert, aber die Kosten sind horrend. Pro Zimmer muss ein Access Point installiert und konfiguriert
werden. Auch diese Lösung wurde vom Kunden verworfen.
Studiengang Informatik
Seite 15
Abbildung 11: Eigenes IP-Netz pro Zimmer
Icon
Information
Blockierte Filmpakete.
Tabelle 8: Legende zu Ablaufdiagramm
3.4.4
Ansatz: Dynamisches Routing
Befindet sich der Smart-TV und das Gerät des Gastes nicht im gleichen Netz, kann der Zugriff vom
Gerät auf den Smart-TV durch die Firewall kontrolliert werden. Damit die Kommunikation von einem
Netz ins andere Netz funktioniert, muss ein dynamisches Routing implementiert werden. Dessen
Ablauf könnte wie folgt aussehen: das Gerät des Gastes fordert eine DHCP-Adresse beim DHCPServer an (Abbildung 12, Schritt 1). Der DHCP-Server führt Buch, welches Gerät (MAC-Adresse)
welche IP-Adresse zu welcher Zeit (Lease Time) erhalten hat (Abbildung 12, Schritt 2) und wie lange
die IP-Adresse gültig ist. Das Gerät erhält dann die IP vom DHCP-Server (Abbildung 12, Schritt 3).
Nun meldet sich der Gast auf dem CMS-Server mit seinem Login an. Wenn sich der Benutzer einloggt, sendet das CMS eine Meldung an die Firewall-Konfigurationseinheit. Diese fragt beim DHCPServer nach (Abbildung 12, Schritt 6, 7), wie lange die IP- Adresse gültig ist. Hat die FirewallKonfigurationseinheit alle notwendigen Informationen gesammelt, erstellt sie auf dem Router eine
neue Routing Policy, die es dem Gerät mit der bestimmen IP erlaubt, Pakete an den Smart-TV zu
senden und zu empfangen (Abbildung 12, Schritt 8). Wenn die DHCP-Lease-Time abgelaufen ist, wird
das Routing wieder ausgetragen. Die hohe Komplexität würde den Umfang dieses Projektes überschreiten.
Studiengang Informatik
Seite 16
Abbildung 12: Realisierung von dynamischem Routing
Icon
Information
Hardware Adresse des Gastgerätes
Film vom eigenen Gerät auf den Smart-TV streamen
Lease Time einer IP-Adresse
Komponente zur dynamischen Konfiguration einer oder mehreren Routern
Routing Policy umkonfigurieren
Anfrage der Lease Time und MAC-Adresse
Tabelle 9: Legende zu Ablaufdiagramm
Studiengang Informatik
Seite 17
3.4.5
Fazit zum direkten Streamen
Alle oben beschriebenen Ansätze kommen aus unterschiedlichen Gründen nicht in Frage. Direktes
Streaming wurde daher nicht umgesetzt.
3.5
Definitives Lösungskonzept
Das Endgerät des Gastes muss Konnektivität zum CMS-Server und zum Streaming-Server haben.
Die Filmbeschreibungen werden vom CMS-Server geladen, die REST-Aufrufe werden direkt vom
Device an den Streaming-Server gesendet. Damit die Mieten korrekt verrechnet werden können,
muss der CMS-Server ausserdem mit dem PMS-Server verbunden sein. Streaming-Server und Renderer müssen sich im gleichen IP-Netz befinden (siehe Abbildung 13).
Abbildung 13: Netzwerkdiagramm
3.5.1
Gast checkt ein
Bevor überhaupt ein Gast im PMS erfasst wird, müssen im CMS die Hotelzimmer erfasst werden.
Dies beinhaltet die Zimmernummer und die IP-Adresse des Renderers (siehe Abbildung 14, Schritt 1).
Wird ein Gast erfasst, werden unter anderem sein Name und in welchem Zimmer er nächtigt ins PMS
eingetragen (siehe Abbildung 14, Schritt 2).
Wenn ein neuer Gast im PMS erfasst wird, erhält die SocketApplication auf dem CMS-Server eine
Notifikation und erstellt in der Datenbank des CMS einen neuen Gast (siehe Abbildung 14, Schritt 3).
Zusätzlich löst die SocketApplication einen REST-Aufruf aus, um den neuen Gast auf dem StreamingServer zu erfassen (siehe Abbildung 14, Schritt 4).
Studiengang Informatik
Seite 18
Abbildung 14: Ablauf beim Erfassen eines neuen Gastes
Icon
Information
Beispiel
Informationen über den Gast (nicht alle
Informationen sind für das Streaming System relevant)
Vorname: Hans
Name: Muster
Reservationsnummer: 1234
Sprache: de
... (nicht relevant für das Streaming System)
Zimmernummer des vom Gasts belegten
Hotelzimmers
203
Informationen um auf dem CMS den Gast
zu erstellen
Vorname: Hans
Nachname: Muster
Reservationsnummer: 1234
Sprache: en
IP-Adresse des Renderers (ip_address)
192.168.1.103
Erstellen eines neuen Benutzerordners
Information zum Erstellen des Benutzerordners (user)
MD5(GuestID) =
827ccb0eea8a706c4c34a16891f84e7b
 Name des Benutzerordners des Gastes
Tabelle 10: Legende zu Ablaufdiagramm
Gast auf dem Streaming-Server erfassen
Um einen Gast auf dem Streaming-Server zu erfassen, müssen die Parameter user und ip_address
beim Aufruf übergeben werden. User wird verwendet um einen Benutzerordner auf dem StreamingServer anzulegen. Alle Inhalte, die der Gast hochlädt, werden in seinem Benutzerordner abgespeichert. Dieser ist im öffentlich erreichbaren Teil des Webservers abgelegt und somit für alle Geräte im
Streaming-Netz zugänglich. Um zu verhindern, dass jedes Gerät auf jeden Benutzerordner zugreifen
kann, wird auf den einzigartigen Wert von user eine Hashfunktion angewendet. Die Hashfunktion
(MD5) erzeugt einen 32 Zeichen langen String, der als Namen des Benutzerordner verwendet wird.
Dieses Vorgehen macht es mühsam, einen Benutzerordner ausfindig zu machen, ohne Kenntnis der
genauen URL zu haben.
Jeder Benutzerordner hat zwei Unterordner. Der Unterordner private beinhaltet Inhalte, die der
Benutzer selbst hochgeladen hat. Der Unterordner rented enthält Softlinks zu den Filmen, die der
Gast gemietet hat. Abbildung 15 visualisiert die Ordnerstruktur.
Studiengang Informatik
Seite 19
user
.htacces
private
rented
Abbildung 15: Ordnerstruktur eines neu erfassten Benutzers
Jeder Benutzerordner hat zwei Unterordner. Der Unterordner private beinhaltet Inhalte, die der
Benutzer selbst hoch geladen hat. Der Unterordner rented enthält Verknüpfungen zu den Filmen, die
der Gast gemietet hat. Snippet 5 stellt den Inhalt der .htaccess Datei dar.
# ALLOW USER BY IP
<Limit GET POST>
order deny,allow
deny from all
allow from ipAddress
</Limit>
Snippet 5: Inhalt der „.htaccess“-Datei um Benutzerordner zu schützen
Bei Fehlern
Wenn auf der Seite des Servers ein Fehler beim Erstellen eines Benutzerordners auftritt, so wird dies
nur in den Logfiles dokumentiert. Die Schnittstelle zum PMS (SocketApplication) bietet keine Möglichkeit, Fehler an das PMS weiterzuleiten.
3.5.2
Erfassen von Filmen
Ein Angestellter des Hotels muss die Filme im Backend des CMS erfassen (Abbildung 16, Schritt 1).
Für jede Sprache müssen die Informationen über den Film separat erfasst werden. Bei jedem Film
muss erfasst werden, wie die einzelnen Film-Files heissen (siehe Tabelle 11).
Der Angestellt muss die Filme auch auf den Streaming-Server laden (Abbildung 16, Schritt 2). Die
Filme müssen in dem im Konfigurationsdatei (siehe Tabelle 29) festgelegten Ordner auf dem
Streaming Server kopiert werden. Es gibt einen REST-Service zum Hochladen von Filmen über einen
HTTP-Request. Davon wird aber abgeraten, da es sehr lange dauert, grosse Dateien hoch zu laden.
Abbildung 16: Einfügen von neuen Filmen ins CMS und auf den Streaming-Server
Studiengang Informatik
Seite 20
Icon
Parameter
Information
Beispiel
movie_id
Bei allen gleichen Filmen
muss bei der Erfassung der
Name gleich sein. Es ist
der Ordner in dem die
Filme auf dem Streaming
Server hinterlegt sein
müssen.
AmericanSniper
movie_title
American Sniper
movie_cover
movie_description
movie_year
movie_cost
2015
Kosten des Films in einer
definierten Währung.
movie_duration
5
132
movie_rentduration
Anzahl der Stunden, die
ein Film konsumiert werden
kann, nachdem er gemietet
Wurde.
24
movie_filename_de
Dateiname für die deutsche
Fassung.
deu-AmericanSniper_Sky_TypeA.mp4
movie_filename_en
Dateiname für die englische Fassung.
en-AmericanSniper_Sky_TypeA.mp4
movie_filename_fr
Dateiname für die französische Fassung.
fr-AmericanSniper_Sky_TypeA.mp4
movie_filename_es
Dateiname für die spanische Fassung.
es-AmericanSniper_Sky_TypeA.mp4
movie_filename_it
Dateiname für die italienische Fassung.
it-AmericanSniper_Sky_TypeA.mp4
movie_genre
Action
Tabelle 11: Legende für Filmbeschreibung
3.5.3
Video on Demand: Möglichkeiten und Ablauf
Authentifizieren im Netz
Der Gast verbindet sein mobiles Gerät (Device) mit dem öffentlichen WLAN des Hotels (Abbildung 17,
Schritt 1). Ist dies geschehen, wird der Gast auf eine Landing Page (CMS) weitergeleitet, auf der er
sich authentifizieren muss. Wenn sich der Gast erfolgreich authentifiziert hat, sind die Zimmernummer
und somit auch die IP-Adresse des Fernsehers bekannt. Ohne Authentifizierung kann der Gast keine
Filme mieten.
Will nun der Gast einen Film mieten, so muss er auf die „Video on Demand“-Seite auf dem CMS
navigieren (Abbildung 17, Schritt 2).
Studiengang Informatik
Seite 21
Abbildung 17: Einloggen und verfügbare Filme anfordern
Icon
Information
Anfragen der verfügbaren Filme.
Tabelle 12: Legende zu Ablaufdiagramm
Verfügbare Filme anzeigen
Auf der „Video on Demand“-Seite werden dem Gast alle zur Verfügung stehenden Filme aufgelistet.
Diese sind im CMS eingepflegt und werden aus der Datenbank des CMS Systems geladen (Abbildung
18, Schritt 3).
Abbildung 18: Anzeigen der verfügbaren Filme
Icon
Information
Verfügbare Filme
Tabelle 13: Legende zu Ablaufdiagramm
Studiengang Informatik
Seite 22
Mieten eines Films
Der Gast kann nun einen Film mieten (Abbildung 19, Schritt 4). Einen gemieteten Film hat er in allen
vorhandenen Sprachen zur Verfügung. Der gemietete Film wird dem Gast in Rechnung gestellt, indem
eine Meldung via SocketApplication an den PMS-Server gesendet wird (Abbildung 19, Schritt 5).
Dabei wird noch auf dem Streaming-Server eine REST-Anfrage ausgelöst, dass der Gast einen bestimmten Film gemietet hat (Abbildung 19, Schritt 6). Jeder gemietete Film wird mit einer Verknüpfung
(Soft Link) in seinen Benutzerordner gelinkt. Zusätzlich wird ein Ausleih-Task erzeugt und in die
Datenbank gespeichert. Jeder Ausleih-Task enthält die Information, bis zu welchem Datum ein Film
ausgeliehen ist. Die Datenbank wird periodisch geprüft und die Verknüpfungen fälliger Ausleihen
werden aus dem Benutzerordner entfernt.
Abbildung 19: Mieten eines Films
Icon
Information
Film mieten.
Tabelle 14: Legende zu Ablaufdiagramm
Starten eines Films
Startet der Gast einen Film über das Webinterface (Abbildung 20, Schritt 1), wird ein REST-Aufruf
ausgelöst (Abbildung 20, Schritt 2), dass der Gast einen Film in der englischen Sprachversion auf
seinem Smart-TV anschauen will. Daraufhin registriert sich der Streaming-Server beim Smart-TV als
Listener, um etwaige Stopp-Aktionen durch die Fernbedienung zu erhalten (Abbildung 20, Schritt 3).
Ist dies geschehen, erhält der Smart-TV eine SOAP-Nachricht zum Setzen der Lokalität des Films
(Abbildung 20, Schritt 4) und eine Play-Aktion zum Starten des Films (Abbildung 20, Schritt 5). Nun
beginnt der Smart-TV mit dem Streaming, indem er den Film vom Webserver auf dem StreamingServer herunterlädt und anzeigt (Abbildung 20, Schritt 6).
Studiengang Informatik
Seite 23
Abbildung 20: Starten eine gemieteten Films
Icon
Information
Beispiel
Starten eines
Films.
Dateiname des
zu startenden
Films.
en-AmericanSniper_Sky_TypeA.mp4
AmericanSniper
Webserver-URL
http://192.168.1.2:80/
Control Point
meldet sich beim
Renderer als
Listener an
SUBSCRIBE /AVTransport/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/event.xml HTTP/1.0
Content-Length: 0
HOST: 192.168.1.103
CALLBACK: <http://192.168.1.2:8058/evetSub>
NT: upnp:event
TIMEOUT: infinite
Connection: close
Action zum
Setzten der
wiederzugebenden Datei
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:SetAVTransportURI xmlns:u="urn:schemas-upnporg:service:AVTransport:1">
<InstanceID>0</InstanceID>
<CurrentURI>
http://192.168.1.2:80/users/827ccb0eea8a706c4c34a16891f84e7b/rented
/en-AmericanSniper_Sky_TypeA.mp4
</CurrentURI>
<CurrentURIMetaData></CurrentURIMetaData>
</u:SetAVTransportURI>
</s:Body>
</s:Envelope>
Studiengang Informatik
Seite 24
Play()-Action
zum Starten einer
Wiedergabe
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">
<InstanceID>0</InstanceID>
<Speed>1</Speed>
</u:Play>
</s:Body>
</s:Envelope
Tabelle 15: Legende zu Ablaufdiagramm
Pausieren
Der Gast kann mittels der Steuerung auf der Weboberfläche den Film pausieren. Die Fortschrittsanzeige läuft dann nicht mehr weiter. Im Hintergrund wird eine REST-Anfrage an den Streaming-Server
(Abbildung 21, Schritt 1) gesendet. Dieser sendet eine SOAP-Nachricht an den Smart-TV, dass der
Film pausiert werden soll (Abbildung 21, Schritt 2).
Abbildung 21: Stoppen eine gemieteten Films
Icon
Information
Beispiel
Aktion zum Pausieren
eines Films.
Pause()-Action
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:Pause xmlns:u="urn:schemas-upnporg:service:AVTransport:1">
<InstanceID>0</InstanceID>
</u:Pause>
</s:Body>
</s:Envelope>
Tabelle 22: Legende zu Ablaufdiagramm
Spulen
Der Gast kann die Wiedergabe vor- und zurückspulen (Abbildung 23, Schritt 1) indem er den Regler
auf der Fortschrittsanzeige vor und zurück bewegt. Der Wert der Fortschrittsanzeige wird erst beim
Loslassen abgefragt. Der neue Wert und die IP-Adresse des Geräts werden als REST-Anfrage an den
Studiengang Informatik
Seite 25
Streaming-Server gesendet (Abbildung 23, Schritt 2). Der Streaming-Server sendet daraufhin einen
Seek-Befehl an den Renderer mit der vom Gast gewählten Position (Abbildung 23, Schritt 3). Daraufhin spult der Fernseher an die gewählte Stelle (Abbildung 23, Schritt 4).
Abbildung 23: Spulen von Filmen
Icon
Information
Beispiel
Spulen eines Films.
IP-Adresse: 192.168.1.103
Zeit: 00:34:00
Seek()-Action mit
Angaben von Einheit
und Ziel
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:Seek xmlns:u="urn:schemas-upnporg:service:AVTransport:1">
<InstanceID>0</InstanceID>
<Unit>REL_TIME</Unit>
<Target>00:34:00</Target>
</u:Seek>
</s:Body>
</s:Envelope>
Tabelle 16: Legende zu Ablaufdiagramm
Stoppen
Ein Gast kann jederzeit einen Film stoppen über den Stopp-Knopf der Webapplikation (Abbildung 24,
Schritt 1). Auf dem Streaming-Server wird der laufende Film gestoppt und aus der Wiedergabeliste
gelöscht (Abbildung 24, Schritt 2). Der Streaming-Server sendet dem Renderer einen Stopp-Befehl,
woraufhin der Renderer die aktuelle Wiedergabe stoppt. Falls in der Playlist noch weitere Inhalte
gelistet sind, wird der nächste Inhalt in der Liste gestartet. Dem Renderer wird ein Befehl zum Setzen
des neuen Inhaltes (SetAVTransportURI) gesendet (Abbildung 24, Schritt 4) und darauffolgend einen
Start-Befehl (Abbildung 24, Schritt 5). Nun zeigt der Renderer den neuen Inhalt an (Abbildung 24,
Schritt 6).
Studiengang Informatik
Seite 26
Abbildung 24: Stoppen eines Films wenn die Playliste noch Streams enthält
Icon
Information
Beispiel
Löschen eines Streams
aus der Wiedergabeliste.
Stoppen eines Films.
IP-Adresse: 192.168.1.103
Stop()-Action
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:Stop xmlns:u="urn:schemas-upnporg:service:AVTransport:1">
<InstanceID>0</InstanceID>
</u:Stop>
</s:Body>
</s:Envelope>
Tabelle 17: Legende zu Ablaufdiagramm
Befindet sich nach dem Entfernen der aktuellen Wiedergabe kein Stream mehr in der List, so sendet
der Streaming-Server dem Smart-TV einen Unsubscribe-Request um sich als Listener abzumelden
(siehe Abbildung 25, Schritt 5).
Studiengang Informatik
Seite 27
Abbildung 25: Stoppen eines Films wenn die Playliste leer ist
Icon
Information
Beispiel
HTTP UNSUBSCRIBE
Paket.
UNSUBSCRIBE /AVTransport/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/event.xml HTTP/1.0
Der Control Point meldet
sich als Listener beim
Renderer ab.
Content-Length: 0
HOST: 192.168.1.103
SID: uuid:ae5361ea-9d1c-0ced-440a-2f2967c9aec4
Connection: close
Tabelle 18: Legende zu Ablaufdiagramm
Stoppen eines Films mit der Fernbedienung
Da sich der Streaming-Server beim Smart-TV als Listener registriert, erhält der Streaming-Server eine
Notifikation falls sich der Zustand des AV Transport Service ändert. Wenn der Gast also mit der Fernbedienung den laufenden Film stoppt (Abbildung 26, Schritt 1), sendet der Smart-TV dem StreamingServer eine Notifikation dass sich der TransportState von PLAYING auf STOPPED geändert hat
(Abbildung 26, Schritt 2). Dies nimmt der Streaming-Server zur Kenntnis und löscht den Stream auf
der ersten Position in der Playliste (Abbildung 26, Schritt 3). Wenn die Playliste nicht leer ist, rutscht
der zweite Stream auf die erste Position. Der Streaming-Server setzt die neue URI auf dem Smart-TV
(Abbildung 26, Schritt 4) und startet die Wiedergabe (Abbildung 26, Schritt 5).
Studiengang Informatik
Seite 28
Abbildung 26: Stoppen eines Streams mit der Fernbedienung. Playliste ist nicht leer
Icon
Information
Beispiel
Smart-TV Fernbedienung
Fernbedienungsbefehl zum
Stoppen eines Streams.
LastChangeEventnotifikation
<Event xmlns="urn:schemas-upnp-org:metadata-1-0/AVT/">
<InstanceID val="0">
<TransportState val="STOPPED" />
<NumberOfTracks val="0" />
<CurrentTrack val="0" />
<CurrentTrackDuration val="00:00:00" />
<CurrentMediaDuration val="00:00:00" />
</InstanceID>
</Event>
Tabelle 19: Legende zu Ablaufdiagramm
Ist die Wiedergabeliste hingegen leer, dann löscht der Streaming-Server den vorhandenen Stream
und schreibt sich als Listener aus (Abbildung 27, Schritt 4).
Studiengang Informatik
Seite 29
Abbildung 27: Stoppen eines Streams mit der Fernbedienung. Playliste ist leer
Positionsinfo
Die Kommunikation zwischen dem mobilen Device und dem Streaming-Server funktioniert unidirektional. Das heisst, der Streaming-Server kann das Device nicht kontaktieren. Wenn also der Stream mit
der Fernbedienung gestoppt wird, wird zwar der Streaming-Server benachrichtigt, aber der StreamingServer kann das mobile Device nicht informieren. Aus diesem Grund läuft auf dem Device ein
Scheduler, implementiert in JavaScript, der alle fünf Sekunden die aktuelle Position beim StreamingServer abfragt. (Abbildung 28, Schritt 1 und 2). Innerhalb der fünf Sekunden wird die Zeit interpoliert,
deshalb wird eine Änderung des Zustandes eines Streams auf dem Webinterface erst nach 5 Sekunden angezeigt. Der Streaming-Server selbst sendet die Action GetPositionInfo() an den Smart-TV
zur Bestimmung der aktuellen Position (Abbildung 28, Schritt 3). Der Streaming-Server antwortet mit
der aktuellen Position (Abbildung 28, Schritt 4) und sendet es dem mobilen Device des Gastes weiter
(Abbildung 28, Schritt 5 und 6).
Studiengang Informatik
Seite 30
Abbildung 28: Fortschrittsanzeige des Webinterfaces synchronisieren mit dem Stream
Icon
Information
Beispiel
Javascript-Scheduler,
der alle 5 Sekunden
die aktuelle Position
abfragt
REST-Anfrage an den
Streaming-Server zur
aktuellen Position des
Streams.
GetPositionInfo()
als SOAP-Nachricht
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/
">
<s:Body>
<u:GetPositionInfo xmlns:u="urn:schemas-upnporg:service:AVTransport:1">
<InstanceID>0</InstanceID>
</u:GetPositionInfo>
</s:Body>
</s:Envelope>
Antwort des Renderers auf
GetPositionInfo()
<s:Envelope
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/
" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<u:GetPositionInfoResponse xmlns:u="urn:schemasupnp-org:service:AVTransport:1">
...
<RelTime>00:38:40</RelTime>
...
</u:GetPositionInfoResponse>
</s:Body>
</s:Envelope>
Studiengang Informatik
Seite 31
Antwort an das Device
mit der aktuellen
Abspielzeit.
{
postitionLong: 310
postitionString: "00:05:10"
}
Tabelle 20: Legende zu Ablaufdiagramm
Eigene Inhalte hochladen
Der Gast hat die Möglichkeit eigene Inhalte auf den Streaming-Server hochzuladen und diese Inhalte
dann auf den Renderer zu streamen. Es können nur definierte Formate hochgeladen werden. Beim
Upload wird clientseitig aufgrund der Endung entschieden, ob die Datei hochgeladen wird oder nicht
(Abbildung 29, Schritt 1). Wird das Hochladen verwehrt, erhält der Gast eine Meldung, dass der
Dateityp nicht hochgeladen werden darf. Wenn die Endung in Ordnung ist, wir die Datei hochgeladen
(Abbildung 29, Schritt 2). Auf dem Streaming-Server selbst wird der Inhalt der Datei untersucht, um
heraus zu finden, um was für einen Dateityp es sich handelt (Abbildung 29, Schritt 3). Ist der Datentyp
nicht erlaubt, erhält der Gast wiederum eine Meldung und die Datei wird nicht auf die Festplatte geschrieben. Zusätzlich zum Hochladen der Datei, wird deren Name normalisiert. Alle Grossbuchstaben
werden in Kleinbuchstaben umgewandelt und Sonderzeichen aus dem Namen entfernt. Die Normalisierung des Dateinamens verhindert Fehler. Ein möglicher Fehler wäre, dass der Renderer die Datei
nicht finden kann.
Abbildung 29: Hochladen von eigenem Inhalt auf dem Streaming-Server
Icon
Information
Vorgang zur Bestimmung, ob die Datei hochgeladen werden darf. Auf dem StreamingServer wird der Dateiname normalisiert.
Datei, die vom Gast auf den Streaming-Server geladen wird. Kann ein Film, Bild oder
auch Musik sein.
Tabelle 21: Legende zu Ablaufdiagramm
Eigene Inhalte abfragen
Die Inhalte, die ein Gast selbst hoch lädt, werden in seinen privaten Benutzerordner (private) auf
dem Streaming-Server abgespeichert. Wenn ein Benutzer seine hochgeladenen Inhalte anzeigen will,
dann muss er auf die Seite im CMS navigieren, welche seine Dateien anzeigt (Abbildung 30, Schritt
1). Daraufhin wird eine REST-Anfrage an den Streaming-Server gesendet, welche eine Liste mit den
Namen der Dateien im Ordner als Antwort zurück schickt. (Abbildung 31, Schritt 1).
Studiengang Informatik
Seite 32
Abbildung 30: Anfrage: Abfragen der eigenen Inhalte
Abbildung 31: Antwort: Abfragen der eigenen Inhalte
Icon
Information
Dateiname.
Tabelle 22: Legende zu Ablaufdiagramm
3.5.4
Gast checkt aus
Wenn ein Gast das Hotel verlässt, wird er im PMS ausgecheckt (Abbildung 32, Schritt 1). Danach
erhält die SocketApplikation auf dem CMS-Server eine Notifikation, dass der Gast ausgecheckt hat.
Die Datenbank auf dem CMS-Server wird daraufhin angepasst. (Abbildung 32, Schritt 2). Zusätzlich
wir auf dem Streaming-Server die REST-Anfrage zum Löschen eines Benutzerordners aufgerufen
(Abbildung 32, Schritt 3). Durch diesen Aufruf werden alle laufenden Streams des Gastes gestoppt
und gelöscht. Dazu werden alle Tasks, zum Überprüfen der Ausleihfrist der Filme für diesen Gast, aus
der Datenbank auf dem Streaming-Server gelöscht. Zum Schluss wird der Benutzerordner des Gastes
entfernt.
Studiengang Informatik
Seite 33
Abbildung 32: Gast verlässt das Hotel
Icon
Information
Beispiel
Gast auschecken.
Vorname: Hans
Name: Muster
Reservationsnummer: 1234
Sprache: de
... (nicht relevant für das Streaming System)
Information, dass der Gast ausgecheckt hat.
Vorname: Hans
Nachname: Muster
Reservationsnummer: 1234
Sprache: de
Löschen der Filme in der Wiedergabeliste.
Löschen aller Ausleih-Task des
Gastes in der Datenbank.
Löschen des Benutzerordners.
Tabelle 23: Legende zu Ablaufdiagramm
Studiengang Informatik
Seite 34
4
Streaming-System
Das Streaming-System ist eine verteilte Applikation, die aus zwei Servern und mehreren Komponenten besteht. Die einzelnen Komponenten, betrieben auf den Servern, haben eine klar definierte Aufgabe und einen spezialisierten Einsatzzeck. Dies verlangt, dass die Wahl der Programmiersprachen,
Frameworks und Libraries stark von einzelnen Anforderungen an die Komponenten abhängig ist.
4.1
CMS-Server
Der CMS-Server, das Betriebssystem und die darauf betriebenen Applikationen wurden in einem
vorgängigen Projekt evaluiert und in Betrieb genommen. Daher wird in dieser Arbeit nicht darauf
eingegangen. Tabelle 24 listet die wichtigsten Applikationen und deren Versionen des übernommenen
Testsystems auf.
Applikation
Version
Verantwortung
Apache Server
2.2.22
Bereitstellen der Webseite.
Java 7
1.7.0_79
Ausführen der
Streaming-Applikation
MySQL
5.5.44
Datenbank zur Speicherung von Daten
Wordpress
4.2.1
CMS zum erfassen und
darstellen der Filme.
PHP
5.3.10
SocketApplication
Schnittstelle von CMS
zum PMS.
Tabelle 24: Für den Betrieb des CMS-Servers notwendige Software.
SocketApplication
Die Socket Applikation (im Projekt SocketApplication) wurde von einem Vorgänger Projekt entwickelt
und für diese Arbeit nur erweitert. Die Applikation ist dafür zuständig, dass PMS und CMS auf dem
gleichen Datenstand sind und interagieren können.
Die Erweiterung umfasst jeweils einen REST-Aufruf an den Streaming-Server wenn ein neuer Gast
erfasst wird und wenn ein bestehender Gast ausgecheckt wird.
Gekapselt
wurde
die
Funktionalität
in
der
Klasse
„RESTClient“
im
Package
„ch.fhnw.imvs.hotelplus.restclient“.
Die
Klasse
„DatabaseConnection“
im
Package
„ch.fhnw.ip314.hotelplus.data“ wurde um die zwei Methoden getGuestId() und getGuestIpAddress() erweitert.
Wordpress
Die graphische Benutzerschnittstelle des Streaming Systems wurde in die vorhandene CMS-Lösung
integriert. Zurzeit nutzt hotelplus Wordpress um Hotelangebote den Gästen zur Verfügung zu stellen.
Die Pflege der Filme erfolgt im Wordpress-Administrationsbereich. Das Wordpress-Plugin ACF (Advanced Custom Fields) wurde bereits vom Vorgängerprojekt verwendet und wird auch in diesem
Projekt eingesetzt. Grundsätzlich bietet es einem die Möglichkeit, einfach Felder zu definieren und
anschliessend abzufragen. Verwendet wird ein Repeater-Feld „movies“ mit Unterfelder (bspw.
„movie_title“). Das Repeater-Feld ist ähnlich einer Tabelle, wobei die Unterfelder die Spalten darstellen.
Studiengang Informatik
Seite 35
Mit dem Codeausschnitt in Snippet 6 kann auf ein solches Repeater-Feld zugegriffen werden.
<?php if( have_rows('movies') ): ?>
<ul>
<?php while( have_rows('movies') ): the_row(); ?>
<li>movie_title = <?php the_sub_field('movie_title'); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
Snippet 6: ACF Repeater-Feld Beispiel [19]
Abbildung 33: Erfassen von Filmen in Wordpress-Administrationsbereich (Dateinamen für die französisch, italienische und
spanische Version fehlen aus Platzgründen)
Abbildung 33 zeigt, wie die Filme erfasst werden. Dabei gibt es zwei Punkte, die genau beachtet
werden müssen:
Die Dateinamen der Filme im Wordpress müssen exakt mit denen auf dem Datenspeicher übereinstimmen. Ansonsten wird der Film nicht abgespielt. Jede Sprache hat einen eigenen Dateinamen.
Wenn das Feld leer (also auch ohne Leerzeichen) gelassen wird, wird angenommen, dass es diesen
Film in dieser Sprache nicht gibt.
Mit dem Wordpress-Plugin WPML (Wordpress Multilingual) wird die Webseite für jeden Gast in seiner
bevorzugten Sprache angezeigt. Das Plugin arbeitet so, dass von jeder Seite für jede Sprache eine
Version existiert. Das heisst, das Plugin leitet den Benutzer je nach Sprache auf eine andere Version
der Seite. Für die Pflege der Filmdatenbank müssen daher pro Sprachversion alle Filme erfasst werden. Aus Datensicht bedeutet das, dass beispielsweise ein Film auf der deutschen Seite kein Attribut
mit dem gleichen Film auf der englischen Seite gemeinsam hat. Damit eine Gemeinsamkeit besteht,
wurde das Unterfeld „movie_id“ eingeführt. Dieses muss über alle Sprachversionen eines Films eindeutig sein.
Damit der Client weiss, an welchen Fernseher er seine Inhalte streamen muss, fragt er die aktuelle IPAdresse beim CMS ab. Diese Informationen müssen ebenfalls im Wordpress-Administrationsbereich
gepflegt werden. Dem bereits existierenden Menüpunkt „hotelplus“ wurde ein Untermenü angehängt
(siehe Abbildung 34). Die Aufgabe des Untermenüs ist es, die Zimmernummer mit der jeweilig aktuellen Fernseher-IP-Adresse anzuzeigen und die Möglichkeit zu bieten, diese Informationen zu manipulieren.
Hotelplus hat ein eigenes Wordpress-Design. Der Code für die Streaming-Funktionalität wurde möglichst unabhängig in das vorhandene Theme integriert. Im Endeffekt mussten drei existierende Dateien bearbeiten werden, um die neuen Scripts einzubinden.
Die Darstellungslogik des Players und die Interaktion mit dem Streaming-Server wurden mit Javascript
und jQuery realisiert. Klicks auf die Knöpfe im Player generieren AJAX-Calls an die RESTSchnittstelle des Streaming-Servers.
Studiengang Informatik
Seite 36
Abbildung 34: Pflege der Fernseher-IP-Adressen
4.2
Streaming-Server
Als Betriebssystem für den Streaming-Server kann eine beliebige Linuxdistribution verwendet werden.
Das verwendete Testsystem ist ein Ubuntu-Linux (siehe Tabelle 25).
Betriebssystem
Ubuntu
Release
Kernel
14.04.2 LTS
3.16.0-30-generic
Tabelle 25: Betriebssystem des Testsystems
Der Streaming-Server besteht aus einer selbst entwickelten Anwendung und einigen Fremdapplikationen. Tabelle 26 listet alle benötigten Softwarekomponenten auf und beschreibt auch deren Einsatzzweck. Die Version bezieht sich auf das Testsystem.
Applikation
Version
Verantwortung
Apache Server
2.4.7
Bereitstellen der Daten
(Webserver) für die Renderer.
Java 8
1.8.0_45
Ausführen der StreamingApplikation
MySQL
5.5.43
Datenbank zur Speicherung
von Tasks.
StreamingApplikation
Tabelle 26: Verwendete Applikationen um den Dienst zu gewährleisten
Studiengang Informatik
Seite 37
4.2.1
Streaming-Applikation
Die Streaming-Applikation wird auf dem Streaming-Server ausgeführt und ist zuständig, dass Filme
gestreamt werden können. Die Applikation ist modular aufgebaut und besteht aus den drei Teilen:
Streaming, REST und Renting (siehe Tabelle 2). Die Streaming-Applikation wurde für Serverbetriebssysteme auf Linux Basis konzipiert und läuft nicht ohne weiteres auf nicht Linux Systemen.
Modul
Package
Verantwortung
REST
ch.fhnw.imvs.hotelplus.rest
Dient als Schnittstelle zu anderen Systemen. Interagiert mit CMS und nimmt
REST-Aufrufe entgegen.
Streaming
ch.fhnw.imvs.hotelplus.upnp
Streaming von Filmen.
Renting
ch.fhnw.imvs.hotelplus.rentingsystem
Erstellen von Benutzerordner.
Erstellen von Verknüpfungen zu gemieteten Filmen.
Löschen von Filmen, deren Mietdauer
abgelaufen ist.
Löschen von Benutzerordern.
Tabelle 27: Zuordnung der Module zu den Packages und deren Verantwortungsbereich
Die Applikation ist in zwei Schichten unterteilt (Abbildung 35). Die erste Schicht ist hauptsächlich dafür
verantwortlich, REST-Anfragen von externen Systemen zu verarbeiten. Dabei ist auch ein minimaler
Teil an Business-Logik in der ersten Schicht vorhanden. Die zweite Schicht besteht aus Renting und
Streaming, wobei diese Teile nur wenig miteinander interagieren.
Abbildung 35: Schichtenarchitektur der Streaming-Applikation
Frameworks und Libraries
Für die Streaming-Applikation wurden die in Tabelle 28 aufgelisteten Libraries und Frameworks verwendet.
Framework / Library
Version
Einsatzzweck
Spring Framework
4.2.0
Rest-Interface.
Stand-Alone Applikation.
Apache Tika
1.9
File-Type-Erkennung von hochgeladenen
Dateien.
Cybergarage
2.1.0
UPnP Library
Java Persistence
API (JPA)
1.7.2
Objektrelationaler Zugriff auf relationale
Datenbank.
Tabelle 28: Verwendete Frameworks und Libraries
Studiengang Informatik
Seite 38
Konfiguration der Streaming-Applikation
Die Streaming-Applikation ist parametrisiert und muss dadurch nicht neu kompiliert werden, wenn sich
Einstellungen ändern. Die Tabelle 29 zeigt die veränderbaren Parameter und erklärt deren Bedeutung.
Parameter
Beispiel
Erklärung
rest.serverurl
http://192.168.1.2:80/
Protokoll, URL und Ports zum
Webserver, der den Inhalt für die
Renderer bereit stellt
filecontroller.basepath
/var/www/html
Basispfad zum Webverzeichnis.
filecontroller.movie_directory
/var/www/movies/
Pfad zum Ordner, indem die Filme
bereitgestellt werden.
filecontroller.user_folder_name
users
Name des Basisordners in dem die
Benutzerordner erstellt werden.
filecontroller.user_directory
/var/www/html/users
Pfad zum Basisordner der Benutzerordner.
filecontroller.rented_folder
rented
Name des Ordners, in den dem die
Verknüpfungen zu den gemieteten
Film erstellt werden.
filecontroller.private_folder
private
Name des Ordners, in den dem die
eigenen Dateien des Gastes gespeichert werden.
database.url
localhost:3306/hotelplus_task
Pfad zur Datenbank.
database.user
root
Datenbank-Benutzer.
database.password
hotelplus
Datenbank-Passwort.
filetypes
mp3,mp4,jpeg,mov
Dateitypen, die der Gast hochladen
darf.
renting.maxListElements
3
Maximale Grösse der Playliste.
scheduler.findDevice
60000 1 Minute
Zeitperiode zum Suchen von Renderern im Netzwerk.
scheduler.deleteExpiredTasks
60000 1 Minute
Zeitperiode zum Löschen von abgelaufenen Ausleihen aus der Datenbank.
scheduler.renewNotification
1600000 26 Minuten
Zeitperiode zum Erneuern von
Subscriptions.
Tabelle 29: Parameter zur Konfiguration der Streaming-Applikation
Studiengang Informatik
Seite 39
Modul: Rest
Alle
Klassen,
die
die
REST
Schnittstelle
„ch.fhnw.imvs.hotelplus.rest.controller“ gebündelt.
betreffen,
sind
im
Package
Abbildung 36: Klassen des Moduls REST
Das REST-Interface stellt drei Ressourcen (User, Devices, Movie) bereit, die durch REST-Aufrufe
manipuliert werden können. Die Tabelle 30 listet die Ressourcen auf und Referenziert auf die APIDokumentation der REST-Schnittstelle im Anhang.
Ressource
Beschreibung
API Referenz
Users
Aktionen, um den User zu manipulieren.
Anhang 12.1.1 Users
Device
Aktionen, um das Streaming von Medieninhalten zu
manipulieren. Ein Device ist erst manipulierbar, wenn
mindestens ein Stream aktiv ist.
Ahang 12.1.2 Device
Movie
Verwalten der Videothek. Es wird davon abgeraten, Filme
über diese Schnittstelle hochzuladen.
Anhang 12.1.3 Movies
Tabelle 30: REST Ressourcen
Modul: Renting
Das Modul Renting ist zuständig, dass Gäste nur auf ihre eigenen Inhalte Zugriff haben und auch nur
Filme abspielen können, die sie auch gemietet haben. Um dies zu gewährleisten werden verschiedenen Mechanismen eingesetzt. Die zugehörigen Klassen sind in Abbildung 37 ersichtlich.
Studiengang Informatik
Seite 40
Abbildung 37: Klassen des Moduls Renting
Datenbank
Jeder Gast hat seinen Benutzerordner. Wenn ein Gast ein Film mietet, wird ein Softlink des gemieteten Films in den Bereich rented erstellt. Zu jedem gemieteten Film wird ein Task in die Datenbank
(Tabelle 31) gespeichert. Dieser beinhaltet, wie lange eine Verknüpfung im Benutzerordner des Gastes bestehen bleibt (wie lang also ein Film gemietet ist).
Zur Speicherung der Daten wird eine relationale Datenbank verwendet (MySQL). Auf die Datenbank
wird über einen objektrelationalen Mapper (Java Persistence API) zugegriffen.
Alle notwendigen Methoden um die Daten zu handhaben, sind in der Klasse „TaskDao“ zu finden. In
der Datenbank werden Objekte der Klasse „Task“ abgelegt.
Feldname
Typ
Beschreibung
Beispiel
id
bigint(20)
Automatisch von der Datenbank generiert (Unique Key).
215
delete_date
datetime
Bis wann der Film gültig ist.
2015-08-11 16:45:00
folder_name
varchar(255)
Ordner.
rented
movie_name
varchar(255)
Filmname.
en-AmericanSniper_Sky_TypeA.mp4
user_folder
varchar(255)
Benutzerinformation.
827ccb0eea8a706c4c34a16891f84e7b
ip_address
varchar(255)
IP-Adresse des Renderers.
192.168.1.103
Tabelle 31: Datenbankarchitektur
Modul: Streaming
Das Modul Streaming ist für die Interaktion mit den Renderern zuständig. Abbildung 38 zeigt die
involvierten Klassen. Sämtliche Logik für das Streaming wie das Führen der Wiedergabeliste und
Initiieren der Actions wurden hier implementiert. Das Generieren der SOAP-Nachrichten wurde jedoch
durch eine Library übernommen.
Studiengang Informatik
Seite 41
Abbildung 38: Klassen des Moduls Streaming
Evaluation der Streaming-Library
Im Vorfeld der Entwicklung wurden einige bestehende Media-Server evaluiert (siehe Tabelle 32 bis
Tabelle 36). Das Ziel war eine existierende Applikation zu finden, die erweitert werden kann. Dazu
muss der Source Code frei verfügbar sein. Ausserdem sollte eine API für die Interaktion vorhanden
sein.
Name
Plex
URL
www.plex.tv
Sprache
C++
Bemerkung
Es existiert eine nicht offizielle API [20], aber der Code ist nicht opensource.
Open-Source
Nein
Tabelle 32: Evaluation Plex
Name
SimpleDLNA
URL
http://nmaier.github.io/simpleDLNA/
Sprache
C#
Bemerkung
Es gibt keine API.
Open-Source
Ja
Open-Source
Nein
Tabelle 33: Evaluation SimpleDLNA
Name
mistserver
URL
www.mistserver.org
Sprache
C++
Bemerkung
Es gibt zwar eine API. Aber der Code ist nicht open-source, daher nicht
erweiterbar.
Tabelle 34: Evaluation mistserver
Studiengang Informatik
Seite 42
Name
Universal Media Server (UMS)
URL
http://www.universalmediaserver.com
Sprache
Java
Bemerkung
Universal media server ist die Neuentwicklung von PS3 Media Server.
Dieses Projekt hat keine API.
Open-Source
Ja
Tabelle 35: Evaluation Universal Media Server (UMS)
Name
Serviio
URL
http://www.serviio.org
Sprache
Java
Bemerkung
Serviio hat zwar eine API, diese ist jedoch nur in der kommerziellen Version
verfügbar. Der Code der Basisversion ist open-source.
Open-Source
Nein
Tabelle 36: Evaluation Serviio
Keiner der getesteten Media-Server ist geeignet. Einerseits weil keine Anwendung eine API anbietet
und zugleich open-source ist, andererseits weil die Einarbeitung und Erweiterung einer bestehenden
Applikation zu viel Zeit in Anspruch nehmen würde.
Daher fiel die Entscheidung, dass ein eigenes Produkt entwickelt werden soll. Für den UPnP-Stack
wurde eine geeignete Library gesucht. Die beiden Libraries CyberGarage und Cling wurden evaluiert
und testweise implementiert. Die Tabelle 37 stellt einige Eckdaten der Libraries gegenüber.
Library
Cling
Cybergarage
Webseite
www.4thline.org/projects/cling/
www.cybergarage.org/
Aktuelle Version
2.0.1 (11.06.2014)
2.1.0 (28.07. 2014)
Ersteller
Christian Bauer
Satoshi Konno
Nationalität
Schweiz
Japan
Projekte basierend auf
der Library
BubbleUPnP
Apache Felix
(Generischer UPnP/DLNA Media
Control Point und Renderer für
Android.)
Tabelle 37: Vergleich der Eckdaten der zwei Libraries zum streamen über UPnP
Eine detaillierte Evaluation der beiden Libraries hat sich erübrigt, als Cling und REST testweise zusammen ausgeführt werden sollten. Denn eine Exception brach die Ausführung ab.
org.fourthline.cling.transport.Router
: Unable to initialize network router:
org.fourthline.cling.transport.spi.InitializationException:
Failed to set modified URLStreamHandlerFactory in this environment.
Can't use bundled default client based on HTTPURLConnection, see manual.
org.fourthline.cling.transport.Router
: Cause: org.fourthline.cling.transport.spi.InitializationException
: Failed to set modified URLStreamHandlerFactory in this environment. Can't use bundled
default client based on HTTPURLConnection, see manual.
Snippet 7: Geworfene Exception beim Start der Applikation mit Cling und Spring REST
Detaillierte Beschreibung der Probleme mit der Cling Library (siehe Anhang 12.3)
Der Entwickler von Cling hat die Exception aus Snippet 7 beschrieben.
Studiengang Informatik
Seite 43
Cling verändert die Klasse URLStreamHandlerFactory und lädt diese in die Java Virtual Machine. Das
Problem ist, dass pro Java Virtual Machine nur eine Klasse des Types URLStreamHandlerFactory
geladen werden darf. Da aber REST die Klasse bereits geladen hat, bevor sie von Cling geladen
werden kann, erzeugt dies den Fehler (Snippet 8). Die vom Entwickler geschriebene URLStreamHandlerFactory Klasse erstellt ein Objekt der HTTPURLConnection, welche um weitere HTTPMethoden wie „NOTIFY“ und „SUBSCRIBE“ erweitert wird. Die Standardklasse HTTPURLConnection
wirft eine Exception, wenn eine Methode andere HTTP Verben als GET, PUT, POST oder DELETE
verwendet.
„<dt><code>org.fourthline.cling.transport.impl.StreamClientImpl</code> (default)</dt>
<dd>
This implementation uses the JDK's <code>HTTPURLConnection</code>, it doesn't require
any additional libraries. Note that Cling has to customize (with an ugly hack, really) the VM's
<code>URLStreamHandlerFactory</code> to support additional HTTP methods such as
<code>NOTIFY</code>, <code>SUBSCRIBE</code>, and <code>UNSUBSCRIBE</code>. The
designers of the JDK do not understand HTTP very well and made this extremely difficult to extend.
Cling's patch only works if no other code in your environment has already set a custom
<code>URLStreamHandlerFactory</code>, you will get an exception on startup if this issue is detected; then you have to switch to another <code>StreamClient</code> implementation. Note that this
implementation
does
<em>NOT
WORK</em>
on
Android,
the
<code>URLStreamHandlerFactory</code> can't be patched on Android!
</dd>“ [21]
Snippet 8: Erklärung des Problems durch Entwickler
Weitere Informationen, wie man das Problem lösen könnte, sind dem Anhang zu entnehmen. Da die
Library von Cybergarage keinen Fehler verursachte, bekam diese den Vorzug.
Studiengang Informatik
Seite 44
4.3
Media Renderer
Der Media Renderer ist der Client, welcher die Medieninhalte auf dem Dateiserver holt und abspielt.
Die Aufgabenstellung geht davon aus, dass keine Settop-Box (STB) zwischen Server und Fernseher
geschaltet sein muss, sondern der Fernseher direkt die Daten vom Server streamt. Der für den Testaufbau zur Verfügung gestellte Smart-TV ist ein Samsung Hotel-TV (Modell: HG32EC690DB). Nach
Tests mit verschiedenen UPnP-Servern, Recherche im Internet und Kontaktaufnahme mit dem Samsung-Support (siehe Anhang 12.5) wurde bestätigt, dass dieses Modell UPnP nicht im vollen Umfang
unterstützt. Auch das Handbuch erwähnt weder UPnP noch DLNA [22]. Zwar kann eine Wiedergabe
gestartet und gestoppt werden, alle anderen benötigten Funktionen sind nicht implementiert.
Nach Absprache mit Kunde und Betreuer wurde entschieden, doch eine Settop-Box einzusetzen. Aus
wirtschaftlichen Gründen fiel die Entscheidung auf ein Raspberry Pi 2 (Spezifikation siehe Quelle [23])
mit dem frei verfügbare Mediacenter-Betriebssystem OpenELEC (Open Embedded Linux Entertainment Center Version 5.95.3.6.0) [24]. OpenElec unterstützt UPnP inklusive UPnP AV komplett und
deckt somit die Anforderungen an einen Media Renderer ab.
Da ein Hotelgast auch eigene Inhalte auf den Streaming Server kopieren kann, wurde für den Media
Renderer OpenELEC die gängigsten Mediendateiformate auf die Streaming-Fähigkeit hin getestet.
Dabei wurden möglichst viele, verschiedene Formate verwendet. Tabelle 38 zeigt die Testresultate zu
den getesteten Videoformaten, Tabelle 39 zeigt die Testresultate zu den Musikformaten und Tabelle
40 zeigt die Testresultate zu den getesteten Bildformaten. Ob ein Media Renderer die Formate abspielen kann, ist davon abhängig, ob die Formate dekodiert werden können. Da OpenELEC eine
Linux Distribution ist, ausgelegt auf das Abspielen von Multimediainhalten, sind die gängigsten
Codecs schon vorinstalliert oder können nachinstalliert werden.
Die Dateien des Testdatensatzes wurden mit der Konvertierungssoftware „Free Video Converter“ der
Firma LEAW [25] konvertiert, auf den Streaming-Server geladen und gestartet. Wurde die Datei
abgespielt und konnte gespult, pausiert und gestoppt werden, war der Test erfolgreich.
Videoformate
Wiedergabe möglich
AVI
Audio Video Interleave
MPEG1
Moving Picture Experts Group
MPEG2
MPEG-2 Videodatei (für DVDs genutzt)
MOV
Quicktime Movie
ASF
Advanced Streaming Format
FLV
Flash Video
MP4
MPEG-4 Video
WMV
Windows Media Video
3G2
XviD
freie Implementierung des MPEG-4-Video-Codecs
[26]
TS
Video Transport Stream [27]
VOB
DVD Video Object (MPEG-2 Videodatei)
MKV
Matroska Containerformat
DV
Digital Video
VP8
F4V
Flash Video
Tabelle 38: Getestete Video Codecs und Testresultate.
Studiengang Informatik
Seite 45
Audioformat
Wiedergabe möglich
AIFF
MP3
OGG
M4A
MP2
AU
WAV
AC3
MKA
AAC
AMV
Tabelle 39: Getestete Video Codecs und Testresultate.
Bildformat
Wiedergabe möglich
JPG
PNG
GIF
(nicht animiert)
Tabelle 40: Getestete Audio Codecs und Testresultate.
Studiengang Informatik
Seite 46
5
Testkonzept
Die Gesamt-Lösung besteht aus mehreren Komponenten. Nebst den neu entwickelten Teilen
Webapplikation und Streaming-Server ist auch der Fernseher Teil des Systems. Sowohl die einzelnen
Komponenten selbst, als auch das Zusammenspiel muss getestet werden.
5.1
Unit-Tests
Als Unit-Testframework wird JUnit (Version 4.12) eingesetzt.
Modul: Rest
Die REST Schnittstelle wurde nicht mit Unit-Tests abgedeckt. Dass die REST Schnittstelle fehlerfrei
funktioniert, hat sich gezeigt, als das CMS Aktionen auslöste und die erwarteten Resultate zurückerhalten hat.
Modul Renting
Die meiste Logik steckt im Modul Renting. Dieses Modul ist auch vollständig mit UNIT-Tests abgedeckt. Die Datenbank zu Speicherung von Task wird mit einer In-Memory Datenbank (H2 Version
1.4.185) simuliert.
Modul: Streaming
Im Streaming-Modul wurden einzelne Komponenten getestet. Die externen Klassen, die von der
Library zur Verfügung gestellt werden, sind für die Tests mit dem Mocking-Framework Mockito (Version 2.0.12-beta) abgebildet.
SocketApplication
Die neu erstellten Funktionen in der SocketApplication sind vollumfänglich durch Testfunktionen
abgedeckt.
5.2
Integrationstests
Die Integration aller Komponenten ist manuell getestet. Im Anhang 12.3 sind alle relevanten Tests
aufgeführt. Diese wurden auch beim Abnahmetest mit dem Kunden durchgeführt und für funktionstüchtig erklärt.
Studiengang Informatik
Seite 47
6
Ausblick
6.1
Netzwerk und CMS überarbeiten
Aktuell ist der Streaming-Server aus dem Gäste-Netz erreichbar. Dies ist ein Sicherheitsrisiko. Jeder
Gast hat die Möglichkeit eine REST-Anfrage an den Streaming-Server zu senden. Diese Sicherheitslücke kann mit wenig Aufwand geschlossen werden. Die folgenden Kapitel zeigen die nötigen Schritte
auf.
6.1.1
Netzwerk
Der Streaming-Server darf nur im Streaming-Netz Angeschlossen sein. Der CMS Server muss zusätzlich auch noch im Streaming-Netz sein, damit dieser REST-Anfrage an den Streaming-Server senden
kann.
Abbildung 39: Überarbeitetes Netzwerkdiagramm
6.1.2
CMS
Die REST-Anfragen an den Streaming-Server werden zurzeit mit JavaScript direkt vom Gerät des
Gastes an den Streaming-Server gesendet. Dies muss geändert werden, sodass der Client die Anfragen an Wordpress sendet. Anschliessend muss Wordpress den Aufruf an das REST-Interface der
Streaming-Applikation gemäss Abbildung 40 weiterleiten.
Abbildung 40: Ablauf der überarbeiteten Aufrufreihenfolge
Studiengang Informatik
Seite 48
7
Bekannte Fehler
Event-Notifikation wird nicht gemeldet
Wenn der erste Stream für einen Fernseher gestartet wird, so registriert sich der Control Point beim
AV Transport Service des Renderers als Event-Listener. Ab diesem Zeitpunkt wird der StreamingServer über die Änderungen der Zustandsvariable „LastChange“ informiert.
Somit kann der Streaming-Server auch auf Benutzerinteraktionen mittels TV-Fernbedienung reagieren. Sobald der letzte Stream gestoppt wird, wird der Control Point auch wieder auf dem Device als
Listener abgemeldet.
Teilweise werden die Notifikationen aber vom Streaming Server nicht verarbeitet.
Diese Problem konnte reproduziert werden, indem dass der Streaming-Server beendet wurde, ohne
dass er sich bei den Devices abmelden konnte. In dieser Situation hat das Device Listener in seiner
Liste, die nicht mehr erreichbar sind. Wenn der Streaming-Server erneut gestartet wird und der erste
Stream wieder einen Subscribe-Request auslöst, kommen die Notifikationen zwar noch an, jedoch
können sie nicht mehr einem Device zugeordnet werden.
Die Lösung für dieses Problem ist, dass wenn der Streaming-Server neugestartet wird, auch alle
Renderer neu gestartet werden sollten. Nur so kann sichergestellt werden, dass die Listener-Liste
beim Start des Streaming-Servers leer ist.
Hochladen von Filmen
Das Hochladen von Filmen über HTTP ist zu langsam. Es wird empfohlen Secure Copy (SCP) für das
Hochladen zu verwenden.
Studiengang Informatik
Seite 49
8
Fazit
Zu Beginn dieser Arbeit wurden existierende Media-Server evaluiert mit dem Ziel, eine existierende
Applikation anpassen zu können. Keiner dieser Media-Server hatte aber eine API und war zugleich
auch frei verfügbar. Deshalb wurde eine eigene Software entwickelt, wobei für die UPnPImplementierung eine Library benutzt wurde.
Die umgesetzte Anwendung entspricht mehrheitlich den Zielsetzungen aus der Einleitung. Hardwareunabhängigkeit ist gegeben. Jedes Gerät, das Medien wiedergeben kann und UPnP-fähig ist, kann
über die Software gesteuert werden. Die Webapplikation wurde durch das „Video on Demand“-Modul
erweitert. Starten, Stoppen und Pausieren sind implementiert. Auch das Wechseln des Medieninhalts
ist möglich. Für die Usability und das Design dienten die marktführenden Streaming-Anbieter als
Orientierung. Jedoch wurden keine Usability- und Akzeptanztests für die Implementierung durchgeführt. Die Robustheit des Systems wird mit Unit-Tests und manuellen Integrationstests sichergestellt.
Aufgrund der fehlenden UPnP-Unterstützung des Hotel-Fernsehers wird aber, entgegen der Anforderung, eine Settop-Box benötigt.
Im Nachhinein wäre die Pflege der Filme anders gestaltet worden. Durch die starke Bindung an
Wordpress und das Plugin „ACF“ kann der Streaming-Server nicht einfach in einem anderen Kontext
benutzt werden. Eine bessere Idee ist die Filmbeschreibungen auf dem Streaming-Server in einer
Datenbank zu verwalten und über die REST-API zugänglich zu machen.
Ein anderer Punkt ist die unidirektionale Kommunikation von Client zu Streaming-Server. Wenn ein
Stream, beispielsweise via Fernbedienung, gestoppt wird, so erfährt dies der Client erst, wenn er die
Positionsinformation mit dem Streaming-Server abgleicht. Ein anderer Ansatz wäre der Einsatz von
Websockets. Dies würde bidirektionale Kommunikation ermöglichen und somit den Zustand des
Clients stets mit dem des Streaming-Servers konsistent halten.
Auch wenn es Verbesserungspotential gibt, die beiden Anwendungsfälle Film mieten und abspielen,
sowie eigene Inhalte wiedergeben, sind implementiert. Der Abnahmetest wurde am 3. August 2015
bei hotelplus vor Ort erfolgreich durchgeführt und die Arbeit wurde vom Kunden akzeptiert.
Studiengang Informatik
Seite 50
9
Abkürzungsverzeichnis
Abkürzung
Bedeutung
CDS
CMS
Content Directory Service
Content Management System /
Connection Manager Service
Control Point
Device Description Document
Dynamic Host Configuration Protocol
Digital Living Network Alliance
Digital Media Controller
Digital Media Player
Digital Media Renderer
Digital Media Server
Hypertext Markup Language
Hypertext Transfer Protocol
Internet Gateway Device
Internet Protocol
Java Persistence API
Local Area Network
Media Access Control
Property Management System
Redundan Array of Independent Disks
Representational State Transfer
Subscription Identifier
Simple Object Access Protocol
Simple Service Discovery Protocol
Transmission Control Protocol
UPnP Device Architecture
User Datagram Protocol
Universal Product Code
Universal Plug and Play
Universal Plug and Play Audio / Video
Uniform Resource Identifier
Uniform Resource Locator
Uniform Resource Name
Universally Unique Identifier
Wide Area Network
Extensible Markup Language
CP
DDD
DHCP
DLNA
DMC
DMP
DMR
DMS
HTML
HTTP
IGD
IP
JPA
LAN
MAC
PMS
RAID
REST
SID
SOAP
SSDP
TCP
UDA
UDP
UPC
UPnP
UPnP AV
URI
URL
URN
UUID
WAN
XML
Studiengang Informatik
Seite 51
10
Ehrlichkeitserklärung
Hiermit bestätigen die Autoren, diese Arbeit ohne fremde Hilfe und unter Einhaltung der gebotenen
Regeln erstellt zu haben.
Joël Dubois
Ort, Datum Unterschrift
Fabrice Thut
Ort, Datum Unterschrift
Studiengang Informatik
Seite 52
11 Literaturverzeichnis
[1] „heise.de,“ [Online]. Available: http://www.heise.de/netze/artikel/Haendler-und-Verbraucher223844.html. [Zugriff am 12 08 2015].
[2] „rfc-base.org,“ [Online]. Available: http://www.rfc-base.org/rfc-3927.html. [Zugriff am 10 08 2015].
[3] R. Spenneberg, „Linux-Magazin,“ 10 08 2015. [Online]. Available: http://www.linuxmagazin.de/Ausgaben/2013/01/Sicherheit.
[4] „upnp.org,“ [Online]. Available: http://upnp.org/about/what-is-upnp/. [Zugriff am 10 08 2015].
[5] „upnp.org,“ [Online]. Available: http://upnp.org/sdcps-and-certification/standards/devicearchitecture-documents/. [Zugriff am 10 08 2015].
[6] „UPnP InternetGatewayDevice,“ [Online]. Available: http://upnp.org/specs/gw/UPnP-gwInternetGatewayDevice-v2-Device.pdf. [Zugriff am 11 08 2015].
[7] „upnp-hacks.org,“ [Online]. Available: http://www.upnp-hacks.org/igd.html. [Zugriff am 11 08
2015].
[8] „upnp.org,“ [Online]. Available:
http://upnp.org/resources/documents/UPnP_UDA_tutorial_July2014.pdf. [Zugriff am 10 08 2015].
[9] „UPnP ConnectionManagerService,“ [Online]. Available: http://www.upnp.org/specs/av/UPnP-avConnectionManager-v3-Service-20101231.pdf. [Zugriff am 10 08 2015].
[10] „UPnP Device Architecture v2.0,“ [Online]. Available: http://upnp.org/specs/arch/UPnP-archDeviceArchitecture-v2.0.pdf. [Zugriff am 10 08 2015].
[11] „UPnP AV Architecture,“ [Online]. Available: http://www.upnp.org/specs/av/UPnP-avAVArchitecture-v2-20101231.pdf. [Zugriff am 10 08 2015].
[12] „UPnP AVTransport v3,“ [Online]. Available: http://www.upnp.org/specs/av/UPnP-av-AVTransportv3-Service-20101231.pdf. [Zugriff am 10 08 2015].
[13] „dlna.org,“ [Online]. Available: http://www.dlna.org/about/organization/. [Zugriff am 10 08 2015].
[14] „DLNA Guidelines Part 1-1,“ [Online]. Available: http://www.dlna.org/guidelines/. [Zugriff am 10 08
2015].
[15] „support.google.com,“ [Online]. Available:
https://support.google.com/youtube/answer/1722171?hl=de. [Zugriff am 11 08 2015].
[16] „tomshardware.com,“ [Online]. Available: http://www.tomshardware.com/charts/enterprise-hddcharts/-01-Read-Throughput-Average-h2benchw-3.16,3373.html. [Zugriff am 11 08 2015].
[17] „hotel-lexikon.wikia.com,“ [Online]. Available: http://hotellexikon.wikia.com/wiki/PMS_Property_Management_System. [Zugriff am 13 08 2015].
[18] „wikipedia,“ [Online]. Available: https://de.wikipedia.org/wiki/Content-Management-System.
[Zugriff am 13 08 2015].
[19] „ACF,“ [Online]. Available: http://www.advancedcustomfields.com/resources/code-examples/.
[Zugriff am 11 08 2015].
[20] „google.com,“ [Online]. Available: https://code.google.com/p/plex-api/w/list. [Zugriff am 12 08
2015].
Studiengang Informatik
Seite 53
[21] „Github.com/4thline,“ [Online]. Available:
https://github.com/4thline/cling/blob/206fd06b551c60151e2c785cd8b2aa45a9a0a54b/
core/src/manual/advanced/transports.xhtml. [Zugriff am 11 08 2015].
[22] „samsung.com,“ [Online]. Available:
http://downloadcenter.samsung.com/content/UM/201502/20150209142210516/EC690EU_Install-Guide-00DEU-0128.pdf. [Zugriff am 11 08 2015].
[23] „raspberrypi.org,“ [Online]. Available:
https://www.raspberrypi.org/documentation/hardware/raspberrypi/README.md. [Zugriff am 11 08
2015].
[24] „openelec.tv,“ [Online]. Available: http://openelec.tv/get-openelec. [Zugriff am 11 08 2015].
[25] „leawo.com,“ [Online]. Available: http://www.leawo.com/free-mac-videoconverter/index.html?lang=de_appstore. [Zugriff am 12 08 2015].
[26] „wikipedia,“ [Online]. Available: https://de.wikipedia.org/wiki/Xvid. [Zugriff am 11 08 2015].
[27] „netzwelt.de,“ [Online]. Available: http://www.netzwelt.de/dateierweiterung/ts.html. [Zugriff am 11
08 2015].
[28] „wikipedia,“ [Online]. Available:
https://upload.wikimedia.org/wikipedia/de/0/08/Upnp_architecture.svg. [Zugriff am 10 08 2015].
Studiengang Informatik
Seite 54
12 Anhang
12.1 REST-API Beschreibung
Die Beschreibungen der Parameter sind entweder erklärt oder beziehen sich auf die Tabelle 11: Legende für Filmbeschreibung beziehungsweise Tabelle 10.
12.1.1 Users
Basic-Url: https://host/users
URL
Request
Methode
Parameter
GET
Beschreibung
Rückgabewert
Abrufen aller Benutzerordner.
Alle Benutzerordner in einem JSON Array.
[2]
0: "hansbeispiel"
1:
"petermeier"
Basic-Url: https://host/users/{name}/
URL
Request
Methode
POST
DELETE
Parameter
user
Name des zu erstellenden
Benutzerordners
ip_address
IP-Adresse des Renderers im
Zimmer des Gastes
user
Name des zu löschenden
Benutzerordners
ip_address
IP-Adresse des Renderers im
Zimmer des Gastes
Beschreibung
Rückgabewert
Erstellen eines neuen
Benutzerordners.
Status: 201 Created
Benutzerordner erstellt.
Status: 304 Not Modified
Benutzerordner nicht erstellt.
Löschen eines Benutzerordners.
Status: 410 Gone
Benutzerordner gelöscht.
Status: 304 Not Modified
Benutzerordner wurde nicht gelöscht.
Status: 417 Expectation Failed
Auf dem Server gab es eine Exception.
Studiengang Informatik
Seite 55
URL
Request
Methode
private
POST
private
DELETE
private
GET
rent_movie
POST
rent_movie
POST
Studiengang Informatik
Parameter
movie_name movie_title
file
movie_filename_
period
movie_rentduration
ip_address
IP-Adresse des Renderers im
Zimmer des Gastes
movie_name movie_filename_
Beschreibung
Rückgabewert
Hochladen eines eigenen
Medieninhalts auf den
Streaming Server.
Status: 201 Created
Medieninhalt wurde hochgeladen auf den Server und ist verfügbar.
Status: 403 Forbidden
Medieninhalt wurde nicht hochgeladen auf den Server.
Status: 404 Not Found
Exception wurde auf dem Server geworfen.
Löschen eines privaten
Medieninhalts auf dem
Streaming Server.
Auflisten aller Medieninhalte, welcher der User selbst
hochgeladen hat.
folder_name movie_id
period
movie_rentduration
ip_address
IP Renderer
guest_id
user
price
movie_cost
folder_name movie_id
period
movie_rentduration
ip_address
IP Renderer
guest_id
user
price
movie_cost
Mieten eines Films.
Status: 204 No Content
Kein Medieninhalt ausgewählt.
Status: 410 Gone
Medieninhalt wurde gelöscht.
Status: 404 Not Found
Exception wurde auf dem Server geworfen
Alle Dateinamen, die der Benutzer hochgeladen hat.
Status: 200 Ok
Film gemietet.
Status: 404 Not Found
Exception wurde auf dem Server geworfen.
Film nicht gemietet.
Mieten eines Films.
Status: 200 Ok
Film gemietet.
Status: 404 Not Found
Exception wurde auf dem Server geworfen.
Film nicht gemietet.
Seite 56
URL
Request
Methode
play_rented_movie
POST
Parameter
ip_address
IP Renderer
movie
movie_filename
Beschreibung
Rückgabewert
Abspielen eines Films.
Status: 200 Ok
Film wurde gestartet.
media_name movie_titlet
resume_movie
play_private_movie
POST
POST
ip_address
IP Renderer
ip_address
IP Renderer
movie
filename
Medieninhalt nach dem Pausieren wieder starten.
Privaten Medieninhalt starten.
Status: 417 Expectation Failed
Film wurde nicht gestartet.
Auf dem Server gab es eine Exception.
Status: 200 Ok
Medieninhalt wurde gestartet.
Status: 417 Expectation Failed
Medieninhalt wurde nicht gestartet.
Auf dem Server gab es eine Exception.
Status: 200 Ok
Privater Medieninhalt wurde gestartet.
Status: 417 Expectation Failed
Privater Medieninhalt wurde nicht gestartet.
Auf dem Server gab es eine Exception.
Studiengang Informatik
Seite 57
12.1.2 Device
Basic-Url: https://host/device/{ipaddress}/
URL
Request
Methode
stop_movie
POST
Parameter
Beschreibung
Rückgabewert
Stoppen eines laufenden Medianinhalts.
Status: 200 Ok
Medieninhalt wurde gestoppt.
Status: 404 Not Found
Kein Medieninhalt wird abgespielt.
pause_movie
POST
Pausieren eines laufenden Medianinhalts.
Status: 417 Expectation Failed
Der Renderer ist nicht erreichbar oder ein anderer Fehler ist auf dem Streaming Server
aufgetreten.
Status: 200 Ok
Medieninhalt wurde gestoppt.
Status: 404 Not Found
Kein Medieninhalt wird abgespielt.
mediaduration
GET
Gesamtlänge der laufenden
Wiedergabe.
Status: 417 Expectation Failed
Der Renderer ist nicht erreichbar oder ein anderer Fehler ist auf dem Streaming Server
aufgetreten.
Status: 200 Ok
JSON mit der Dauer des Medieninhaltes.
{
postitionLong: 3910
postitionString: "01:05:10"
}
Status: 417 Expectation Failed
Der Renderer ist nicht erreichbar oder ein anderer Fehler ist auf dem Streaming Server
aufgetreten.
Studiengang Informatik
Seite 58
URL
Request
Methode
positioninfo
GET
Parameter
Beschreibung
Rückgabewert
Infos, wie viel Sekunden vom
Medieninhalt schon abgespielt
wurden.
Status: 200 Ok
JSON mit aktueller Abspielzeit.
{
postitionLong: 310
postitionString: "00:05:10"
}
isactive
GET
Abfrage ob eine Wiedergabe aktiv
ist.
Status: 417 Expectation Failed
Der Renderer ist nicht erreichbar oder ein anderer Fehler ist auf dem Streaming Server
aufgetreten.
Status: 200 Ok
Medieninhaltsdaten als JSON.
{
mediaName: "Blutiger Auftrag - Es gibt kein Entkommen"
fileName: "deu-NOT_SAFE_FOR_WORK_EN_FR_DE_IT_ES_DUB_18974.mp4"
durationDouble: 0
durationString: null
positionInfoString: null
positionInfoDouble: 0
uri: "http://192.168.1.2:80/users/1679091c5a880faf6fb5e6087eb1b2dc/rented/deuNOT_SAFE_FOR_WORK_EN_FR_DE_IT_ES_DUB_18974.mp4"
transportState: "PLAYING"
mode: "RENTED"
}
Status: 404 Not Found
Kein Medieninhalt läuft.
Status: 417 Expectation Failed
Der Renderer ist nicht erreichbar oder ein anderer Fehler ist auf dem Streaming Server
aufgetreten.
Studiengang Informatik
Seite 59
URL
Request
Methode
Parameter
Beschreibung
Rückgabewert
seek
POST
target
z.B.: „hh:mm:ss“
Vor- oder Zurückspulen der
Wiedergabe
Status: 200 Ok
Medieninhalt wurde gespult.
Status: 404 Not Found
Kein Medieninhalt wird abgespielt.
get_all_medias
GET
Alle Medieninhalte, die aktuell auf
dem Device abgespielt bzw. in der
Playlist sind.
Status: 417 Expectation Failed
Der Renderer ist nicht erreichbar oder ein anderer Fehler ist auf dem Streaming Server
aufgetreten.
Status: 200 Ok
Medieninhaltsdaten in einem JSON-Array.
[1]
-0: {
mediaName: "Blutiger Auftrag - Es gibt kein Entkommen"
fileName: "deu-NOT_SAFE_FOR_WORK_EN_FR_DE_IT_ES_DUB_18974.mp4"
durationDouble: 0
durationString: null
positionInfoString: null
positionInfoDouble: 0
uri: "http://192.168.1.2:80/users/1679091c5a880faf6fb5e6087eb1b2dc/rented/deuNOT_SAFE_FOR_WORK_EN_FR_DE_IT_ES_DUB_18974.mp4"
transportState: "PLAYING"
mode: "RENTED"
}
Status: 404 Not Found
Kein Medieninhalt läuft.
Status: 417 Expectation Failed
Der Renderer ist nicht erreichbar oder ein anderer Fehler ist auf dem Streaming Server
aufgetreten.
Studiengang Informatik
Seite 60
12.1.3 Movies
Basic-Url: https://host/movies/
URL
Request Methode
Parameter
Beschreibung
Rückgabewert
POST
movie_name
Hochladen eines Films.
Status: 201 Created
Film wurde hochgeladen auf den Server und ist verfügbar.
file
Status: 403 Forbidden
Film wurde nicht hochgeladen auf den Server.
Status: 404 Not Found
Exception wurde auf dem Server geworfen.
DELETE
Status: 204 No Content
Kein Film ausgewählt.
Status: 410 Gone
Medieninhalt wurde gelöscht.
Löschen eines Benutzerordners
Status: 404 Not Found
Film wurde nicht gefunden / nicht vorhanden.
GET
Status: 417 Expectation Failed
Exception wurde auf dem Server geworfen
Liste der Ordner.
Abrufen aller Filmeordner auf dem Client.
[4]
Studiengang Informatik
Seite 61
0:
"AmericanSniper"
1:
"NOT_SAFE_FOR_WORK "
12.2 Device Description Document
Device Description von Raspberry Pi 2
Date: Thu, 01 Jan 1970 00:00:24 GMT
Content-Length: 3342
Content-Type: text/xml; charset="utf-8"
Server: UPnP/1.0 DLNADOC/1.50 Kodi
<?xml version="1.0" encoding="UTF-8"?>
<root configId="4449618" xmlns="urn:schemas-upnp-org:device-1-0" xmlns:dlna="urn:schemasdlna-org:device-1-0">
<specVersion>
<major>1</major>
<minor>1</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<friendlyName>Kodi (OpenELEC)</friendlyName>
<manufacturer>XBMC Foundation</manufacturer>
<manufacturerURL>http://kodi.tv/</manufacturerURL>
<modelDescription>Kodi - Media Renderer</modelDescription>
<modelName>Kodi</modelName>
<modelNumber>15.0-RC2 Git:0aa930b</modelNumber>
<modelURL>http://kodi.tv/</modelURL>
<UDN>uuid:11b12bb8-9d0a-2f44-1e7b-bfaf71b6cd0d</UDN>
<presentationURL>http://192.168.1.103/</presentationURL>
<dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>256</width>
<height>256</height>
<depth>8</depth>
<url>/icon256x256.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>120</width>
<height>120</height>
<depth>8</depth>
<url>/icon120x120.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>48</width>
<height>48</height>
<depth>8</depth>
<url>/icon48x48.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>32</width>
Studiengang Informatik
Seite 62
<height>32</height>
<depth>8</depth>
<url>/icon32x32.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>16</width>
<height>16</height>
<depth>8</depth>
<url>/icon16x16.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<SCPDURL>/AVTransport/11b12bb8-9d0a-2f44-1e7b-bfaf71b6cd0d/scpd.xml</SCPDURL>
<controlURL>/AVTransport/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/control.xml</controlURL>
<eventSubURL>/AVTransport/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/event.xml</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<SCPDURL>/ConnectionManager/11b12bb8-9d0a-2f44-1e7b-bfaf71b6cd0d/scpd.xml</SCPDURL>
<controlURL>/ConnectionManager/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/control.xml</controlURL>
<eventSubURL>/ConnectionManager/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/event.xml</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<SCPDURL>/RenderingControl/11b12bb8-9d0a-2f44-1e7b-bfaf71b6cd0d/scpd.xml</SCPDURL>
<controlURL>/RenderingControl/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/control.xml</controlURL>
<eventSubURL>/RenderingControl/11b12bb8-9d0a-2f44-1e7bbfaf71b6cd0d/event.xml</eventSubURL>
</service>
</serviceList>
</device>
</root>
Snippet 9: Device Description Document von UPnP-Device
Studiengang Informatik
Seite 63
12.3 Abnahmetests
12.3.1 Backend
Pflege von IP-Adresse zu Zimmer Zuordnungen
Voraussetzung
Der Benutzer ist mittels Admin-Account im „wp-admin“-Bereich
eingeloggt und hat die Seite „TV-to-Room“ geöffnet.
Testfälle
Erwartetes Resulat
Der Benutzer erfasst ein neues
Zimmer mit einer validen IPv4Adresse.
Die Seite wird neu geladen. Ein
Banner mit einer Information
wird sichtbar und der Eintrag ist
in der Tabelle ergänzt.
Reales Resultat
Der Benutzer erfasst ein neues
Die Seite wird neu geladen. Ein
Zimmer mit einer ungültigen IP4v- Banner weist auf die ungültige
Adresse.
IP-Adresse hin. Der Eintrag ist
nicht in der Tabelle ergänzt.
Der Benutzer bearbeitet ein
existierendes Zimmer. Er gibt
eine valide IPv4-Adresse ein.
Die Seite wird neu geladen. Ein
Banner mit einer Information
wird sichtbar und der Eintrag ist
in der Tabelle aktualisiert.
Der Benutzer bearbeitet ein
existierendes Zimmer. Er gibt
eine ungültige IPv4-Adresse ein.
Die Seite wird neu geladen. Ein
Banner weist auf die ungültige
IP-Adresse hin. Der Eintrag ist
nicht in der Tabelle aktualisiert.
Studiengang Informatik
Seite 64
Pflege von Film-Einträgen
Voraussetzung
Der Benutzer ist mittels Admin-Account im „wp-admin“-Bereich
eingeloggt und hat im Menüpunkt „Pages“ die Seite „Video on
Demand“ geöffnet.
Testfälle
Erwartetes Resulat
Reales Resultat
Der Benutzer erfasst einen
Der Film-Eintrag wird im Frontneuen Film mit allen erforderliend unter der entsprechenden
chen Angaben gemäss vordefiSprache angezeigt.
niertem Format (Bildgrösse, etc.),
insbesondere muss der Filename
konsistent mit dem Filename auf
dem Datenserver übereinstimmen und die movie_id muss über
alle Einträge eines Films in
verschiedenen Sprachen dieselbe sein.
Der Benutzer erfasst einen
neuen Film mit allen erforderlichen Angaben aber nicht gemäss
vordefiniertem Format (Bildgrösse, etc.) oder falschem Filename.
Der Film-Eintrag wird im Frontend unter der entsprechenden
Sprache angezeigt. Optische
Unschönheiten können aber
auftrete oder der Film wird nicht
abgespielt, da der Pfad nicht
gefunden wird.
12.3.2 Frontend
Allgemeine Voraussetzung für die Benutzung von Video-on-Demand ist, dass Javascript aktiviert ist.
Video on Demand als Guest-Benutzer
Voraussetzung
Der Benutzer ist nicht als Hotelgast authentifiziert sondern ruft die
Landing-Page als Guest-Benutzer auf.
Testfälle
Erwartetes Resulat
Der Gast-Benutzer möchte Video-on-Demand nutzen.
Der Link ist nicht sichtbar, da er
kein Hotelgast ist.
Der Gast-Benutzer gibt den
Permanten-Link direkt ein und
versucht Video-on-Demand zu
nutzen.
Der Benutzer wird wieder auf die
Landing-Page geleitet.
Studiengang Informatik
Reales Resultat
Seite 65
Responsivness
Voraussetzung
Der Benutzer ist authentifiziert und hat die Seite Video-onDemand geöffnet.
Testfälle
Erwartetes Resulat
Der Benutzer verändert das
Browserfenster oder benutzt
verschiedene Geräte mit unterschiedlichen Auflösungen.
Wenn das Browserfenster auf
einem Desktop in Vollbild geöffnet ist, so werden 4 FilmEinträge pro Zeile angezeigt. Bei
Browserfenster in Grösse eines
Tablets sind es 2 Einträge und
bei einem Smartphone 1 Eintrag
pro Zeile.
Reales Resultat
Movie-Details
Voraussetzung
Der Benutzer ist authentifiziert und hat die Seite Video-onDemand geöffnet.
Testfälle
Erwartetes Resulat
Reales Resultat
Der Gast möchte mehr Details zu Der Gast klickt auf einen Film,
einem Film erfahren.
ein Popup öffnet sich und zeigt
mehr Informationen an.
Movie mieten
Voraussetzung
Der Benutzer ist authentifiziert und hat die Seite Video-on-Demand
geöffnet. Danach hat er auf einen beliebigen, noch nicht gemieteten Film geklickt und sieht das Popup-Fenster.
Testfälle
Erwartetes Resulat
Der Gast möchte einen Film
mieten. Dafür klickt er auf den
Button "Rent“ und bestätigt dies
anschliessend.
Das Popup schliesst sich wieder
und der Film wird als gemietet
markiert. Die Ausleihe ist im LogFile „info.log“ auf dem
Streamingserver sichtbar.
Studiengang Informatik
Reales Resultat
Seite 66
Movie abspielen
Voraussetzung
Der Benutzer ist authentifiziert und hat die Seite Video-onDemand geöffnet. Danach hat er auf einen beliebigen, bereits
gemieteten Film geklickt und sieht das Popup-Fenster.
Testfälle
Erwartetes Resulat
Der Benutzer möchte den Film
abspielen. Der Media-Client ist
eingeschaltet.
Das Popup schliesst sich wieder.
Der Film fängt an zu laufen.
Der Benutzer möchte den Film
abspielen. Der Media-Client ist
jedoch ausgeschaltet.
Das Popup schliesst sich wieder.
Der Film fängt nicht an zu laufen.
Ein weiteres Popup macht den
Benutzer darauf aufmerksam,
dass geprüft werden muss, ob
der Client eingeschaltet ist und
allfällig die Source korrekt gewählt ist.
Der Benutzer möchte den Film
an einer bestimmten Position
fortsetzten (Seek). Dafür klickt er
auf dem Zeitstrahl eine beliebige
Position an.
Der Film wird vor – bzw. zurückgespuhlt und je nach vorherigem
Zustand entweder direkt abgespielt oder noch pausiert.
Reales Resultat
Der Benutzer möchte den Film
Der Film wird pausiert. Nach
kurz unterbrechen und wählt
einem Klick auf Play läuft er an
somit den Pause-Button im
derselben Stelle weiter.
Player. Um den Film weiterlaufen
zu lassen klickt er anschliessend
auf den Play-Button im Player.
Der Benutzer möchte einen Film
beenden. Dafür klickt er auf den
Stop-Button im Player.
Studiengang Informatik
Der Film wird beendet. Wenn
vorher bereits Medien abgespielt
wurden, werden diese gesucht
und wie in einem Stack abgespielt.
Seite 67
Eigene Files
Voraussetzung
Der Benutzer ist authentifiziert und hat die Seite Video-onDemand geöffnet. Im Tab-Menü ist der Punkt „Eigene Files“
angewählt.
Testfälle
Erwartetes Resulat
Der Benutzer möchte eine eigene
Datei hochladen. Er wählt eine
Datei mit korrektem Filetyp (Bild,
Video oder Musik).
Der Fortschrittsbalken fängt an
zu laufen. Bei 100% wird der
Fortschrittsbalken ausgeblendet
und die Datei ist bei den Files
sichtbar.
Reales Resultat
Der Benutzer möchte eine eigene Der Benutzer wird mittels Popup
Datei hochladen. Er wählt eine
informiert, dass der Filetyp nicht
Datei mit nicht korrektem Filetyp gültig ist.
(Bild, Video oder Musik).
Der Benutzer möchte einen
Der Upload bricht ab, der Fortaktiven Upload abbrechen. Dafür schrittsbalken wird ausgeblendet.
klickt er auf das Symbol unterhalb
vom Fortschrittsbalken.
Der Benutzer möchte ein eigenes
File abspielen. Dafür klickt er auf
den Button „Play“ vom jeweiligen
File.
Die Media-Datei wird auf dem
Client wiedergegeben sofern
dieser eingeschaltet ist, ansonsten wird ein Popup eingeblendet.
Der Benutzer möchte ein eigenes Die Seite wird neu geladen, das
File löschen. Dafür klickt er beim File ist nicht mehr verfügbar.
jeweiligen File auf das Symobl
„X“ und bestätigt anschliessend
den Löschvorgang.
12.4 Mailverkehr mit Herrn Dr. Dominik Gruntz über Probleme mit Cling Library
12.4.1 Anfrage vom 5 Mai 2015 um 13:57 Uhr.
Guten Tag Herr Gruntz
Wir arbeiten zurzeit an der Thesis.
Ziel ist es, mittels SmartPhone eine REST-API anzusprechen und Dateistreams auf Fernseher oder
andere MediaRenderer zu starten.
Dafür nutzen wir eine Library, die uns den UPnP-Stack abbildet http://4thline.org/projects/cling/
Als Applikationsframework nutzen wir Spring.
Das Problem ist nun, dass Cling beim Starten eine Exception wirft:
org.fourthline.cling.transport.Router
: Unable to initialize network router:
org.fourthline.cling.transport.spi.InitializationException:
Failed to set modified URLStreamHandlerFactory in this environment.
Studiengang Informatik
Seite 68