Aufbauen Deiner eigenen Video Community mit Lighttpd und FlowPlayer (Debian Etch)

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man seine eigene Video Community unter Verwendung von lighttpd mit seinem mod_flv_streaming Modul (zum streaming von .flv Videos, dem Format, das von den meisten großen Video Communities wie YouTube verwendet wird) und seinem mod_secdownload Modul (um zu verhindern, dass die Videos direkt verlinkt werden) aufbauen kann. Ich werden FlowPlayer als Video Player verwenden, ein kostenloser Flash Video Player mit Unterstützung für lighttpds mod_flv_streaming Modul. Außerdem werde ich aufzeigen, wie man Videos (.mp4 .mov .mpg .3gp .mpeg .wmv .avi) als FLV Format verschlüsseln kann, das von Adobe Flash unterstützt wird.

Diese Anleitung ist ohne jegliche Gewähr! Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist ein solches System einzurichten. Es gibt viele Möglichkeiten um das Ziel zu erreichen - dies ist der Weg den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In dieser Anleitung verwende ich ich den Hostnamen server1.example.com mit der IP Adresse 192.168.0.100. Diese Einstellungen können von Deinen abweichen, Du musst sie also an entsprechender Stelle ersetzen.

Wir benötigen eine lighttpd Installation mit PHP Unterstützung, wie in dieser Anleitung beschrieben wird: Installing Lighttpd With PHP5 And MySQL Support On Debian Etch. Ich werde das in dieser Anleitung nicht abhandeln. Wenn Du lighttpd mit PHP Unterstützung noch nicht eingerichtet hast, dann verfahre bitte nach dieser Anleitung.

2 Installation von LAME

LAME ist ein MPEG Audio Layer III (MP3) Verschlüsseler. Wir benötigen dies damit unsere Videos nicht ihren Klang verlieren, wenn sie in FLV konvertiert werden. Leider ist LAME nicht als offizielles Debian Etch Paket verfügbar, also müssen wir es manuell erstellen. Zunächst installieren wir die Tools, die wir für die Erstellung benötigen:

apt-get install build-essential

Dann gehen wir zum /tmp Verzeichnis und laden die neuste LAME Version von SourceForge, z.B. wie folgt:

cd /tmp
wget http://mesh.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz

Dann entpacken und kompilieren wir LAME:

tar xvfz lame-3.97.tar.gz
cd lame-3.97
./configure --enable-shared --prefix=/usr
make
make install

3 Installation von ffmpeg

Wir werden ffmpeg verwenden um unsere Video-Dateien in das FLV Format zu konvertieren. Zuerst installieren wir ffmpeg und ein paar plugins wie folgt:

apt-get install ffmpeg libavcodec0d libavformat0d libavifile-0.7c2 libpostproc0d libasound2-plugins avifile-player avifile-utils avifile-mad-plugin avifile-mjpeg-plugin avifile-vorbis-plugin

Das Problem bei Debians ffmpeg Paket ist, dass es keine Unterstützung für MP3 Verschlüsselung hat, was bedeutet, dass unsere FLV Videos ihren Klang nach der Konvertierung verlieren werden. Daher werden wir Debians ffmpeg Source Paket mit mp3lame Unterstützung (deswegen mussten wir im vorigen Kapitel LAME installieren) neu kompilieren.

Zunächst laden wir das ffmpeg Source Paket nach /usr/src:

cd /usr/src/
apt-get source ffmpeg

Dann wechseln wir zum ffmpeg Source Verzeichnis:

cd ffmpeg-0.cvs20060823

und bearbeiten die Datei debian/rules. Ziemlich am Anfang der Datei siehst Du zwei confflags Zeilen. Füge den Parameter --enable-mp3lame zu einer der Zeilen hinzu und speichere die Datei:

vi debian/rules


[...]
confflags += --enable-gpl --enable-pp --enable-pthreads --enable-mp3lame confflags += --enable-vorbis --enable-libogg --enable-a52 --enable-dts --enable-libgsm [...]
Nun können wir unser neues ffmpeg Paket erstellen:

dpkg-buildpackage

dpkg-buildpackage wird sich höchstwahrscheinlich über fehlende Pakete beschweren, die benötigt werden, um das neue ffmpeg .deb Paket zu erstellen:


server1:/usr/src/ffmpeg-0.cvs20060823# dpkg-buildpackage
dpkg-buildpackage: source package is ffmpeg
dpkg-buildpackage: source version is 0.cvs20060823-8
dpkg-buildpackage: source changed by Sam Hocevar (Debian packages) <sam+deb@zoy.org>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 0.cvs20060823-8
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 4.0) quilt libogg-dev libvorbis-dev liba52-dev libdts-dev zlib1g-dev libsdl1.2-dev libfreetype6-dev libimlib2-dev texi2html libraw1394-dev libdc1394-13-dev libtheora-dev (>> 0.0.0.alpha4) libgsm1-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)
server1:/usr/src/ffmpeg-0.cvs20060823#

Falls Du eine Fehlermeldung wie die folgende erhältst, installiere die fehlenden Pakete, z.B. wie folgt:

apt-get install debhelper quilt libogg-dev libvorbis-dev liba52-dev libdts-dev zlib1g-dev libsdl1.2-dev libfreetype6-dev libimlib2-dev texi2html libraw1394-dev libdc1394-13-dev libtheora-dev libgsm1-dev

Führen danach dpkg-buildpackage erneut aus:

dpkg-buildpackage

Der dpkg-buildpackage Befehl sollte ffmpeg nun erneut kompilieren und neue .deb Pakete (ffmpeg plus einige plugins) im /usr/src Verzeichnis erstellen. Das kann etwas dauern, gedulde Dich also etwas. Es kann sein, dass Du einige Warnungen über Signaturen am Ende erhältst - Du kannst sie ignorieren.

