Aus Linux-Magazin 01/2010

Video-Streaming mit Lighttpd und Apache

© drx, 123rf.com

Video-Streaming war lange eine Domäne kostspieliger Spezialserver. Heute kann praktisch jeder mit freier Software und ein paar Handgriffen eine Videoshow in der Art von Youtube & Co. im Web abziehen – komfortables Vor- und Zurückspulen der Filmchen inklusive.

Videos im Web veröffentlichen und bequem im Browser abspielen – das ist das Erfolgsrezept von Portalen wie Youtube, Vimeo und Google Video. Während nur wenige Linuxer Anlass haben, Veranstaltungen per Video-Livestream zu übertragen, besitzen fast alle Unternehmen, Softwareprojekte oder Usergroups Videodateien, die sie online stellen möchten. Dieser Artikel zeigt, wie das mit einem HTTP-Server und einem geeigneten Zusatzmodul in wenigen Schritten vonstattengeht. Wer eine Lösung für den Live-Betrieb sucht, findet Informationen zum Open-Source-Server Red 5 im Kasten “Live dabei mit Red 5”.

Komfort geht vor

Die Ansprüche der Anwender an den Bedienungskomfort sind dabei von den Branchengrößen geprägt: Niemand möchten ein zusätzliches Programm oder Plugin installieren. Außerdem wollen Nutzer vor- und zurückspulen beziehungsweise -springen, ohne zuvor lange auf den Download des kompletten Films zu warten (Abbildung 1). Neben einem geeigneten Server ist also vor allem ein akzeptabler Client gesucht.

Derzeit entsprechen am ehesten als Flashobjekt umgesetzte Videoplayer diesen Ansprüchen. Das passende Plugin hat Otto Normalsurfer in den meisten Fällen nämlich schon installiert. Damit fußt der Filmgenuss im Web zurzeit auf einer proprietären Technologie des Herstellers Adobe. Abhilfe könnte in Zukunft der Standard HTML 5 schaffen, der den freien Videocodec Theora als Format festschreibt, das ein Webbrowser von Haus aus abspielen kann.

Bis dahin bleibt Verfechtern quelloffener Software immerhin der Trost, dass wenigstens die in Flash implementierten Player selbst unter Open-Source-Lizenzen verfügbar sind. Dazu gehört der JW FLV Media Player [1], dessen Macher allerdings auf eine Non-Commercial-Lizenz von Creative Commons setzen. Wer auf einer kommerziellen Seite damit Filme zeigen möchte, muss zahlen. Der JW-Player ist etwa auf den Videoseiten der Linux-Foundation im Einsatz.

Unkomplizierter ist die Lizenzlage beim Flowplayer [2], den es in einer GPLv3-Version gibt, womit gewerbliche Nutzung kein Problem ist. Eine kostenpflichtige Lizenz benötigt für diesen Player nur, wer dessen Standardoberfläche gegen ein individuelles Look & Feel austauschen möchte. Zu den Flowplayer-Anwendern gehört das Projekt Archive.org mit seiner gewaltigen Filmsammlung.

E Abbildung 1: Status quo der Bedienungsfreundlichkeit: Der blassrote Balken zeigt an, wie weit der Player den Film schon gepuffert hat. Der Anwender kann jedoch auch darüber hinaus an beliebige Stellen springen.

E Abbildung 1: Status quo der Bedienungsfreundlichkeit: Der blassrote Balken zeigt an, wie weit der Player den Film schon gepuffert hat. Der Anwender kann jedoch auch darüber hinaus an beliebige Stellen springen.

Mogelpackung

Die Technik, die im Zusammenspiel mit den Flashplayern Verwendung findet, ist im traditionellen Sinne gar kein Streaming, sondern ein progressiver HTTP-Download. Im Zuge des Youtube- und Webvideo-Booms haben sich die Begriffsgrenzen aber aufgeweicht, in einigen Anleitungen findet sich zumindest der Ausdruck Pseudo-Streaming.

Damit der Anwender auch an Stellen des Films springen kann, die der Player noch gar nicht in seinen Puffer geladen hat, braucht es speziell präparierte Dateien. Sie enthalten Metadaten, die über die Länge des Clips und mögliche Einsprungspunkte (Cue Points) Auskunft geben. Für diesen Zweck gibt es das Kommandozeilen-Programm »flvtool2« [3]. Das BSD-lizenzierte Tool impft Videodateien im FLV-Format mit den erforderlichen Meta-Informationen. Ins Flashvideo-Format FLV lassen sich fast alle Arten von Videodateien mit dem Werkzeug Ffmpeg [4] bringen.

