RSS feed
<< March 2009 | Home | May 2009 >>

Aktionskünstler

Die Steuerung aller Aktionen des Audioservers übernimmt eine einzelne Java-Klasse

Im neuen Artikel der Reihe zum Audioserver geht es um die Controller-Klasse. Ich habe dieses Mal die Veröffentlichungsfunktion von Google Text und Tabellen genutzt, um den dort erstellten Artikel direkt ins Netz zu stellen.

Gleichzeitig habe ich Google Sites eingespannt, um die Artikelreihe dort zu präsentieren. Sites bietet vielseitigere Publikationsmöglichkeiten als das Blog allein und bringt mit seiner einfachen Bedienung schnell Ergebnisse.

Unnötig zu sagen, daß mir die neuen Möglichkeiten sehr gefallen, die Google hier bietet. :-D Viel Spaß beim Lesen!

Fotografie weichgespült

Deutschland ist auf der Street-Photography-Weltkarte ein weißer Fleck

Im Blog von Nick Turpin bin ich dieser Tage auf einen interessanten Beitrag zum Thema Street Photography in Frankreich gestoßen. Er schreibt, wie gering im Vergleich etwa zu den USA oder England in Frankreich das Interesse an Street Photography ausgeprägt ist.

Er macht das zum Teil an der französischen Gesetzeslage fest, die wie in Deutschland das Recht am eigenen Bild gesetzlich schützt. Gleichzeitig ist er der Meinung, daß gerade die freiheitsliebenden und freigeistigen Franzosen sich wahrscheinlich nicht von diesem Gesetz an der Street Photography hindern lassen und fragt, wo nach Atget bis Cartier-Bresson die Großen der französischen Street Photography von heute zu finden sind.


Wiesbaden, April 2009
Ich fand den Beitrag deshalb sehr interessant, weil mit Nick Turpin ein bekannter zeitgenössischer Street Photographer hier als quasi 'Außenstehender' bei einem Besuch in Frankreich diesen Eindruck erlangt und mir mit seinem Blogbeitrag geradezu aus der Seele spricht.

Auch in Deutschland gibt es eine Gesetzeslage wie in Frankreich und es scheint, als sei Street Photography, anders als in den Sechzigern und vielleicht noch den Siebzigern, komplett aus den hiesigen Medien und mithin aus dem öffentlichen Bewußtsein verschwunden.

Dabei ist die Anwendung des Persönlichkeitsrechts weder in Frankreich noch in Deutschland immer strikt und eindeutig. So wird künstlerische Fotografie erfreulicherweise i.d.R. nicht als Verletzung von Persönlichkeitsrechten wahrgenommen.

Dennoch ist es möglicherweise auch dieser etwas unsicheren Gesetzeslage geschuldet, daß das Genre eher in den USA, Kanada, Australien und England, aber auch in Fernost stärker verbreitet und auch nachgefragt wird, während hierzulande Street Photography meist nicht verstanden wird und ein in meinen Augen falsches, aber zumindest sehr unvollständiges Verständnis von Fotografie zunehmend Raum greift.

Für mich ist Street Photography nicht nur eine Kunstform, sie hat auch dokumentarischen Charakter. Ist doch durch die Augen der Street Photography der Kontext zwischen den Menschen und der Welt um sie herum zeitgenössisch festgehalten. Man vergleiche einfach einmal Street Photography aus den 40er, 50er, 60er Jahren und fahre fort bis heute.

Es zeigen sich sowohl faszinierende Parallelen als auch interessante Unterschiede. Allesamt spannende Zeitdokumente, die gleichzeitig die Handschrift derer tragen, die sie jeweils gemacht haben. Sie besitzen also sowohl eine persönliche Sichtweise als auch eine eher neutrale zeitgenössische Komponente. Hinzu kommen technische Veränderungen in der Fotografie wie die Wechsel von Schwarzweiß zu Farbe oder von analog zu digital und auch teils neue Sichtweisen der Protagonisten auf ihre Zeit.


Frankfurt, Juli 2008
Die Fotografie hat lange gebraucht, um als Kunstform anerkannt zu werden. Die in den Medien und der Kunstwelt hier weitgehend fehlende Street Photography nimmt der Fotografie als Kunstform einiges von ihrer Authentizität und Vielschichtigkeit. Es bleibt nur Fotografie weichgespült.

