プロジェクト

全般

プロフィール

機能 #181

完了

機能 #162: OBS連携機能

【OBS連携】Beatoraja本体側の機能

機能 #181: 【OBS連携】Beatoraja本体側の機能

いづ さん さんが24日前に追加. 22日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/12
期日:
進捗率:

100%

予定工数:

説明

親: #162

担当範囲

OBS 連携のうち beatoraja 本体側。状態の収集・保持と、ローカル HTTP サーバによる配信を担う。

設計

コンポーネント

  • ObsState — スレッドセーフな現在状態の保持。更新時に不変スナップショット(または完成済み JSON 文字列)を生成し volatile 参照に差し替える方式で、ゲームスレッド/HTTP スレッド間のロックを不要にする。
  • SessionStats — セッション統計。MainController 既存の boottime を起点に起動時初期化し、リザルト到達時に加算。
  • ObsHttpServercom.sun.net.httpserver.HttpServer を利用。スレッドは既存 RuntimeTaskManager.startVirtual(...)StreamController と同じ流儀)で回す。

接続点

  • MainController.changeState(MainStateType)(MainController.java:248) を唯一の更新funnelとして利用。全画面遷移がここを通るため、状態クラスを侵食せず最小改変で phase(select / playing / result)と曲情報・スコアを ObsState に反映できる。
  • 曲情報/スコアの取得元は PlayerResource(model / songdata / score を保持)。

/state.json スキーマ(暫定)

判定済みの表記文字列で渡し、HTML 側は流し込むだけにする方針。

{
  "phase": "select | playing | result",
  "nowPlaying": {
    "title": "...", "artist": "...", "genre": "...",
    "level": "★12", "mode": "7K",
    "bpm": "150-200", "notes": 1234,
    "bestLamp": "HARD", "bestScore": "AAA 92.3%"
  },
  "lastResult": {
    "title": "...", "lamp": "FULLCOMBO", "rank": "AAA",
    "exscore": 2345, "diff": "+58", "updated": true
  },
  "session": {
    "playCount": 14, "clearCount": 11,
    "startedAt": "2026-06-12T20:00:00", "newRecords": 3
  }
}

設定

  • ConfigobsEnabled / obsPort(既定値の例: 7322)を追加。
  • 設定画面への追加も実施。
  • バインドは localhost 固定。

配置

  • 新規パッケージ案: bms.player.beatoraja.stream.obs(既存 stream パッケージと同系統)。
  • 静的ファイル(#182 の HTML)は同サーバから配信する。

関連するチケット 1 (1件未完了0件完了)

関連している Ferrhythm - 機能 #369: 【OBS連携】Beatoraja本体側の機能の移植未着手いづ さん2026/06/21

操作

他の形式にエクスポート: PDF Atom