CaptureManager SDK

この蚘事では、私の「趣味」プロゞェクトであるWindowsデスクトッププラットフォヌム甚のCaptureManagerを玹介したす。 このプロゞェクトは、開発䞭のアプリケヌションで幅広いビデオおよびオヌディオ゜ヌスのサポヌトを含めるためのシンプルな機胜セットSDKです。



CaptureManagerは 、旧匏のDirectShowに代わる新䞖代のメディアテクノロゞヌであるMicrosoft Media Foundationの䞊に構築されおいたす。 Microsoft Media Foundationは、Windows Vistaに最初に含たれ、Windows 7以降のビデオおよびオヌディオ゜ヌスのサポヌトを受けたした。MicrosoftMedia Foundationの利点は、マルチプロセッサシステムに最適なメディア凊理パむプラむンの新しいモデル、およびその継続的な開発ずMicrosoftからのサポヌトです。



CaptureManagerプロゞェクトでは、Microsoft Media Foundationを䜿甚しおアプリケヌションを䜜成しおいるずきに発生したいく぀かの問題を解決したかったのです。



  1. COM機胜の実装。 奇劙に聞こえるかもしれたせんが、Microsoft Media Foundationテクノロゞにより、Microsoftは同じアプリケヌションモデルであるCOMから埌退しおいたす。 もちろん、Microsoft Media FoundationのすべおのクラスむンタヌフェむスもすべおIUnknownから掟生しおおり、GUIDに関連付けられおいたす。 ただし、クラス自䜓は、静的にリンクされたシステムラむブラリからの盎接的な「C」関数呌び出しによっお䜜成されたす。 これは、 CoCreateInstanceを呌び出しおCOM抜象化を介しおアクセスする必芁があるDirectShow実装ずは異なりたす。 私の意芋では、Microsoftによるこの決定は欠点です-たず、Microsoft Media FoundationをC / C ++で曞かれおいないプロゞェクト、たずえばCプロゞェクトなどに統合するこずは困難ですTLBから必芁なむンタヌフェむス定矩を生成したす。 第二に、ある関数が静的にリンクされたラむブラリから別のラむブラリに移行されるず、次のバヌゞョンのWindowsずのアプリケヌション互換性が倱われるリスクが高くなりたす-Microsoft Media Foundationでは、これが䞀床発生したした Windows 7でのラむブラリの倉曎 -特定のMedia Foundation関数は以前のバヌゞョンずは異なるDLLファむルから゚クスポヌトされたした。 "。
  2. 私の意芋では、Microsoft Media Foundationには機胜ずむンタヌフェむスがたくさんありたす。それらのほずんどを远加の抜象化レベルの背埌に隠しお、ビデオずオヌディオデヌタのキャプチャず蚘録のタスクを最適化するずよいでしょう。
  3. 私の意芋では、重倧な欠点は、Microsoft Media Foundationでのビデオずオヌディオの蚘録のサポヌトの制限です。 Microsoft Media Foundationは、グラフトポロゞずSourceReader-SinkWriterを介しお、メディアを操䜜するための2぀のメカニズムを提䟛したす。 最初の方法では、コンバヌタヌノヌドから必芁な構成を組み立お、必芁な構成を柔軟に構成できたす。 2番目の方法では、 SourceReaderからメディアの䞀郚を受信し、開発䞭のアプリケヌションのコンテキストでSinkWriterに送信したす。 私の意芋では、グラフトポロゞは非垞に䟿利であり、ナヌザヌの芁求に応じお必芁なレコヌド構成を簡単に生成できたす。 ただし、Microsoftのこの゜リュヌションでは、蚘録タスクを解決できたせん-事実、 MFCreateMediaSession関数のIMFMediaSessionむンタヌフェむスを䜿甚したトポロゞに基づいお蚘録䜜業セッションを䜜成するオブゞェクトは、メディアデヌタの再生甚に最適化されおおり、たずえば、最埌に必芁な操䜜を実行したせんファむルぞの曞き蟌み、あなたがしたいメトリックの蚈算-流れの平均速床を蚈算し、プレむ時間を蚈算する-しかしMFCreateMediaSessionのIMFMediaSessionこのんではない機胜-操䜜ベスメトリックを蚈算する問題を再珟したす yslenna。 タむミングにも問題がありたす-MFCreateMediaSession関数のIMFMediaSessionは、れロ時間からの再生の開始を考慮したす-これは、メディアファむルを再生するずきに論理的です。 ただし、Webカメラやマむクなどのビデオおよびオヌディオ゜ヌスは珟圚のシステム時間を䜿甚したす。MicrosoftMedia Foundationのドキュメントによるず、これらはれロ時間に初期化する必芁がありたすが、この芁件を満たしおいたせん。


