Ein ziemlich kranker Test von Flash-Video-Streaming: Unterschied zwischen den Versionen
Ello (Diskussion | Beiträge) K (→Das Encoding) |
Ello (Diskussion | Beiträge) K (→Ein kleiner http-Server) |
||
(4 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt) | |||
Zeile 44: | Zeile 44: | ||
=== Ein kleiner http-Server === | === Ein kleiner http-Server === | ||
− | Wir wollen im Player die Daten ja per http abrufen. Also bauen wir uns einen | + | Wir wollen im Player die Daten ja per http abrufen. Also bauen wir uns einen kleinen httpd mittels netcat und einem shell-script |
<br><pre> | <br><pre> | ||
echo "HTTP/1.1 200 OK" | echo "HTTP/1.1 200 OK" | ||
Zeile 75: | Zeile 75: | ||
build:"0", | build:"0", | ||
bgcolor:"#FFFFFF", | bgcolor:"#FFFFFF", | ||
− | flashvars:"file=http://localhost:8080/stream.flv&showdigits= | + | flashvars:"file=http://localhost:8080/stream.flv&showdigits=false&showicons=true&volume=80&autostart=true"}; |
UFO.create( FO, "player1"); | UFO.create( FO, "player1"); | ||
</script> | </script> | ||
Zeile 82: | Zeile 82: | ||
</pre><br> | </pre><br> | ||
Das ist eine kleine Seite mit einem eingebetteten Player, der seinerseits seine Daten von http://localhost:8080/stream.flv holt. | Das ist eine kleine Seite mit einem eingebetteten Player, der seinerseits seine Daten von http://localhost:8080/stream.flv holt. | ||
− | Dem kleinen test-script ist der | + | Dem kleinen test-script ist der Dateiname dabei egal ;-) |
+ | |||
+ | === Starten und Testen === | ||
+ | * mencoder starten | ||
+ | * httpd starten | ||
+ | * webseite im browser aufrufen | ||
+ | |||
+ | == Todo == | ||
+ | * Wie kann man das ordentlich verteilen | ||
+ | ** evtl apache mit mod-proxy | ||
+ | * wie kommen die Daten zum Verteilserver | ||
+ | * Robustheit gegen Verbindungsabbrüche | ||
+ | |||
+ | == Probleme == | ||
+ | Der player spielt nicht, wenn man "mittendrin" einsteigt. | ||
+ | evtl muss man am encoding etwas ändern oder sogar etwas einfügen (header oder ähnliches). |
Aktuelle Version vom 1. Juli 2007, 00:07 Uhr
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 holen und cachen muss.
Ein kleiner http-Server
Wir wollen im Player die Daten ja per http abrufen. Also bauen wir uns einen kleinen 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="en"><head><title>stream-test</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head><body> <p id="player1"></p> <script type="text/javascript" src="flash-Dateien/ufo.js"></script> <script type="text/javascript"> var FO = { movie:"http://rezitator.de/i/flvplayer/flvplayer.swf", width:"384", height:"288", majorversion:"8", build:"0", bgcolor:"#FFFFFF", flashvars:"file=http://localhost:8080/stream.flv&showdigits=false&showicons=true&volume=80&autostart=true"}; UFO.create( FO, "player1"); </script> </script> </body></html>
Das ist eine kleine Seite mit einem eingebetteten Player, der seinerseits seine Daten von http://localhost:8080/stream.flv holt. Dem kleinen test-script ist der Dateiname dabei egal ;-)
Starten und Testen
- mencoder starten
- httpd starten
- webseite im browser aufrufen
Todo
- Wie kann man das ordentlich verteilen
- evtl apache mit mod-proxy
- wie kommen die Daten zum Verteilserver
- Robustheit gegen Verbindungsabbrüche
Probleme
Der player spielt nicht, wenn man "mittendrin" einsteigt. evtl muss man am encoding etwas ändern oder sogar etwas einfügen (header oder ähnliches).