Teil von SELFHTML aktuell Teil von Artikel Teil von Grafik/Multimedia

Henk Strobel:
Streaming Media via HTTP/SMIL

nach unten Henk Strobel
nach unten Begriffe: Streaming, Realmedia, RTS-Protokoll
nach unten Einfaches Verlinken mit Metadateien
nach unten Bandbreitenunterscheidung mit SMIL
nach unten Weitere Möglichkeiten: dynamische Playlists, MP3-Streaming
nach unten Beispiele
nach unten Links

Henk Strobel

E-Mail: E-Mail name@provider.xy
Homepage-URL: deutschsprachige Seite http://www.17seconds.de/

Dieser Artikel versteht sich nicht als eine vollständige Abhandlung zum Thema, sondern vielmehr als persönlicher Erfahrungsbericht, der Anderen den Einstieg in die Materie erleichtern soll. Für Ergänzungen und Tipps bin ich jederzeit dankbar!

nach obennach unten

Begriffe: Streaming, Realmedia, RTS-Protokoll

Wer auf seiner Homepage Audio oder Video anbieten will, steht vor einer grundsätzlichen Entscheidung:
Einerseits kann man Dateien zum Download anbieten. Hierfür hat sich das MP3-Format etabliert.

Die zweite Möglichkeit nennt sich "Streaming Media":
Dabei wird die Datei während des Downloads bereits angezeigt. Der User muß also nicht erst riesige Datenmengen herunterladen, sondern bekommt fast sofort zu sehen (bzw. hören), worum es geht. Hierfür bietet sich Realmedia an.
Der für das Abspielen benötigte nach unten Realplayer ist in der Basic-Version kostenlos zu haben und weit verbreitet.
Zum Erstellen der Realmediadateien gibt es den einfach zu bedienenden und in der Basic-Version ebenfalls kostenlosen nach unten Realproducer. Einige Audio- und Videoeditoren bieten außerdem Realmedia Exportfilter.

Liest man sich die Dokumentation zu Realmedia durch, gewinnt man schnell den Eindruck, dass man außerdem noch den Realserver benötigen würde. Tatsächlich hat es gewisse Vorteile, Realmedia über einen Realserver zu streamen:

Seit der Version G2 können die Realmedia-Dateien beim Erstellen für mehrere Bandbreiten kodiert werden. Server und Realplayer kommunizieren über das "Realtime Streaming Protocol" (RTSP), wobei die Bandbreite dynamisch angepasst werden kann, d.h. jeder User bekommt die für seine Internetverbindung optimale Übertragungsrate. Wird die Verbindungsqualität schlechter oder besser, kann die Bandbreite während des Abspielens geändert werden, ohne dass Aussetzer auftreten.

Eine Einzellizenz für diese Software schlägt leider mit mehreren tausend DM zu Buche. Einige Provider bieten Ihren Kunden zwar kostengünstig die Nutzung eines Realservers an, jedoch sollte man genau nachfragen, ob das RTS-Protokoll auch unterstützt wird. Zur Not geht es jedoch auch ohne, wie die folgenden Abschnitte zeigen sollen...

Die Rede ist hier übrigens nicht von "Livestreaming", wobei z.B. die Ausgabe einer Kamera direkt über das Internet "gesendet" wird. Dies würde zwingend einen Realserver erfordern sowie hohen technischen Aufwand.

nach obennach unten

Einfaches Verlinken mit Metadateien

Hat man keinen Realserver zur Verfügung, und reicht es einem aus, seine Inhalte nur für eine feste Bandbreite anzubieten, ist das Einbinden recht einfach:

  1. Man erzeugt mit dem Realproducer eine *.rm-Datei mit fester Bandbreite.
    für 56k Modems z.B. kodiert man die Realmediadatei üblicherweise mit 32kBps.
  2. Man erzeugt eine Metadatei. Das ist eine einfache Textdatei, die nur eine Zeile enthält, nämlich den URL, unter der die Realmedia-Datei zu finden ist. Diese Textdatei muß die Endung .ram bekommen.
  3. Auf der Webseite setzt man jetzt einen Link auf die Metadatei.
    Klickt man auf den Link, wird der Realplayer gestartet. Er sucht dann unter dem in der Metadatei angegebenen URL eine Realmediadatei und versucht, diese zu streamen.

