VisioForge

Registrazione dello schermo multipiattaforma in C# e .NET

Crea un registratore dello schermo in C# con un'unica API per Windows, macOS, Linux, Android e iOS: lo schermo intero, una finestra o un'area, con audio, cursore ed evidenziazione dei clic, in MP4 o in uno streaming dal vivo. Video Capture SDK .NET e Media Blocks SDK .NET usano l'API di cattura nativa di ogni piattaforma.

Un ciclo di screenshot non è un registratore dello schermo

Graphics.CopyFromScreen ti dà una sola bitmap su Windows. Un registratore ha bisogno anche di un frame rate stabile, del cursore, dell'audio, di un encoder e di un file in cui l'audio resti sincronizzato con il video, e su ogni altro sistema operativo l'API di cattura cambia di nuovo: AVFoundation o ScreenCaptureKit su macOS, X11 su Linux, MediaProjection su Android, ReplayKit su iOS. Negli SDK VisioForge lo schermo è una sorgente video come una webcam. ScreenSourceBlock usa l'API nativa della piattaforma su cui gira, e l'encoder, il file e lo streaming sono lo stesso codice ovunque.

Costruire da sé un registratore dello schermo multipiattaforma o usare l'SDK

Soluzione fai-da-te tipicaVisioForge Video Capture SDK .NET e Media Blocks SDK .NET
Catturare lo schermoUn'API nativa diversa su ogni sistema operativo, ognuna dietro il tuo codice di interoperabilità: Desktop Duplication o Windows Graphics Capture su Windows, ScreenCaptureKit o AVFoundation su macOS, X11 o PipeWire su Linux, MediaProjection su Android, ReplayKit su iOSScreenSourceBlock con una classe di impostazioni per piattaforma; ScreenSourceBlock() senza argomenti usa la sorgente predefinita della piattaforma
Una finestra o un'areaIdentificatori di finestra e codice di ritaglio diversi per ogni sistema operativo: HWND su Windows, un ID di finestra X11 su LinuxWindowHandle su Windows o XID su Linux per una finestra, Rectangle per un'area, MonitorIndex su Windows o Monitor su macOS per il monitor
Cursore e clicComporre da sé cursore e segni dei clic su ogni fotogrammaCaptureCursor su Windows, macOS e Linux; MouseHighlight disegna un cerchio che si espande a ogni clic, preso da un hook globale del mouse su Windows e passato dal tuo codice sulle altre piattaforme
AudioUn'API audio separata per sistema operativo per il microfono, più il loopback WASAPI per l'audio di sistema su Windows, sincronizzato con il video dal tuo codiceSystemAudioSourceBlock per un microfono su tutte le piattaforme, LoopbackAudioCaptureDeviceSourceSettings per l'audio di sistema su Windows, sulla stessa timeline del video
Codifica e fileMedia Foundation, VideoToolbox e MediaCodec incapsulati uno per uno, oppure una build di FFmpeg distribuita con ogni appH264EncoderBlock sceglie MediaCodec, VideoToolbox, oppure NVENC, AMF e Quick Sync con OpenH264 come ripiego; output MP4, WebM, MKV, MOV, AVI o MPEG-TS
Codice da mantenereCinque implementazioni per piattaforma da scrivere, testare e mantenere allineateUna sola pipeline C#; cambiano solo le impostazioni della sorgente per piattaforma

La cattura dello schermo su ogni piattaforma

ScreenSourceBlock() senza argomenti sceglie la sorgente predefinita della piattaforma. Passa un oggetto di impostazioni per scegliere l'API, la finestra o l'area.

PiattaformaAPI di catturaClasse di impostazioniAudioNote
WindowsWindows Graphics Capture, DXGI Desktop Duplication, DirectX 9, GDIScreenCaptureD3D11SourceSettings, ScreenCaptureDX9SourceSettings, ScreenCaptureGDISourceSettingsAudio di sistema (loopback WASAPI) o un microfonoMonitor, area o una finestra; evidenziazione dei clic
macOSAVFoundationScreenCaptureMacOSSourceSettingsMicrofonoRichiede il permesso di registrazione dello schermo: ScreenSourceBlock.AskPermissions()
Mac Catalyst (.NET MAUI)ScreenCaptureKitScreenCaptureMacOSSourceSettingsMicrofonoLa stessa classe di impostazioni di macOS
LinuxX11ScreenCaptureXDisplaySourceSettingsMicrofonoRichiede una sessione X11; XID o XName seleziona una finestra
AndroidMediaProjectionAndroidScreenCaptureSourceSettingsMicrofonoL'utente accetta la richiesta di sistema; la registrazione gira in un servizio in primo piano
iOSReplayKitIOSScreenSourceSettings, IOSBroadcastSourceSettingsMicrofonoLa tua app, oppure l'intero dispositivo tramite una Broadcast Upload Extension

Cosa fa l'SDK per un registratore dello schermo

