Streaming Audio mit SoundPlay
Geschrieben am Donnerstag, 18.Januar. @ 17:30:48 CET von Baron
------------------------------------------------------------------------------------------------------------

SoundPlay kann Musik aus der aktuellen Playlist dem Hörer irgendwo im Internet oder woanders in lokalen TCP/IP Netzwerken zur Verfügung stellen. Dies macht es einfach eine Playlist zu Hause laufen zu haben und dann von der Arbeit hineinzuhören, oder einen eigenen Internet Radio Sender laufen zu lassen.

SoundPlay 4.0 unterstützt zwei Streaming-Methoden: Pseudo-Streaming/Download und Echtzeit-Streaming (natürlich kannst Du auch weiterhin normale .m3u Pseudo Streams laufen lassen, wenn Du willst).
Pseudo-Streaming / Fernsteuerung
Mit einem Pseudo-Streaming Server werden Dateien in ihrer vollen Bitrate und Größe geschickt, was normalerweise nicht besonders bandbreitenfreundlich ist. Dateien werden nicht heruntergerechnet, so daß ein 3MB MP3 einen 3MB großen Download ergibt. Pseudo-Streaming erlaubt es aber, daß der Client direkten Zugriff hat, so daß er in der Playlist herumspringen kann, wie er möchte.

SoundPlay 4.0 beinhaltet einen eigenen kleinen HTTP-Server, welcher Webseiten mit der aktuellen Playlist bereitstellt, optional mit "Play", "Download" und "Stream" Links. Dieser Server läuft an Port 8080 Deiner IP-Adresse, und benötigt keinen extra Webserver (da es jedoch auf einem eigenen Port läuft, gibt es keine Konflikte mit einem normalen Webserver auf der selben Maschine). Um dies zu nutzen, mußt Du Deine aktuelle IP-Adresse kennen, welche Du entweder über das DUN (DialUp Networking) Kontrollfeld erfahren kannst, oder durch den Aufruf von netstat in einem Terminal. Das ist alles deutlich einfacher wenn Du eine statische IP-Adresse hast anstelle einer dynamischen.

Um dieses Feature zu aktivieren, gehst Du in die Preferences | Plugins | General Purpose und wählst HTTP Interface aus. Klicke auf "Configure" und stelle die entsprechenden Ausgabeoptionen ein.

Show File Info:
Dieser Eintrag übermittelt neben dem Dateinamen auch die Bitrate und die Laufzeit jedes Tracks zu dem Webbrowser.

Enable play links:
Dieser Link wird nur für die Fernsteuerung des entfernten Rechners benutzt. Das Anklicken eines Play Links spielt diesen nicht auf der lokalen Maschine ab, sondern sorgt nur dafür, daß SoundPlay auf dem anderen Rechner zu diesem Titel springt.

Enable download links:
Wie der Name schon sagt, ermöglicht ein Download Link dem Browser das Herunterladen einer Kopie des MP3 Stücks auf den eigenen Rechner. Leider erhalten die heruntergeladenen Dateien alle den Namen dlod.mp3 anstelle des eigentlichen Dateinamens (zumindest im Internet Explorer, möglicherweise ist dies ein behebbarer Fehler). Beachte bitte, daß Du die Rechte für jedes Stück haben mußt, daß Du so anbieten willst, wenn Du nicht mit dem Gesetz in Konflikt kommen willst. Es ist illegal Copyright-geschützte Musik anderen zum Download anzubieten (ja, auch in Deutschland!).

Enable stream links:
Ein Stream Link sendet den ausgewählten MP3-Track in Echtzeit zu dem MP3 Player des Clients, ohne daß dieser das Stück auf dessen Festplatte speichert.

Sobald alles konfiguriert ist, kannst Du die Konfiguration von einem anderen Rechner aus prüfen, indem Du :8080 an die IP-Adresse anhängst (vergiß nicht zuvor das HTTP Interface zu aktivieren). Wenn zum Beispiel die IP-Adresse des Rechners mit SoundPlay im lokalen Netzwerk 192.168.0.7 ist, dann müßte auf dem Client-Rechner http://192.168.0.7:8080 eingegeben werden. Echte IP-Adressen und Domain Namen funktionieren natürlich auch. Leider ist die Port-Adresse in dieser Version der HTTP-Interfaces nicht konfiguriertbar.
Echtzeit-Streaming
Über ein getrenntes Interface bietet SoundPlay die Möglichkeit, mittels eines "Live Encoder" Plug-Ins in Echtzeit zu streamen. In dieser Konfiguration kann der Benutzer (Client) nicht in der Playlist hin- und herspringen - er hört nur das, was Du gerade zu dem Zeitpunkt abspielst; genau wie bei einem Radiosender. Während das HTTP-Interface darauf beschränkt ist,einen Track zu kontrollieren bzw. auf einen Track zuzugreifen, streamt der "Live Encoder" alles, was gerade in SoundPlay abgespielt wird, in die Welt hinaus. Wichtig ist dabei, daß man den Stream heruntersamplen kann auf Internet-freundliche Datenraten, damit auch Modem Benutzer diesen Streams zuhören können. Dabei ist das Ergebnis natürlich immer ein Kompromiss zwischen der verfügbaren Bandbreite und der resultierenden Audio-Qualität.

