問題タブ [desktop-duplication]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-c++ - デスクトップ複製画面キャプチャ - DuplicateOutput が E_ACCESSDENIED エラーを返す
デスクトップ複製 API (DirectX11) を使用して画面をキャプチャしています。DuplicateOutput API はアクセス拒否エラーを返します。アプリケーションが SYSTEM レベルの権限で実行され、SetThreadDesktop が適切に呼び出されているにもかかわらず、ログオン画面の Windows 8.1 マシンでも非常にまれに (10% の確率で) 発生します。エラーが発生するたびにリセットして SetThreadDesktop を呼び出していましたが、その後、複数のデバイスのリセットと初期化を行った後でも、アプリケーションはエラーから回復できませんでした。複数回の再試行またはアプリケーションの再起動後に GDI (directx から GDI に切り替えた後、アプリケーションは正常に動作する) ベースのアプローチにフォールバックする必要がありましたが、その考えはひどいようです。
注: Windows 10/Windows 8 マシンでも同じ問題に遭遇しましたが、その特定の Windows 8.1 マシンと比較するとそれほど頻繁ではありません。
E_ACCESSDENIEDエラーの説明は、このエラーの可能性のあるケース (システム レベルの権限がない、または SetThreadDesktop が正しく呼び出されていない) のみを示します。問題を見つけるために考えられるすべての方法を試しましたが、できませんでした。
事前に感謝します。
デバイスを初期化するコードは次のとおりです。
デスクトップを現在のスレッドに設定するコード:
エラー コードの処理後に返されるエラー メッセージを次に示します。
Id3d11DuplicationManager::ProcessFailure - エラー: DUPLICATIONMANAGER で重複した出力を取得できませんでした。詳細: アクセスが拒否されました。
visual-c++ - デスクトップの複製: フレームを回転させてポートレート モードをサポートする
Windows 8以降のオペレーティングシステムで、d3d11(デスクトップ複製)を使用して画面をキャプチャし、ネットワーク経由で送信しています。問題は、モニターが縦向きモードに設定されていて適切にレンダリングできない場合、フレームが反転/回転することです。
分析した結果、次の回転モードを処理する必要があることがわかりましたが、これに関連するリソースは限られていました。
リソースを調べるのに多くの時間を費やした後、libyuv を使用してキャプチャされたバッファをローテーションする webrtc のコードに出くわしました。
キャプチャした画像バッファを回転させるために Webrtc から取得したコードを次に示します。
それは問題ありませんが、libYuv は GPU をサポートしていないため、CPU パワーを使用して画面を回転させると非常に遅くなります。
また、directX自体を介したフレームの回転について議論するstackoverflowスレッドを取得しましたが、それは不完全すぎます。
誰かがこの問題で私を助けてくれれば、本当にありがたいです。