2

Skype のビデオを自分のアプリケーションに挿入したいと考えています。私はSkype4comを使用して通話を制御していますが、ビデオストリームを取得してアプリケーションに埋め込む機能を示唆する参照や例が見つかりません. 私は SkypeKit プログラムに参加しようとしましたが、1 か月経った今でも彼らからの連絡を待っています。

Skypeが表示しているビデオのhwndを見つけて、パネル/フォーム/などで使用するのと同じくらい簡単なことです。自分のアプリケーションで所有している Skype ウィンドウの残りの部分を非表示にします。私は一般的なトピックについてグーグルを試しましたが、おそらくコンセプトの正しい説明を知らないために何かを見つけることができません.

ウィンドウ ハンドルを使用してフレームのビットマップを取得し、それを自分のアプリケーションで表示して、Skype を非表示にするようなことができることは大雑把にわかっていますが、それはおそらく多くのオーバーヘッドになるでしょう。

自分で見つけることができるように、これを行う方法またはこれが表す概念を知っている人はいますか?

ありがとう!

4

1 に答える 1

2

これは質問に対する最終的または完全な回答ではありませんが、私が尋ねた質問に対する部分的な回答が含まれています...

私はいろいろなことを試して、さまざまな程度の成功を収めました。

この種の問題に取り組む際の最初の問題は、目的を変更しようとしているビデオが DirectX 経由でレンダリングされているかどうかを判断することです。

ビデオが DirectX でレンダリングされていない場合は、実際にウィンドウからビデオをキャプチャして、好きな場所でリアルタイムに再生できます。ウィンドウからビットマップをキャプチャする方法について、Web 上にさまざまなサンプルがあります。秘訣は、不透明度によってウィンドウを非表示にすることはできますが、最小化することはできません (最小化すると更新されません)! ビデオがあるウィンドウに見つけたhwndを使用するだけで、ループ内でさまざまな方法でこれらのビットマップのコピーを取得し、必要に応じて他の場所に表示します。コンピュータの速度とビデオのサイズにもよりますが、この方法は問題なく機能します。

ハイジャックしようとしているビデオが DirectX 経由でレンダリングされている場合は、完全ではありませんが、ほとんどの場合、うまくいきません。DirectX ビデオはグラフィックス カード (OS ではなく) によって OS サーフェスに直接レンダリングされるため、ビデオをフレームとして取得して別の場所に表示するには、まったく異なるアプローチを使用する必要があります。DirectX スクリーン キャプチャの実行方法には、さまざまな例があります。ただし、大きな問題は、DirectX ウィンドウが非表示になっている、重なっている、または不透明度がゼロに設定されている場合、何もキャプチャできないことです! 仮想デスクトップ マネージャー ソフトウェアを使用して、システムをだまして仮想ウィンドウで DirectX ビデオを再生させ、それをキャプチャして好きな場所で再生できるかどうかを試してみましたが、もちろん、それは私よりも賢く、空白になりました。画像。そう、要するに、仮想グラフィックス カード ドライバを作成するなど、本当に極端なことをしない限り、運が悪いようです。(グラフィックス カードに向かう途中でビデオ/静止画をキャプチャできる DirectX プロキシを作成することを含むさまざまな興味深い方法がありますが、表示面が表示されているため、レンダリングする価値があることを納得させるために、仮想グラフィックス ドライバーが必要になる場合があると思います。)

于 2013-01-11T03:18:54.537 に答える