Innenansichten zum Staunen

Frankfurts neuer Kommerztempel MyZeil ist einen Besuch wert

Am Sonntag habe ich es endlich einmal in den neuen Frankfurter Kommerztempel MyZeil geschafft. Nachdem ganz Frankfurt bereits drin gewesen ist, war es für mich höchste Zeit. Ich mußte doch unbedingt auch etwas zur Bilderflut beitragen, die das neue Bauwerk seit seiner Eröffnung verursacht. ;-)


MyZeil Einkaufszentrum, Frankfurt, April 2009
Es hat sich gelohnt, der dämliche Name ist so ziemlich das einzig kritikwürdige an dem Gebäude. Mal abgesehen vom undichten Dach. Aber wir wollen mal nicht kleinlich sein angesichts eines so spektakulären Innenlebens.

Von außen sieht der Schuppen ziemlich unscheinbar aus. Ok, da ist immerhin das Loch in der Glasfassade. Aber das ist garnichts verglichen mit dem, was einen drinnen erwartet. Hut ab, eine sehr beeindruckende Architektur, die bei jedem Schritt neue, erstaunliche Blickwinkel hervorzaubert.

Dazu herrschte ein einzigartiges Licht, das teils von den neu errichteten Fassaden des Palais Quartier hereingespiegelt wurde und teils durch die gläserne Fassade und Dachkonstruktion hereinfiel. Ein Augenschmaus, an dem bei diesem Licht kein Fotograf untätig vorbeigehen kann. Entsprechend viele waren wie ich mit Kamera unterwegs. Mein Tipp: Unbedingt Sonntags und bei Nachmittagssonne hineingehen, dann ist der Raum auch wirklich erlebbar.

Neben der bereits gezeigten wird später hin und wieder noch die eine oder andere Fotografie dieses Besuches im Fotoblog auftauchen.

Big Brother ist überall

Fotografieren ist nicht kriminell

Heise-Online berichtet von einem Touristen (merke: Tourist, nicht Terrorist), dem in London untersagt wurde, Verkehrseinrichtungen zu fotografieren. Er mußte u.a. alle Fotografien von Londoner Bussen wieder löschen.

So ein Unsinn. Entweder der Mann ist Terrorist, dann hätte man ihn festhalten müssen, nicht seine Bilder vernichten. Oder der Mann ist kein Terrorist, dann hätte er auch die Bilder behalten dürfen.

Mir wollte vor einiger Zeit ebenfalls ein Polizist erzählen, ich müsse ihm meine Fotografien zeigen und löschen, nachdem ich das folgende Foto gemacht habe. Ich weigerte mich.


Frankfurt, Dezember 2008
Man muß ja mittlerweile schon fürchten, festgenommen zu werden, obwohl man nur fotografiert. Es wäre eine Verletzung des Rechts am eigenen Bild, wenn eine Fotografie veröffentlicht wird, die eine Perosn erkennbar zeigt, die das nicht möchte. Es ist aber nicht verboten, diese Fotografie zu machen. Und es ist schon garnicht erlaubt, daß ein Mensch einen anderen nötigt, seine Fotografien zu zeigen oder gar zu vernichten.

Überhaupt finde ich das deutsche Recht am eigenen Bild ziemlich albern. In den allermeisten Teilen der Welt gilt so etwas nicht, dort darf fotografiert werden, wer sich im öffentlichen Raum befindet. Das finde ich vernünftig.

Wehret den Anfängen. Die englische Polizei streitet den Vorfall ab. Lächerlich. Als ob der Tourist sich das ausdenkt und seine Fotografien freiwillig löscht.

Stream Team

Zwei Java-Klassen realisieren gemeinsam ein einfaches Audiostreaming via HTTP

Dieser Beitrag der Artikelserie zum Audioserver in Java befaßt sich mit dem Streaming über HTTP. Bevor auf die vergleichsweise einfache Realisierung im Quellcode eingegangen wird, zunächst die grundsätzliche Betrachtung des Audiostreaming.

Streaming über HTTP

