-
Notifications
You must be signed in to change notification settings - Fork 4
Description
概要
OBSの接続先設定を別ホスト(同一ネットワーク内のOBS Websocket, INFINITAS起動中のWindows PC)に設定すると下記エラーが発生します。
OBSSDKRequestError: Request SaveSourceScreenshot returned code 600. With message: The directory for your file path does not exist.
Traceback (most recent call last):
File "D:\Users\temari\PycharmProjects\inf_daken_counter_obsw\.venv\Lib\site-packages\obsws_python\reqs.py", line 53, in send
raise OBSSDKRequestError(
obsws_python.error.OBSSDKRequestError: Request SaveSourceScreenshot returned code 600. With message: The directory for your file path does not exist.
再現手順
PC1を打鍵カウンタ(notes_counter.exe)を実行するPC、PC2をOBS Websocket, INFINITASを実行するPCとします。
- PC2で下記手順のOBS Websocketの設定をする
https://github.com/dj-kata/inf_daken_counter_obsw?tab=readme-ov-file#%E6%89%93%E9%8D%B5%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF%E3%81%AE%E8%A8%AD%E5%AE%9A - PC1で下記手順の打鍵カウンタの設定する
ただし、OBS hostの値はPC2のIPアドレスとします。
https://github.com/dj-kata/inf_daken_counter_obsw?tab=readme-ov-file#%E6%89%93%E9%8D%B5%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF%E3%81%AE%E8%A8%AD%E5%AE%9A - PC2でINFINITASを起動、選曲画面まで進める
- PC1で打鍵カウンタのstartボタンを押下
- 打鍵カウンタ内のログ表示で
スコア検出スレッド開始。
の出力後、概要のエラーが出力され続ける - PC1で打鍵カウンタのstopボタンを押下
スコア検出スレッド終了。
の出力と同時にエラー出力も止まる。
原因
INFINITASの画面取得にself.obs.save_screenshot()
を使用しているのが原因と思われます。
スクリーンショット保存先の指定はself.imgpath = os.getcwd() + '/tmp.png'
で行っており、PC1上のディレクトリを参照しています。
実際OBSが実行されているのはPC2なのでディレクトリが存在せず、エラーとなります。
仮にPC2でディレクトリを作成してもPC2のローカル上に保存されるので、PC1からは通常参照できません。
修正方針の提案
self.obs.save_screenshot()
の使用箇所をself.obs.get_screenshot()
に変更します。
OBS Websocketから取得した画像をファイルシステムを介さず解析出来るので別ホストでも動作可能と思います。
また、self.obs.save_screenshot()
の場合、スクリーンショットのファイル保存のため常にディスクIOの負荷が掛かっています。
私の環境では13MB/sの書き込み負荷が掛かっていたのを確認しています。
打鍵カウンタ, OBS Websocket, INFINITAS を同ホストで起動する場合でもディスクIOの軽減から、INFINITASの安定性が向上する可能性があると思います。
プレーログ表示などのHTML表示を行う場合、HTTPサーバを立ててHTMLやXMLを返す実装が必要なこともご留意ください。