C# 与 .NET 跨平台屏幕录制
用一套 API 在 Windows、macOS、Linux、Android 和 iOS 上构建 C# 屏幕录制程序:全屏、单个窗口或一个区域,带声音、光标和点击高亮,输出为 MP4 或直播流。Video Capture SDK .NET 和 Media Blocks SDK .NET 使用各平台的原生采集 API。
每年 €250 起 · Lifetime 许可证 €750 起
截图循环不是屏幕录制程序
Graphics.CopyFromScreen 在 Windows 上只能给你一张位图。录制程序还需要稳定的帧率、光标、声音、编码器,以及音频与视频保持同步的文件;而在其他每个操作系统上,采集 API 又各不相同:macOS 上是 AVFoundation 或 ScreenCaptureKit,Linux 上是 X11,Android 上是 MediaProjection,iOS 上是 ReplayKit。在 VisioForge SDK 中,屏幕就像网络摄像头一样是一个视频源。ScreenSourceBlock 使用其运行平台的原生 API,编码器、文件和流在所有平台上都是同一套代码。
自行构建跨平台屏幕录制程序与使用 SDK 的对比
| 典型的自研方案 | VisioForge Video Capture SDK .NET 与 Media Blocks SDK .NET | |
|---|---|---|
| 采集屏幕 | 每个操作系统使用不同的原生 API,各自需要自己编写互操作代码:Windows 上是 Desktop Duplication 或 Windows Graphics Capture,macOS 上是 ScreenCaptureKit 或 AVFoundation,Linux 上是 X11 或 PipeWire,Android 上是 MediaProjection,iOS 上是 ReplayKit | ScreenSourceBlock,每个平台一个设置类;不带参数的 ScreenSourceBlock() 使用平台默认源 |
| 单个窗口或区域 | 窗口标识和裁剪代码因操作系统而异:Windows 上是 HWND,Linux 上是 X11 窗口 ID | 窗口用 WindowHandle(Windows)或 XID(Linux),区域用 Rectangle,显示器用 MonitorIndex(Windows)或 Monitor(macOS) |
| 光标与点击 | 自己把光标和点击标记合成到每一帧上 | Windows、macOS 和 Linux 上的 CaptureCursor;MouseHighlight 在每次点击处绘制一个扩散的圆圈,点击在 Windows 上来自全局鼠标钩子,在其他平台上由你的代码传入 |
| 声音 | 每个操作系统用单独的音频 API 采集麦克风,Windows 上再用 WASAPI 环回采集系统声音,并由你的代码与视频同步 | 所有平台的麦克风用 SystemAudioSourceBlock,Windows 系统声音用 LoopbackAudioCaptureDeviceSourceSettings,与视频处于同一时间线 |
| 编码与文件 | 逐个封装 Media Foundation、VideoToolbox 和 MediaCodec,或者随每个应用分发一份 FFmpeg 构建 | H264EncoderBlock 选择 MediaCodec、VideoToolbox,或 NVENC、AMF 和 Quick Sync,以 OpenH264 作为后备;输出 MP4、WebM、MKV、MOV、AVI 或 MPEG-TS |
| 需要维护的代码 | 五套平台实现,需要编写、测试并保持一致 | 一条 C# 管道;只有源的设置因平台而异 |
各平台的屏幕采集
不带参数的 ScreenSourceBlock() 会选择平台的默认源。传入设置对象即可选择 API、窗口或区域。
| 平台 | 采集 API | 设置类 | 声音 | 说明 |
|---|---|---|---|---|
| Windows | Windows Graphics Capture、DXGI Desktop Duplication、DirectX 9、GDI | ScreenCaptureD3D11SourceSettings、ScreenCaptureDX9SourceSettings、ScreenCaptureGDISourceSettings | 系统声音(WASAPI 环回)或麦克风 | 显示器、区域或单个窗口;点击高亮 |
| macOS | AVFoundation | ScreenCaptureMacOSSourceSettings | 麦克风 | 需要屏幕录制权限:ScreenSourceBlock.AskPermissions() |
| Mac Catalyst (.NET MAUI) | ScreenCaptureKit | ScreenCaptureMacOSSourceSettings | 麦克风 | 与 macOS 相同的设置类 |
| Linux | X11 | ScreenCaptureXDisplaySourceSettings | 麦克风 | 需要 X11 会话;XID 或 XName 用于选择窗口 |
| Android | MediaProjection | AndroidScreenCaptureSourceSettings | 麦克风 | 用户接受系统提示;录制在前台服务中运行 |
| iOS | ReplayKit | IOSScreenSourceSettings、IOSBroadcastSourceSettings | 麦克风 | 录制你自己的应用,或通过 Broadcast Upload Extension 录制整台设备 |
SDK 为屏幕录制程序提供什么
屏幕和桌面录制在 VideoCaptureCoreX(Video Capture SDK .NET)中是一个视频源,在 Media Blocks SDK .NET 中是一个 ScreenSourceBlock。源之后的一切都与摄像头相同:预览、录制、推流和视频特效。
- 三种采集模式:任意显示器的全屏、按句柄指定的单个应用窗口,或桌面上的一个矩形区域
- 在 Windows 10 1803 及更高版本上默认选择 Windows Graphics Capture;也可使用 DXGI Desktop Duplication、DirectX 9 和 GDI 源
- 通过 WASAPI 环回采集电脑声音,或采集麦克风;在 Media Blocks SDK .NET 中,AudioMixerBlock 可将两者混合为一条音轨
- 光标采集和点击高亮,颜色、半径和持续时间可配置,适用于教程和演示。在 Windows 上点击来自全局鼠标钩子:设置 MouseHighlight 后,VideoCaptureCoreX 会在启动时安装钩子;在 Media Blocks 中需调用 MouseHighlightSubscribe()。在其他平台上,由你的代码将每次点击传给 MouseHighlightAddClickEvent(VideoCaptureCoreX 中为 MouseHighlight_AddClickEvent)
- 硬件 H.264:Android 上是 MediaCodec,Apple 平台上是 VideoToolbox;在 Windows 上 SDK 依次尝试 NVENC、AMF 和 Quick Sync,并回退到 OpenH264
- 同时多路输出:在通过 RTMP、SRT 或 NDI 将同一屏幕推流到 YouTube 的同时录制 MP4;无需停止预览即可暂停和恢复录制或开始新文件
- 在 Windows、macOS、Linux、Android 和 iOS 上使用同一套 API,支持 WinForms、WPF、.NET MAUI 以及原生 macOS、Android 和 iOS 应用;每种都有示例
应用场景
教程与在线学习录制
录制一个窗口或整个屏幕,带旁白和点击高亮,并将课程保存为 MP4。
技术支持与会话录制
录下用户在问题出现之前的操作,并将视频附加到支持工单中。
QA 与测试自动化
录制每次自动化 UI 测试的运行过程,并保留失败测试的视频作为证据。
演示与直播
将屏幕推流到 YouTube 或 NDI 接收端,同时从同一采集中保存一份本地 MP4。
代码示例
精简自 Video Capture SDK .NET 和 Media Blocks SDK .NET 的 Screen Capture 演示。前两个运行在 WinForms 窗体中,第三个运行在 .NET MAUI 页面中;每个都有一个名为 videoView1 或 videoView 的 VisioForge VideoView。
将屏幕和系统声音录制为 MP4
C#录制单个窗口并高亮点击
C#适用于 Windows、macOS、Android 和 iOS 的同一个录制程序(.NET MAUI)
C#管道
窗口示例和 .NET MAUI 示例使用相同的四个模块。ScreenSourceBlock 使用平台 API 采集屏幕,TeeBlock 将帧分配给预览和编码器,MP4SinkBlock 写入文件。不同平台之间只有源的设置会变化。
常见问题
如何录制电脑正在播放的声音?▼
能录制被其他窗口遮挡的窗口吗?▼
能在 macOS 和 Linux 上运行吗?▼
能在 Android 和 iOS 上录制屏幕吗?▼
为什么录制画面是黑的?▼
我需要哪个 SDK?▼
文档与示例
屏幕采集指南
使用 VideoCaptureCore 和 VideoCaptureCoreX 进行全屏、区域和窗口采集,多显示器配置和故障排除。
屏幕采集到 MP4 教程
带视频讲解的分步 C# 教程:控制台录制程序、系统音频和 GPU 编码器。
Screen Capture X Demo (WPF)
Video Capture SDK .NET 示例:屏幕、区域或窗口,麦克风或环回音频,输出 MP4、WebM、AVI、MOV 和 MPEG-TS。
Screen Capture MB Demo (WPF)
Media Blocks SDK .NET 示例:带点击高亮的屏幕或窗口采集、预览和 MP4 录制。
Media Blocks 中的屏幕源
ScreenSourceBlock 参考:各平台的设置类及其背后的采集技术。
ScreenCaptureMB (.NET MAUI)
适用于 Windows、Mac Catalyst、Android 和 iOS 的 Media Blocks SDK .NET 示例:屏幕预览和 MP4 录制,Android 上带 MediaProjection 提示。
开始录制屏幕
下载功能完整的 30 天试用版并运行 Screen Capture 演示。根据引擎和输出的不同,可能会出现水印或未注册版本提示。
支持屏幕录制的 SDK
Video Capture SDK .NET
采集引擎:屏幕、窗口或区域,带系统声音或麦克风,录制到文件或推流,带预览。
了解更多 →Media Blocks SDK .NET
管道 SDK:在 Windows、macOS、Linux、Android 和 iOS 上使用 ScreenSourceBlock,并与你自己的处理、混音和输出组合。
了解更多 →每年 €250 起 · Lifetime 许可证 €750 起
