Capturar streams de cámara IP a archivos MP4 en .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:
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:
- Manejo de errores - Implemente manejo de errores comprehensivo para desconexiones de red, fallos de autenticación y problemas de almacenamiento
- Monitoreo - Agregue monitoreo de estado para rastrear salud del stream y estado de grabación
- Lógica de reconexión - Implemente reconexión automática para interrupciones de red
- Soporte multi-cámara - Extienda la implementación para manejar múltiples streams de cámara simultáneamente
- 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:
Solución de problemas comunes¶
Al implementar captura de cámara IP, prepárese para abordar estos desafíos comunes:
- Fallos de conexión - Verifique conectividad de red, credenciales de cámara y configuración de firewall
- Rendimiento de stream - Equilibre ajustes de calidad con ancho de banda disponible y potencia de procesamiento
- Errores de archivo de salida - Asegure espacio de disco adecuado y permisos de escritura apropiados
- Fugas de recursos - Monitoree uso de memoria durante sesiones de grabación largas
- Compatibilidad de cámara - Diferentes modelos de cámara pueden requerir ajustes de configuración específicos
Guías relacionadas¶
- Tutorial de vista previa en vivo de cámara IP — comienza con la vista previa antes de añadir grabación
- Configuración de fuente de cámara RTSP — transporte UDP/TCP, ajuste de baja latencia, selección de motor
- Integración de cámara IP ONVIF — auto-descubrimiento y selección de perfiles
- Guardar stream RTSP original sin re-codificación — alternativa con Media Blocks preservando bitrate de origen
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.