Kamera & Sound

Peer Wagner

Kamera und Sound sind ein wichtiger Teil einer Augmented Rality Anwendung. Jedoch nehmen diese auch eine gesonderte Stellung bei der Programmierung auf dem Android-Smartphone ein. Dem ist so, da die Video- wie auch die Soundausgabe auf beschränkte Hardwareressourcen zugreifen. Es sind somit ein paar wenige Konzepte zu beachten wenn man auf dem Gerät mit jenen Ressourcen arbeiten möchte.

Kamera

Wie im allgemeinen Teil zu Android Smartphones bereits beschrieben, setzt sich die Ansicht einer Applikation aus verschiedenen Views zusammen. Die Kamera benötigt für die Darstellung des Bildes jedoch eine spezielle Art der View, nämlich eine SurfaceView. Eine solche SurfaceView ist jedoch außer zu den Standardaktionen einer normalen View auch in der Lage den Zugriff auf das Canvas zu synchronisieren. Sie bietet sich daher besonders für eben solche Zwecke, wie das Zeichnen eines Kamerabildes etc. an. Die Ressourcen die für die Kamera benötigt werden, sind jedoch nur ein einziges mal verfügbar, was jedoch auch verständlich ist.

Um den Prozess der Benutzung zu verdeutlichen zeigt das folgende Bild ein Zustandsdiagramm.

Abb. 1: Zustandsdiagramm der CameraPreview

Als erstes muss der Zugriff auf die Kamera durch den Methodenaufruf open() erfolgen. Dann ist die SurfaceView vorzubereiten um anschließend die Preview starten zu können. Beendet wird das Ganze durch den Aufruf von stopPreview(). Hierbei ist auf jeden Fall die Reihenfolge zu berücksichtigen und vor allem muss der Aufruf der Methode stopPreview() getätigt werden. Um auch wirklich auf der sicheren Seite zu sein sollte dieser Aufruf bei jedem Pausieren der Applikation durchgeführt werden, damit die Systemressourcen bei einem Absturz nicht weiterhin blockiert bleiben. Entsprechend ist bei einem Fortsetzen der Anwendung dann die startPreview() aufzurufen.

Für unsere Anwendung speziell, aber auch im allgemeinen bei Applikationen die einen Augmented Reality Modus nutzen, wäre es hilfreich wenn die View, welche das Kamerabild anzeigt und diejenige welche das OpenGL-Layer darstellt, ein und dieselbe View wären. Dies ist jedoch aus ungeklärten Umständen nicht machbar gewesen. Auch die Verwendung des Kamerabildes als OpenGL Textur ist nicht durchführbar gewesen, da sich dies als sehr unperformant erwiesen hat.

Sound

Der Sound, oder vielmehr die Soundausgabe, greift ebenfalls auf beschränkte Ressourcen des Android Smartphones zu. Aus diesem Grund muss mit einer vergleichbaren Sorgfalt programmiert werden um bei einem Absturz oder anderen unvorhersehbaren Zuständen nicht den Sound des Gerätes zu blockieren. Für die Benutzung der Soundausgabe gibt es jedoch weitere Beschränkungen zu beachten, da sich an einem MediaPlayer noch mehr Einstellungen vornehmen lassen als an der Kameraausgabe.

Abb. 2: Das Bild zeigt ein Zustandsdiagramm für die Verwendung des MediaPlayer. (http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram)

Trotz dieser ausführlichen Dokumentation und vielen Tutorials ist es uns jedoch nicht gelungen die Soundausgabe auf dem Android-Smartphone zufriedenstellend umzusetzen.


Page last modified on March 21, 2011, at 08:06 PM