Der Live Encoder leitet den Audio-Streams dabei durch einen auf dem System installierten MP3 Encoder. Dieser erledigt dann auch das heruntersamplen (falls notwendig). Den Ausgabestream des MP3 Encoders routet der Live Encoder dann zu dem gewählten Ausgabe Port. Daher befindet sich der Live Encoder im Filters-Bereich des Plugin-Dialogs.

Um den Live Encoder zu nutzen mußt Du erst einmal den LAME Encoder installieren (vorzugsweise in ~/config/bin). Leider kann man GOGO dafür nicht nutzen, da GOGO die kodierten Daten immer in eine Datei schreibt und nicht nach stdout, wie es für diese Funktion benötigt wird. In dem Konfigurationsdialog für den Live Encoder kann man verschiedene Kommandozeilenoptionen für LAME einstellen. Die Default-Einstellung ist:

/boot/home/config/bin/lame -b 64 -x -r - -

Dies weist LAME an, den Stream in 64kbps zu kodieren, zeigt an, daß es sich um PCM daten handelt, und es soll Byte swapping durchgeführt werden. Das - - sind eigentlich zwei separate Flags, die LAME sagen, daß der Input von stdin kommt und die Ausgabe nach stdout erfolgen soll.

Die Default-Einstellungen sollten gut funktionieren, aber wenn Deine User in einem schnellen Netzwerk sind, kannst Du z.B. die Bitrate auf 128kpbs oder höher setzen, um eine bessere Qualität zu erreichen.

Es ist wichtig daß die Buffergröße für den Stream im empfangenden MP3 Player mindestens so groß ist, wie die Bitrate mit der der Stream gesendet wird. Wenn Du zum Beispiel einen 128 kbps Stream anbietest, aber WinAmp (als Beispiel) den Buffer auf 64 kbps eingestellt hat, dann erhält der Client nur abgehackte Audiostücke.

Normalerweise, wenn Du Modem-User beschallen willst, mußt Du den Stream heruntersamplen um ihn netzwerkfreundlicher zu machen. Allerdings reicht es dazu nicht aus, einfach nur "Halve samplerate" oder "Make mono" im Konifgurationsdialog einzustellen. Wenn Du diese einschaltest, dann mußt Du auch die Kommandozeilenoptionen für den MP3 Encoder anpassen. Für die halbe Samplerate ist das -s 22.05, und Mono schaltest Du durch -m m ein (-m ist für den Modus; wenn Du im Terminal "lame" ohne Parameter aufrufst, siehst Du alle möglichen Schalter). Um also einen 64kbps Mono Stream zu senden mit einer Samplerate von 22,05 KHz, mußt Du folgende Optionen angeben:

/boot/home/config/bin/lame -b 64
-m m -s 22.05 -x -r - -

Experimentiere ruhig mit Mono oder Stereo, verschiedenen Bitraten und voller oder halber Samplerate herum bis Du eine Kombination gefunden hast, die mit der Verbindungsgeschwindigkeit Deiner User gut läuft.

Um einen Zugriff auf Deinen MP3 Live Stream zu ermöglichen, gibst Du die IP-Adresse (oder den DNS Namen) zusammen mit dem Port an, den Du in der Live Encoder Konfiguration angegeben hast (der Defaultport ist 8000). Zum Beispiel http://192.168.0.7:8000. Diese URL muß der Benutzer dann direkt in seinem MP3 Player eingeben, nicht in seinem Browser.

Das Live Encoder Plugin ist vom Konzept her sehr ähnlich zu ShoutCAST / icecast / live365, aber die aktuelle Version verfügt über keinen Mechanismus um Meta-Daten zu solchen Sites zu übertragen, daher kann Dein Stream auch nicht automatisch in deren Datenbanken aufgelistet werden. Allerdings kann man bei live365 auch Streams manuell registrieren, so daß theoretisch Dein Stream dort aufgelistet werden kann. Unglücklicherweise ist zur Zeit ein Bug in deren System, so daß das ganze nicht so funktioniert wie es sollte.