Endlich, endlich. Wer versucht hat in Windows 8.0 die Vorschau mehrerer Kameras gleichzeitig in einer Windows Store App darzustellen, der wird festgestellt haben, dass sich Windows 8.0 hier geweigert hat – man hat immer nur ein Vorschaubild zu sehen bekommen. Selbst in der Windows 8.1 Preview war das noch nicht möglich.

Ich hab das ganze jetzt noch einmal auf Windows 8.1 RTM ausprobiert. Und siehe da: Es funktioniert. Das finde ich tatsächlich sehr cool – es ist jetzt also möglich alle am PC angeschlossenen Kameras innerhalb einer App darzustellen. Und wenn man diese Möglichkeit noch verbindet mit dem grandiosen Multi-Monitor  Feature für Windows Store Apps in Windows 8.1 oder aber auch dem Kiosk-Mode in Windows 8.1, dem fallen mit Sicherheit ein paar Einsatzmöglichkeiten ein, wie man hieraus eine App stricken kann.

Für Testzwecke hab ich mir von meinen Kollegen sämtliche Webcams geliehen, die zur Verfügung waren (und natürlich inzwischen zurückgebracht…). So ein Ultrabook (in meinem Fall das X1 von Lenovo) verfügt ja nun nicht gerade über übermäßig viele Schnittstellen, ich habe also über einen USB Hub noch etwas erweitert, bis mich so viele Kameras beäugt haben, dass ich mir fast etwas beobachtet vorgekommen bin. (Siehe Bild unten.) Ergebnis: Es funktioniert, allerdings kann offenbar jeder physikalische USB Port nur ein Kamera-Signal verarbeiten, das heißt die Usb-Hubs bringen mich leider nicht weiter. So was hab ich mir schon gedacht. In der Praxis sollte man mit dieser Einschränkung aber leben können, ich konnte auf jeden Fall 4 Kamera-Vorschaubilder erfolgreich anzeigen.

WP_20130930_004

Codeseitig ist das recht einfach gehalten. Ich lass mir einfach die Webcams aufzählen:

var cams = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);

In einer foreach-Loop erstelle ich dann für jede Kamera ein MediaCapture.

var mc = new MediaCapture();

Dieses initialisiere ich dann mit MediaCaptureSettings, in denen ich die entsprechende Kamera anwähle. (item ist das aktuelle Element in der foreach-Loop)

var mcs = new MediaCaptureInitializationSettings();
mcs.VideoDeviceId = item.Id;

Was dann noch fehlt ist das Darstellen in einem CaptureElement Control und natürlich der Aufruf von 

mc.StartPreviewAsync();

damit man auch was sieht.

Funktioniert. Natürlich muss noch die Camera-Capability gesetzt werden, aber das ist eh klar.

Hier ein Screenshot von mir mit 2 Kameras. Reicht als Beweis, oder? Viel Spaß damit! Mehr Info über Neuerungen im App-Development für Windows 8.1, wie immer hier.

image