Efectos de Video OpenGL - SDK de VisioForge Media Blocks .Net¶
Los efectos de video OpenGL en el SDK de VisioForge Media Blocks .Net permiten manipulación poderosa y hardware-acelerada de streams de video. Cada efecto se distribuye como su propio MediaBlock independiente (p.ej. GLBlurBlock, GLFlipBlock, GLAlphaBlock) y se encadena entre GLUploadBlock en la entrada y GLDownloadBlock en la salida. Esta guía cubre los efectos disponibles, sus ajustes de configuración y otros tipos OpenGL relacionados.
Efecto Base: GLBaseVideoEffect¶
Todos los efectos de video OpenGL heredan de la clase GLBaseVideoEffect, que proporciona propiedades y eventos comunes.
| Propiedad | Tipo | Descripción |
|---|---|---|
Name | string | El nombre interno del efecto (solo lectura). |
ID | GLVideoEffectID | El identificador único para el efecto (solo lectura). |
Index | int | El índice del efecto en una cadena. |
Eventos:
OnUpdate: Ocurre cuando las propiedades del efecto necesitan actualizarse en el pipeline. Llame aOnUpdateCall()para activarlo.
Efectos de Video Disponibles¶
Esta sección detalla los diversos efectos de video OpenGL que puede usar. Cada efecto es un MediaBlock independiente — instancia el bloque directamente (p.ej. new GLBlurBlock()) y conéctalo entre GLUploadBlock y GLDownloadBlock (u otros bloques GL) en tu pipeline.
Efecto Alfa (GLAlphaVideoEffect)¶
Reemplaza un color seleccionado con un canal alfa o establece/ajusta el canal alfa existente.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Alpha | double | 1.0 | El valor para el canal alfa. |
Angle | float | 20 | El tamaño del cubo de color a cambiar (sensibilidad de radio para coincidencia de color). |
BlackSensitivity | uint | 100 | La sensibilidad a colores oscuros. |
Mode | GLAlphaVideoEffectMode | Set | El método usado para modificación alfa. |
NoiseLevel | float | 2 | El tamaño del radio de ruido (píxeles a ignorar alrededor del color coincidente). |
CustomColor | SKColor | SKColors.Green | Valor de color personalizado para modo chroma key Custom. |
WhiteSensitivity | uint | 100 | La sensibilidad a colores brillantes. |
Enum Asociado: GLAlphaVideoEffectMode
Define el modo de operación para el efecto de video Alfa.
| Valor | Descripción |
|---|---|
Set | Establecer/ajustar canal alfa directamente usando la propiedad Alpha. |
Green | Chroma Key en verde puro. |
Blue | Chroma Key en azul puro. |
Custom | Chroma Key en el color especificado por CustomColor. |
Efecto Desenfoque (GLBlurVideoEffect)¶
Aplica un efecto de desenfoque usando convolución separable 9x9. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Burbuja (GLBulgeVideoEffect)¶
Crea una distorsión de burbuja en el video. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Balance de Color (GLColorBalanceVideoEffect)¶
Ajusta el balance de color del video, incluyendo brillo, contraste, tono y saturación.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Brightness | double | 0 | Ajusta brillo (-1.0 a 1.0, 0 significa sin cambio). |
Contrast | double | 1 | Ajusta contraste (0.0 a infinito, 1 significa sin cambio). |
Hue | double | 0 | Ajusta tono (-1.0 a 1.0, 0 significa sin cambio). |
Saturation | double | 1 | Ajusta saturación (0.0 a infinito, 1 significa sin cambio). |
Efecto Desentrelazado (GLDeinterlaceVideoEffect)¶
Aplica un filtro de desentrelazado al video.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Method | GLDeinterlaceMethod | VerticalBlur | El método de desentrelazado a usar. |
Enum Asociado: GLDeinterlaceMethod
Define el método para el efecto de video Desentrelazado.
| Valor | Descripción |
|---|---|
VerticalBlur | Método de desenfoque vertical. |
MAAD | Adaptativo de Movimiento: Detección Avanzada. |
Efecto Ojo de Pez (GLFishEyeVideoEffect)¶
Aplica una distorsión de lente ojo de pez. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Voltear (GLFlipVideoEffect)¶
Voltea o rota el video.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Method | GLFlipVideoMethod | None | El método de volteo o rotación a usar. |
Enum Asociado: GLFlipVideoMethod
Define el método de volteo o rotación de video.
| Valor | Descripción |
|---|---|
None | Sin rotación. |
Clockwise | Rotar 90 grados en sentido horario. |
Rotate180 | Rotar 180 grados. |
CounterClockwise | Rotar 90 grados en sentido antihorario. |
HorizontalFlip | Voltear horizontalmente. |
VerticalFlip | Voltear verticalmente. |
UpperLeftDiagonal | Voltear a través de diagonal superior izquierda/inferior derecha. |
UpperRightDiagonal | Voltear a través de diagonal superior derecha/inferior izquierda. |
Efecto Iluminación de Brillo (GLGlowLightingVideoEffect)¶
Agrega un efecto de iluminación de brillo al video. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Escala de Grises (GLGrayscaleVideoEffect)¶
Convierte el video a escala de grises. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Calor (GLHeatVideoEffect)¶
Aplica un efecto tipo firma de calor al video. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Laplaciano (GLLaplacianVideoEffect)¶
Aplica un filtro de detección de bordes Laplaciano.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Invert | bool | false | Si true, invierte colores para obtener bordes oscuros en un fondo brillante. |
Efecto Túnel de Luz (GLLightTunnelVideoEffect)¶
Crea un efecto visual de túnel de luz. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Procesamiento Cruzado Luma (GLLumaCrossProcessingVideoEffect)¶
Aplica un efecto de procesamiento cruzado luma (a menudo "xpro"). Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Espejo (GLMirrorVideoEffect)¶
Aplica un efecto espejo al video. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Cambiar Tamaño (GLResizeVideoEffect)¶
Cambia el tamaño del video a las dimensiones especificadas.
Propiedades:
| Propiedad | Tipo | Descripción |
|---|---|---|
Width | int | El ancho objetivo para el cambio de tamaño de video. |
Height | int | La altura objetivo para el cambio de tamaño de video. |
Efecto Sepia (GLSepiaVideoEffect)¶
Aplica un tono sepia al video. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Sin City (GLSinCityVideoEffect)¶
Aplica un efecto estilo película Sin City (escala de grises con resaltes rojos). Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Sobel (GLSobelVideoEffect)¶
Aplica un filtro de detección de bordes Sobel.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Invert | bool | false | Si true, invierte colores para obtener bordes oscuros en un fondo brillante. |
Efecto Cuadrado (GLSquareVideoEffect)¶
Aplica un efecto de distorsión o pixelación "cuadrado". Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Aplastar (GLSqueezeVideoEffect)¶
Aplica un efecto de distorsión de aplastamiento. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Estirar (GLStretchVideoEffect)¶
Aplica un efecto de distorsión de estiramiento. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Transformación (GLTransformationVideoEffect)¶
Aplica transformaciones 3D al video, incluyendo rotación, escalado y traslación.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
FOV | float | 90.0f | Ángulo de campo de visión en grados para proyección de perspectiva. |
Ortho | bool | false | Si true, usa proyección ortográfica; de lo contrario, perspectiva. |
PivotX | float | 0.0f | Coordenada X del punto pivote de rotación (0 es centro). |
PivotY | float | 0.0f | Coordenada Y del punto pivote de rotación (0 es centro). |
PivotZ | float | 0.0f | Coordenada Z del punto pivote de rotación (0 es centro). |
RotationX | float | 0.0f | Rotación alrededor del eje X en grados. |
RotationY | float | 0.0f | Rotación alrededor del eje Y en grados. |
RotationZ | float | 0.0f | Rotación alrededor del eje Z en grados. |
ScaleX | float | 1.0f | Multiplicador de escala para el eje X. |
ScaleY | float | 1.0f | Multiplicador de escala para el eje Y. |
TranslationX | float | 0.0f | Traslación a lo largo del eje X (coordenadas universales [0-1]). |
TranslationY | float | 0.0f | Traslación a lo largo del eje Y (coordenadas universales [0-1]). |
TranslationZ | float | 0.0f | Traslación a lo largo del eje Z (coordenadas universales [0-1], profundidad). |
Efecto Remolino (GLTwirlVideoEffect)¶
Aplica un efecto de distorsión de remolino. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Efecto Rayos X (GLXRayVideoEffect)¶
Aplica un efecto visual tipo rayos X. Este efecto no tiene propiedades configurables adicionales más allá de las heredadas de GLBaseVideoEffect.
Identificación de Efectos OpenGL: Enum GLVideoEffectID¶
Esta enumeración lista todos los tipos de efectos de video OpenGL disponibles, usados por GLBaseVideoEffect.ID.
| Valor | Descripción |
|---|---|
ColorBalance | El efecto de balance de color. |
Grayscale | El efecto de escala de grises. |
Resize | El efecto de cambio de tamaño. |
Deinterlace | El efecto de desentrelazado. |
Flip | El efecto de volteo. |
Blur | Efecto de desenfoque con convolución separable 9x9. |
FishEye | El efecto de ojo de pez. |
GlowLighting | El efecto de iluminación de brillo. |
Heat | El efecto de firma de calor. |
LumaX | El efecto de procesamiento cruzado luma. |
Mirror | El efecto de espejo. |
Sepia | El efecto de sepia. |
Square | El efecto de cuadrado. |
XRay | El efecto de rayos X. |
Stretch | El efecto de estiramiento. |
LightTunnel | El efecto de túnel de luz. |
Twirl | El efecto de remolino. |
Squeeze | El efecto de aplastamiento. |
SinCity | El efecto de película gris-roja Sin City. |
Bulge | El efecto de burbuja. |
Sobel | El efecto de Sobel. |
Laplacian | El efecto de Laplaciano. |
Alpha | El efecto de canales alfa. |
Transformation | El efecto de transformación. |
Renderizado y Configuración de Vista OpenGL¶
Estos tipos asisten en configurar cómo se renderiza o ve el video en un contexto OpenGL, especialmente para escenarios especializados como VR o visualización personalizada.
Ajustes de Vista Equirectangular (GLEquirectangularViewSettings)¶
Maneja ajustes para renderizar video equirectangular (360 grados), comúnmente usado en aplicaciones VR. Implementa IVRVideoControl.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
VideoWidth | int | (solo lectura) | Ancho del video fuente. |
VideoHeight | int | (solo lectura) | Altura del video fuente. |
FieldOfView | float | 80.0f | Campo de visión en grados. |
Yaw | float | 0.0f | Guiñada (rotación alrededor del eje Y) en grados. |
Pitch | float | 0.0f | Cabeceo (rotación alrededor del eje X) en grados. |
Roll | float | 0.0f | Alabeo (rotación alrededor del eje Z) en grados. |
Mode | VRMode | Equirectangular | El modo VR (soporta Equirectangular). |
Métodos:
IsModeSupported(VRMode mode): Verifica si elVRModeespecificado está soportado.
Eventos:
SettingsChanged: Ocurre cuando cualquier ajuste de vista es cambiado.
Ajustes de Renderizador de Video (GLVideoRendererSettings)¶
Configura propiedades generales para un renderizador de video basado en OpenGL.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
ForceAspectRatio | bool | true | Si el escalado respetará la relación de aspecto original. |
IgnoreAlpha | bool | true | Si el canal alfa será ignorado (tratado como negro). |
PixelAspectRatio | System.Tuple<int, int> | (0, 1) | Relación de aspecto de píxel del dispositivo de visualización (numerador, denominador). |
Rotation | GLVideoRendererRotateMethod | None | Especifica la rotación aplicada al video. |
Enum Asociado: GLVideoRendererRotateMethod
Define métodos de rotación para el renderizador de video OpenGL.
| Valor | Descripción |
|---|---|
None | Sin rotación. |
_90C | Rotar 90 grados en sentido horario. |
_180 | Rotar 180 grados. |
_90CC | Rotar 90 grados en sentido antihorario. |
FlipHorizontal | Voltear horizontalmente. |
FlipVertical | Voltear verticalmente. |
Shaders OpenGL Personalizados¶
Permite la aplicación de shaders GLSL personalizados al stream de video.
Definición de Shader (GLShader)¶
Representa un par de shaders de vértice y fragmento.
Propiedades:
| Propiedad | Tipo | Descripción |
|---|---|---|
VertexShader | string | El código fuente GLSL para el shader de vértice. |
FragmentShader | string | El código fuente GLSL para el shader de fragmento. |
Constructores: - GLShader() - GLShader(string vertexShader, string fragmentShader)
Ajustes de Shader (GLShaderSettings)¶
Configura shaders GLSL personalizados para usar en el pipeline.
Propiedades:
| Propiedad | Tipo | Descripción |
|---|---|---|
Vertex | string | El código fuente GLSL para el shader de vértice. |
Fragment | string | El código fuente GLSL para el shader de fragmento. |
Uniforms | System.Collections.Generic.Dictionary<string, object> | Un diccionario de variables uniformes (parámetros) a pasar a los shaders. |
Constructores: - GLShaderSettings() - GLShaderSettings(string vertex, string fragment) - GLShaderSettings(GLShader shader)
Superposiciones de Imagen en OpenGL¶
Proporciona ajustes para superponer imágenes estáticas en un stream de video dentro de un contexto OpenGL.
Ajustes de Superposición (GLOverlaySettings)¶
Define las propiedades de una superposición de imagen.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Filename | string | (N/A) | Ruta al archivo de imagen (solo lectura después de init). |
Data | byte[] | (N/A) | Datos de imagen como arreglo de bytes (solo lectura después de init). |
X | int | Coordenada X de la esquina superior izquierda de la superposición. | |
Y | int | Coordenada Y de la esquina superior izquierda de la superposición. | |
Width | int | Ancho de la superposición. | |
Height | int | Altura de la superposición. | |
Alpha | double | 1.0 | Opacidad de la superposición (0.0 transparente a 1.0 opaco). |
Constructor: - GLOverlaySettings(string filename)
Mezcla de Video OpenGL¶
Estos tipos se usan para configurar un mezclador de video basado en OpenGL, permitiendo combinar y componer múltiples streams de video.
Ajustes de Mezclador (GLVideoMixerSettings)¶
Extiende VideoMixerBaseSettings para mezcla específica de OpenGL. Maneja una lista de objetos GLVideoMixerStream e hereda propiedades como Width, Height, y FrameRate.
Métodos: - AddStream(GLVideoMixerStream stream): Agrega un stream al mezclador. - RemoveStream(GLVideoMixerStream stream): Remueve un stream del mezclador. - SetStream(int index, GLVideoMixerStream stream): Reemplaza un stream en un índice específico.
Constructores: - GLVideoMixerSettings(int width, int height, VideoFrameRate frameRate) - GLVideoMixerSettings(int width, int height, VideoFrameRate frameRate, List<VideoMixerStream> streams)
Stream de Mezclador (GLVideoMixerStream)¶
Extiende VideoMixerStream y define propiedades para un stream individual dentro del mezclador de video OpenGL. Hereda Rectangle, ZOrder, y Alpha de VideoMixerStream.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Crop | Rect | (N/A) | Rectángulo de recorte para el stream de entrada. |
BlendConstantColorAlpha | double | 0 | Componente alfa para color de mezcla constante. |
BlendConstantColorBlue | double | 0 | Componente azul para color de mezcla constante. |
BlendConstantColorGreen | double | 0 | Componente verde para color de mezcla constante. |
BlendConstantColorRed | double | 0 | Componente rojo para color de mezcla constante. |
BlendEquationAlpha | GLVideoMixerBlendEquation | Add | Ecuación de mezcla para el canal alfa. |
BlendEquationRGB | GLVideoMixerBlendEquation | Add | Ecuación de mezcla para canales RGB. |
BlendFunctionDestinationAlpha | GLVideoMixerBlendFunction | OneMinusSourceAlpha | Función de mezcla para alfa de destino. |
BlendFunctionDesctinationRGB | GLVideoMixerBlendFunction | OneMinusSourceAlpha | Función de mezcla para RGB de destino. |
BlendFunctionSourceAlpha | GLVideoMixerBlendFunction | One | Función de mezcla para alfa de fuente. |
BlendFunctionSourceRGB | GLVideoMixerBlendFunction | SourceAlpha | Función de mezcla para RGB de fuente. |
Constructor: - GLVideoMixerStream(Rect rectangle, uint zorder, double alpha = 1.0)
Ecuación de Mezcla (GLVideoMixerBlendEquation Enum)¶
Especifica cómo se combinan los colores fuente y destino durante la mezcla.
| Valor | Descripción |
|---|---|
Add | Fuente + Destino |
Subtract | Fuente - Destino |
ReverseSubtract | Destino - Fuente |
Función de Mezcla (GLVideoMixerBlendFunction Enum)¶
Define factores para colores fuente y destino en operaciones de mezcla. (Rs, Gs, Bs, As son componentes de color fuente; Rd, Gd, Bd, Ad son componentes de color destino; Rc, Gc, Bc, Ac son componentes de color constante).
| Valor | Descripción |
|---|---|
Zero | Factor es (0, 0, 0, 0). |
One | Factor es (1, 1, 1, 1). |
SourceColor | Factor es (Rs, Gs, Bs, As). |
OneMinusSourceColor | Factor es (1-Rs, 1-Gs, 1-Bs, 1-As). |
DestinationColor | Factor es (Rd, Gd, Bd, Ad). |
OneMinusDestinationColor | Factor es (1-Rd, 1-Gd, 1-Bd, 1-Ad). |
SourceAlpha | Factor es (As, As, As, As). |
OneMinusSourceAlpha | Factor es (1-As, 1-As, 1-As, 1-As). |
DestinationAlpha | Factor es (Ad, Ad, Ad, Ad). |
OneMinusDestinationAlpha | Factor es (1-Ad, 1-Ad, 1-Ad, 1-Ad). |
ConstantColor | Factor es (Rc, Gc, Bc, Ac). |
OneMinusContantColor | Factor es (1-Rc, 1-Gc, 1-Bc, 1-Ac). |
ConstantAlpha | Factor es (Ac, Ac, Ac, Ac). |
OneMinusContantAlpha | Factor es (1-Ac, 1-Ac, 1-Ac, 1-Ac). |
SourceAlphaSaturate | Factor es (min(As, 1-Ad), min(As, 1-Ad), min(As, 1-Ad), 1). |
Fuentes Virtuales de Prueba para OpenGL¶
Estas clases de ajustes se usan para configurar fuentes que generan patrones de prueba directamente dentro de un contexto OpenGL.
Ajustes de Fuente de Video Virtual (GLVirtualVideoSourceSettings)¶
Configura un bloque fuente (GLVirtualVideoSourceBlock) que produce datos de video de prueba. Implementa IMediaPlayerBaseSourceSettings e IVideoCaptureBaseVideoSourceSettings.
Propiedades:
| Propiedad | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
Width | int | 1280 | Ancho del video de salida. |
Height | int | 720 | Altura del video de salida. |
FrameRate | VideoFrameRate | 30/1 (30 fps) | Tasa de frames del video de salida. |
IsLive | bool | true | Indica si la fuente es en vivo. |
Mode | GLVirtualVideoSourceMode | (N/A - debe establecerse) | Especifica el tipo de patrón de prueba a generar. |
Enum Asociado: GLVirtualVideoSourceMode
Define el patrón de prueba generado por GLVirtualVideoSourceBlock.
| Valor | Descripción |
|---|---|
SMPTE | Barras de color SMPTE 100%. |
Snow | Aleatorio (nieve de televisión). |
Black | 100% Negro. |
White | 100% Blanco. |
Red | Color sólido rojo. |
Green | Color sólido verde. |
Blue | Color sólido azul. |
Checkers1 | Patrón de ajedrez (1px). |
Checkers2 | Patrón de ajedrez (2px). |
Checkers4 | Patrón de ajedrez (4px). |
Checkers8 | Patrón de ajedrez (8px). |
Circular | Patrón circular. |
Blink | Patrón parpadeante. |
Mandelbrot | Fractal Mandelbrot. |
Métodos: - Task<MediaFileInfo> ReadInfoAsync(): Lee asincrónicamente información de medios (devuelve información sintética basada en ajustes). - MediaBlock CreateBlock(): Crea una instancia GLVirtualVideoSourceBlock configurada con estos ajustes.
Bloques de Procesamiento OpenGL¶
Además de los bloques por efecto listados arriba, el SDK incluye varios bloques de procesamiento OpenGL independientes para composición de superposiciones, redimensionamiento por GPU, conversión de formato, mezcla de múltiples streams y renderizado acelerado por hardware. Como los bloques de efectos, estos operan sobre memoria de GPU y normalmente se encadenan entre GLUploadBlock (memoria CPU a GL) y GLDownloadBlock (GL a memoria CPU), o se alimentan directamente desde otros bloques OpenGL. Cada bloque expone un método estático IsAvailable() que puede llamar para verificar el soporte de OpenGL en el sistema actual antes de construir el pipeline.
GL Overlay¶
El GLOverlayBlock compone una imagen estática (logo, marca de agua, gráfico) sobre el stream de video en la GPU, con posicionamiento, escalado y mezcla alfa.
Información del bloque¶
Nombre: GLOverlayBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Video (memoria GL) | 1 |
| Salida | Video (memoria GL) | 1 |
La superposición se configura con GLOverlaySettings (ver Ajustes de Superposición arriba). Llame a UpdateSettings() después de cambiar las propiedades de Settings para aplicar los cambios a un pipeline en ejecución.
El pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->GLUploadBlock;
GLUploadBlock-->GLOverlayBlock;
GLOverlayBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
var glUpload = new GLUploadBlock();
// configurar la superposición de imagen
var overlaySettings = new GLOverlaySettings("logo.png")
{
X = 20,
Y = 20,
Width = 160,
Height = 80,
Alpha = 0.8
};
var glOverlay = new GLOverlayBlock(overlaySettings);
var glDownload = new GLDownloadBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(source.VideoOutput, glUpload.Input);
pipeline.Connect(glUpload.Output, glOverlay.Input);
pipeline.Connect(glOverlay.Output, glDownload.Input);
pipeline.Connect(glDownload.Output, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
GL Resize¶
El GLResizeBlock realiza escalado de video acelerado por GPU a una resolución objetivo usando GLResizeVideoEffect.
Información del bloque¶
Nombre: GLResizeBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Video (memoria GL) | 1 |
| Salida | Video (memoria GL) | 1 |
El pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->GLUploadBlock;
GLUploadBlock-->GLResizeBlock;
GLResizeBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
var glUpload = new GLUploadBlock();
// redimensionar a 1280x720 en la GPU
var glResize = new GLResizeBlock(new GLResizeVideoEffect(1280, 720));
var glDownload = new GLDownloadBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(source.VideoOutput, glUpload.Input);
pipeline.Connect(glUpload.Output, glResize.Input);
pipeline.Connect(glResize.Output, glDownload.Input);
pipeline.Connect(glDownload.Output, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
GL Square¶
El GLSquareBlock aplica un efecto de distorsión geométrica "cuadrado" en la GPU. No tiene configuración adicional.
Información del bloque¶
Nombre: GLSquareBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Video (memoria GL) | 1 |
| Salida | Video (memoria GL) | 1 |
El pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->GLUploadBlock;
GLUploadBlock-->GLSquareBlock;
GLSquareBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
var glUpload = new GLUploadBlock();
var glSquare = new GLSquareBlock();
var glDownload = new GLDownloadBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(source.VideoOutput, glUpload.Input);
pipeline.Connect(glUpload.Output, glSquare.Input);
pipeline.Connect(glSquare.Output, glDownload.Input);
pipeline.Connect(glDownload.Output, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
GL Video Converter¶
El GLVideoConverterBlock realiza conversión de formato de píxel y espacio de color acelerada por GPU. No tiene configuración adicional.
Información del bloque¶
Nombre: GLVideoConverterBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Video (memoria GL) | 1 |
| Salida | Video (memoria GL) | 1 |
El pipeline de ejemplo¶
graph LR;
GLUploadBlock-->GLVideoConverterBlock;
GLVideoConverterBlock-->GLSepiaBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
var glUpload = new GLUploadBlock();
var glConverter = new GLVideoConverterBlock();
var glSepia = new GLSepiaBlock();
var glDownload = new GLDownloadBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(source.VideoOutput, glUpload.Input);
pipeline.Connect(glUpload.Output, glConverter.Input);
pipeline.Connect(glConverter.Output, glSepia.Input);
pipeline.Connect(glSepia.Output, glDownload.Input);
pipeline.Connect(glDownload.Output, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
GL Video Mixer¶
El GLVideoMixerBlock compone múltiples streams de video de entrada en una sola salida en la GPU, con posicionamiento, escalado, orden Z, mezcla alfa y chroma key por stream. Se configura con GLVideoMixerSettings (ver Ajustes de Mezclador arriba) y expone un pad de entrada por cada stream configurado. El bloque implementa IVideoMixerControl, por lo que los streams de entrada pueden consultarse, actualizarse, animarse (Input_Move, StartFadeIn, StartFadeOut) y aplicárseles chroma key en tiempo de ejecución.
Información del bloque¶
Nombre: GLVideoMixerBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Video (memoria GL) | 1 por stream |
| Salida | Video (memoria GL) | 1 |
El pipeline de ejemplo¶
graph LR;
Source1Block-->GLUpload1Block;
Source2Block-->GLUpload2Block;
GLUpload1Block-->GLVideoMixerBlock;
GLUpload2Block-->GLVideoMixerBlock;
GLVideoMixerBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// configurar la salida del mezclador y dos streams
var mixerSettings = new GLVideoMixerSettings(1280, 720, new VideoFrameRate(30));
mixerSettings.AddStream(new GLVideoMixerStream(new Rect(0, 0, 1280, 720), 0));
mixerSettings.AddStream(new GLVideoMixerStream(new Rect(960, 480, 1280, 720), 1)); // izquierda, arriba, derecha, abajo
var glMixer = new GLVideoMixerBlock(mixerSettings);
// primera fuente
var source1 = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("background.mp4"));
var glUpload1 = new GLUploadBlock();
pipeline.Connect(source1.VideoOutput, glUpload1.Input);
pipeline.Connect(glUpload1.Output, glMixer.Inputs[0]);
// segunda fuente (imagen en imagen)
var source2 = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("overlay.mp4"));
var glUpload2 = new GLUploadBlock();
pipeline.Connect(source2.VideoOutput, glUpload2.Input);
pipeline.Connect(glUpload2.Output, glMixer.Inputs[1]);
var glDownload = new GLDownloadBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(glMixer.Output, glDownload.Input);
pipeline.Connect(glDownload.Output, videoRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
GL Video Renderer¶
El GLVideoRendererBlock muestra el stream de video en una superficie IVideoView usando renderizado OpenGL acelerado por hardware. Es un bloque terminal (solo entrada) y acepta entrada tanto de memoria CPU como GL. El renderizador se configura con GLVideoRendererSettings (ver Ajustes de Renderizador de Video arriba).
Información del bloque¶
Nombre: GLVideoRendererBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Video | 1 |
El pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->GLVideoRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
// VideoView1 es su control IVideoView en el formulario/página
var glRenderer = new GLVideoRendererBlock(VideoView1);
pipeline.Connect(source.VideoOutput, glRenderer.Input);
await pipeline.StartAsync();
En Android, use la sobrecarga del constructor que también recibe el pipeline: new GLVideoRendererBlock(pipeline, VideoView1).
Plataformas¶
Windows, macOS, Linux, iOS, Android.