rfbproxy und anderes

Das Screenrecording für jedermann, das screentoaster.com bis Juni 2010 bot, basiert auf der VNC-Technologie. D.h.es werden VNC-Server für Windoof, Linux oder OS X per Java-Applet auf dem lokalen Rechner gestartet.

Der größte Mangel dieser Lösung ist, dass sich kein editierbares Video gewinnen lässt, das hinreichend klein und von genügender Qualität ist.

Die naheliegende Lösung ist ein Nachbau. Der entscheidende Punkt ist auch dabei die Erstellung eines editierbaren Videos.

FBS nach Video: rfbproxy, ffmpeg, mencoder, scls.dll

rfbproxy kann nicht nur einen gespeicherten Frame-Buffer-Stream (eine *.fbs-Datei) für einen VNC-Viewer auf dem Port 10 (bzw. 5910) verfügbar machen, es kann auch Frame für Frame eine Bildserie im Format ppm exportieren. Der Befehl
rfbproxy.exe --framerate=pal -x vnc.fbs |
ffmpeg.exe -f image2pipe -vcodec ppm -i pipe: -vcodec huffyuv vnc_huffyuv.avi

exportiert mit Hilfe von ffmpeg (wie angedeutet selbst unter Windoof) ein qualitativ optimales Video vnc_huffyuv.avi der aufgezeichneten Session vnc.fbs.

Der entscheidende Nachteil der Kodierung huffyuv ist, dass die Videogröße geradezu explodiert (ca. 1 GByte/min bei 1024x768 Pixel). Man kann zwar die Framerate reduzieren, denn rfbproxy erlaubt nahezu beliebige Raten. Ein Verlust an dieser Stelle ist jedoch irreparabel.

Der Codec scls ist optimiert für Aufzeichnungen eines Computer­bild­schirmes. Insbesondere ist die Framerate bei statischem Inhalt nahezu belanglos, sodass mit diesem ebenfalls lossless Codec eine Reduktion der Datenmenge um den Faktor 1000 gegenüber huffyuv realistisch ist. Mit dem Befehl
mencoder.exe vnc_huffyuv.avi -ovc vfw -xvfwopts codec=scls.dll -o vnc_scls.avi

lässt sich der Codec nutzen. (Als VFW-Codec steht er z.B. unter VirtualDub direkt zur Verfügung. VLC andererseits kann das kodierte Video nicht wiedergeben.)

Wünschenswert wäre, die temporäre, huffyuv-kodierte AVI-Datei wäre vermeidbar. Da mencoder auch Images als Input akzeptiert, könnte man evtl. völlig auf ffmpeg verzichten. Eine andere Möglichkeit ist, die Pipe rfbproxy -> ffmpeg nach rfbproxy -> ffmpeg-> mencoder zu verlängern:

rfbproxy.exe --framerate=pal -x vnc.fbs |
ffmpeg.exe -f image2pipe -vcodec ppm -i pipe:
           -f rawvideo -vcodec rawvideo
-pix_fmt yuv420p - |
mencoder.exe -demuxer rawvideo
-rawvideo fps=25:w=1680:h=1050:i420
-ovc vfw -xvfwopts codec=scls.dll
-o vnc_scls.avi -- -

Die Weiterverarbeitung der scls-kodierten Videos mit VirtulaDub, das auch zur Konvertierung huffyuv -> scls nutzbar ist, ist jedenfalls problemlos, sodass auch die Nachvertonung möglich ist.

Recording nach FBS: vncreflector

Die Nutzung von ScreenToaster zur Erstellung eines FBS-Mitschnittes ist keine Option, wenn rfbproxy, ffmpeg und mencoder mit scls.dll zur Konvertierung in ein editierbares Video genutzt werden sollen.

Obwohl rfbproxy zur Aufzeichnung genutzt werden kann, bietet vncreflector eine bessere Lösung. Gestartet per
vncreflector -s session -l 5900 host_info_file

mit dem Text
*:5500 null

in der Datei host_info_file, wird für jede Verbindung auf Port 5500 ein FBS-Mitschnitt geschrieben. Nebenbei können sich VNC-Viewer über den Port 5900 verbinden. Gegebenenfalls können die Viewer sogar den VNC-Server, der über Port 5500 verbunden ist, steuern. Die Aufzeichnung impliziert passenderweise einen Full-Color-Mode.

Clients können sich erst verbinden, wenn ein Server sich bereits verbunden hat. Anschließend ist dann aber – wenn es der Client toleriert – ein Wechsel des Servers möglich.

Die Option -t (für Tight-Kodierung) erzeugt einen Mitschnitt, der nicht mit der Videoerstellung per rfbproxy kompatibel ist.

Obwohl die FBS-Datei klein ist im Vergleich zu ihrem huffyuv-kodierten AVI-Pendant, scheint es ratsam, einzelne Aufzeichnungen auf höchstens 1 Std. zu begrenzen, denn es scheint ein 2 GByte-Problem zu geben.