Das Hypertext Transfer Protocol (HTTP) ist ursprünglich dafür gedacht, der Name läßt es ahnen, Dokumente zu transportieren, die in der Hypertext Markup Language (HTML) verfaßt sind. Hierfür formuliert es ein Request/Response-Schema, ein Schema, bei dem eine Maschine (Client) einer anderen Maschine (Server) mitteilt, welche Ressource sie möchte (Request). Der Server übermittelt daraufhin die Ressource an den Client (Response).

Audio über HTTP

Der Server übermittelt dem Client jede Ressource als Aneinanderreihung von Bytes. Deshalb müssen nicht unbedingt nur HTML-Seiten per HTTP übermittelt werden. Man kann HTTP auch dafür nutzen, Audiodaten zu transportieren, denn auch diese sind letztlich nur eine Aneinanderreihung von Bytes.

Ein wesentlicher Unterschied zur Übermittlung von HTML-Seiten besteht darin, daß Audio-Dateien gewöhnlich viel größer sind, als HTML-Seiten. Deshalb wird ein Audiotitel nicht erst komplett heruntergeladen und dann abgespielt. Der Client lädt immer nur gerade soviel, wie benötigt wird, um aus den digitalen Daten Klänge zu erzeugen.

Streaming

Der Client lädt also vom Server einen kleinen Teil der Musikdaten eines Titels, dekodiert diese, spielt sie ab und lädt weitere Daten zum Abspielen nach. Dieses kontinuierliche Laden und Abspielen von Teilen einer Audiodatei nennt man Streaming, weil ein kontinuierlicher Datenstrom vom Server zum Client fließt, während der Client Teile bereits abspielt.

Das Streaming hat den Zweck, entfernt liegende Audiodaten zum Abspielen über das Netz zu transportieren ohne daß Wartezeit für das Herunterladen entsteht. Das Streaming entlastet zudem die Netzlast indem die Datenmenge über die Zeit verteilt wird und damit die zu einem Zeitpunkt zu übertragende Datenmenge gering bleibt.

Der Server

Die vorangegangene Beschreibung des Streamings wird mit zwei Klassen umgesetzt, die sich die Arbeit teilen. Die Klasse Server übernimmt die Bedienung von Anfragen über HTTP in ihrer Methode doGet. Diese wird vom Servlet Container immer dann gerufen, wenn eine neue Anfrage eingeht, die dem Audioserver zugeordnet werden kann. Eine Anfrage sieht z.B. so aus:

http://192.168.178.36:8080/HomeAudio/Server/play/meinKanal

Beim Eintreffen einer solchen Anfrage wird in der Methode doGet der Wiedergabekanal aus der Anfrage ermittelt und das dazu passende Channel-Objekt abgerufen. In einer Schleife entnimmt das Server-Objekt vom Channel-Objekt solange Musikdaten, wie die Abspielliste des Wiedergabekanals solche noch zum Abspielen bereithält. Die Musikdaten werden in jedem Schleifendurchlauf einzeln hintereinander in die HTTP-Response geschrieben und so dem Abspieler übermittelt.

  protected void doGet(HttpServletRequest req,
                        HttpServletResponse resp
)
    throws ServletException, IOException {
    String pathInfo = req.getPathInfo().substring(1);
    String channelName =
             pathInfo.substring
(CMD_PLAY.length() 1);
    if (channelName != null) {
      Controller rcb = (Controller)
        getServletContext
().getAttribute(ATTR_CONTROLLER);
      Channel channel = rcb.getChannel(channelName);
      if (channel != null) {
        resp.setContentType("audio/mpeg");
        OutputStream os = resp.getOutputStream();
        int ch = -1;
        while (!shuttingDown && ((ch=channel.getData()) != -1)) {
          os.write(ch);
        }
      }
    }
  }

Ein Server-Objekt erzeugt bei seiner Initialisierung in der Methode init ein Controller-Objekt, das u.a. die Wiedergabekanäle bereithält. Die Klasse Controller wird im nächsten Artikel näher betrachtet.

Der Wiedergabekanal

Die andere Klasse, die einen Teil der Arbeit beim Streaming übernimmt, ist die Klasse Channel. Sie modelliert einen Wiedergabekanal der eine Abspielliste bereithält. In der Methode Channel.getData wird der Streamingprozeß des Servers unterstützt, indem bei jedem Aufruf ein Informationsbestandteil der gerade gespielten Audiodatei gelesen und der aufrufenden Methode übermittelt wird.

