Streaming HTTP MJPEG¶
Video Capture SDK .Net Video Edit SDK .Net Media Blocks SDK .Net
Soporte multiplataforma
El motor VideoCaptureCoreX y el Media Blocks SDK funcionan en Windows, macOS, Linux, Android e iOS vía GStreamer. Consulta la matriz de soporte de plataformas para códecs y detalles de aceleración por hardware, y la guía de despliegue en Linux para configuración en Ubuntu / NVIDIA Jetson / Raspberry Pi.
La característica del SDK de transmitir video codificado como Motion JPEG (MJPEG) sobre HTTP es ventajosa por su simplicidad y amplia compatibilidad. MJPEG codifica cada cuadro de video individualmente como una imagen JPEG, lo que simplifica la decodificación y es ideal para aplicaciones como streaming web y vigilancia. El uso de HTTP asegura fácil integración y alta compatibilidad entre diferentes plataformas y dispositivos, y es efectivo incluso en redes con configuraciones estrictas. Este método es particularmente adecuado para feeds de video en tiempo real y aplicaciones que requieren análisis directo cuadro por cuadro. Con tasas de cuadros y resoluciones ajustables, el SDK ofrece flexibilidad para varias condiciones de red y requisitos de calidad.
Agentes de IA: usa el servidor MCP de VisioForge
¿Lo construyes con Claude Code, Cursor u otro agente de IA? Conecta al servidor MCP público de VisioForge (documentación) en https://mcp.visioforge.com/mcp para consultas estructuradas de la API, ejemplos de código ejecutables y guías de despliegue — más preciso que buscar en llms.txt. Sin autenticación requerida.
Claude Code: claude mcp add --transport http visioforge-sdk https://mcp.visioforge.com/mcp
Salida MJPEG multiplataforma¶
VideoCaptureCoreX VideoEditCoreX MediaBlocksPipeline
La funcionalidad de streaming se implementa a través de dos clases principales:
HTTPMJPEGLiveOutput: La clase de configuración de alto nivel que configura la salida de streamingHTTPMJPEGLiveSinkBlock: El bloque de implementación subyacente que maneja el proceso de streaming real
Clase HTTPMJPEGLiveOutput¶
Esta clase sirve como el punto de entrada de configuración para configurar un stream HTTP MJPEG. Implementa la interfaz IVideoCaptureXBaseOutput, haciéndola compatible con el sistema de pipeline de captura de video.
Propiedades clave¶
Port: Obtiene el número de puerto de red en el cual se servirá el stream MJPEG
Uso¶
// Crear una nueva salida de streaming MJPEG en el puerto 8080
var mjpegOutput = new HTTPMJPEGLiveOutput(8080);
// Agregar la salida MJPEG al motor VideoCaptureCoreX
core.Outputs_Add(mjpegOutput, true);
Detalles de implementación¶
- La clase está diseñada para ser inmutable, con el puerto siendo establecido solo a través del constructor
- No soporta codificadores de video o audio, ya que MJPEG usa codificación JPEG directa
- Los métodos relacionados con filename devuelven null o son no-ops, ya que esta es una implementación solo de streaming
Clase HTTPMJPEGLiveSinkBlock¶
Esta clase maneja la implementación real de la funcionalidad de streaming MJPEG. Es responsable de:
- Configurar el pipeline para procesamiento de video
- Gestionar el servidor HTTP para streaming
- Manejar datos de video de entrada y convertirlos a formato MJPEG
- Gestionar conexiones de clientes y entrega del stream
Características clave¶
- Implementa múltiples interfaces para integración con el pipeline de medios:
IMediaBlockInternals: Para integración de pipelineIMediaBlockDynamicInputs: Para manejar conexiones de entrada dinámicasIMediaBlockSink: Para funcionalidad de sinkIDisposable: Para limpieza apropiada de recursos
Configuración de entrada/salida¶
- Acepta una única entrada de video a través del pad
Input - Sin pads de salida (ya que es un bloque sink)
- Pad de entrada configurado solo para tipo de medio video
Notas de implementación¶
Inicialización¶
// El bloque debe ser inicializado con un número de puerto
var mjpegSink = new HTTPMJPEGLiveSinkBlock(8080);
pipeline.Connect(videoSource.Output, mjpegSink.Input);
// "URL de etiqueta IMG es http://127.0.0.1:8090";
Gestión de recursos¶
- La clase implementa una limpieza adecuada de recursos a través del patrón
IDisposable - El método
CleanUpasegura que todos los recursos sean liberados correctamente - Los manejadores de eventos se conectan y desconectan apropiadamente durante el ciclo de vida del pipeline
Integración con pipeline¶
El método Build maneja el proceso de configuración crítico:
- Crea el elemento sink HTTP MJPEG subyacente
- Inicializa el sink con el puerto especificado
- Configura las conexiones de pad de GStreamer necesarias
- Conecta los manejadores de eventos del pipeline
Manejo de errores¶
- La implementación incluye verificación de errores exhaustiva durante el proceso de construcción
- La inicialización fallida se reporta apropiadamente a través del sistema de errores del contexto
- La limpieza de recursos se maneja incluso en casos de error
Consideraciones técnicas¶
Rendimiento¶
- La implementación usa elementos nativos de GStreamer para rendimiento óptimo
- Las conexiones directas de pads minimizan la copia y la sobrecarga
- El bloque sink está diseñado para manejar múltiples conexiones de cliente eficientemente
Gestión de memoria¶
- Los patrones de disposición apropiados garantizan que no haya fugas de memoria
- Los recursos se limpian cuando el pipeline se detiene o el bloque se libera
- La implementación maneja correctamente el ciclo de vida del elemento GStreamer
Subprocesamiento¶
- La implementación es segura para hilos en operaciones de pipeline
- Los manejadores de eventos están correctamente sincronizados con los cambios de estado del pipeline
- Las conexiones de clientes se manejan de forma asíncrona
Uso del cliente¶
Para consumir el stream MJPEG:
- Inicialice la salida de streaming con el puerto deseado
- Conéctelo a su pipeline de video
- Acceda al stream a través de un navegador web o cliente HTTP en:
http://[dirección-servidor]:[puerto]
Ejemplo de cliente HTML¶
<img src="http://localhost:8080" />
Limitaciones y consideraciones¶
- Uso de ancho de banda
- Los streams MJPEG pueden usar ancho de banda significativo ya que cada cuadro es un JPEG completo
-
Considere la configuración de tasa de cuadros y resolución para rendimiento óptimo
-
Soporte de navegador
- Aunque MJPEG es ampliamente soportado, algunos navegadores modernos pueden tener limitaciones
-
Los dispositivos móviles pueden manejar streams MJPEG de manera diferente
-
Latencia
- Aunque MJPEG proporciona latencia relativamente baja, no es adecuado para requisitos de ultra baja latencia
- Las condiciones de red pueden afectar el tiempo de entrega de cuadros
Mejores prácticas¶
- Selección de puerto
- Elija puertos que no entren en conflicto con otros servicios
-
Considere las implicaciones de firewall al seleccionar puertos
-
Gestión de recursos
- Siempre disponga del bloque sink apropiadamente
-
Monitoree las conexiones de clientes y uso de recursos
-
Manejo de errores
- Implemente manejo de errores apropiado para problemas de red y pipeline
- Monitoree el estado del pipeline para problemas potenciales
Consideraciones de seguridad¶
- Seguridad de red
- El stream MJPEG no está cifrado por defecto
-
Considere implementar medidas de seguridad adicionales para contenido sensible
-
Control de acceso
- Sin mecanismo de autenticación integrado
-
Considere implementar control de acceso a nivel de aplicación si es necesario
-
Seguridad del puerto
- Asegúrese de que las reglas de firewall apropiadas estén en su lugar
- Considere el aislamiento de red para streams internos
Salida MJPEG solo Windows¶
VideoCaptureCore VideoEditCore
Establezca la propiedad Network_Streaming_Enabled a true para habilitar streaming en red.
VideoCapture1.Network_Streaming_Enabled = true;
Establezca la salida HTTP MJPEG.
VideoCapture1.Network_Streaming_Format = NetworkStreamingFormat.HTTP_MJPEG;
Cree el objeto de configuración y establezca el puerto.
VideoCapture1.Network_Streaming_Output = new MJPEGOutput(8080);
Visite nuestra página de GitHub para obtener más ejemplos de código.