私は、䞊蚘の問題が重芁であり、それらを解決するこずが望たしいず倚くの人が同意するだろうず思う。 これがCaptureManagerプロゞェクトの開始の理由でした2぀のWebカメラからビデオをキャプチャし、このビデオを1぀のメディアファむルに蚘録するタスクも同様です。



芁するに、 CaptureManagerずは䜕ですか 



  1. 本栌的なCOMむンプロセスサヌバヌ-たたはActiveXず呌ばれるこずもありたす 。 TLBが含たれおおり、DirectShowずずもにC ++、C、Pythonのプロゞェクトに統合できたす。
  2. CaptureManagerはMicrosoft Media Foundationラむブラリに関連付けられおいたすが、「遅延リンク」を䜿甚したす-Microsoft Media FoundationラむブラリはCaptureManagerコヌドにロヌドされ、実行時に察応する機胜にリンクされたす。 ラむブラリで関数を芋぀けるこずができない堎合、゚ラヌコヌド-E_NOTIMPLを返すコルク関数に眮き換えられたす。 したがっお、 CaptureManagerは、あるMicrosoft Media Foundationラむブラリから別のラむブラリに関数を移行する状況で、タヌゲットアプリケヌションがクラッシュするリスクを枛らすこずができたす。
  3. CaptureManagerには、簡玠化されたむンタヌフェヌスのセットがありたす。 重芁な機胜は、XMLドキュメント圢匏でメディア゜ヌス、コヌデック、およびメディアコンテナを蚘述するデヌタの生成です。特にWPFなどの高レベルAPIでは、倚数のVariantおよびPropVariantよりもXMLドキュメントの凊理がはるかに簡単です。
  4. CaptureManagerには、元のMicrosoft Media Foundationにはない倚くのビデオおよびオヌディオ゜ヌスが含たれおいたす。 スクリヌンキャプチャ -ディスプレむたたは耇数のディスプレむから画像をキャプチャするため、 AudioLoopキャプチャ -オヌディオ出力からオヌディオをキャプチャするため、 DirectShow- Crossbarキャプチャ -ビデオをキャプチャするためビデオキャプチャカヌドから。
  5. CaptureManagerには、䞀連の極端なフレヌムを取埗できる「フレヌムバッテリヌ」が含たれおいたす。
  6. CaptureManagerには、蚘録タスク甚に最適化されたIMFMediaSessionむンタヌフェヌスの独自の実装が含たれおいたす。 MFCreateMediaSession関数を呌び出すための完党な拒吊を実装したした。
  7. CaptureManagerには、Webカメラのビデオプロセッサのパラメヌタヌずカメラのパラメヌタヌフォヌカス、露出などを倉曎する機胜が含たれおいたす。


CaptureManagerの機胜は 、GitHub- CaptureManager-SDK-Demosで利甚可胜なデモプログラムで提䟛されたす 。





プロゞェクトの詳现に぀いおは、 CaptureManager SDK Webサむトをご芧ください。 NuGetには、C CaptureManagerシェルがありたす。



All Articles