Dabei spielt es keine Rolle, ob es sich um Audio oder Videodaten (oder beides) handelt.

Metadatei "beispiel.ram":

http://www.providerxy.com/beispiel.rm

Der Vollständigkeit halber: Benutzt man einen Realserver, der das RTSP unterstützt, könnte die Metadatei z.B. so aussehen:

rtsp://realserver.providerxy.com/beispiel.rm

Eine zweite Möglichkeit soll nicht verschwiegen werden:
Statt einen Link auf die Metadatei zu setzen, kann man auch das <embed> Tag benutzen, um den Player direkt in der Webseite anzuzeigen. Dabei ist es möglich, das Aussehen des Players seinen eigenen Bedürfnissen anzupassen, z.B. bei Videodaten nur das Bildfenster ohne Buttons, lästige Werbung, etc. anzuzeigen. Dafür muß die Metadatei die Endung ".rpm" bekommen.

Da ich dies jedoch noch nicht in allen Browsern zum Laufen gekriegt habe, werde ich hier (noch) nicht näher darauf eingehen. (IE 4.5 für MAC macht - mal wieder - Probleme.)

nach obennach unten

Bandbreitenunterscheidung mit SMIL

SMIL (Synchronized Multimedia Integration Language, sprich wie engl. "smile"), ein XML-Derivat, ist mittlerweile offizieller Standard des W3C. Die Sprache ist vor allem dafür ausgelegt, Abläufe von Multimediashows zu organisieren.

Das <switch> Tag birgt jedoch die Möglichkeit, auf einfache Weise Realmedia für verschiedene Bandbreiten anzubieten, und zwar ohne den Einsatz eines Realservers.

Man benötigt für jede Bandbreite eine einzelne, nur für diese eine Bandbreite kodierte Realmediadatei. Wie viele verschiedene man anbieten will, kann jeder selbst entscheiden, je nachdem, was für Internetanbindungen das erwartete Publikum vorwiegend benutzt, oder wieviel Webspace zur Verfügung steht.

Meine erste SMIL-Datei... ;-)

Eine SMIL-Datei hat die Dateiendung .smil oder .smi, beginnt mit <smil> und endet mit </smil>. Vorgeschrieben ist außerdem das <body> Tag, innerhalb dessen die eigentlichen Anweisungen notiert werden, und in diesem Fall das <par> Tag, in das normalerweise Tracks eingeschlossen werden, die gleichzeitig (parallel) abgespielt werden. Der Realplayer kommt jedoch auch ohne das <par> Tag zurecht.

Datei "beispiel.smil":

<smil>
 <body>
  <par>
   <switch>
    <audio src="http://www.providerxy.com/datei1.rm" system-bitrate="250000"/>
    <audio src="http://www.providerxy.com/datei2.rm" system-bitrate="100000"/>
    <audio src="http://www.providerxy.com/datei3.rm" system-bitrate="40000"/>
    <audio src="http://www.providerxy.com/datei4.rm" system-bitrate="1000"/>
   </switch>
  </par>
 </body>
</smil>

Zwischen <switch> und </switch> werden nun die verschiedenen Dateien angegeben, unter denen der Realplayer auswählen soll, das Unterscheidungskriterium ist hier das Attribut "system-bitrate". Handelt es sich um Videodaten, benutzt man statt des <audio> einfach das <video> Tag.

Genauer: Der Realplayer vergleicht die innerhalb des <switch> Tags angegebenen Bandbreiten mit der vom User in den Realplayer-Einstellungen angegebenen und versucht, die erstbeste Datei zu streamen, deren angegebene Bandbreite kleiner ist, als die vom User eingestellte. Das ist auch der Grund dafür, daß man die Dateien immer nach fallender Bandbreite sortieren sollte.

Hat der User also "56k Modem" als Internetverbindung angegeben, wird der Realplayer versuchen, die Datei "http://www.providerxy.com/datei3.rm" zu streamen.

