2015/11/02

OBS ゲームキャプチャ最新報告・・・

<<< 20180126 134824 >>>
2016春の PSO2側仕様変更により、OBS Classic / OBS Studio 何れの[ゲームキャプチャ]でも 支障なくキャプチャ出来、
[ウィンドウ][仮想フルスクリーン][フルスクリーン]何れであっても支障なく配信が可能となっている。

従って、このログで扱っている小細工は 一切必要なく、素直に OBSStudioを用いるだけで済む。
先のログを、問題発生から半年以上放置しつつも掲載したワケだが、 その投稿直後に 再度ゲームキャプチャを試用したら妙な挙動を示した。 ・・・もしかしたら改善してるのか? 早速試行してオトシ処を見つけたので報告したい。 ■ まず このログでの前提として、
★ 64bit環境で 且つ、64bitOBSでのゲームキャプチャを使うコト とする。
32bitWindowsでの 32bitOBSのゲームキャプチャであれば 無難にキャプチャ出来る。
との報告を、nVIDIA GPUユーザーから受けている。

だが、全ての32bitWindows環境で そのように作用するのかは定かではなく、
あくまで "動作する環境もある" と云う点は 踏まえる必要がある。
◆ 64bit版OBSのゲームキャプチャでは、PSO2のフルスクリーン稼動時のウィンドウハンドルは取得出来ない。
この点は、オトシ処を見つけた今も変わらない・・・ プラグイン[ゲームキャプチャ] の
64bit環境からの 32bitアプリケーション検出処理の仕上がりが少し微妙なのだろう。

それは 利用者側としては 改善を待つしかない訳だが、
開発者のマシンや環境が32bitである場合、当人が気付く可能性は低い。

便利なモノを提供して貰っている訳で 文句云うのはスヂが違う、使えるように使うのが正しいスタンスだ。
・・・でも使えないのは ちょっと勿体無いから システムの状況を確認すべくとある簡単なツールを導入し、 調査を開始したのだが、その単なる挙動を調べる過程のツールで なんと結論が出てしまったw ◆ そもそも プラグイン[ゲームキャプチャ]が PSO2のフルスクリーンプレイをフック出来ない理由は、   "PSO2のウインドウハンドルを得られなくなるから" と云うのは 間違いのナイ事実としてあるのだが、   得られない理由が、SEGA側の対策起因では無かった可能性が出て来たと云うコトになるのだろう。
・・・否、全く対策をしていないとも思えないワケだが、OBSの[ゲームキャプチャ]を制限出来る程の
性能は有していないコトで、32bit環境では機能した事実を生んだのでは無いかと予測するしかない。
64bit環境でハンドルを得られない理由は、PSO2や nPROが 32bitビルドアプリケーションである点が 大きく作用していると考えてイイ結果である。
■ では、ナニをして そのような事を述べているのか? ・・・作業の経緯から列挙しよう。
◆ まず PSO2のランチャの設定画面で ウインドウモードでの色々な解像度、仮想フルスクリーン
  そしていつもプレイしているフルスクリーン と [ゲームキャプチャ]挙動を確認していく・・・

◆ 長くなるので端折るが、アスペクト比、解像度 など 品質差は 制限の原因では無かった。
  ウィンドウモードは全て支障なくキャプチャ出来たのだ・・・ 出来なかったコト自体が 勘違いであったのかと思う域。
ただコレも語弊無きよう添えるが、

OBSを新規導入して [ゲームキャプチャ]を追加し、起動しているPSO2を いくら捜しても見つからないだろう・・・

と 云うのも、おきつねさまの環境で その結果を得られたのは、過去 PSO2 が そのような対策を施していない頃に
ウィンドウモードで起動して [ゲームキャプチャ]で獲得したウィンドウハンドルを、今使用しているOBSが格納しているからに他ならない。

では、最新のPSO2や 新規導入のOBSでは どう使うのか? ・・・ソレについての解を提示するのが このログだ、術は後述する。
◆ しかし、続く 仮想フルスクリーン/フルスクリーン の試行で フック出来なかった。 こっちか・・・
どのような状況でアレ、ウィンドウハンドルを得られないなら、そのウィンドウハンドルが
どうなってると 得るコトが出来なくなるのか、状態を確認するのは当然の流れだろう・・・

ググるで手頃なツールがヒットしたので 導入・・・ WinLister が ソレだ。

しかし、ソレを用いても変哲無く 起動しているプロセスのウィンドウハンドル他情報が一覧されるだけだ。
そこに PSO2を起動すれば 当然の様に一覧される・・・

そうこうしていると、32bit環境で 何もせずに 支障なくハンドルを確保出来 且つ、フック出来ると報告が・・・ 

少なくとも64bitWindowsで、64bitのOBSで[ゲームキャプチャ]-[アプリを選択]-[プログラム]の
コンボボックスには、幾ら[再読み込みする]を押しても PSO2 は リストに載らない。 
この点から 64bit環境では 対策が有効に機能しているのは間違いがナイ・・・

