VisioForge

Enregistrement d'écran multiplateforme en C# et .NET

Créez un enregistreur d'écran en C# avec une seule API pour Windows, macOS, Linux, Android et iOS : l'écran entier, une fenêtre ou une zone, avec le son, le curseur et la mise en évidence des clics, vers un MP4 ou un flux en direct. Video Capture SDK .NET et Media Blocks SDK .NET utilisent l'API de capture native de chaque plateforme.

À partir de €250/an · licence Lifetime à partir de €750

Une boucle de captures d'écran n'est pas un enregistreur d'écran

Graphics.CopyFromScreen vous donne un seul bitmap sous Windows. Un enregistreur a aussi besoin d'une cadence d'images stable, du curseur, du son, d'un encodeur et d'un fichier dont l'audio reste synchronisé avec la vidéo, et sur chaque autre système d'exploitation l'API de capture est encore différente : AVFoundation ou ScreenCaptureKit sur macOS, X11 sous Linux, MediaProjection sur Android, ReplayKit sur iOS. Dans les SDK VisioForge, l'écran est une source vidéo comme une webcam. ScreenSourceBlock utilise l'API native de la plateforme sur laquelle il s'exécute, et l'encodeur, le fichier et le flux sont le même code partout.

Construire soi-même un enregistreur d'écran multiplateforme ou utiliser le SDK

Solution maison typiqueVisioForge Video Capture SDK .NET et Media Blocks SDK .NET
Capturer l'écranUne API native différente sur chaque OS, chacune derrière votre propre code d'interopérabilité : Desktop Duplication ou Windows Graphics Capture sous Windows, ScreenCaptureKit ou AVFoundation sur macOS, X11 ou PipeWire sous Linux, MediaProjection sur Android, ReplayKit sur iOSScreenSourceBlock avec une classe de paramètres par plateforme ; ScreenSourceBlock() sans argument prend la source par défaut de la plateforme
Une fenêtre ou une zoneDes identifiants de fenêtre et un code de recadrage qui diffèrent selon l'OS : HWND sous Windows, un ID de fenêtre X11 sous LinuxWindowHandle sous Windows ou XID sous Linux pour une fenêtre, Rectangle pour une zone, MonitorIndex sous Windows ou Monitor sur macOS pour l'écran
Curseur et clicsComposer vous-même le curseur et les marques de clic sur chaque imageCaptureCursor sous Windows, macOS et Linux ; MouseHighlight dessine un cercle qui s'agrandit à chaque clic, issu d'un hook souris global sous Windows et transmis par votre code sur les autres plateformes
SonUne API audio distincte par OS pour le microphone, plus le loopback WASAPI pour le son système sous Windows, synchronisé avec la vidéo par votre codeSystemAudioSourceBlock pour un microphone sur toutes les plateformes, LoopbackAudioCaptureDeviceSourceSettings pour le son système sous Windows, sur la même ligne de temps que la vidéo
Encodage et fichierMedia Foundation, VideoToolbox et MediaCodec encapsulés un par un, ou une build FFmpeg livrée avec chaque applicationH264EncoderBlock choisit MediaCodec, VideoToolbox, ou NVENC, AMF et Quick Sync avec OpenH264 en secours ; sortie MP4, WebM, MKV, MOV, AVI ou MPEG-TS
Code à maintenirCinq implémentations par plateforme à écrire, tester et maintenir alignéesUn seul pipeline C# ; seuls les paramètres de la source changent selon la plateforme

La capture d'écran sur chaque plateforme

ScreenSourceBlock() sans argument choisit la source par défaut de la plateforme. Passez un objet de paramètres pour choisir l'API, la fenêtre ou la zone.

