0

同じコンピューター上の 2 つの Web カメラからストリーミングを取得し、それを偽の Web カメラとしてミックスする必要があります (そのため、どのソフトウェアでも偽の Web カメラを使用できます)。camcamx は Mac 用、webcamstudio は Linux 用であることがわかりましたが、Windows 用のソリューションが必要であり、それが見つからないため、独自の小さなアプリを作成することを考えていました。私は C#、Java、および lazarus でプログラミングできますが、例やライブラリなど、任意の言語のものが役に立ちます。

ウェブカメラとして使用できる偽のウェブカメラ (私のコンピューターでは USB ウェブカメラとして検出される) と、2 つの本物のウェブカメラからのストリームを把握し、すべてを混ぜ合わせるコードを作成する必要があります (プライマリ ウェブカメラのようなものが存在します)。大きな画像の隅に、より大きくなり、より小さいセカンダリ Web カメラになります)

誰でも私を助けることができますか?

4

3 に答える 3

2

これは簡単な演習ではありませんが、実行できます。私は前にそれをしたので知っています。:)

これをC++で実装しました。

あなたがする必要があるのは、共有メモリサーバーとして知られているものを作成することです。共有メモリサーバーは、複数のプロセスがアクセスできるRAMの領域です。Windowsで名前付き共有メモリを使用して作成する方法は次のとおりです。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx

2台のカメラからのビデオをミキシングするアプリケーションでは、ミキシングされたビデオフレームをこの共有メモリに書き込むDirectShowレンダリングフィルター(CBaseRenderer)を作成する必要があります。

一方、メインアプリケーションがこのバッファーに書き込むビデオビットマップを読み取るDirectShowキャプチャフィルター(CSourceおよびCSourceStream)を実装する別のVisualStudioDLLプロジェクトを作成する必要があります。このVSプロジェクトは、Windows用のDirectShowキャプチャデバイスとして登録するために呼び出すことができる登録可能なDLLである必要があります。

メインアプリケーションは、動作時にこの共有メモリバッファを作成して維持します。別のアプリケーション(ビデオ会議プログラムなど)がキャプチャデバイスにアクセスする場合、メインアプリケーションが実際のビデオフレームをデバイスにフィードするまで、デバイスからのすべてのデータは空白のバッファになります。

ヒント1:これはマルチスレッド操作であるため、フレームの準備ができたことをキャプチャフィルターに通知するためのイベントハンドルが必要になります。また、アプリケーションの「レンダリング」スレッドとキャプチャデバイスの「キャプチャ」スレッドによるバッファへのアクセスを制御するためのミューテックスも必要になります。

ヒント2:レンダリングまたはキャプチャフィルターが破棄されるまで、メモリポインターでUnmapViewOfFileまたはCloseHandleを呼び出す必要はありません。

粉砕する必要のあるコードはたくさんあるので、有用な例はこの説明の範囲を超えています。これにより、正しい方向に進むことができます。幸運を!

于 2011-09-27T02:58:35.483 に答える
0

あなたの質問は、このサイトが何であるかについてはあまりにも範囲外だと思います。このソフトウェアを自分で作成する場合は、数千行のコードと、ドライバー、ビデオデコード、ミキシングなどに関する深い知識について話していることになります。

そうは言っても、おそらくWindows用のこのためのソフトウェアがあります。ここから始めます:

于 2011-09-24T22:32:44.250 に答える
0

実際の Web カメラからビデオをキャプチャする: MSDN のビデオ キャプチャ

偽の Web カメラ: よく知られている出発点は、http://tmhare.mvps.org/downloads.htmで入手可能な Vivek のサンプル/プロジェクトです。この投稿「偽の」DirectShow ビデオ キャプチャ デバイスも参照してください。

些細なことではありませんが、すべてをまとめることは可能です。

于 2011-09-25T07:11:08.397 に答える