Die Klasse Channel kapselt in ihren von der Methode getData gerufenen privaten Methoden getPlayingTrack, getInputStream und nextTrack die Steuerung des Durchlaufs durch die Abspielliste. Die Übermittlung der gespielten Titel an Last.fm geschieht über die privaten Methoden handshake, nowPlaying und submit, die ebenfalls indirekt von der Methode getData gerufen werden. Die Methoden verwenden für die Übermittlung an Last.fm meine Klassenbibliothek fm.uplink.

  public int getData() throws IOException {
    handshake();
    int ch = -1;
    if (inputStream == null) {
      Track track = getPlayingTrack();
      if (track != null) {
        inputStream =
         (
BufferedInputStreamgetInputStream(track);
      }
    }
    if (inputStream != null) {
      ch = inputStream.read();
      if (ch == -1) {
        inputStream.close();
        inputStream = null;
        Track nextTrack = nextTrack();
        if (nextTrack != null) {
          inputStream =
           (
BufferedInputStreamgetInputStream(nextTrack);
          if (inputStream != null) {
            ch = inputStream.read();
          }
        }
      }
    }
    return ch;
  }

Fazit

Obwohl 'Audioserver' ersteinmal nach mordsmäßigem Schnickschnack und Rocket Science klingt, ist unser Audioserver ziemlich einfach gestrickt.

Der Kern des Audiostreaming ist die Methode Server.doGet, die mithilfe der Methode Channel.getData die einzelnen Musikdaten eines Titels häppchenweise einem Abspielgerät serviert. Das Dekodieren und Abspielen übernimmt das Abspielgerät.

Nach den vorangegangenen Beiträgen zum allgemeinen Rahmen und zum Design haben wir nun den Kern des Streamings näher kennengelernt. Weitere Details liefern die erwähnten Quellcodes der Klassen Track, Playlist, Server und Channel.

Im nächsten Artikel der Serie wenden wir uns der Steuerung mit der Klasse Controller zu.

Frohe Ostern!

Ob es nun das Ende der Fastenzeit, die Auferstehung des Herrn Jesus, die Befreiung der Israeliten aus ägyptischer Knechtschaft, der Anfang des Frühling oder mithin einfach die Freude über das schöne Wetter ist. Es gibt so richtig etwas zu feiern in dieser Zeit.

Und wo die Ostergrüße bereits lange vor Ostern von überallher schwirren, ist es heute am Ostersonntag an der Zeit, auch von dieser Stelle allen Frohe Ostern zu wünschen.

Frohe Ostern, ein schönes Passahfest und einen guten Start ins Frühjahr allerseits!



Happy Easter, Weisskirchen, Ostersonntag 2009

Osterwetter, Kaiserwetter

Der Mai wirft seine (Schlag-) Schatten voraus?

Mann, welch ein Osterwetter, haben wir schon Mai? Nur mal so zur Erinnerung, wir hatten Schnee auf dem Feldberg, letzte Ostern. Ok, Ostern war recht früh letztes Jahr, aber nichtsdestoweniger: Grandioses Wetter, will ich nur mal festhalten.

Die Pollenallergie und Asthma machen mir zwar, wie meist dieser Tage, das Leben schwer, aber Kortison sei Dank muß ich noch nicht ersticken. Das einzige wirksame nicht rezeptpflichtige Mittel bei Heuschnupfen: Nicht atmen. Nebenwirkung: Deutliche Einschränkung der Lebensqualität.

Und dann ist noch Dippemess, was will man mehr.



Dippemess, Frankfurt, April 2009

Gestaltungsarbeit

Das Design eines Audioservers muß nicht kompliziert sein

Eine weitere Folge der Artikelserie zum Audioserver in Java ist dem Design der Lösung gewidmet. Vorab ein Blick auf die Plattform.

Lösungsplattform

Ein Java EE konformer Servlet Container arbeitet über HTTP, so bekommt man die Funktion eines HTTP-Servers geschenkt. Weiterhin hat die Java-Plattform alles, was man für eine Bedienoberfläche benötigt, die in einem Webbrowser läuft. Und zuguterletzt kann in Java gebaute Software auf Unix, Linux, Mac oder Windows laufen. Hier also die Plattform in Kürze:
Alle Bestandteile können kostenlos aus dem Internet geladen werden. Die Installation ist jeweils selbsterklärend, wird aber in bezug auf unseren Audioserver noch in einem späteren Artikel näher betrachtet. Für die Laufzeitumgebung genügt das Laden und die Installation von Tomcat.

Design

Der vorige Artikel enthielt bereits Hinweise auf die Bestandteile, die der Audioserver haben soll:
  • Server (zum Abspielen von Musik per Streaming)
  • Channel (Wiedergabekanal)
  • Controller (Steuerung)
  • Playlist (Abspielliste)
  • Track (Musikstück)
Dank der Objektorientierung von Java kann man diese Bestandteile einfach als Klassen modellieren. Die Teile des Anwendungskerns sollen über eine Benutzeroberfläche bedient werden, welche für unseren Audioserver sehr einfach ausfällt. Die Benutzeroberfläche soll ohne jeden Schnickschnack die reine Basisfunktionalität des Servers in einem Webbrowser bereitstellen und besteht aus den folgenden Teilen
  • Channel-Dialog
  • Playlist-Dialog
  • Administrations-Dialog
Die Teile der Benutzeroberfläche werden als Java Server Pages hergestellt. Ein späterer Artikel geht noch darauf ein, wie man dem Server eine Programmierschnittstelle (API) spendiert, die es erlaubt, reichhaltigere Benutzeroberflächen jeder Art anzuschließen.  

Während die Benutzeroberfläche in einem noch folgenden Artikel näher beschrieben ist, schauen wir hier die Audio- und Steuerungsobjekte genauer an.

Audio-Objekte

Track

Die Klasse Track repräsentiert die Datei eines Audiotitels. Neben einer Methode zur Bestimmung der Datei, die von einem Objekt der Klasse Track verkörpert wird, besitzt sie Methoden zur Handhabung von Metadaten, also Titel, Album, Interpret, usw.

Die Klasse fällt vergleichsweise schlank aus, da die Methoden, die den Umgang mit Metadaten betreffen, aus den Klassenbibliotheken von Tritonus und JavaZoom entlehnt sind.

Playlist

Mit der Klasse Playlist wird eine Abspielliste beschrieben, sie verweist auf eine beliebige Anzahl von Objekten der Klasse Track. Ein Playlist-Objekt bietet Methoden zum Hinzufügen und Entfernen von Titeln, zum Abrufen der enthaltenen Stücke und zum Ändern von deren Reihenfolge.

In der Klasse Playlist sind zudem Methoden zur Bestimmung des gerade gespielten Titels und zur Ermittlung des als nächstes zu spielenden Stücks enthalten.

Außerdem enthält sie mit der Methode toTag einen Mechanismus, der aus einem Playlist-Objekt eine XML-Struktur fertigt. Damit lassen sich Playlist-Objekte als XML speichern und aus einer XML-Struktur wiederherstellen. Für den Umgang mit XML wird meine XML-Klassenbibliothek verwendet.

Channel

Die Channel-Klasse modelliert die Eigenschaften und Methoden eines Wiedergabekanals. Neben dem Namen des Kanals, der beim Abspielen verwendet wird, ist für jeden Kanal hinterlegt, welchem Benutzer der Kanal gehört, ob der Benutzer die gespielten Musikstücke an Last.fm übermitteln möchte ('Scrobbeln') und, falls ja, unter welchem Benutzerkonto bei Last.fm das geschehen soll.

Jedem Wiedergabekanal ist eine Abspielliste zugeordnet.

Ein Wiedergabekanal enthält Methoden zur Wiedergabe von Musik einschließlich des Scrobbelns und Methoden, die die zum Kanal gehörende Abspielliste zugänglich machen.

Die Channel-Klasse und ihre Codierung wird im nächsten Artikel näher betrachtet, deshalb ist hier noch keine Verknüpfung zum Quellcode enthalten.

Steuerungsobjekte

Controller

Die Klasse Controller übernimmt die Steuerung der Anwendung. Sie hält die Wiedergabekanäle der Anwendung bereit und macht sie für den Wiedergabe-Server und die Bedienoberfläche zugänglich. Über sie werden alle Methoden wie z.B. das Anlegen eines neuen Wiedergabekanals oder das Hinzufügen und Entfernen von Titeln verwendbar.

Die Control-Klasse und ihre Codierung wird in einem der nächsten Artikel näher betrachtet, deshalb ist hier noch keine Verknüpfung zum Quellcode enthalten.

Server

Die Klasse Server "bedient" Abspielgeräte mit der Musik, die gespielt werden soll. Sie nimmt die Anfragen (HTTP-Requests) der Abspieler entgegen und antwortet mit der gewünschten Musik (HTTP-Response).

Die Server-Klasse ist ein Java Servlet, es enthält selbst keine Anwendungslogik sondern nur die Logik, die erforderlich ist, um Anfragen über HTTP zu bedienen. Die Server-Klasse verwendet die Anwendungslogik aus dem Channel Objekt, um die Anfragen zu beantworten.

Die Server-Klasse und ihre Codierung wird gemeinsam mit der Channel-Klasse im nächsten Artikel beschrieben, deshalb ist hier noch keine Verknüpfung zum Quellcode enthalten. In einem zusätzlichen Artikel wird außerdem noch auf weitere Aspekte einer Webanwendung in Java eingegangen.

Bilanz bis jetzt

Die bisherigen Ausführungen haben den allgemeinen Rahmen für unseren Audioserver und das Design beschrieben, mit dem der Rahmen umgesetzt wird.

Im nächsten Beitrag der Serie betrachten wir wesentliche Bestandteile des Codes der Channel- und der Server-Klasse und beleuchten die Frage, wie das Streaming-Konzept umgesetzt wird.

Java macht Hausmusik

Digitale Musik für das Heimnetz mit Java: Eine Artikelserie liefert Einblicke

Oft braucht man vieles nicht, was Software bietet. Oft tut Software Dinge, die sie nicht tun soll, ohne, daß man es verhindern oder abschalten kann. Oft erfordert Software unnötig viele Ressourcen. Kommerzielle Software kostet, freie Software ist manchmal nicht stabil. Alles Anlässe, selbst Hand an eine Lösung zu legen, wenn man kann und möchte.

Mein letzter Beitrag zum Thema hatte es schon angekündigt, ich verwende gegenwärtig hin und wieder Zeit auf die Entwicklung eines einfachen Audioservers für den Hausgebrauch. Mittlerweile sind Server und Steuerung fertig und ich möchte die Bestandteile der fertigen Software im Rahmen einer Artikelserie hier im Blog schrittweise veröffentlichen.

Die Serie hat nicht nur den Zweck, einen Audioserver zu beschreiben. Sie dient außerdem dazu, folgende Aussagen nachvollziehbar zu machen.
  • Es bedarf nicht immer teurer oder umfänglicher Serverlösungen, um einen Computer das tun zu lassen, was man wirklich braucht.
  • HTTP genügt als Grundlage von Server-Lösungen, es sind keine proprietären Formate oder Protokolle wie z.B. UPnP nötig
  • Java ist eine vielseitige Technologieplattform, die nahezu alle Anwendungsbereiche abdeckt.
  • Es fehlt vergleichsweise wenig, die Bestandteile der Java-Plattform für eigene Zwecke einzusetzen.
  • Eine Anwendung aus "Plain Old Java Objects" (POJOs) ist einfach und schnell in eine Server-/Webapplikation zu überführen.
Sie adressiert damit verschiedene Themen und soll es einer breiteren Anwenderschaft erlauben, den Zugang zu den Themen zu finden, seien es Entwickler, Anwender oder Einsteiger. 

Was ist ein Audioserver?

Mit der zunehmenden Verbreitung von drahtlosen und auch kabelgebundenen Heimnetzen einerseits und digitalen Abspielgeräten á la iPod, Noxon und Konsorten andererseits bietet es sich an, im Heimnetz eine zentrale Aufbewahrungsstelle für die digitale Musik einzurichten.

Alles was es dazu neben dem Heimnetz braucht, ist ein Computer und eine Software, die die auf diesem Computer gespeicherte Musik zum Abspielen ins Netz übermittelt.

Ein Audioserver ist also eine Software, die digitale Musik bereithält und verschiedenen Abspielgeräten über das Netzwerk übermittelt. Auf einem ans Netz angeschlossenen Computer installiert macht die Software diesen Computer zum Audioserver (merke: Der Begriff Server ist doppelt besetzt).

Anforderungen: Was soll der Audioserver können?

Es lassen sich viele Anforderungen mit einem Audioserver verbinden und bereits erhältliche Lösungen haben manches, vielleicht auch vieles, was hier aufgeführt ist. Aber ich möchte eine Software, die alle folgenden Kriterien erfüllt und bis heute habe ich noch keine gefunden, die alles hier angegebene abdeckt:
  • Aus Musik auf einem am Netz angeschlossenen Computer sollen verschiedene Benutzer im Heimnetz 
    • Stücke unabhängig voneinander auswählen,
    • verschiedene Abspiellisten anlegen und
    • abspielen können.
  • Die Auswahl von Musik in eine Abspielliste soll nicht mehr erfordern, als einen Webbrowser und damit
    • auf jedem Gerät laufen, das einen Webbrowser enthält und
    • eine Bedienung unabhängig vom Standort des Servers erlauben.
  • Das Abspielen soll über HTTP-Streaming erfolgen, also
    • zum Abspielen keine Funktionalität für das Bedienen der Abspielliste erfordern und
    • ein Abspielen unabhängig vom Standort des Servers ermöglichen.
  • Die vom Server abgespielte Musik soll wahlweise an Last.fm übermittelt werden.
  • Die Lösung soll auf Tomcat oder einem anderen Java EE konformen Servlet Container laufen und so mit Linux, Unix, Mac oder Windows verwendbar sein.
  • Es sollen nur autorisierte Benutzer die Lösung verwenden können.
  • Eine Programmierschnittstelle (API), die z.B. andere Benutzeroberflächen ermöglicht

Ausgrenzungen: Was der Audioserver nicht kann

Manche Dinge in einem fachlichen Anwendungsumfeld werden von einer gegebenen Software nicht unterstützt. Dort, wo absichtlich etwas fehlt, spricht man konzeptionell von Ausgrenzungen. Hier die Ausgrenzungen des Audioservers:
  1. Keine synchrone Wiedergabe, d.h.,
    1. kein Ausgleich von unterschiedlichen Latenzzeiten zwischen Server und verschiedenen Abspielgeräten, die den selben Kanal spielen.
    2. Kein Ausgleich von unterschiedlichem Abrufverhalten und unterschiedlicher Pufferung verschiedener Abspielgeräte, die den selben Kanal spielen.
  2. Keine Bildung einer Datenbank mit Metadaten ("Audio-Datenbank", "Musikbibliothek", o.ä.)
  3. Keine Suche über Metadaten (Interpret, Album, Titel)
  4. Keine UPnP-Unterstützung
Der Punkt 1.2. ist eventuell ein Kandidat für eine spätere Stufe. Punkt 4. bedeutet, Titel sind nur in der Struktur durchsuch- und auswählbar, wie sie im Musikverzeichnis des Servers abgelegt sind.

Was fehlt?

Ok, wir kennen die Anforderungen und Ausgrenzungen, aber was soll eigentlich gebaut werden? Allgemein gesprochen müssen zwei Komponenten entstehen:
  • Eine Benutzeroberfläche zur Auswahl von Musik, zum Verwalten von Wiedergabekanälen und Abspiellisten sowie
  • eine Komponente, die die Musik einer Abspielliste über HTTP zum Abspielen ins Netz abgibt.
Auf die Herstellung dieser Teile soll in weiteren Artikeln näher eingegangen werden.

Ausblick

Noch folgende Beiträge hier im Blog werden genauer beleuchten, wie man einen Audioserver herstellt, der digitale Musik via Streaming verteilt und der sich mit einem Webbrowser bedienen läßt. Die Artikelfolge kann sich zwar noch ändern, aber bislang sind die folgenden Teile vorgesehen:
  1. Design des Audioservers
  2. Anwendungskern HTTP-Streaming
  3. Anwendungskern Steuerung
  4. Benutzeroberfläche
  5. Bilden einer Webapplikation nach Java EE Standards
  6. Installation der Gesamtlösung bestehend aus Tomcat und Audioserver auf Windows
  7. Bau einer Programmschnittstelle (API)
So viel für heute. Die weiteren Beiträge werden in loser Folge demnächst hier im Blog unter dem Schlagwort audioserver erscheinen.
<< March 2009 | Home | May 2009 >>