PlateformeAPI de captureClasse de paramètresSonRemarques
WindowsWindows Graphics Capture, DXGI Desktop Duplication, DirectX 9, GDIScreenCaptureD3D11SourceSettings, ScreenCaptureDX9SourceSettings, ScreenCaptureGDISourceSettingsSon système (loopback WASAPI) ou un microphoneÉcran, zone ou une fenêtre ; mise en évidence des clics
macOSAVFoundationScreenCaptureMacOSSourceSettingsMicrophoneNécessite l'autorisation d'enregistrement de l'écran : ScreenSourceBlock.AskPermissions()
Mac Catalyst (.NET MAUI)ScreenCaptureKitScreenCaptureMacOSSourceSettingsMicrophoneLa même classe de paramètres que sur macOS
LinuxX11ScreenCaptureXDisplaySourceSettingsMicrophoneNécessite une session X11 ; XID ou XName sélectionne une fenêtre
AndroidMediaProjectionAndroidScreenCaptureSourceSettingsMicrophoneL'utilisateur accepte l'invite système ; l'enregistrement s'exécute dans un service au premier plan
iOSReplayKitIOSScreenSourceSettings, IOSBroadcastSourceSettingsMicrophoneVotre propre application, ou tout l'appareil via une Broadcast Upload Extension

Ce que le SDK apporte à un enregistreur d'écran

L'enregistrement de l'écran et du bureau est une source vidéo dans VideoCaptureCoreX (Video Capture SDK .NET) et un ScreenSourceBlock dans Media Blocks SDK .NET. Tout ce qui suit la source fonctionne comme pour une caméra : aperçu, enregistrement, diffusion et effets vidéo.

  • Trois modes de capture : l'écran entier de n'importe quel moniteur, une fenêtre d'application par son handle, ou un rectangle du bureau
  • Windows Graphics Capture est sélectionné par défaut sous Windows 10 version 1803 et ultérieures ; les sources DXGI Desktop Duplication, DirectX 9 et GDI sont aussi disponibles
  • Le son du PC via le loopback WASAPI ou un microphone ; dans Media Blocks SDK .NET, AudioMixerBlock mélange les deux en une seule piste
  • Capture du curseur et mise en évidence des clics avec couleur, rayon et durée configurables, pour les tutoriels et les démos. Sous Windows, les clics viennent d'un hook souris global : quand MouseHighlight est défini, VideoCaptureCoreX l'installe au démarrage ; dans Media Blocks, vous appelez MouseHighlightSubscribe(). Sur les autres plateformes, votre code transmet chaque clic à MouseHighlightAddClickEvent (MouseHighlight_AddClickEvent dans VideoCaptureCoreX)
  • H.264 matériel : MediaCodec sur Android, VideoToolbox sur les plateformes Apple ; sous Windows, le SDK essaie NVENC, AMF et Quick Sync et se rabat sur OpenH264
  • Plusieurs sorties à la fois : enregistrer un MP4 tout en diffusant le même écran sur YouTube via RTMP, SRT ou NDI ; mettre en pause et reprendre un enregistrement ou démarrer un nouveau fichier sans arrêter l'aperçu
  • Une seule API sous Windows, macOS, Linux, Android et iOS, depuis WinForms, WPF, .NET MAUI et des applications natives macOS, Android et iOS ; un exemple pour chacune

Cas d'usage

Enregistreurs de tutoriels et d'e-learning

Enregistrez une fenêtre ou tout l'écran avec narration et mise en évidence des clics, et enregistrez la leçon en MP4.

Support et enregistrement de sessions

Enregistrez ce qu'un utilisateur a fait avant l'apparition d'un problème et joignez la vidéo au ticket de support.

QA et automatisation des tests

Enregistrez chaque exécution de tests d'interface automatisés et conservez la vidéo des échecs comme preuve.

Présentations et diffusions en direct

Diffusez l'écran sur YouTube ou vers un récepteur NDI et gardez une copie MP4 locale de la même capture.

Exemples de code

Condensés à partir des démos Screen Capture de Video Capture SDK .NET et Media Blocks SDK .NET. Les deux premiers s'exécutent dans un formulaire WinForms, le troisième dans une page .NET MAUI ; chacun a un VideoView VisioForge nommé videoView1 ou videoView.

