Saltar a contenido

Capturar streams de cámara IP a archivos MP4 en .NET

Try it Download free trial dotnet add package VisioForge.DotNet.VideoCapture Pricing →

Video Capture SDK .NET

Introducción a la grabación de cámara IP

Las cámaras IP proporcionan potentes capacidades de vigilancia y monitoreo a través de conexiones de red. Esta guía demuestra cómo aprovechar estos dispositivos en aplicaciones .NET para capturar y guardar streams de video a archivos MP4. Usando prácticas modernas de codificación C#, aprenderá cómo establecer conexiones a cámaras IP, configurar streams de video y guardar grabaciones de alta calidad para varias aplicaciones incluyendo sistemas de seguridad, soluciones de monitoreo y herramientas de archivo de video.

Tutorial de implementación en video

El siguiente video recorre el proceso de implementación completo:

Código fuente en GitHub

Guía de implementación paso a paso

Esta guía demuestra cómo establecer conexiones a cámaras IP, transmitir su contenido de video y codificarlo directamente a archivos MP4 usando el componente VideoCaptureCoreX. La implementación soporta múltiples protocolos de cámara incluyendo RTSP, HTTP y ONVIF.

Implementación de código

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using VisioForge.Core.Types.X.AudioRenderers;
using VisioForge.Core.Types.X.Output;
using VisioForge.Core.Types.X.Sources;
using VisioForge.Core.VideoCaptureX;
using VisioForge.Core;

namespace ip_camera_capture_mp4
{
    public partial class Form1 : Form
    {
        private VideoCaptureCoreX videoCapture1;

        public Form1()
        {
            InitializeComponent();
        }

        private async void btStart_Click(object sender, EventArgs e)
        {
            videoCapture1 = new VideoCaptureCoreX(VideoView1);

            // Fuente de cámara RTSP
            var rtsp = await RTSPSourceSettings.CreateAsync(new Uri(edURL.Text), edLogin.Text, edPassword.Text, cbAudioStream.Checked);
            videoCapture1.Video_Source = rtsp;

            // Dispositivo de salida de audio
            var audioOutputDevice = (await DeviceEnumerator.Shared.AudioOutputsAsync(AudioOutputDeviceAPI.DirectSound))[0];
            videoCapture1.Audio_OutputDevice = new AudioRendererSettings(audioOutputDevice);

            // Configurar salida MP4
            var mp4Output = new MP4Output(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), "output.mp4"));
            videoCapture1.Outputs_Add(mp4Output);

            // Iniciar
            await videoCapture1.StartAsync();
        }

        private async void btStop_Click(object sender, EventArgs e)
        {
            await videoCapture1.StopAsync();

            await videoCapture1.DisposeAsync();
        }

        private async void Form1_Load(object sender, EventArgs e)
        {
            await VisioForgeX.InitSDKAsync();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            VisioForgeX.DestroySDK();
        }
    }
}

Detalles de Implementación y Mejores Prácticas

Inicialización del SDK

Antes de trabajar con cámaras IP, la inicialización adecuada del SDK es crucial para asegurar que todos los componentes estén cargados y listos:

private async void Form1_Load(object sender, EventArgs e)
{
    await VisioForgeX.InitSDKAsync();
}

Siempre inicialice el SDK al inicio de la aplicación para asegurar que todos los componentes requeridos estén correctamente cargados antes de intentar conexiones de cámara.

Configuración de conexión de cámara

El ejemplo usa RTSP (Real-Time Streaming Protocol), uno de los protocolos más comunes para streaming de cámara IP:

// Fuente de cámara RTSP
var rtsp = await RTSPSourceSettings.CreateAsync(new Uri(edURL.Text), edLogin.Text, edPassword.Text, cbAudioStream.Checked);
videoCapture1.Video_Source = rtsp;

Al conectar a cámaras IP, considere estos parámetros importantes:

  • URL de cámara - La URL RTSP completa de su cámara (ej., rtsp://192.168.1.100:554/stream1)
  • Autenticación - Muchas cámaras requieren credenciales de nombre de usuario y contraseña
  • Stream de audio - Alterne si incluir audio de la cámara
  • Timeout de conexión - Para aplicaciones de producción, implemente manejo de timeout apropiado

Configuración de salida MP4

MP4 es un formato contenedor ideal para grabaciones de video debido a su excelente compatibilidad y compresión:

// Configurar salida MP4
var mp4Output = new MP4Output(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), "output.mp4"));
videoCapture1.Outputs_Add(mp4Output);

Al configurar salida MP4, considere estas opciones:

  • Nombre de archivo - Implemente nombres de archivo dinámicos basados en fecha/hora para grabaciones organizadas
  • Ubicación de almacenamiento - Elija rutas de almacenamiento apropiadas con suficiente espacio en disco
  • Calidad de video - Configure bitrate, framerate y ajustes de resolución basados en sus requisitos
  • Metadatos - Agregue metadatos relevantes a las grabaciones para clasificación y búsqueda más fáciles

Gestión de recursos

La gestión adecuada de recursos es crítica al trabajar con streams de video para prevenir fugas de memoria y asegurar rendimiento estable:

private async void btStop_Click(object sender, EventArgs e)
{
    await videoCapture1.StopAsync();
    await videoCapture1.DisposeAsync();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    VisioForgeX.DestroySDK();
}

Siempre implemente limpieza adecuada de recursos, especialmente:

  • Detenga streams activos antes de cerrar la aplicación
  • Libere recursos de captura cuando ya no se necesiten
  • Libere recursos del SDK cuando su aplicación termine

Consideraciones avanzadas de implementación

Para aplicaciones de grado de producción, considere estas características adicionales:

  1. Manejo de errores - Implemente manejo de errores comprehensivo para desconexiones de red, fallos de autenticación y problemas de almacenamiento
  2. Monitoreo - Agregue monitoreo de estado para rastrear salud del stream y estado de grabación
  3. Lógica de reconexión - Implemente reconexión automática para interrupciones de red
  4. Soporte multi-cámara - Extienda la implementación para manejar múltiples streams de cámara simultáneamente
  5. Programación de grabación - Agregue funciones de grabación basadas en tiempo para aplicaciones de vigilancia

Dependencias requeridas

Para que esta implementación funcione correctamente, los siguientes paquetes deben incluirse en su proyecto:

  • Redistribuibles de captura de video x86 x64
  • Redistribuibles LAV x86 x64
  • Redistribuibles MP4 x86 x64

Solución de problemas comunes

Al implementar captura de cámara IP, prepárese para abordar estos desafíos comunes:

  1. Fallos de conexión - Verifique conectividad de red, credenciales de cámara y configuración de firewall
  2. Rendimiento de stream - Equilibre ajustes de calidad con ancho de banda disponible y potencia de procesamiento
  3. Errores de archivo de salida - Asegure espacio de disco adecuado y permisos de escritura apropiados
  4. Fugas de recursos - Monitoree uso de memoria durante sesiones de grabación largas
  5. Compatibilidad de cámara - Diferentes modelos de cámara pueden requerir ajustes de configuración específicos

Guías relacionadas


Visite nuestra página de GitHub para obtener más ejemplos de código. ¿Necesita la URL RTSP para su cámara? Consulte nuestro directorio de marcas de cámaras IP.