Aller au contenu

Blocs plateforme Windows - VisioForge Media Blocks SDK .Net

Media Blocks SDK .Net

Cette section couvre les MediaBlocks spécifiquement optimisés pour les plateformes Windows.

Blocs disponibles

Décodeurs matériels Direct3D 11

Windows fournit un décodage vidéo accéléré matériellement via Direct3D 11 :

  • D3D11H264DecoderBlock : décodage matériel H.264/AVC
  • D3D11H265DecoderBlock : décodage matériel H.265/HEVC
  • D3D11VP8DecoderBlock : décodage matériel VP8
  • D3D11VP9DecoderBlock : décodage matériel VP9
  • D3D11AV1DecoderBlock : décodage matériel AV1
  • D3D11MPEG2DecoderBlock : décodage matériel MPEG-2

Voir la documentation des décodeurs vidéo

Traitement Direct3D 11

  • D3D11UploadBlock : téléverser la vidéo depuis la mémoire système vers le GPU
  • D3D11DownloadBlock : récupérer la vidéo du GPU vers la mémoire système
  • D3D11VideoConverterBlock : conversion d'espace colorimétrique accélérée par GPU

Voir la documentation du traitement vidéo

Composition Direct3D 11

  • D3D11VideoCompositorBlock : composition et mélange vidéo accélérés par GPU

Effets vidéo Windows

  • VideoEffectsWinBlock : effets vidéo spécifiques à Windows
  • VR360ProcessorBlock : traitement vidéo VR 360 degrés

Blocs spéciaux

Voir la documentation des blocs spéciaux

Exigences de plateforme

  • Windows : Windows 7 SP1 ou ultérieur
  • Direct3D 11 : GPU prenant en charge D3D11
  • Décodage matériel : GPU prenant en charge le décodage vidéo matériel

Fonctionnalités

  • Accélération matérielle : exploitation du GPU pour l'encodage, le décodage et le traitement
  • Intégration Direct3D 11 : traitement vidéo efficace sur GPU
  • Faible consommation CPU : déchargement du traitement vers du matériel dédié
  • Hautes performances : prise en charge simultanée de plusieurs flux HD/4K
  • Efficacité énergétique : réduction de la consommation grâce à l'accélération matérielle

Exemple de code

Décodage matériel H.264

var pipeline = new MediaBlocksPipeline();

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

// Décodeur matériel D3D11
var d3d11Decoder = new D3D11H264DecoderBlock();
pipeline.Connect(fileSource.VideoOutput, d3d11Decoder.Input);

// Traiter sur le GPU ou récupérer en mémoire système
var d3d11Download = new D3D11DownloadBlock();
pipeline.Connect(d3d11Decoder.Output, d3d11Download.Input);

var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(d3d11Download.Output, videoRenderer.Input);

await pipeline.StartAsync();

Pipeline de traitement vidéo GPU

var pipeline = new MediaBlocksPipeline();

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

// Téléverser vers le GPU
var d3d11Upload = new D3D11UploadBlock();
pipeline.Connect(fileSource.VideoOutput, d3d11Upload.Input);

// Conversion colorimétrique GPU
var d3d11Converter = new D3D11VideoConverterBlock();
pipeline.Connect(d3d11Upload.Output, d3d11Converter.Input);

// Récupérer depuis le GPU
var d3d11Download = new D3D11DownloadBlock();
pipeline.Connect(d3d11Converter.Output, d3d11Download.Input);

var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(d3d11Download.Output, videoRenderer.Input);

await pipeline.StartAsync();

Composition vidéo

var pipeline = new MediaBlocksPipeline();

var source1 = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri("video1.mp4")));
var source2 = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri("video2.mp4")));

// Téléverser les deux vers le GPU
var upload1 = new D3D11UploadBlock();
var upload2 = new D3D11UploadBlock();
pipeline.Connect(source1.VideoOutput, upload1.Input);
pipeline.Connect(source2.VideoOutput, upload2.Input);

// Configurer le compositeur — deux flux sur un canevas 1920x1080 à 30 i/s
var compositorSettings = new D3D11VideoCompositorSettings(1920, 1080, VideoFrameRate.FPS_30);
compositorSettings.Streams.Add(new VideoMixerStream(new Rect(0, 0, 960, 1080), zorder: 0));
compositorSettings.Streams.Add(new VideoMixerStream(new Rect(960, 0, 1920, 1080), zorder: 1));

// Composer sur le GPU — chaque flux ajouté crée un pad d'entrée ; on y accède via Inputs[].
var compositor = new D3D11VideoCompositorBlock(compositorSettings);
pipeline.Connect(upload1.Output, compositor.Inputs[0]);
pipeline.Connect(upload2.Output, compositor.Inputs[1]);

// Récupérer le résultat
var download = new D3D11DownloadBlock();
pipeline.Connect(compositor.Output, download.Input);

var videoRenderer = new VideoRendererBlock(pipeline, VideoView1);
pipeline.Connect(download.Output, videoRenderer.Input);

await pipeline.StartAsync();

Conseils de performance

  • Conservez la vidéo en mémoire GPU entre les opérations pour éviter la surcharge des téléversements/récupérations
  • Utilisez les décodeurs matériels lorsque c'est possible pour de meilleures performances
  • Chaînez les opérations GPU avant de revenir en mémoire système
  • Surveillez l'utilisation de la mémoire GPU lors du traitement de plusieurs flux
  • Vérifiez la prise en charge matérielle avant d'utiliser les blocs D3D11

Vérification de la prise en charge matérielle

// Vérifier si le décodeur D3D11 H.264 est disponible
if (D3D11H264DecoderBlock.IsAvailable())
{
    // Utiliser le décodeur matériel
    var decoder = new D3D11H264DecoderBlock();
}
else
{
    // Solution de repli vers le décodeur logiciel
    var decoder = new UniversalDecoderBlock(MediaBlockPadMediaType.Video);
}

Plateformes

Windows 7 SP1 ou ultérieur (Windows 10/11 recommandé pour la meilleure prise en charge matérielle).

Documentation connexe