Saltar a contenido

Trabajar con Dispositivos de Captura de Video en .NET

Video Capture SDK .Net VideoCaptureCoreX VideoCaptureCore

Introducción a la Gestión de Dispositivos de Video

El Video Capture SDK .Net proporciona soporte robusto para cualquier dispositivo de captura de video reconocido por tu sistema operativo. Esta guía demuestra cómo descubrir dispositivos disponibles, inspeccionar sus capacidades e integrarlos en tus aplicaciones.

Enumerar Dispositivos de Captura de Video Disponibles

Antes de poder usar un dispositivo de captura, necesitas identificar cuáles están conectados al sistema. Los siguientes ejemplos de código muestran cómo recuperar una lista de dispositivos disponibles y mostrarlos en un componente de interfaz de usuario:

// Iterar a través de todos los dispositivos de captura de video disponibles conectados al sistema
foreach (var device in VideoCapture1.Video_CaptureDevices())
{
    // Añadir cada nombre de dispositivo a un control de selección desplegable
    cbVideoInputDevice.Items.Add(device.Name);
}
// Recuperar asincrónicamente todas las fuentes de video usando el DeviceEnumerator compartido
var devices = DeviceEnumerator.Shared.VideoSourcesAsync();

// Iterar a través de cada dispositivo disponible
foreach (var device in await devices)
{
    // Añadir el nombre amigable del dispositivo al control de selección desplegable
    cbVideoInputDevice.Items.Add(device.DisplayName);
}

Descubrir Capacidades de Formato de Video

Después de identificar un dispositivo de captura, puedes examinar sus formatos de video y tasas de fotogramas soportados. Esto te permite ofrecer a los usuarios opciones de configuración apropiadas:

// Localizar un dispositivo específico por su nombre de visualización
var deviceItem = VideoCapture1.Video_CaptureDevices().FirstOrDefault(device => device.Name == "Algún nombre de dispositivo");

// Iterar a través de todos los formatos de video soportados por este dispositivo
foreach (var format in deviceItem.VideoFormats)
{
    // Añadir cada formato al desplegable de selección de formato
    cbVideoInputFormat.Items.Add(format);

    // Para cada formato, iterar a través de sus tasas de fotogramas soportadas
    foreach (var frameRate in format.FrameRates)
    {
        // Añadir cada opción de tasa de fotogramas al desplegable de selección
        cbVideoInputFrameRate.Items.Add(frameRate.ToString(CultureInfo.CurrentCulture));
    }
}
// Localizar un dispositivo específico por su nombre de visualización
var deviceItem = (await DeviceEnumerator.Shared.VideoSourcesAsync()).FirstOrDefault(device => device.DisplayName == "Algún nombre de dispositivo");

// Iterar a través de todos los formatos de video soportados por este dispositivo
foreach (var format in deviceItem.VideoFormats)
{
    // Añadir cada formato al desplegable de selección de formato
    cbVideoInputFormat.Items.Add(format);

    // Añadir la tasa de fotogramas de este formato
    cbVideoInputFrameRate.Items.Add(format.FrameRate.ToString());
}

Seleccionar y Configurar un Dispositivo

Una vez que has identificado un dispositivo y sus capacidades, puedes configurarlo para uso:

// Establecer el dispositivo de captura de video
VideoCapture1.Video_CaptureDevice = new VideoCaptureDevice(cbVideoInputDevice.Text);

// Establecer el formato de video seleccionado
VideoCapture1.Video_CaptureDevice.Format = cbVideoInputFormat.Text;

// Establecer la tasa de fotogramas seleccionada
VideoCapture1.Video_CaptureDevice.FrameRate = double.Parse(cbVideoInputFrameRate.Text);
// Obtener el dispositivo seleccionado
var device = (await DeviceEnumerator.Shared.VideoSourcesAsync())
    .FirstOrDefault(d => d.DisplayName == cbVideoInputDevice.Text);

// Crear configuración de fuente
var sourceSettings = new VideoCaptureDeviceSourceSettings(device)
{
    Format = device.VideoFormats.First(f => f.ToString() == cbVideoInputFormat.Text)
};

// Establecer fuente de video
VideoCapture1.Video_Source = sourceSettings;

Obtener Resolución del Dispositivo

Puedes obtener información detallada sobre las resoluciones soportadas:

// Obtener todas las resoluciones disponibles
foreach (var format in deviceItem.VideoFormats)
{
    int width = format.Width;
    int height = format.Height;
    Console.WriteLine($"Resolución: {width}x{height}");
}

Verificar Estado del Dispositivo

Antes de usar un dispositivo, es buena práctica verificar que esté disponible:

// Verificar si hay dispositivos disponibles
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
if (devices.Length == 0)
{
    MessageBox.Show("No se encontraron dispositivos de captura de video.");
    return;
}

Mejores Prácticas

  1. Enumeración Asíncrona: Siempre usa métodos asíncronos para enumerar dispositivos para evitar bloquear la UI
  2. Manejo de Errores: Implementa manejo de errores para cuando los dispositivos no estén disponibles
  3. Actualizar Lista de Dispositivos: Proporciona forma de actualizar la lista cuando se conectan nuevos dispositivos
  4. Recordar Selecciones: Guarda las preferencias del usuario para selección automática

Aplicaciones de Ejemplo

Explora estas aplicaciones de ejemplo para ver la gestión de dispositivos de video en acción:


Visita nuestra página de GitHub para acceder a muestras de código adicionales y recursos de implementación.