Ein ziemlich kranker Test von Flash-Video-Streaming

Aus FeM Streaming Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Ein paar Tests und Überlegungen zum Streamen in Form von Flash-Video (.flv)

Motivation

Es besteht die Anforderung zur FormulaStudent das Video-Streaming als Flash-Video durchzuführen.
Leider beschränken sich unsere Erfahrungen auf Windows-Media, da.
Das Encodieren in Flash-Video ist recht einfach, aber wie verteilt man das?

Encodieren

Encodieren kann man auf einfache Weise mit dem mencoder.
Die Kommandozeile für ein einfaches Encodieren:

mencoder eingabedatei.avi -cache 1024 -o ausgabeidatei.flv -ovc lavc -oac mp3lame \
-of lavf -lavcopts vcodec=flv:vmax_b_frames=0:vbitrate=500:turbo -vf pp=flb,scale=384:288 -srate 44100 \
-lameopts mode=3:cbr=64:aq=1 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames


Das encodiert eingabedatei.avi zu ausgabedatei.flv in einer Auflösung von 384x288 mit 500kbit. Es wird ein einfacher Deinterlacer verwendet (linear blend) (kann bei halbem PAL eigentlich weggelassen werden). Als audio-codec wird Lame (mp3) verwendet. Die Abtastrate ist 44,1 kHz und es wird mit einer konstante Bitrate von 64kbit encodiert. "mode=3" bedeutet Mono-Betrieb. Alles nachzulesen in der Manpage vom mencoder

Verteilen

Meines Wissens nach beziehen die einbettbaren Flashplayer ihre Daten per http://.
Daher wird auch hier http:// zum Verteilen zum Einsatz kommen.
Wie das im Detail geschehen wird muss noch evaluiert werden.

Erste Tests

Das Live-Video

Also Live-Quelle kommt beim test ein Stream (ebenfalls http://) von meinem VDR zum Einsatz. Dieser wird mit dem mencoder in eine fifo encodiert.

Das Encoding

Als erstes muss eine fifo erstellt werden:

mkfifo /tmp/stream.flv


Dann wird der mencoder gestartet

mencoder http://vdr.greussen.eller-net.de/stream/11 -cache 1024 -o /tmp/stream.flv -ovc lavc -oac mp3lame -of lavf -lavcopts vcodec=flv:vmax_b_frames=0:vbitrate=500:turbo -aspect 16:9 -vf pp=flb,scale=384:288 -srate 44100 -lameopts mode=3:cbr=64:aq=1 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames

Das ganze dauert ein paar Sekunden, da er selbst ersteinmal den stream vom VDR cachen muss.

ein Kleiner http-Server

Wir wollen im Player die Daten ja per http abrufen. Also bauen wir uns einen kleine httpd mittels netcat und einem shell-script


echo "HTTP/1.1 200 OK"
echo "Connection: close"
echo "Content-Type: video/flash"
echo
cat /tmp/stream.flv

Aufgerufen wird das dann folgendermaßen

/tmp/httpd | nc6 -l -p 8080

Auf meiner kleinen Testwebseite steht dann