スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 色々と模索中 | トップページ | 処理ルーチンを試作中 »

Edge以外なら使えそうだ

今はAmuseGraphicsの開発フェーズで、ここ数日は、AGMPlayerの更新を行っているのだが、PCを1台しか持っていない人向けに、何か意味のある機能追加はできないモノかと鑑みた結果、デスクトップレコーダーにWindowキャプチャー機能を入れようかと思い始めている。

Windowキャプチャー機能というのは、大昔から、一般的なデスクトップキャプチャーツールには存在していたのだが、作者的には、AG-デスクトップレコーダーには、そういう機能は入れなかった。

これは何故だったのか、というと、例えば、作者的にも、YouTube動画を録画したりする事はあるのだが、その時に録画したいのは、それを表示しているIE等のウインドウではなく、その中に表示されている動画領域だけだからだ。

つまり、実際問題としては、指定ウインドウのみをキャプチャーする機能を入れたとしても、使い道は殆ど無い筈なので、AG-デスクトップレコーダーには、より万能な、領域指定機能を入れた訳だ。

にも関わらず、次バージョンにはWindowキャプチャー機能を入れようか、と、書いている訳なのだが、これは、時代が変わったからだ。具体的には、Windows10には仮想デスクトップが標準装備される様になった。

もっとも、この仮想デスクトップというのは、昔、このブログで書いたWindowsNT時代から持っている別デスクトップを作成する機能を利用した仮想デスクトップではない筈だ。

何故なら、現行版のAG-デスクトップレコーダーではカレントデスクトップの切り替えは行っていないのだが、全画面録画していると、他デスクトップに移動しても、移動したデスクトップが録画されている。

それ以前に、WindowsNT自体がもっている別デスクトップの作成機能で作成されたデスクトップは独立性が高いので、別デスクトップで起動されたアプリを持ってくるなんて芸当は余程の事が無い限り出来ない訳だ。

と、いう事で、Windows10の仮想デスクトップは、ある意味、マヤカシで、Windows95時代にフリーソフトが実現していた仮想デスクトップに近いモノでしかない。

しかしまあ、作者的には、その方が都合が良い。

何故なら、WindowsNT時代から存在する別デスクトップを作成する機能を使って仮想デスクトップが作成されていた場合、画面描画出来るソフトは、カレントデスクトップにあるソフトに限られる事になるからだ。

逆に言うと、Windows10の仮想デスクトップはマヤカシなので、別デスクトップにあるアプリも、画面描画を継続できる。

なので、その画面描画内容は、例え画面では見えなくされていても、キャプチャーする事は可能な訳だ。

Windowキャプチャー機能というのは、上記の様な事を行える様にする為に必要になる。

そして、そういう機能を実装すると、AG-デスクトップレコーダーの録画内容が見えない状況を作りだす事が可能になるので、AGMPlayerに入れようとしているリアルタイム視聴機能にも、モニタリング機能としての意味が出てくる事になる訳だ。

もっとも、上記の様なWindowキャプチャー機能は、普通にデスクトップをキャプチャーしていても実現できない。

大昔のデスクトップキャプチャーソフトでは、ウインドウキャプチャー機能はデスクトップ上のウインドウ位置を検出し、デスクトップキャプチャー画像の中から、その部分だけを切り出して出力しているモノも多かった。

その後、Windows Vistaの時代になると、DWMが各ウインドウの描画内容を独立して保持する様になったので、BitbltのソースDCを、そのウインドウのモノにする事で、上記の様な機能も実現可能になった。

ただし、上記のBitbltは不完全で、Direct3D絡みの描画内容が正しく取りこめなかったりしていた。

ネットを検索すると、上記の問題を解決する為に、DWMの非公開APIを使う方法だとか、Direct3DのAPIにHookを入れる方法なんかも試されているのが見つかる筈なのだが、これらの手法では問題が出た、なんて書き込みも多々見つかる筈だ。

と、いう事で、どれも危なっかしい感じだったので、作者的には、AG-デスクトップレコーダーには、上記の様なルーチンは実装して来なかったのだが、去年の年末に、Mirror-DTCの開発アイテムを検討していた時に書いた、PrintWindowというWindows8.1で機能追加されたAPIは、普通に、使えそうな感じな訳だ。

実際に試してみた所では、Direct2Dで描画している作者製ソフトも、Direct3Dで描画していると思えるIEのGPUレンダリング画面も、OpenGLで描画しているノスタルジックUFOバトラーの画面も、通常のGDI画面も、普通にキャプチャー可能だった。

と、いう事で、性能的には、Desktop Duplication APIを使っている現状のキャプチャールーチンよりはフレームレートは低下する可能性が高いのだが、利便性としては、キャプチャー環境を別デスクトップに置いておける使い勝手の良さがあるので、Windowキャプチャー機能にも意味が出てきた訳だ。

ちなみに、表題はどういう意味なのか、というと、試してみた所、Microsoft Edgeは、別デスクトップに移動すると、動画再生を停止してしまう、という問題がある、という事だ。

作者環境には、IE11とChromeもあるのだが、これらについては、別デスクトップに移動しても、動画再生は継続するので、前述の様に、別デスクトップでWindowキャプチャーを開始してデスクトップを移動しても、録画はちゃんと行えている。

Edgeについても、PrintWindowには応答している感じなので、同一デスクトップ内にいれば、画面が他ウインドウに隠れていても、キャプチャーは可能だ。

と、いう事で、次バージョンにはWindowキャプチャー機能を入れようか、と、思ったりもしているのだが、Windows7とWindows8のPrintWindow関数は不完全なので、これらでは、Bitbltを使ったキャプチャーを使う事にするかもしれない。

実際に実装するかどうかは、処理性能を見てから決めるのだが、AG-デスクトップレコーダー的には、Desktop Duplication APIを使ったキャプチャー機能があるので、Windowキャプチャー機能はオマケみたいな感じにする事も出来る。

なので、余程、性能が悪いか機能的に問題がある場合を除いて、実装する事にするかもしれないのだが、逆に、完全に使えそうなら、この機能はAmuseGraphicsのレジストユーザー向けにするかもしれない。

= この記事に関連する公開中ソフト =

AmuseGraphics

AmuseGraphics

(2016/10/25追加)

« 色々と模索中 | トップページ | 処理ルーチンを試作中 »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/63989867

この記事へのトラックバック一覧です: Edge以外なら使えそうだ:

« 色々と模索中 | トップページ | 処理ルーチンを試作中 »

2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google