Aller au contenu

Blocs plateforme Apple - VisioForge Media Blocks SDK .Net

Media Blocks SDK .Net

Cette section couvre les MediaBlocks spécifiquement optimisés pour les plateformes Apple (iOS, macOS, tvOS).

Blocs disponibles

Sources audio

Puits audio

Sources vidéo

Encodeurs vidéo

Traitement vidéo

  • MetalVideoCompositorBlock : compositeur vidéo multi-entrées accéléré par GPU utilisant Apple Metal

Compositeur vidéo Metal

Bloc Metal Video Compositor

Le MetalVideoCompositorBlock compose plusieurs flux vidéo en temps réel à l'aide du framework GPU Apple Metal. Chaque flux d'entrée dispose d'une position, d'une taille, d'un z-order, d'un alpha et d'un opérateur de mélange configurables. Le bloc produit une sortie vidéo BGRA unique.

Informations sur le bloc

Nom : MetalVideoCompositorBlock.

Direction du pin Type de média Nombre de pins
Entrée vidéo Vidéo non compressée N (un par flux)
Sortie vidéo Vidéo non compressée 1

Paramètres

Le bloc prend une instance MetalVideoCompositorSettings :

Propriété Type Par défaut Description
Width int 1920 Largeur de sortie en pixels
Height int 1080 Hauteur de sortie en pixels
FrameRate VideoFrameRate FPS_30 Fréquence d'images de sortie
Background VideoMixerBackground Transparent Mode d'arrière-plan
Streams List<VideoMixerStream> Vide Configurations des flux d'entrée

Chaque flux d'entrée est un MetalVideoMixerStream :

Propriété Type Par défaut Description
Rectangle Rect requis Position et taille dans l'image de sortie
ZOrder uint requis Ordre d'empilement (plus élevé = au premier plan)
Alpha double 1.0 Opacité (0.0 transparent – 1.0 opaque)
BlendOperator MetalVideoMixerBlendOperator Over Mode de mélange : Source, Over ou Add
KeepAspectRatio bool false Préserver le rapport d'aspect source lors de la mise à l'échelle

Pipeline d'exemple

graph LR;
    VideoSource1-->MetalVideoCompositorBlock;
    VideoSource2-->MetalVideoCompositorBlock;
    MetalVideoCompositorBlock-->VideoRendererBlock;

Exemple de code

var pipeline = new MediaBlocksPipeline();

// Configurer le compositeur : 1920x1080 à 30 i/s
var settings = new MetalVideoCompositorSettings(1920, 1080, VideoFrameRate.FPS_30);

// Premier flux : moitié gauche de l'écran
settings.AddStream(new MetalVideoMixerStream(
    rectangle: new Rect(0, 0, 960, 1080),
    zorder: 0));

// Deuxième flux : moitié droite de l'écran
// Le constructeur de Rect est (left, top, right, bottom). Pour la moitié droite
// d'un canevas 1920x1080, utilisez right=1920 et bottom=1080 — la forme
// précédente (960, 0, 960, 1080) a left==right et produit une boîte de largeur nulle.
settings.AddStream(new MetalVideoMixerStream(
    rectangle: new Rect(960, 0, 1920, 1080),
    zorder: 1));

var compositor = new MetalVideoCompositorBlock(settings);

// Effectuer le rendu de la sortie composée
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(compositor.Output, videoRenderer.Input);

await pipeline.StartAsync();

// Temps réel : faire disparaître progressivement le flux 0 sur 2 secondes
compositor.StartFadeOut(settings.Streams[0].ID, TimeSpan.FromSeconds(2));

Disponibilité

bool available = MetalVideoCompositorBlock.IsAvailable();

Renvoie true si le plugin GStreamer vfmetalcompositor est disponible sur le système courant.

Plateformes

macOS, iOS.

Exigences de plateforme

  • iOS : iOS 12.0 ou ultérieur
  • macOS : macOS 10.13 ou ultérieur
  • tvOS : tvOS 12.0 ou ultérieur

Fonctionnalités

  • Intégration native avec les frameworks Apple (AVFoundation, Core Audio, Core Video)
  • Traitement accéléré matériellement sur Apple Silicon et Mac Intel
  • Optimisé pour une faible consommation d'énergie sur les appareils mobiles
  • Prise en charge de l'encodage ProRes haute qualité
  • Intégration avec les autorisations caméra et microphone iOS

Exemple de code

Capture caméra iOS

var pipeline = new MediaBlocksPipeline();

// Source vidéo iOS
var videoSource = new IOSVideoSourceBlock(videoSettings);

// Traiter et afficher
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(videoSource.Output, videoRenderer.Input);

await pipeline.StartAsync();

Capture et lecture audio macOS

var pipeline = new MediaBlocksPipeline();

// Source audio macOS
var audioSource = new OSXAudioSourceBlock(audioSettings);

// Puits audio macOS
var audioSink = new OSXAudioSinkBlock();
pipeline.Connect(audioSource.Output, audioSink.Input);

await pipeline.StartAsync();

Encodage ProRes

var pipeline = new MediaBlocksPipeline();

var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri("input.mp4")));

// Encodeur Apple ProRes
// AppleProResEncoderSettings expose Quality (double 0.0-1.0), Bitrate, MaxKeyframeInterval,
// MaxKeyFrameIntervalDuration, AllowFrameReordering, PreserveAlpha, Realtime — pas une énumération de profils nommée.
var proresSettings = new AppleProResEncoderSettings
{
    Quality = 0.8
};
var proresEncoder = new AppleProResEncoderBlock(proresSettings);
pipeline.Connect(fileSource.VideoOutput, proresEncoder.Input);

// Sortie vers un fichier MOV
var movSink = new MOVSinkBlock(new MOVSinkSettings("output.mov"));
pipeline.Connect(proresEncoder.Output, movSink.CreateNewInput(MediaBlockPadMediaType.Video));

await pipeline.StartAsync();

Plateformes

iOS, macOS, tvOS.

Documentation connexe