Der Befehl »flvtool2 -U Dateiname« versieht ein Video automatisch mit einer Reihe von Cue Points. Das Kommando »flvtool2 -P Dateiname« gibt alle Metadaten zur Kontrolle auf dem Terminal aus. Spult der Betrachter ein derart präpariertes Video per Schieberegler vor oder zurück, sendet der Player die gewünschte Startposition als GET-Variable in der HTTP-Anfrage an den Webserver. Diese Anfrage, beispielsweise in der Form »GET /video.flv?start=51858804 HTTP/1.1«, verarbeitet dann ein spezialisiertes Servermodul.

Server leicht gemacht

Ein passendes Modul bringt der Webserver Lighttpd [4] bereits in seiner Standardausstattung mit. Um das FLV-Modul zu aktivieren, muss der Nutzer nur zwei Änderungen in der Konfigurationsdatei »/etc/lighttpd/lighttpd.conf« vornehmen: Im Abschnitt »server.modules« trägt er die Zeile »”mod_flv_streaming”,« ein. Häufig ist sie bereits vorhanden, nur das Kommentarzeichen ist noch zu entfernen (Abbildung 2). Unterhalb dieser Sektion ordnet die Zeile »flv-streaming.extensions = ( “.flv” )« die Anfragen nach FLV-Dateien dem Modul zu.

Ein Neustart des Webservers, den in der Regel das Kommando »/etc/init.d/lighttpd restart« erledigt, sorgt dafür, dass die neue Einstellung wirksam wird.

Der Flowplayer – derzeit in Version 3.1.5 – steht als komprimiertes Archiv mit allen benötigten Komponenten zum Download bereit. Der Tarball enthält auch eine hübsche Beispielseite, deren Code der HTML-kundige Anwender fast alles entnehmen kann, was er zur Einbindung des Flashobjekts wissen muss. Im Grunde ist es nur erforderlich, dass die SWF-Datei »flowplayer-3.1.5.swf« auf dem Webserver zu finden ist, dazu die Javascript-Datei »flowplayer-3.1.4.min.js«, die für eine einheitliche Schnittstelle zum Flashobjekt sorgt.

Listing 1:
»index.html«
01 <html>
02   <head>
03     <!-- Diese Javascript-Datei sorgt für das Einbetten
04          und stellt die Flowplayer-API bereit.
05     -->
06         <script type="text/javascript" src="flowplayer-3.1.4.min.js"></script>
07   </head>
08   <body>
09     <!-- Im A-Tag findet der Flowplayer Platz. -->
10     <a
11       href="video.flv"
12       style="display:block;width:520px;height:330px"
13       id="player">
14     </a>
15     <!-- Dieser Javascript-Aufruf installiert den Player in das A-Tag. -->
16     <script>
17       flowplayer("player", "flowplayer-3.1.5.swf");
18     </script>
19   </body>
20 </html>

Daneben gibt es zahlreiche Konfigurationsoptionen sowie Erweiterungen für den Player. Zum einfachen Einstieg ist es empfehlenswert, zunächst die komplette Flowplayer-Distribution im Webroot-Verzeichnis zu entpacken und die Beispielseite im Browser aufzurufen (Abbildung 3). Daneben hilft die sehr verständliche Dokumentation auf der Flowplayer-Homepage weiter. Die allerwichtigsten Angaben zur Einbindung des Players in eine HTML-Seite zeigt Listing 1.

Abbildung 2: Der freie Webserver Lighttpd bringt bereits ein Modul für das Flash-Streaming mit, der Admin braucht nur den Eintrag in der Konfigurationsdatei einzukommentieren.

Abbildung 2: Der freie Webserver Lighttpd bringt bereits ein Modul für das Flash-Streaming mit, der Admin braucht nur den Eintrag in der Konfigurationsdatei einzukommentieren.

Abbildung 3: Die Macher des Flowplayer liefern eine einfache Beispielseite mit, die die Einbindung des Flashobjekts einfach macht.

Abbildung 3: Die Macher des Flowplayer liefern eine einfache Beispielseite mit, die die Einbindung des Flashobjekts einfach macht.

Apache spult

Wer bereits einen Apache-Webserver betreibt oder andere gute Gründe für dessen Einsatz hat, geht in Sachen Videokomfort nicht leer aus. Allerdings kann er sich nicht über fertig mitgeliefertes FLV-Zubehör freuen, sondern muss das passende Modul selbst kompilieren (Abbildung 4).