Enregistrer l'écran et le son système en MP4

C#

Enregistrer une fenêtre avec mise en évidence des clics

C#

Un enregistreur pour Windows, macOS, Android et iOS (.NET MAUI)

C#

Le pipeline

L'exemple de la fenêtre et l'exemple .NET MAUI utilisent les mêmes quatre blocs. ScreenSourceBlock capture l'écran avec l'API de la plateforme, TeeBlock répartit les images entre l'aperçu et l'encodeur, et MP4SinkBlock écrit le fichier. Seuls les paramètres de la source changent d'une plateforme à l'autre.

ScreenSourceBlock
TeeBlock
H264EncoderBlock
MP4SinkBlock

Questions fréquentes

Comment enregistrer le son que joue le PC ?▼
Utilisez LoopbackAudioCaptureDeviceSourceSettings avec un périphérique de sortie obtenu par DeviceEnumerator.Shared.AudioOutputsAsync(AudioOutputDeviceAPI.WASAPI2) et mettez Audio_Record à true, comme dans le premier exemple. Pour la narration, utilisez plutôt un microphone de AudioSourcesAsync. Pour enregistrer les deux, mélangez-les avec AudioMixerBlock dans Media Blocks SDK .NET.
Puis-je enregistrer une fenêtre recouverte par d'autres fenêtres ?▼
Oui, avec Windows Graphics Capture : mettez API à D3D11ScreenCaptureAPI.WGC et WindowHandle au handle de la fenêtre. WGC capture le contenu propre de la fenêtre, donc les fenêtres qui la recouvrent n'apparaissent pas dans l'enregistrement. Une fenêtre réduite ne dessine rien et n'est pas capturée.
Cela fonctionne-t-il sur macOS et Linux ?▼
Oui. Sur macOS, la source d'écran utilise AVFoundation et nécessite l'autorisation d'enregistrement de l'écran : ScreenSourceBlock.AskPermissions() affiche l'invite système, et macOS applique une nouvelle autorisation après le redémarrage de l'application. Sous Linux, ScreenCaptureXDisplaySourceSettings capture un affichage X11, l'application a donc besoin d'une session X11. Les encodeurs, fichiers et flux sont les mêmes que sous Windows ; le loopback du son système n'existe que sous Windows, enregistrez donc un microphone sur ces plateformes.
Puis-je enregistrer l'écran sur Android et iOS ?▼
Oui, avec Media Blocks SDK .NET. Sur Android, AndroidScreenCaptureSourceSettings reçoit la MediaProjection que votre application obtient après que l'utilisateur a accepté l'invite système. Sur iOS, IOSScreenSourceSettings enregistre votre propre application via ReplayKit, et IOSBroadcastSourceSettings enregistre tout l'appareil via une Broadcast Upload Extension.
Pourquoi l'enregistrement est-il noir ?▼
Le système d'exploitation bloque la capture des contenus protégés, comme la vidéo sous DRM. Pour les autres images noires, essayez l'autre API de capture (WGC ou DXGI Desktop Duplication) ou la source DirectX 9. Sur un portable à deux GPU, Desktop Duplication doit s'exécuter sur l'adaptateur qui pilote l'écran ; DXGIAdapter le sélectionne.
De quel SDK ai-je besoin ?▼
Video Capture SDK .NET si vous voulez un moteur de capture prêt à l'emploi : définissez Video_Source, Audio_Source et une sortie, puis appelez StartAsync. Media Blocks SDK .NET si vous construisez le pipeline à partir de blocs, par exemple pour ajouter votre propre traitement entre l'écran et l'encodeur. Les deux utilisent les mêmes sources d'écran.

Commencez à enregistrer l'écran

Téléchargez la version d'essai complète de 30 jours et lancez les démos Screen Capture. Selon le moteur et la sortie, un filigrane ou un avis de version non enregistrée peut apparaître.

SDK avec enregistrement d'écran

À partir de €250/an · licence Lifetime à partir de €750