それが、Windows自体が32bitで 当然32bitなOBSと云う環境では、全ての動作で支障が無いと云う・・・
イマサラ32bitWindowsも含めたデバッグとかしてないのだろう、32bitビルドしか提供してないクセにね PSO2。
結果から判断するに、元々ウィンドウハンドルを得ていれば 64bitOBSでも、PSO2が ウィンドウモードであれば支障なくフックする・・・ 改めてハンドル名を取得出来ないだけで、ハンドル文字列さえ確保が叶えば 処理としては利用出来る と云う事実が、コレで読み取れる。
◆ だが、おきつね環境では・・・
CrossFireXが無効化されるウィンドウモードプレイは 仮想であったとしても容認出来ない。
半ば諦めようかと云うタイミングでの WinListerでモニタしつつの、おきつね環境なOBSで [ゲームキャプチャ]を使って 配信を試行・・・

あれ? フックしたww

訝しみつつも、WinListerに一覧されている pso2.exeを診る・・・ !? なんで消えてない???
フルスクリーン稼動の PSO2が WinListerには しっかり一覧されている・・・
■ なるほど コレが結論か
一旦道筋が出来れば、持ってるウィンドウハンドル文字列で ウィンドウのフックは出来る と云うコトだ。
コレは恐らく、WinListerに限らず ウィンドウハンドルの一覧ツールでなら、ドレでも起こる事象だろう。
◆ 従って、OBSの[ゲームキャプチャ] を 64bitWindows下で フルスクリーン稼動のPSO2 の 取得に利用したい場合は、
OBS と PSO2 を 起動する前に、WinLister ないし それに類するツールを起動しておく。
これだけで、しっかりフック出来る と。
■ ただね、
対策前のPSO2で ウィンドウハンドルを取得出来てない OBSを そのまま使ってもダメなんだよね・・・

◆ って、何も悲観することは無い、
OBSのシーン別設定ファイルに直接 PSO2のウィンドウ情報を テキストエディタを用いて書き込めば済む。
◆ 対象は 
・・・フォルダの scenes.xconfig ファイル ◆ 説明面倒だな、配信サイズ960x540で そのまま使えるサンプルソースを貼ろう。
以下を利用する場合、既存のscenes.xconfigの複製バックアップも忘れずに。

[scenes.xconfig]
scenes : {
  960x640 PSO2 : {
    class : Scene
    sources : {
      DeskTop : {
        render : 0
        class : MonitorCaptureSource
        data : {
          captureType : 0
          monitor : 0
          innerWindow : 0
          regionCapture : 0
          captureMouse : 1
          captureLayered : 1
          compatibilityMode : 0
          usePointFiltering : 0
          captureX : 0
          captureY : 0
          captureCX : 1920
          captureCY : 1080
          useColorKey : 0
          keyColor : -1
          keySimilarity : 10
          keyBlend : 0
          opacity : 100
          gamma : 105
        }
        cx : 960
        cy : 540
        x : 0
        y : 0
      }
      GC - PSO2 : {
        render : 0
        class : GraphicsCapture
        data : {
          window : "[pso2]: Phantasy Star Online 2"
          windowClass : Phantasy Star Online 2
          executable : pso2.exe
          stretchImage : 1
          alphaBlend : 0
          ignoreAspect : 0
          captureMouse : 0
          invertMouse : 0
          safeHook : 1
          useHotkey : 0
          hotkey : 123
          gamma : 100
        }
        cx : 960
        cy : 540
      }
    hotkey : 0
  }
}
オレンジ文字部分が該当箇所、ウィンドウ取得情報は赤文字部分となる。
★ 利用の結論は前述の通りだが、全体の流れを記そう。
WinLister 他類似のツールを起動(最小化など任意で) → OBSを起動して配信を開始 → PSO2を起動。
コレだけww ◆ つか WinLister手動起動が面倒だ、[スタートアップ]フォルダへショートカットを配置してしまえw
WinListerは管理者起動でなくても、この用途としては支障なく機能した。
インストール先(配置フォルダ)は C:\Program Files / C:\Program Files (x86) 以外に レイアウトしよう。
■ さて
最後に、更に語弊無きよう添えるが。

"全ての環境で有効であるのか" は、ぶっちゃけ おきつねさまだけで確認出来る様なモノではナイ。

また、GPUやプロセッサベンダ差があるのか、bit違いは この件に どれだけ影響しているのか、
完全な検証は費用掛けずには不可能だ・・・ 因って、あくまで検証出来た結果を列挙しているに過ぎない。

少なくとも おきつね環境では稼動した、それだけだ。 
おきつねインフラの仕様は公開している、全てが同じ環境なら 同じに使えるだろう。

当然 こうした利用は自己責任だ、ソレが許容出来ないなら、Windowsに限らず 手を出さないほうがイイ。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。