La registrazione dello schermo e del desktop è una sorgente video in VideoCaptureCoreX (Video Capture SDK .NET) e un ScreenSourceBlock in Media Blocks SDK .NET. Tutto ciò che segue la sorgente funziona come per una telecamera: anteprima, registrazione, streaming ed effetti video.

  • Tre modalità di cattura: lo schermo intero di qualsiasi monitor, una finestra di applicazione tramite il suo handle, o un rettangolo del desktop
  • Windows Graphics Capture è selezionato per impostazione predefinita su Windows 10 versione 1803 e successive; sono disponibili anche le sorgenti DXGI Desktop Duplication, DirectX 9 e GDI
  • Audio del PC tramite loopback WASAPI o da un microfono; in Media Blocks SDK .NET, AudioMixerBlock li mixa in un'unica traccia
  • Cattura del cursore ed evidenziazione dei clic con colore, raggio e durata configurabili, per tutorial e demo. Su Windows i clic arrivano da un hook globale del mouse: quando MouseHighlight è impostato, VideoCaptureCoreX lo installa all'avvio; in Media Blocks si chiama MouseHighlightSubscribe(). Sulle altre piattaforme il tuo codice passa ogni clic a MouseHighlightAddClickEvent (MouseHighlight_AddClickEvent in VideoCaptureCoreX)
  • H.264 hardware: MediaCodec su Android, VideoToolbox sulle piattaforme Apple; su Windows l'SDK prova NVENC, AMF e Quick Sync e ripiega su OpenH264
  • Più output contemporaneamente: registra un MP4 mentre trasmetti lo stesso schermo su YouTube via RTMP, SRT o NDI; metti in pausa e riprendi una registrazione o avvia un nuovo file senza fermare l'anteprima
  • Un'unica API su Windows, macOS, Linux, Android e iOS, da WinForms, WPF, .NET MAUI e app native macOS, Android e iOS; un esempio per ciascuna

Casi d'uso

Registratori di tutorial ed e-learning

Registra una finestra o l'intero schermo con narrazione ed evidenziazione dei clic, e salva la lezione in MP4.

Supporto e registrazione delle sessioni

Registra cosa ha fatto un utente prima che comparisse un problema e allega il video al ticket di supporto.

QA e automazione dei test

Registra ogni esecuzione di test automatici dell'interfaccia e conserva il video di quelli falliti come prova.

Presentazioni e dirette

Trasmetti lo schermo su YouTube o a un ricevitore NDI e conserva una copia MP4 locale della stessa cattura.

Esempi di codice

Condensati dalle demo Screen Capture di Video Capture SDK .NET e Media Blocks SDK .NET. I primi due girano in un form WinForms, il terzo in una pagina .NET MAUI; ognuno ha un VideoView VisioForge chiamato videoView1 o videoView.

Registrare lo schermo e l'audio di sistema in MP4

C#

Registrare una finestra con evidenziazione dei clic

C#

Un registratore per Windows, macOS, Android e iOS (.NET MAUI)

C#

La pipeline

L'esempio della finestra e quello .NET MAUI usano gli stessi quattro blocchi. ScreenSourceBlock cattura lo schermo con l'API della piattaforma, TeeBlock divide i fotogrammi tra anteprima ed encoder, e MP4SinkBlock scrive il file. Da una piattaforma all'altra cambiano solo le impostazioni della sorgente.

ScreenSourceBlock
TeeBlock
H264EncoderBlock
MP4SinkBlock

Domande frequenti

Come registro l'audio riprodotto dal PC?▼
Usa LoopbackAudioCaptureDeviceSourceSettings con un dispositivo di uscita da DeviceEnumerator.Shared.AudioOutputsAsync(AudioOutputDeviceAPI.WASAPI2) e imposta Audio_Record a true, come nel primo esempio. Per la narrazione usa invece un microfono da AudioSourcesAsync. Per registrarli entrambi, mixali con AudioMixerBlock in Media Blocks SDK .NET.
Posso registrare una finestra coperta da altre finestre?▼
Sì, con Windows Graphics Capture: imposta API a D3D11ScreenCaptureAPI.WGC e WindowHandle all'handle della finestra. WGC cattura il contenuto proprio della finestra, quindi le finestre sovrapposte non compaiono nella registrazione. Una finestra ridotta a icona non disegna nulla e non viene catturata.
Funziona su macOS e Linux?▼
Sì. Su macOS la sorgente dello schermo usa AVFoundation e richiede il permesso di registrazione dello schermo: ScreenSourceBlock.AskPermissions() mostra la richiesta di sistema, e macOS applica un nuovo permesso dopo il riavvio dell'app. Su Linux, ScreenCaptureXDisplaySourceSettings cattura un display X11, quindi l'app richiede una sessione X11. Encoder, file e streaming sono gli stessi di Windows; il loopback dell'audio di sistema esiste solo su Windows, quindi su queste piattaforme registra un microfono.
Posso registrare lo schermo su Android e iOS?▼
Sì, con Media Blocks SDK .NET. Su Android, AndroidScreenCaptureSourceSettings riceve la MediaProjection che la tua app ottiene dopo che l'utente ha accettato la richiesta di sistema. Su iOS, IOSScreenSourceSettings registra la tua app tramite ReplayKit, e IOSBroadcastSourceSettings registra l'intero dispositivo tramite una Broadcast Upload Extension.
Perché la registrazione è nera?▼
Il sistema operativo blocca la cattura dei contenuti protetti, come i video con DRM. Per altri fotogrammi neri, prova l'altra API di cattura (WGC o DXGI Desktop Duplication) o la sorgente DirectX 9. Su un portatile con due GPU, Desktop Duplication deve girare sull'adattatore che pilota lo schermo; DXGIAdapter lo seleziona.
Quale SDK mi serve?▼
Video Capture SDK .NET se vuoi un motore di cattura pronto: imposta Video_Source, Audio_Source e un output, poi chiama StartAsync. Media Blocks SDK .NET se costruisci la pipeline a blocchi, per esempio per aggiungere la tua elaborazione tra lo schermo e l'encoder. Entrambi usano le stesse sorgenti dello schermo.