Damit der Realplayer auch weiß, daß er die Datei streamen soll, muß die SMIL-Datei wiederum über eine Metadatei mit der Endung ".ram" aufgerufen werden, welche den URL der SMIL-Datei enthält, etwa "http://www.providerxy.com/beispiel.smil"

nach obennach unten

Weitere Möglichkeiten

Dynamische Playlists über CGI

Mit Hilfe von SMIL ist es auch kein Problem, verschiedene Tracks nacheinander abzuspielen. Dazu schliesst man die <audio/>, bzw. <video/> Tags in das <seq></seq> Tag ein. Eine Schachtelung von <switch> Tag und <seq> Tag ist auch denkbar.

SMIL-Dateien können auch dynamisch generiert werden. Ein CGI-Skript muss dafür den Content-type Header "application/smil" zurückliefern. Damit eröffnen sich vielfältige Möglichkeiten, von dynamischen Playlists, die sich der User selbst zusammenstellen kann, bis hin zu Internetradioprogrammen.

Das dynamische Erzeugen der Metadateien funktioniert nach meiner Erfahrung nicht, da erst der Aufruf einer statischen Datei mit der Endung ".ram" zum Starten des externen Realplayers führt.

MP3 Streaming - muß es der Realplayer sein?

Der Realplayer ist in der Lage, MP3-Dateien wiederzugeben. Auf Encoderseite ist man also nicht auf Real-Produkte und -Formate angewiesen.

Im SELFHTML-Forumsarchiv findet man einige Messages von Leuten, die sich mit mehr oder weniger großem Erfolg an MP3-Streaming und Playlists versucht haben. Wenn man bereit ist, sich in Sachen Wiedergabe-Software auf den Realplayer zu beschränken, scheint mir die Einbindung von Realmedia- und/oder MP3-Dateien über Metadateien (*.ram) die beste Alternative zu sein. Wenn man nämlich über Metadateien verlinkt, kann man sicher sein, daß als externer Player - unabhängig von der Plattform - der Realplayer gestartet wird, der MP3s streamen und auch mit SMIL umgehen kann.

nach obennach unten

Beispiele

Zum Ausprobieren:
Über die folgenden Links können Sie verschiedene Audiodateien aufrufen, einmal über einen Realserver, dann über eine Bandbreitenunterscheidung mit SMIL, und schliesslich eine MP3-Datei, die über eine Metadatei (*.ram) eingebunden ist, so daß sie mit dem Realplayer abgespielt wird.

deutschsprachige Seite Realaudio (RTSP)
deutschsprachige Seite Realaudio (HTTP / SMIL)
deutschsprachige Seite MP3 Stream (Einbindung über Metadatei)

Zugehörige Dateien:

Metadatei "aday_rtsp.ram":

rtsp://merlin.prohost.de/x-spect/aday.rm

Metadatei "aday_http.ram":

http://www.17seconds.de/beispiel/aday.smil

Datei "aday.smil":

<smil>
 <body>
  <par>
   <switch>
    <audio src="http://www.17seconds.de/beispiel/aday_64k.rm" system-bitrate="66000"/>
    <audio src="http://www.17seconds.de/beispiel/aday_44k.rm" system-bitrate="46000"/>
    <audio src="http://www.17seconds.de/beispiel/aday_32k.rm" system-bitrate="34000"/>
    <audio src="http://www.17seconds.de/beispiel/aday_20k.rm" system-bitrate="1000"/>
   </switch>
  </par>
 </body>
</smil>

Metadatei "aday_mp3.ram":

http://www.17seconds.de/beispiel/aday_32k.mp3

nach obennach unten

Links

englischsprachige Seite Offizielle SMIL-Spezifikation.
englischsprachige Seite RealPlayer Downloadseite.
englischsprachige Seite RealProducer Downloadseite.
englischsprachige Seite RealSystem Production & Authoring Guides, für diejenigen, die mehr wissen wollen.

Happy streaming... ;-)

Teil von SELFHTML aktuell Teil von Artikel Teil von Grafik/Multimedia

© 2007 bereichsübergreifende Seite Impressum