Danach gehen wir zum /usr/src Verzeichnis und installieren unsere neuen .deb Pakete:

cd ..
dpkg -i *.deb

Das war's mit ffmpeg.

4 Installation von flvtool2

Wenn wir Videos in das FLV Format konvertieren, müssen wir einige Metadaten wie zum Beispiel die Laufzeit des Videos der FLV Datei hinzufügen, damit FlowPlayer die Spieldauer des Videos richtig anzeigen kann. Wir können diese Metadaten mit flvtool2 hinzufügen. flvtool2 ist in Ruby geschrieben, also müssen wir zunächst Ruby installieren:

apt-get install ruby

Dann laden wir die neuste Version von flvtool2 ins /tmp Verzeichnis, z.B. wie folgt:

cd /tmp
wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz

Danach installieren wir es:

tar xvfz flvtool2-1.0.6.tgz
cd flvtool2-1.0.6
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

5 Video Verzeichnisse erstellen

In dieser Anleitung gehe ich davon aus, dass Dein lighttpd Dokumenten-Root für Deine Video Webseite /var/www (der Standard Dokumenten-Root für lighttpd auf Debian) ist. Natürlich wollen wir die originalen Videos und FLV Videos im Dokumenten-Root ablegen (oder einem Unterverzeichnis), um zu verhindern, dass niemand sie direkt runter laden kann (wenn derjenige den Link kennt). Daher erstellen wir ein Verzeichnis für die originalen Videos (z.B. /var/videos/incoming) und ein Verzeichnis für die FLV Videos (z.B. /var/videos/flv) außerhalb des Dokumenten-Roots:

mkdir -p /var/videos/incoming
mkdir -p /var/videos/flv

Du (oder Deiner Benutzer) kannst dann Deine originalen Videos nach /var/videos/incoming laden (z.B. durch FTP oder einem Web Interface, das Du programmiert) und Du kannst die Videos dann in FLV verschlüsseln (entweder manuell oder mit Hilfe eines Skripts), was im nächsten Kapitel gezeigt wird.

6 Videos in FLV verschlüsseln

Lass uns annehmen wir haben ein Video mit der Bezeichnung video.avi in /var/videos/incoming (funktioniert auch mit den Erweiterungen .mp4 .mov .mpg .3gp .mpeg .wmv). Wir möchten es in die Datei video.flv konvertieren und im Verzeichnis /var/videos/flv ablegen. video.flv soll eine Größe von 320x240 Pixel haben, mit einer Aufzeichnungsrate von 44100 Hz und einer Frame Rate von 12 fps. Und so führen wir es aus:

ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 /var/videos/flv/video.flv

(Sieh dir Folgendes an wenn Du Dich über weitere Optionen informieren möchtest

man ffmpeg

)

Das kann etwas dauern. Die Ausgabe sollte so ähnlich wie diese aussehen:

server1:~# ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 /var/videos/flv/video.flv
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2004 Fabrice Bellard
configuration: --enable-gpl --enable-pp --enable-pthreads --enable-mp3lame --enable-vorbis --enable-libogg --enable-a52 --enable-dts --enable-libgsm --enable-dc1394 --disable-debug --enable-shared --prefix=/usr
libavutil version: 0d.49.0.0
libavcodec version: 0d.51.11.0
libavformat version: 0d.50.5.0
built on Aug 14 2007 15:02:25, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Input #0, avi, from '/var/videos/incoming/video.avi':
Duration: 00:10:53.8, start: 0.000000, bitrate: 5455 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 1024x576, 24.00 fps(r)
Stream #0.1: Audio: ac3, 48000 Hz, 5:1, 448 kb/s
Output #0, flv, to '/var/videos/flv/video.flv':
Stream #0.0: Video: flv, yuv420p, 320x240, q=2-31, 200 kb/s, 12.00 fps(c)
Stream #0.1: Audio: mp3, 44100 Hz, stereo, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
No accelerated IMDCT transform found
Press [q] to stop encoding
frame= 7847 q=2.0 Lsize= 21682kB time=653.8 bitrate= 271.7kbits/s
video:16061kB audio:5108kB global headers:0kB muxing overhead 2.427536%
server1:~#

Bitte achte darauf, dass im Output Bereich zwei Streams angezeigt werden, einen für Video und einen für Audio. Falls Du nur Video siehst, bedeutet das, dass der Klang verloren geht, d.h. Du hast wahrscheinlich in Kapitel zwei und drei etwas falsch gemacht.

Nach der Konvertierung können wir video.flv nun Metadaten mit flvtool2 hinzufügen:

cat /var/videos/flv/video.flv | flvtool2 -U stdin /var/videos/flv/video.flv


3 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: Donsebarone

Hi, erstmal danke für dieses klasse How To ;-)
Ich hätte da noch eine Frage, --> und zwar ist es möglich eine art subtitel oder ein Wasserzeichen so wie das von FlowPlayer mit reinzu encoden? oder villeicht halt sogar dieses FlowPlayer zeichen zu entfernen ^^ ... würde mich über eine Antwort sehr freuen ;-)


Von: Donsebarone

ok das mit dem Wasserzwichen .. dafür muss man sich ne Lizens holen ;-) hab ich nun gelesen.
Gibt es zufällig jemanden der ein solches System zur verfügung stellen könnte, womit man Videos vom Rechner und auch von URL auf den Server laden kann, und die dann auch gleich encodet werden!?!?!


Von: Eyoob

Danke für deinen super howto, meine Frage nun, wie kann ich einen Thumbnail erstellen? Ist ja bei videos auch wichtig, wenn man diese auf den Startseiten verlinkt :) danke schonmal
für deine Antwort.

Grüße

Eyüp