C# と .NET によるクロスプラットフォーム画面録画
Windows、macOS、Linux、Android、iOS で共通の 1 つの API を使い、C# で画面録画アプリを構築できます。全画面、ウィンドウ、領域を、音声、カーソル、クリック強調付きで MP4 またはライブ配信に出力します。Video Capture SDK .NET と Media Blocks SDK .NET は各プラットフォームのネイティブキャプチャ API を使用します。
年間 €250 から · Lifetime ライセンス €750 から
スクリーンショットのループは画面録画ではない
Graphics.CopyFromScreen で得られるのは Windows 上の 1 枚のビットマップだけです。録画にはさらに、安定したフレームレート、カーソル、音声、エンコーダー、そして音声と映像の同期が保たれたファイルが必要です。しかも他の OS ではキャプチャ API がまた別物です。macOS では AVFoundation または ScreenCaptureKit、Linux では X11、Android では MediaProjection、iOS では ReplayKit です。VisioForge の SDK では、画面は Web カメラと同じ映像ソースです。ScreenSourceBlock は実行中のプラットフォームのネイティブ API を使い、エンコーダー、ファイル、配信はどこでも同じコードです。
クロスプラットフォームの画面録画を自作する場合と SDK を使う場合
| 一般的な自作構成 | VisioForge Video Capture SDK .NET と Media Blocks SDK .NET | |
|---|---|---|
| 画面のキャプチャ | OS ごとに異なるネイティブ API を、それぞれ独自の相互運用コード越しに使う。Windows では Desktop Duplication または Windows Graphics Capture、macOS では ScreenCaptureKit または AVFoundation、Linux では X11 または PipeWire、Android では MediaProjection、iOS では ReplayKit | プラットフォームごとに 1 つの設定クラスを持つ ScreenSourceBlock。引数なしの ScreenSourceBlock() はプラットフォームの既定ソースを使用 |
| 1 つのウィンドウまたは領域 | OS ごとに異なるウィンドウ識別子と切り抜きコード。Windows では HWND、Linux では X11 ウィンドウ ID | ウィンドウは Windows では WindowHandle、Linux では XID、領域は Rectangle、モニターは Windows では MonitorIndex、macOS では Monitor |
| カーソルとクリック | カーソルとクリックの印を各フレームに自分で合成 | Windows、macOS、Linux で CaptureCursor。MouseHighlight はクリックごとに広がる円を描画。クリックは Windows ではグローバルマウスフックから取得し、他のプラットフォームではアプリのコードから渡す |
| 音声 | マイク用に OS ごとの別の音声 API、Windows のシステム音には WASAPI ループバック。映像との同期は自前のコード | 全プラットフォームのマイクに SystemAudioSourceBlock、Windows のシステム音に LoopbackAudioCaptureDeviceSourceSettings。映像と同じタイムライン上で処理 |
| エンコードとファイル | Media Foundation、VideoToolbox、MediaCodec を 1 つずつラップするか、アプリごとに FFmpeg のビルドを同梱 | H264EncoderBlock が MediaCodec、VideoToolbox、または NVENC、AMF、Quick Sync を選択し、フォールバックは OpenH264。出力は MP4、WebM、MKV、MOV、AVI、MPEG-TS |
| 保守するコード | 作成、テスト、整合の維持が必要な 5 つのプラットフォーム実装 | C# のパイプラインは 1 つ。プラットフォームごとに変わるのはソースの設定だけ |
プラットフォームごとの画面キャプチャ
引数なしの ScreenSourceBlock() はプラットフォームの既定ソースを選びます。API、ウィンドウ、領域を指定するには設定オブジェクトを渡します。
| プラットフォーム | キャプチャ API | 設定クラス | 音声 | 備考 |
|---|---|---|---|---|
| Windows | Windows Graphics Capture、DXGI Desktop Duplication、DirectX 9、GDI | ScreenCaptureD3D11SourceSettings、ScreenCaptureDX9SourceSettings、ScreenCaptureGDISourceSettings | システム音(WASAPI ループバック)またはマイク | モニター、領域、1 つのウィンドウ。クリック強調 |
| 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 です。ソースより後の処理はカメラと同じように動作します。プレビュー、録画、配信、映像エフェクトです。
- 3 つのキャプチャモード: 任意のモニターの全画面、ハンドルで指定した 1 つのアプリケーションウィンドウ、デスクトップの矩形領域
- Windows 10 バージョン 1803 以降では Windows Graphics Capture が既定で選択されます。DXGI Desktop Duplication、DirectX 9、GDI のソースも利用できます
- PC の音声を WASAPI ループバックで、またはマイクから取得。Media Blocks SDK .NET では AudioMixerBlock で両方を 1 つのトラックにミックス
- チュートリアルやデモ向けに、色、半径、表示時間を設定できるカーソルキャプチャとクリック強調。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 で 1 つの API。WinForms、WPF、.NET MAUI、ネイティブの macOS、Android、iOS アプリから利用でき、それぞれにサンプルがあります
ユースケース
チュートリアルと e ラーニングの録画
ナレーションとクリック強調付きでウィンドウまたは画面全体を録画し、レッスンを MP4 に保存します。
サポートとセッション録画
問題が起きるまでにユーザーが何をしたかを録画し、その動画をサポートチケットに添付します。
QA とテスト自動化
自動 UI テストの実行をすべて録画し、失敗したテストの動画を証拠として保存します。
プレゼンテーションとライブ配信
画面を YouTube や NDI レシーバーに配信し、同じキャプチャからローカルの MP4 コピーも保存します。
コード例
Video Capture SDK .NET と Media Blocks SDK .NET の Screen Capture デモを要約したものです。最初の 2 つは WinForms フォーム、3 つ目は .NET MAUI ページで動作し、それぞれ videoView1 または videoView という名前の VisioForge VideoView を持ちます。
画面とシステム音を MP4 に録画
C#クリック強調付きで 1 つのウィンドウを録画
C#Windows、macOS、Android、iOS 向けの 1 つの録画アプリ(.NET MAUI)
C#パイプライン
ウィンドウの例と .NET MAUI の例は同じ 4 つのブロックを使います。ScreenSourceBlock がプラットフォームの API で画面をキャプチャし、TeeBlock がフレームをプレビューとエンコーダーに分け、MP4SinkBlock がファイルを書き込みます。プラットフォームごとに変わるのはソースの設定だけです。
よくある質問
PC で再生中の音声を録音するには?▼
他のウィンドウに覆われたウィンドウを録画できますか?▼
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 から
