Effets vidéo OpenGL - VisioForge Media Blocks SDK .Net¶
Les effets vidéo OpenGL dans VisioForge Media Blocks SDK .Net permettent une manipulation puissante et accélérée matériellement des flux vidéo. Chaque effet est livré comme MediaBlock autonome (par ex. GLBlurBlock, GLFlipBlock, GLAlphaBlock) et se chaîne entre GLUploadBlock côté entrée et GLDownloadBlock côté sortie. Ce guide couvre les effets disponibles, leurs paramètres de configuration et les autres types OpenGL associés.
Effet de base : GLBaseVideoEffect¶
Tous les effets vidéo OpenGL héritent de la classe GLBaseVideoEffect, qui fournit des propriétés et des événements communs.
| Propriété | Type | Description |
|---|---|---|
Name | string | Nom interne de l'effet (lecture seule). |
ID | GLVideoEffectID | Identifiant unique de l'effet (lecture seule). |
Index | int | Index de l'effet dans une chaîne. |
Événements :
OnUpdate: se produit lorsque les propriétés de l'effet doivent être mises à jour dans le pipeline. AppelezOnUpdateCall()pour le déclencher.
Effets vidéo disponibles¶
Cette section détaille les divers effets vidéo OpenGL utilisables. Chaque effet est un MediaBlock indépendant — instanciez directement le bloc (par ex. new GLBlurBlock()) et connectez-le entre GLUploadBlock et GLDownloadBlock (ou entre d'autres blocs GL) dans votre pipeline.
Effet Alpha (GLAlphaVideoEffect)¶
Remplace une couleur sélectionnée par un canal alpha ou définit/ajuste le canal alpha existant.
Propriétés :
| Propriété | Type | Valeur par défaut | Description |
|---|---|---|---|
Alpha | double | 1.0 | Valeur du canal alpha. |
Angle | float | 20 | Taille du cube colorimétrique à modifier (rayon de sensibilité pour la correspondance des couleurs). |
BlackSensitivity | uint | 100 | Sensibilité aux couleurs sombres. |
Mode | GLAlphaVideoEffectMode | Set | Méthode utilisée pour la modification de l'alpha. |
NoiseLevel | float | 2 | Rayon de bruit (pixels à ignorer autour de la couleur correspondante). |
CustomColor | SKColor | SKColors.Green | Valeur de couleur personnalisée pour le mode chroma key Custom. |
WhiteSensitivity | uint | 100 | Sensibilité aux couleurs claires. |
Énumération associée : GLAlphaVideoEffectMode
Définit le mode de fonctionnement de l'effet vidéo Alpha.
| Valeur | Description |
|---|---|
Set | Définit/ajuste directement le canal alpha via la propriété Alpha. |
Green | Chroma key sur vert pur. |
Blue | Chroma key sur bleu pur. |
Custom | Chroma key sur la couleur spécifiée par CustomColor. |
Effet Blur (GLBlurVideoEffect)¶
Applique un effet de flou via une convolution séparable 9x9. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Bulge (GLBulgeVideoEffect)¶
Crée une distorsion en relief (bombement) sur la vidéo. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Color Balance (GLColorBalanceVideoEffect)¶
Ajuste la balance des couleurs de la vidéo, dont la luminosité, le contraste, la teinte et la saturation.
Propriétés :
| Propriété | Type | Valeur par défaut | Description |
|---|---|---|---|
Brightness | double | 0 | Ajuste la luminosité (-1.0 à 1.0, 0 ne change rien). |
Contrast | double | 1 | Ajuste le contraste (0.0 à l'infini, 1 ne change rien). |
Hue | double | 0 | Ajuste la teinte (-1.0 à 1.0, 0 ne change rien). |
Saturation | double | 1 | Ajuste la saturation (0.0 à l'infini, 1 ne change rien). |
Effet Deinterlace (GLDeinterlaceVideoEffect)¶
Applique un filtre de désentrelacement à la vidéo.
Propriétés :
| Propriété | Type | Valeur par défaut | Description |
|---|---|---|---|
Method | GLDeinterlaceMethod | VerticalBlur | Méthode de désentrelacement à utiliser. |
Énumération associée : GLDeinterlaceMethod
Définit la méthode de l'effet vidéo Deinterlace.
| Valeur | Description |
|---|---|
VerticalBlur | Méthode de flou vertical. |
MAAD | Motion Adaptive: Advanced Detection. |
Effet Fish Eye (GLFishEyeVideoEffect)¶
Applique un effet de distorsion d'objectif fisheye. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Flip (GLFlipVideoEffect)¶
Retourne ou fait pivoter la vidéo.
Propriétés :
| Propriété | Type | Valeur par défaut | Description |
|---|---|---|---|
Method | GLFlipVideoMethod | None | Méthode de retournement ou rotation à utiliser. |
Énumération associée : GLFlipVideoMethod
Définit la méthode de retournement ou de rotation vidéo.
| Valeur | Description |
|---|---|
None | Aucune rotation. |
Clockwise | Rotation horaire de 90 degrés. |
Rotate180 | Rotation de 180 degrés. |
CounterClockwise | Rotation antihoraire de 90 degrés. |
HorizontalFlip | Retournement horizontal. |
VerticalFlip | Retournement vertical. |
UpperLeftDiagonal | Retournement selon la diagonale haut-gauche/bas-droite. |
UpperRightDiagonal | Retournement selon la diagonale haut-droite/bas-gauche. |
Effet Glow Lighting (GLGlowLightingVideoEffect)¶
Ajoute un effet de halo lumineux à la vidéo. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Grayscale (GLGrayscaleVideoEffect)¶
Convertit la vidéo en niveaux de gris. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Heat (GLHeatVideoEffect)¶
Applique un effet de type signature thermique à la vidéo. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Laplacian (GLLaplacianVideoEffect)¶
Applique un filtre de détection d'arêtes laplacien.
Propriétés :
| Propriété | Type | Valeur par défaut | Description |
|---|---|---|---|
Invert | bool | false | Si true, inverse les couleurs pour obtenir des arêtes sombres sur fond clair. |
Effet Light Tunnel (GLLightTunnelVideoEffect)¶
Crée un effet visuel de tunnel lumineux. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Luma Cross Processing (GLLumaCrossProcessingVideoEffect)¶
Applique un effet de cross-processing de luminance (souvent « xpro »). Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Mirror (GLMirrorVideoEffect)¶
Applique un effet miroir à la vidéo. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Resize (GLResizeVideoEffect)¶
Redimensionne la vidéo aux dimensions spécifiées.
Propriétés :
| Propriété | Type | Description |
|---|---|---|
Width | int | Largeur cible du redimensionnement vidéo. |
Height | int | Hauteur cible du redimensionnement vidéo. |
Effet Sepia (GLSepiaVideoEffect)¶
Applique un effet de sépia à la vidéo. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Sin City (GLSinCityVideoEffect)¶
Applique un effet de style cinéma « Sin City » (niveaux de gris avec rehauts rouges). Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Sobel (GLSobelVideoEffect)¶
Applique un filtre de détection d'arêtes de Sobel.
Propriétés :
| Propriété | Type | Valeur par défaut | Description |
|---|---|---|---|
Invert | bool | false | Si true, inverse les couleurs pour obtenir des arêtes sombres sur fond clair. |
Effet Square (GLSquareVideoEffect)¶
Applique un effet de distorsion ou de pixellisation « carré ». Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Squeeze (GLSqueezeVideoEffect)¶
Applique un effet de distorsion par compression. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Stretch (GLStretchVideoEffect)¶
Applique un effet de distorsion par étirement. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet Transformation (GLTransformationVideoEffect)¶
Applique des transformations 3D à la vidéo : rotation, mise à l'échelle et translation.
Propriétés :
| Propriété | Type | Valeur par défaut | Description |
|---|---|---|---|
FOV | float | 90.0f | Angle du champ de vision en degrés pour la projection perspective. |
Ortho | bool | false | Si true, utilise une projection orthographique ; sinon, perspective. |
PivotX | float | 0.0f | Coordonnée X du point pivot de rotation (0 = centre). |
PivotY | float | 0.0f | Coordonnée Y du point pivot de rotation (0 = centre). |
PivotZ | float | 0.0f | Coordonnée Z du point pivot de rotation (0 = centre). |
RotationX | float | 0.0f | Rotation autour de l'axe X en degrés. |
RotationY | float | 0.0f | Rotation autour de l'axe Y en degrés. |
RotationZ | float | 0.0f | Rotation autour de l'axe Z en degrés. |
ScaleX | float | 1.0f | Multiplicateur d'échelle sur l'axe X. |
ScaleY | float | 1.0f | Multiplicateur d'échelle sur l'axe Y. |
TranslationX | float | 0.0f | Translation sur l'axe X (coordonnées universelles [0-1]). |
TranslationY | float | 0.0f | Translation sur l'axe Y (coordonnées universelles [0-1]). |
TranslationZ | float | 0.0f | Translation sur l'axe Z (coordonnées universelles [0-1], profondeur). |
Effet Twirl (GLTwirlVideoEffect)¶
Applique un effet de distorsion par tourbillon. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Effet X-Ray (GLXRayVideoEffect)¶
Applique un effet visuel de type radiographie. Cet effet ne possède pas de propriétés configurables au-delà de celles héritées de GLBaseVideoEffect.
Identification des effets OpenGL : énumération GLVideoEffectID¶
Cette énumération liste tous les types d'effets vidéo OpenGL disponibles, utilisée par GLBaseVideoEffect.ID.
| Valeur | Description |
|---|---|
ColorBalance | Effet de balance des couleurs. |
Grayscale | Effet niveaux de gris. |
Resize | Effet de redimensionnement. |
Deinterlace | Effet de désentrelacement. |
Flip | Effet de retournement. |
Blur | Effet de flou avec convolution séparable 9x9. |
FishEye | Effet fisheye. |
GlowLighting | Effet de halo lumineux. |
Heat | Effet de signature thermique. |
LumaX | Effet de cross-processing de luminance. |
Mirror | Effet miroir. |
Sepia | Effet sépia. |
Square | Effet « square ». |
XRay | Effet radiographie. |
Stretch | Effet d'étirement. |
LightTunnel | Effet tunnel lumineux. |
Twirl | Effet tourbillon. |
Squeeze | Effet de compression. |
SinCity | Effet « Sin City » gris-rouge. |
Bulge | Effet bombement. |
Sobel | Effet Sobel. |
Laplacian | Effet laplacien. |
Alpha | Effet de canaux alpha. |
Transformation | Effet de transformation. |
Configuration du rendu et de la vue OpenGL¶
Ces types aident à configurer la manière dont la vidéo est rendue ou visualisée dans un contexte OpenGL, en particulier pour les scénarios spécialisés comme la VR ou les configurations d'affichage personnalisées.
Paramètres de vue équirectangulaire (GLEquirectangularViewSettings)¶
Gère les paramètres pour le rendu vidéo équirectangulaire (360 degrés), couramment utilisé dans les applications VR. Implémente IVRVideoControl.
Propriétés :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
VideoWidth | int | (lecture seule) | Largeur de la vidéo source. |
VideoHeight | int | (lecture seule) | Hauteur de la vidéo source. |
FieldOfView | float | 80.0f | Champ de vision en degrés. |
Yaw | float | 0.0f | Yaw (rotation autour de l'axe Y) en degrés. |
Pitch | float | 0.0f | Pitch (rotation autour de l'axe X) en degrés. |
Roll | float | 0.0f | Roll (rotation autour de l'axe Z) en degrés. |
Mode | VRMode | Equirectangular | Mode VR (prend en charge Equirectangular). |
Méthodes :
IsModeSupported(VRMode mode): vérifie si leVRModespécifié est pris en charge.
Événements :
SettingsChanged: se produit lorsqu'un paramètre de vue est modifié.
Paramètres du moteur de rendu vidéo (GLVideoRendererSettings)¶
Configure les propriétés générales d'un moteur de rendu vidéo OpenGL.
Propriétés :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
ForceAspectRatio | bool | true | Indique si la mise à l'échelle respecte le rapport d'aspect d'origine. |
IgnoreAlpha | bool | true | Indique si le canal alpha est ignoré (traité comme du noir). |
PixelAspectRatio | System.Tuple<int, int> | (0, 1) | Rapport d'aspect des pixels du périphérique d'affichage (numérateur, dénominateur). |
Rotation | GLVideoRendererRotateMethod | None | Rotation appliquée à la vidéo. |
Énumération associée : GLVideoRendererRotateMethod
Définit les méthodes de rotation pour le moteur de rendu vidéo OpenGL.
| Valeur | Description |
|---|---|
None | Aucune rotation. |
_90C | Rotation horaire de 90 degrés. |
_180 | Rotation de 180 degrés. |
_90CC | Rotation antihoraire de 90 degrés. |
FlipHorizontal | Retournement horizontal. |
FlipVertical | Retournement vertical. |
Shaders OpenGL personnalisés¶
Permet l'application de shaders GLSL personnalisés au flux vidéo.
Définition de shader (GLShader)¶
Représente une paire de shaders vertex et fragment.
Propriétés :
| Propriété | Type | Description |
|---|---|---|
VertexShader | string | Code source GLSL du shader de vertex. |
FragmentShader | string | Code source GLSL du shader de fragment. |
Constructeurs : - GLShader() - GLShader(string vertexShader, string fragmentShader)
Paramètres de shader (GLShaderSettings)¶
Configure des shaders GLSL personnalisés à utiliser dans le pipeline.
Propriétés :
| Propriété | Type | Description |
|---|---|---|
Vertex | string | Code source GLSL du shader de vertex. |
Fragment | string | Code source GLSL du shader de fragment. |
Uniforms | System.Collections.Generic.Dictionary<string, object> | Dictionnaire des variables uniformes (paramètres) à transmettre aux shaders. |
Constructeurs : - GLShaderSettings() - GLShaderSettings(string vertex, string fragment) - GLShaderSettings(GLShader shader)
Superpositions d'images en OpenGL¶
Fournit des paramètres pour superposer des images statiques sur un flux vidéo dans un contexte OpenGL.
Paramètres de superposition (GLOverlaySettings)¶
Définit les propriétés d'une superposition d'image.
Propriétés :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Filename | string | (s.o.) | Chemin du fichier image (lecture seule après init). |
Data | byte[] | (s.o.) | Données image sous forme de tableau d'octets (lecture seule après init). |
X | int | Coordonnée X du coin supérieur gauche de la superposition. | |
Y | int | Coordonnée Y du coin supérieur gauche de la superposition. | |
Width | int | Largeur de la superposition. | |
Height | int | Hauteur de la superposition. | |
Alpha | double | 1.0 | Opacité de la superposition (0.0 transparent à 1.0 opaque). |
Constructeur : - GLOverlaySettings(string filename)
Mixage vidéo OpenGL¶
Ces types servent à configurer un mélangeur vidéo OpenGL, permettant de combiner et composer plusieurs flux vidéo.
Paramètres du mélangeur (GLVideoMixerSettings)¶
Étend VideoMixerBaseSettings pour le mixage vidéo spécifique à OpenGL. Gère une liste d'objets GLVideoMixerStream et hérite de propriétés telles que Width, Height et FrameRate.
Méthodes : - AddStream(GLVideoMixerStream stream) : ajoute un flux au mélangeur. - RemoveStream(GLVideoMixerStream stream) : retire un flux du mélangeur. - SetStream(int index, GLVideoMixerStream stream) : remplace un flux à un index spécifique.
Constructeurs : - GLVideoMixerSettings(int width, int height, VideoFrameRate frameRate) - GLVideoMixerSettings(int width, int height, VideoFrameRate frameRate, List<VideoMixerStream> streams)
Flux du mélangeur (GLVideoMixerStream)¶
Étend VideoMixerStream et définit les propriétés d'un flux individuel au sein du mélangeur vidéo OpenGL. Hérite de Rectangle, ZOrder et Alpha de VideoMixerStream.
Propriétés :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Crop | Rect | (s.o.) | Rectangle de rognage du flux d'entrée. |
BlendConstantColorAlpha | double | 0 | Composante alpha pour la couleur de mélange constante. |
BlendConstantColorBlue | double | 0 | Composante bleue pour la couleur de mélange constante. |
BlendConstantColorGreen | double | 0 | Composante verte pour la couleur de mélange constante. |
BlendConstantColorRed | double | 0 | Composante rouge pour la couleur de mélange constante. |
BlendEquationAlpha | GLVideoMixerBlendEquation | Add | Équation de mélange pour le canal alpha. |
BlendEquationRGB | GLVideoMixerBlendEquation | Add | Équation de mélange pour les canaux RVB. |
BlendFunctionDestinationAlpha | GLVideoMixerBlendFunction | OneMinusSourceAlpha | Fonction de mélange pour l'alpha de destination. |
BlendFunctionDesctinationRGB | GLVideoMixerBlendFunction | OneMinusSourceAlpha | Fonction de mélange pour le RVB de destination. |
BlendFunctionSourceAlpha | GLVideoMixerBlendFunction | One | Fonction de mélange pour l'alpha source. |
BlendFunctionSourceRGB | GLVideoMixerBlendFunction | SourceAlpha | Fonction de mélange pour le RVB source. |
Constructeur : - GLVideoMixerStream(Rect rectangle, uint zorder, double alpha = 1.0)
Équation de mélange (énumération GLVideoMixerBlendEquation)¶
Spécifie la manière dont les couleurs source et destination sont combinées lors du mélange.
| Valeur | Description |
|---|---|
Add | Source + Destination |
Subtract | Source - Destination |
ReverseSubtract | Destination - Source |
Fonction de mélange (énumération GLVideoMixerBlendFunction)¶
Définit les facteurs pour les couleurs source et destination dans les opérations de mélange. (Rs, Gs, Bs, As sont les composantes de couleur source ; Rd, Gd, Bd, Ad sont celles de destination ; Rc, Gc, Bc, Ac sont les composantes de couleur constante).
| Valeur | Description |
|---|---|
Zero | Le facteur vaut (0, 0, 0, 0). |
One | Le facteur vaut (1, 1, 1, 1). |
SourceColor | Le facteur vaut (Rs, Gs, Bs, As). |
OneMinusSourceColor | Le facteur vaut (1-Rs, 1-Gs, 1-Bs, 1-As). |
DestinationColor | Le facteur vaut (Rd, Gd, Bd, Ad). |
OneMinusDestinationColor | Le facteur vaut (1-Rd, 1-Gd, 1-Bd, 1-Ad). |
SourceAlpha | Le facteur vaut (As, As, As, As). |
OneMinusSourceAlpha | Le facteur vaut (1-As, 1-As, 1-As, 1-As). |
DestinationAlpha | Le facteur vaut (Ad, Ad, Ad, Ad). |
OneMinusDestinationAlpha | Le facteur vaut (1-Ad, 1-Ad, 1-Ad, 1-Ad). |
ConstantColor | Le facteur vaut (Rc, Gc, Bc, Ac). |
OneMinusContantColor | Le facteur vaut (1-Rc, 1-Gc, 1-Bc, 1-Ac). |
ConstantAlpha | Le facteur vaut (Ac, Ac, Ac, Ac). |
OneMinusContantAlpha | Le facteur vaut (1-Ac, 1-Ac, 1-Ac, 1-Ac). |
SourceAlphaSaturate | Le facteur vaut (min(As, 1-Ad), min(As, 1-Ad), min(As, 1-Ad), 1). |
Sources de test virtuelles pour OpenGL¶
Ces classes de paramètres servent à configurer des sources virtuelles générant des motifs de test directement dans un contexte OpenGL.
Paramètres de source vidéo virtuelle (GLVirtualVideoSourceSettings)¶
Configure un bloc source (GLVirtualVideoSourceBlock) produisant des données vidéo de test. Implémente IMediaPlayerBaseSourceSettings et IVideoCaptureBaseVideoSourceSettings.
Propriétés :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Width | int | 1280 | Largeur de la vidéo de sortie. |
Height | int | 720 | Hauteur de la vidéo de sortie. |
FrameRate | VideoFrameRate | 30/1 (30 i/s) | Fréquence d'images de la vidéo de sortie. |
IsLive | bool | true | Indique si la source est en direct. |
Mode | GLVirtualVideoSourceMode | (s.o. - doit être défini) | Type de motif de test à générer. |
Énumération associée : GLVirtualVideoSourceMode
Définit le motif de test généré par GLVirtualVideoSourceBlock.
| Valeur | Description |
|---|---|
SMPTE | Mires de couleurs SMPTE 100 %. |
Snow | Aléatoire (neige télévisuelle). |
Black | Noir à 100 %. |
White | Blanc à 100 %. |
Red | Rouge uni. |
Green | Vert uni. |
Blue | Bleu uni. |
Checkers1 | Damier (1 px). |
Checkers2 | Damier (2 px). |
Checkers4 | Damier (4 px). |
Checkers8 | Damier (8 px). |
Circular | Motif circulaire. |
Blink | Motif clignotant. |
Mandelbrot | Fractale de Mandelbrot. |
Méthodes : - Task<MediaFileInfo> ReadInfoAsync() : lit asynchrone les informations multimédias (renvoie des informations synthétiques d'après les paramètres). - MediaBlock CreateBlock() : crée une instance GLVirtualVideoSourceBlock configurée avec ces paramètres.
Blocs de traitement OpenGL¶
Outre les blocs par effet listés ci-dessus, le SDK fournit plusieurs blocs de traitement OpenGL autonomes pour la composition de superpositions, le redimensionnement GPU, la conversion de format, le mixage multi-flux et le rendu accéléré matériellement. Comme les blocs d'effet, ils opèrent sur la mémoire GPU et sont généralement chaînés entre GLUploadBlock (mémoire CPU vers GL) et GLDownloadBlock (GL vers mémoire CPU), ou alimentés directement par d'autres blocs OpenGL. Chaque bloc expose une méthode statique IsAvailable() que vous pouvez appeler pour vérifier la prise en charge d'OpenGL sur le système courant avant de construire le pipeline.
GL Overlay¶
Le GLOverlayBlock compose une image statique (logo, filigrane, graphique) sur le flux vidéo au niveau du GPU, avec positionnement, mise à l'échelle et fondu alpha.
Informations sur le bloc¶
Nom : GLOverlayBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Vidéo (mémoire GL) | 1 |
| Sortie | Vidéo (mémoire GL) | 1 |
La superposition est configurée avec GLOverlaySettings (voir Paramètres de superposition ci-dessus). Appelez UpdateSettings() après avoir modifié les propriétés de Settings pour appliquer les changements à un pipeline en cours d'exécution.
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->GLUploadBlock;
GLUploadBlock-->GLOverlayBlock;
GLOverlayBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
var glUpload = new GLUploadBlock();
// configurer la superposition d'image
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
GL Resize¶
Le GLResizeBlock effectue une mise à l'échelle vidéo accélérée par GPU vers une résolution cible à l'aide de GLResizeVideoEffect.
Informations sur le bloc¶
Nom : GLResizeBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Vidéo (mémoire GL) | 1 |
| Sortie | Vidéo (mémoire GL) | 1 |
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->GLUploadBlock;
GLUploadBlock-->GLResizeBlock;
GLResizeBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
var glUpload = new GLUploadBlock();
// redimensionner en 1280x720 sur le 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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
GL Square¶
Le GLSquareBlock applique un effet de distorsion géométrique « square » sur le GPU. Il n'a aucune configuration supplémentaire.
Informations sur le bloc¶
Nom : GLSquareBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Vidéo (mémoire GL) | 1 |
| Sortie | Vidéo (mémoire GL) | 1 |
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->GLUploadBlock;
GLUploadBlock-->GLSquareBlock;
GLSquareBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
GL Video Converter¶
Le GLVideoConverterBlock effectue une conversion de format de pixel et d'espace colorimétrique accélérée par GPU. Il n'a aucune configuration supplémentaire.
Informations sur le bloc¶
Nom : GLVideoConverterBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Vidéo (mémoire GL) | 1 |
| Sortie | Vidéo (mémoire GL) | 1 |
Exemple de pipeline¶
graph LR;
GLUploadBlock-->GLVideoConverterBlock;
GLVideoConverterBlock-->GLSepiaBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
GL Video Mixer¶
Le GLVideoMixerBlock compose plusieurs flux vidéo d'entrée en une seule sortie sur le GPU, avec positionnement, mise à l'échelle, ordre Z, fondu alpha et incrustation par chrominance propres à chaque flux. Il est configuré avec GLVideoMixerSettings (voir Paramètres du mélangeur ci-dessus) et expose un pin d'entrée par flux configuré. Le bloc implémente IVideoMixerControl, de sorte que les flux d'entrée peuvent être interrogés, mis à jour, animés (Input_Move, StartFadeIn, StartFadeOut) et incrustés par chrominance à l'exécution.
Informations sur le bloc¶
Nom : GLVideoMixerBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Vidéo (mémoire GL) | 1 par flux |
| Sortie | Vidéo (mémoire GL) | 1 |
Exemple de pipeline¶
graph LR;
Source1Block-->GLUpload1Block;
Source2Block-->GLUpload2Block;
GLUpload1Block-->GLVideoMixerBlock;
GLUpload2Block-->GLVideoMixerBlock;
GLVideoMixerBlock-->GLDownloadBlock;
GLDownloadBlock-->VideoRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
// configurer la sortie du mélangeur et deux flux
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)); // gauche, haut, droite, bas
var glMixer = new GLVideoMixerBlock(mixerSettings);
// première source
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]);
// deuxième source (image dans l'image)
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
GL Video Renderer¶
Le GLVideoRendererBlock affiche le flux vidéo sur une surface IVideoView à l'aide du rendu OpenGL accéléré matériellement. C'est un bloc terminal (entrée seule) qui accepte en entrée la mémoire CPU comme la mémoire GL. Le moteur de rendu est configuré avec GLVideoRendererSettings (voir Paramètres du moteur de rendu vidéo ci-dessus).
Informations sur le bloc¶
Nom : GLVideoRendererBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Vidéo | 1 |
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->GLVideoRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var source = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync("test.mp4"));
// VideoView1 est votre contrôle IVideoView sur le formulaire/la page
var glRenderer = new GLVideoRendererBlock(VideoView1);
pipeline.Connect(source.VideoOutput, glRenderer.Input);
await pipeline.StartAsync();
Sur Android, utilisez la surcharge de constructeur qui prend aussi le pipeline : new GLVideoRendererBlock(pipeline, VideoView1).
Plateformes¶
Windows, macOS, Linux, iOS, Android.