2016-03-29 25 views
2

私はスクリーンをキャプチャしてエンコードするプロジェクトに取り組んでいます。私はすでにデスクトップ複製API(Win8 +)を使用して画面をキャプチャすることができます。 APIを使用して、ID3D11Texture2DのテクスチャをGPUからCPUに転送し、次にlibx264を使用してエンコードすることができます。ハードウェアH264エンコーディングID3D11Texture2DとMedia Foundation

しかし、GPUからCPUにテクスチャを引き込むことは、潜在的にfpsを減らすことができるボトルネックになる可能性があります。また、libx264はフレームをエンコードするためにCPUサイクル(品質によって異なる)を使います。私は最適化としてエンコーディングのためにCPUを使用するのではなく、GPU自体のエンコーディングID3D11Texture2Dのエンコーディングを探しています。

私は既にドキュメントといくつかのサンプルコードをチェックしましたが、私は成功しませんでした。私は誰かが私が信頼できるように正確に何かを行うリソースを指すことができれば感謝します。

答えて

2

ビデオエンコーダ、ハードウェア、およびソフトウェアは、さまざまなフォームファクタで使用できます。 Windows自体は、エンコーダを選択できる拡張可能なAPIを提供しており、ライブラリとSDKとして追加のエンコーダを利用できます。既にそのようなライブラリの1つ(x264)を使用しています。ハードウェアエンコーダは、通常、ベンダ固有のものであり、利用可能なハードウェアに依存しています。ハードウェアは、エンコードのプロセスに直接関係しています。特定のハードウェアのソリューションに興味がある場合は、それぞれのSDKを確認することが理にかなっています。

それ以外の場合、Windowsでのハードウェアバックアップされたビデオエンコードの一般的な汎用インターフェイスはMedia Foundation Transform (MFT)です。マイクロソフトは、他のオプションとMFTインターフェイスを共有していることを除いて、x264以上の利点はないと考えられるストックソフトウェアのみH.264ビデオエンコーダを提供しています。しかし、ビデオハードウェアドライバは、利用可能なハードウェア用に追加のMFTをインストールすることが多く、ハードウェア実装によってサポートされるMFTを増やします。このような例は以下のとおりです。

  • インテル®クイック・シンクビデオH.264エンコーダMFT
  • NVIDIA H.264エンコーダMFT
  • AMDh264Encoder異なるベンダーが提供する

、彼らは同様の機能を提供し、これらのMFTを使ってH.264をエンコードすることは、幅広いハードウェアでハードウェア・ビデオ・エンコーディングを利用する良い方法です。

も参照してください:

0

あなたはGPUエンコーダとDirectXの間のテクスチャを共有することは可能であるかどうかを確認する必要があります。

Nvidia DecoderとDirectXの間でテクスチャを共有することができます。これは正常に実行されたためです。 NVIDIAはいくつかの相互運用性を持っていますので、まず、GPUですべてのことを行うためにテクスチャを共有できるかどうかを見てください。

Nvidiaを使用すると、NVIDIA Decoding-> DirectX DisplayをGPUに表示できます。 IntelとATIのためにDirectXのディスプレイ - > NvidiaのEncondingが可能な場合

チェック(知っNVIDIAは相互運用を提供しています)

彼らはDirectXので相互運用機能を提供する場合、私は知りません。

GPUエンコーダのテクスチャでDirectXテクスチャを相互運用できるかどうかを確認することが重要です。

関連する問題