Uso de dispositivos, accediendo a nuestra cámara web

En Silverlight, es posible capturar y mostrar contenido de audio y de vídeo de dispositivos multimedia, como cámaras web, sintonizadores de TV y micrófonos.

Esto da lugar a diversos escenarios que pueden mejorar la experiencia del usuario con las aplicaciones de Silverlight.

Algunos de estos escenarios son la captura y la presentación de imágenes, la carga de imágenes de perfil en aplicaciones de redes sociales, el correo y las agendas de vídeo y de audio, la toma de notas de audio, las cámaras de seguridad, la realidad aumentada y los movimientos corporales.

Clases para trabajo con Dispositivos

A continuación se muestran algunas de las clases más relevantes para el uso de dispositivos de audio y video en Silverlight.

Aquí podemos encontrar modos de enumerar los dispositivos disponibles en nuestro sistema para poder hacer uso de ellos, al igual de encontrar modos de acceso a los dispositivos por defecto en el sistema.

Deberemos tener en cuenta a la hora de trabajar con ellos que si intentamos acceder a algún dispositivo que no ha sido marcado por defecto, al inicializarlo podemos obtener una excepción que deberemos controlar.

Clase Descripción
CaptureDeviceConfiguration Representa una clase auxiliar para obtener información sobre los dispositivos de captura disponibles (audio o vídeo) y solicitar permiso del usuario del cliente para obtener acceso a las capturas de los dispositivos disponibles.
CaptureSource Proporciona métodos que funcionan con capturas de audio o vídeo específicas del dispositivo de captura asociado.
VideoCaptureDevice Describe el formato de vídeo deseado y compatible de un dispositivo de captura de vídeo, como una cámara web.
AudioCaptureDevice Describe los formatos deseados y compatibles con un dispositivo de captura de audio, como un micrófono.
VideoSink Expone el gráfico de captura para los dispositivos de vídeo. Derive de esta clase para recibir información de vídeo y obtener el gráfico de captura a través de VideoSink.CaptureSource.
AudioSink Expone el gráfico de captura para los dispositivos de audio. Derive de esta clase para recibir información de audio y obtener el gráfico de captura a través de AudioSink.CaptureSource.

Listado de clases de trabajo con dispositivos de audio y video

Ejemplo de uso

Veamos de un modo práctico cómo hacer uso de estas clases en una aplicación que enumere los dispositivos de video instalados en el sistema y que nos permita iniciarlos de modo que podamos hacer uso de la cámara web de nuestro sistema.

Para ello comenzaremos diseñando una interfaz sencilla que contenga un ComboBox donde enumeraremos los dispositivos de video instalados, dos botones que nos permitan iniciar y detener los dispositivos y un rectángulo en el que dibujaremos la salida de video de la cámara web.

Diseñaremos una interfaz como lo que se muestra a continuación.


Figura 1.- Diseño de la interfaz

Para llevar a cabo esto haremos uso del código XAML que mostramos a continuación:


Figura 2.- XAML de la vista principal de la aplicación

Una vez realizado esto pasaremos a introducir el código necesario para que nuestra aplicación pueda hacer uso de los dispositivos del sistema.

Comenzaremos declarando un campo privado del tipo CaptureSource.


Figura 3.- Declaración del tipo

A continuación introduciremos el código necesario para rellenar el ComboBox con los dispositivos de Video del sistema haciendo uso de la clase CaptureDeviceConfiguration.

A continuación inicializaremos nuestra fuente de captura que habíamos declarado antes.

Recuperamos el dispositivo de captura de audio y video por defecto del sistema y lo asignamos a nuestra fuente de captura.

Por último creamos una brocha de video que se encargará de dibujar en nuestro rectángulo la fuente de video que nos muestre nuestro dispositivo de video por defecto. Asignamos esa nueva brocha a nuestro rectángulo.


Figura 4.- Código de asignación de las fuentes de video y audio

Por último solo nos queda la lógica necesaria para iniciar y detener los dispositivos de audio y video.


Figura 5.- Iniciar la captura de video y audio desde la WebCam y el micrófono


Figura 6.- Detener la captura desde las fuentes de captura.

Para poder acceder correctamente a fuentes de video y audio es necesario que el usuario permita dicho acceso de forma explícita mediante una acción. Para poder solicitar dicho acceso deberemos hacer uso del método CaptureDeviceConfiguration.RequestDeviceAccess().

A continuación se muestra el cuadro de diálogo que se mostrará al usuario para que permita el acceso a los dispositivos.

Esta funcionalidad de seguridad impide a código malicioso que una aplicación pueda acceder a dichos dispositivos sin el consentimiento del usuario de modo silencioso y así proteger la privacidad de dichos usuarios.


Figura 7.- Cuadro de diálogo para permitir el acceso a los dispositivos.

Caso de uso

Un posible caso de uso podría ser la publicación de imágenes de perfil en redes sociales. Para ello Silverlight nos dota de la capacidad de captura de imágenes desde nuestras fuentes de captura de video.

Mostremos un ejemplo de cómo extender la aplicación anterior con lo necesario para poder capturar imágenes desde nuestra WebCam.


Figura 8.- Añadamos un nuevo rectángulo a la interfaz de usuario.

A continuación añadamos los objetos necesarios para mostrar la imagen capturada en nuestro rectángulo.


Figura 9.- Asignamos el contenido a dibujar en el rectángulo

Añadamos también a la interfaz un nuevo botón como hemos hecho anteriormente y a su evento clic le daremos la lógica mostrada a continuación.


Figura 10.- Lógica del evento clic

Nos suscribimos en el evento de carga completa de la página a los eventos asíncronos que nos notifican de los posibles errores o de que la tarea se ha completado correctamente.


Figura 11.- Suscripciones a los eventos

Y les damos la lógica necesaria para mostrar la imagen en nuestro nuevo rectángulo.


Figura 12.- Obtenemos el resultado de la captura

Conclusión

Silverlight está preparado para escenarios complejos de uso de fuentes de vídeo y audio permitiéndonos crear aplicaciones con funcionalidades cada vez más ricas y de un modo muy sencillo como hemos podido ver, además de los escenarios planteados existen multitud de ellos que pueden surgir de la combinación de distintas funcionalidades como puede ser la de impresión.

Puedes descargarte este ejemplo en: SLWebcam.zip