Webcam Performance in Flash

Da ich mich im Rahmen meiner Diplomarbeit sehr viel mit Webcams beschäftige ist mir aufgefallen dass es mehrere wichtige Faktoren gibt von welchen die Performanceleistung (Bilder pro Sekunde) abhängt.

Grundsätzlich kann man sich von einer handelsüblichen Webcam um ca. 30€ auch bei idealen Lichtbedingungen kaum mehr als 20 Bilder pro Sekunde erwarten. Trotzdem gibt es Umstände welche dazu führen dass man auch bei sehr guten Bedingungen nicht mehr als 6 fps erhält.

WebcamFlashplayer

Folgende vier Kiriterien sind nach meiner Erfahrung kritisch für die Leistung einer Webcam:

  1. Die Qualität der Webcam (Linse, Auflösung, Sensor, Software)
  2. Vorbearbeitung der Webcam Software (z.B.: Restlichtverstärkung)
  3. Die Beleuchtungsverhältnisse (Tageslicht, Kunstlicht, Unterbelichtung, Überbelichtung)
  4. Auf welche Art wird ein Bild von der Webcam angefordert (Timer oder EnterFrame)

Wenig überraschend ist die Performance der Webcam abhängigt von der Bauweise und der Beleuchtungsumgebung. Zusätzlich kommt noch hinzu dass unterschiedlichste Einstellungen bei Webcams die Ergebnisse stark beeinflussen. Viele Webcams bearbeiten das Bild breits mehrmals bevor es an andere Programme weitergereicht wird. Einige dieser Bearbeitungsschritte, welche großen Einfluss auf das Bild haben können, sind zum Beispiel die Restlichtverstärkung oder der Weißabgleich.

Für Flasher interessant ist der Punkt 4. Die Performance der Webcam hängt nämlich auch zu einem Gutteil davon ab wie und wie oft ein Bild von der Webcam abgefragt wird. Viele Flashfilme werden mit 31 oder 60 fps ausgeführt und oft wird auch mit dieser Framerate die Webcam nach neuen Bildern gefragt bzw. das Bild der Webcam in ein Bitmap Objekt gespeichert.

Da aber Webcams kaum mehr als 20-25 Bilder pro Sekunde schaffen ist ein solch hoher Anfragerythmus nicht notwendig und führt dazu dass die Webcam bzw. der Flashplayer sich “verschluckt” und dann weniger Bilder liefert als eigentlich möglich wären (z.B. statt 22 fps nur 12 fps). Besonders bei der Nutzung von Pixel Bender Filtern (Version 1.5.1) ist dieser Effekt auffällig.

Die Lösung ist relativ einfach, es genügt die Abfragen an die Webcam von der globalen Framerate des FlashPlayers mittels eines Timers zu lösen. Allgemein bewirkt dieser “Trick” auch dass die gesamte Performance des Flash Players etwas nach oben geht (5-10% mehr fps).

Warum sich Webcams im Flashplayer so verhalten ist (mir) noch nicht klar, der Effekt ist jedoch deutlich sichtbar.

Tags: ,

3 Responses to “Webcam Performance in Flash”

  1. tom sagt:

    interessante post! wie hast du denn denn timer eingestellt bzw wie sieht das AS dafür aus? ich suche gerade auch möglichkeiten die FPS zu verbessern in sachen webcam.

    grüße,
    Tom

  2. geo sagt:

    Hi Tom,
    ich hab in meinem Script den Timer auf 1/20 Sekunde (also 50 Millisekunden) gestellt denn mehr als 20 fps schaffen die meisten Webcams sowieso nicht.

    Anbei mal auszugsweise der Code für den Timer:

    // camera setup mit 20 fps
    _cam = Camera.getCamera();
    _cam.setMode(320, 240, 20, false);
    _video = new Video();
    _video.attachCamera(_cam);
    addChild(_video);
    
    _captureBitmap = new Bitmap(new BitmapData(width, height, false, 0), PixelSnapping.AUTO, true);
    addChild(_captureBitmap);
    
    // der Timer der das webcam image verarbeitet
    _timer = new Timer(1000 / 20);
    _timer.addEventListener(TimerEvent.TIMER, getWebcamImage);
    function getWebcamImage(e:Event = null):void
    {
    	_captureBitmap.bitmapData.draw(_video);
    	// mach was mit dem webcam image
    	// ...
    }
    

    lg

  3. tom sagt:

    danke!

Leave a Reply