Neben einigen Vorteilen im Handling zeichnet sich vncreflector dadurch aus, dass
  1. die Speicherung der FBS-Dateien zentral geschieht,
  2. mehrere Viewer parallel über eine feste Adresse Zugriff erhalten
     ohne Vorkehrungen beim jeweiligen VNC-Server treffen zu müssen.

VNC-Server: tightvnc, DFMirage

Prinzipiell kommen zwar nahezu beliebige VNC-Server für die Produktion von FBS-Mitschnitten per vncreflector in Frage, sodass auch OS X- oder Linux-Bildschirme auf einem Linux- oder Windows-Rechner aufgezeichnet werden können. Unter Windows hat sich jedoch tightvnc mit DFMirage als besonders vorteilhafter VNC-Server erwiesen.

Beim Download auf der Seite http://www.tightvnc.com/download.php wird bereits der DFMirage mirror display driver empfohlen. Dieser sorgt für eine gute Qualität der VNC-Verbindung, die sich im FBS-Mitschnitt bemerkbar macht.

Der Viewer von tightvnc ist ebenso empfehlenswert, denn die automatische Skalierung lässt sich sinnvoll einsetzen.

Die Tight-Kodierung ist zwar prinzipiell überlegen, sodass sie nicht auf VNC-Server und -Viewer entsprechenden Namens begrenzt ist, sie spielt hier jedoch keine Rolle, denn rfbproxy kann entsprechende Streams nicht als Bildserie exportieren.

Linux Software, OS X

Da die vorgestellten Programme mit Ausnahme von scls.dll aus dem Linux-Umfeld stammen, sind sie entweder schon in den Repositories der Distributionen vorhanden (ffmpeg, mencoder, vnc) oder aus den Quellen problemlos zu erzeugen.

Die scls.dll (d.i. eine Library unter Windows) funktioniert zum Dekodieren mit mencoder auch unter Linux. Das Enkodieren funktioniert jedoch nicht. Mit dem Screen Capture Codec von TechSmith existiert jedoch eine Alternative, die im Codec-Pack zu mplayer bereits vorhanden ist.

Für OS X ist zu erwähnen, dass Videos, die mit dem TechSmith-Codec kodiert wurden, auch auf einem Mac bearbeitet werden können, denn der EnSharpen decoder ist frei erhältlich. Die Linux-Programme sollte es ebenfalls für den Mac geben.

 ­ 

Fragen zu EDV-Technik

Tipp zu rfbproxy

rfbproxy liefert beim Export nichts brauchbares, wenn tight als Kodierung gewählt wurde. Ein entsprechender Stream lässt sich allerdings wiedergeben.

Zum ScreenToaster

Der Flashplayer zur Wieder­gabe der per ScreenToaster aufgezeichneten Dateien funktioniert nur bei Tight-Kodierung. Allerdings wird die Datenrate anscheinend schell zum Problem. Umgekehrt ist das fbs-Format von ScreenTaoster vollkommen inkompatibel mit allen anderen Tools.

Tipp zu ffmpeg

Mit der exakten Framerate durch rfbproxy kann der Videoexport in mehreren Portionen durch Zeitvorgaben geschehen. Mit der Option -t xxx für ffmpeg wird das Video auf die ersten xxx Sekunden beschränkt. Mit der Option -ss xxx werden die ersten xxx Sekunden unterdrückt.

Tipp zu scls

Bei der ersten Verwendung von scls.dll unter mencoder sollte man sich den Konfigurationsdialog durch -xvfwopts codec=scls.dll:compdata=dialog anzeigen lassen. Die gewählten Einstellungen sind dann zukünftig gesetzt. (Weil sie in der Registry landen?)

Tipp zu TSCC

Obwohl der Codec von TechSmith deutlich größere Dateien liefert – aber noch von gleicher Größenordnung – als der SCLS-Codec, zeichnet ihn nicht nur aus, dass er unter Linux mit mencoder läuft. Da VLC TSCC-kodierte Videos abspielt, sind solche fast schon internettauglich.

Anmerkung zu VNC

Es ist sicherlich hilfreich zu wissen, dass unter VNC Client und Server die Einzelheiten des Protokolls aushandeln und sich – hoffentlich – auf einen gemeinsamen Nenner einigen. Dadurch lässt sich von vncreflector vorgeben, dass full color und keine Tight-Kodierung gesetzt sind.

Anmerkung zu Tightvnc

Der Tightvnc-Server macht sich durch ein Icon im Tray bemerkbar. Über einen Rechtsklick auf das Icon lässt sich unter anderem die "reverse connection" zu vncreflector aufbauen und beenden. Unter ScreenToaster kommt auf Windows-Rechnern ebenfalls ein TightVNC-Server zum Einsatz. Der ist allerdings nicht an einem Tray-Icon erkennbar. Das lässt sich zur Überwachung eines PCs ohne Kenntnis des Benutzers nutzen.

Mit weiteren Optionen (neben -notrayicon) in der Befehlszeile lässt sich z.B. auch Aero unter Vista temporär ausschalten.

IMPRESSUM | AGBS | DRUCKEN | SEITE ALS PDF | SUCHEN | KUNDEN-LOGIN | NEWS-FEED | TYPO3-LOGIN