Der polnische Programmierer Artur Bodera hat das von Paul Querna geschriebene Modul »mod_flvx« gepatcht und stellt es unter [5] zum Download im C-Quelltext bereit. Zum Übersetzen für Apache 2 sind dessen Entwickler-Header erforderlich. Unter Ubuntu beispielsweise kommt für den Standard-Threaded-Apache das Paket »apache2-threaded-dev« zur Verwendung, für die Prefork-Variante »apache2-prefork-dev«. Die Entwicklerpakete bringen gleich das Apache-Extension-Tool »apxs2« als Binary mit.

Die folgende Zeile, mit Root-Rechten ausgeführt, kompiliert und installiert das Modul:

apxs -c -i ./mod_flvx.c

Anschließend hängt der Admin noch Folgendes an die Apache-Konfiguration an, auf Ubuntu-Systemen also an die Datei »/etc/apache2/apache2.conf«:

LoadModule flvx_moduleU
 /usr/lib/apache2/modules/mod_flvx.so
AddHandler flv-stream .flv

Nach einem Restart des Webservers, etwa durch den Befehl »/etc/init.d/apache2 restart«, ist das Modul aktiviert und der traditionsreiche Apache kann im modernen 2.0-Video-Web mitspielen.

Der russische Server-Newcomer Nginx [6] bietet ebenfalls ein FLV-Modul zum willkürlichen Spulen an. Wer dies nutzen will, muss allerdings schon vor dem Übersetzen aus dem Quelltext mit der Konfigurationsoption »–with-http_flv_module« aktivieren.

Abbildung 4: Das Apache-Extension-Tool hilft beim Übersetzen und Installieren des FLV-Moduls für den HTTP-Server.

Abbildung 4: Das Apache-Extension-Tool hilft beim Übersetzen und Installieren des FLV-Moduls für den HTTP-Server.

Videoshow für lau

Damit sind bereits drei freie Server zum FLV-Streaming auf dem Markt. Im Zusammenspiel mit einer Server-seitigen Skriptsprache wie PHP, sei es über FastCGI oder als Apache-Modul, lässt sich so kostengünstig eine kleine Videogalerie auf Open-Source-Basis einrichten. Wer eine Datenbank mit einbindet, kann in dieser die Beschreibungen und Schlagwörter zu den Clips speichern, was auch eine schlichte Suche ermöglicht.

Live dabei mit Red 5
Wer einen Flash-Streamingserver für die Live-Übertragung von Veranstaltungen sucht, findet mit Red 5 [7] eine Alternative zu kommerziellen Angeboten. Der Open-Source-Server ist ein in Java implementierter Nachbau von Adobes Flash Media Server (FMS, [8]) und steht unter LGPL 2.1. Red 5 beherrscht nicht nur das Protokoll HTTP, sondern spricht wie sein Vorbild auch das Real Time Messaging Protocol (RTMP).

Der Server setzt mindestens Java 5 voraus und verwendet einen Servlet-Container wie Jetty oder Tomcat. Mit Red 5 lassen sich komplexe Anwednungen in Java entwickeln, wozu das Projekt ein eigenes Plugin für Eclipse anbietet. Daneben lässt sich der Server mit Groovy, Beanshell, Jruby und Jython skripten. Die Konferenzsoftware Openmeetings [8] beispielsweise integriert Red 5 für den Videochat (Abbildung 5).

E Abbildung 5: Der freie Live-Streamingserver Red5 dient als Videochat-Software in der Konferenzanwendung Openmeetings.

E Abbildung 5: Der freie Live-Streamingserver Red5 dient als Videochat-Software in der Konferenzanwendung Openmeetings.

Infos
[1] JW FLV Media Player: [http://www.longtailvideo.com/players/jw-flv-player/]

[2] Flowplayer: [http://flowplayer.org]

[3] FLVTool2: [http://www.inlet-media.de/flvtool2]

[4] Lighttpd: [http://www.lighttpd.net]

[5] Artur Bodera, “Apache FLV streaming done right”: [http://tperspective.blogspot.com/2009/02/apache-flv-streaming-done-right.html]

[6] FLV-Modul für Nginx: [http://wiki.nginx.org/NginxHttpFlvStreamModule]

[7] Freier FLV-Server Red 5: [http://red5.net]

[8] Jan Petzold, “Film ab für Flash”: Linux-Magazin 07/08, S. 100

[9] Openmeetings: [http://code.google.com/p/openmeetings/]

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
2 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Marcel
5 Jahre her

Flash??

Marcel
5 Jahre her

2010.. nvm

Nach oben