ブラウザコントロールパネル
プラグインは、ライブ画面のカメラ操作をhttp://localhost:9980で提供します。OBSの横に置いておけるブラウザウィンドウで操作できるので、誰もスマートフォンに触れる必要はありません。
開き方#
OBSを実行しているコンピュータでhttp://localhost:9980を開きます。パネルはデフォルトでオンで、オン・オフはツール → LensLink設定 → ブラウザコントロールパネルで切り替えます。
ループバック専用です。パネルは127.0.0.1にバインドされるため、ネットワーク上のどこからもアクセスできません。カメラを開始でき、認証もないため、意図的にこうしています。
そのポートがすでにほかで使われている場合は、プラグイン全体の設定であるパネルのポート(デフォルトは9980)で変更できます。
パネルの内容#
アプリのライブパネルと同じ操作項目が、同じ順序で並びます。
- ステータス表示:点、状態を示す語、遅延を表示します。リップシンクのキャリブレーション中は2つ目の表示が現れ、ロックされると再キャリブレーションを選べるようになります。
- ソースタブ:カメラのソースが複数ライブになっているときに表示されます。1つのページですべてのスマートフォンを操作できます。
- ズーム、露出(AE補正、またはマニュアルのISOとシャッター)、フォーカス、ホワイトバランス。
- フラッシュライト、レンズ、カメラの切り替え。
- 配信中のフォーマット変更:解像度、フレームレート、コーデック、マイク。
- 被写体までの距離:深度アシストを使ったグリーンバックの動作中に表示されます。
- 待機中はカメラを開始、ライブ中は赤いカメラを停止。どちらにも自動開始のトグルがあります。
- 一時停止は、配信を終了せずに止めます。スマートフォンは接続されたままカメラも動き続け、OBSはソースを保持したまま、一時停止マークの付いた暗くぼかした静止画を表示します。再開を押すとすぐに元に戻ります。音声は流れ続けるので、スマートフォンをマイクとしても使っている場合も途切れません。
スマートフォン側での変更も反映されます。ドラッグ中は反映を止めるので、操作とぶつかることはありません。LensLink Screenソースにはカメラの操作項目がなく、パネルには動かないスライダーの代わりにその旨が表示されます。
HTTP API#
パネルは、同じポートで動く小さなHTTP APIのクライアントの1つにすぎず、Stream Deckやスクリプトも別のクライアントになれます。どのエンドポイントも省略可能な?src=<id>を受け付け、省略するとプラグインが最初の適切なソースを選びます。
状態の取得#
| リクエスト | 戻り値 |
|---|---|
GET /api/sources | すべてのソース:id、name、connected、standby、screen。 |
GET /api/status | statusのテキスト(OBSの言語)とそのtone(idle、wait、ready、live、errorのいずれか。テキストを読まずに色分けするためのもの)、さらにscreen、standby、connected、autoStart、リップシンクのsync段階。 |
GET /api/diagnostics | 診断レポート全体をプレーンテキストで返します。バージョン、ハードウェア、設定、ソースごとの状態を含み、ツール → LensLink設定にあるボタンと同じ内容です。 |
GET /api/state | スマートフォンから最後に受け取ったカメラ状態のスナップショット:レンズ、ズーム、露出、フォーカス、ホワイトバランス、対応フォーマット。ソースのプロパティが読むのと同じキャッシュで、これによって3つの操作画面の表示が一致します。 |
コマンドの送信#
POST /api/controlは、1リクエストにつき1つのJSONコマンドを受け付けます。未知のコマンドは設計上無視されるため、新しいパネルと古いアプリの組み合わせでも、壊れずに機能が限られるだけで済みます。
POST /api/control
{ "cmd": "zoom", "value": 2.0 }
{ "cmd": "exposure_bias", "value": -0.5 }
{ "cmd": "exposure", "mode": "manual", "iso": 400, "shutterSeconds": 0.004 }
{ "cmd": "exposure", "mode": "auto" }
{ "cmd": "focus", "mode": "locked", "lensPosition": 0.42 }
{ "cmd": "focus", "mode": "auto" }
{ "cmd": "white_balance", "mode": "locked", "temperature": 5600 }
{ "cmd": "white_balance", "mode": "auto" }
{ "cmd": "flashlight", "on": true }
{ "cmd": "flip" }
{ "cmd": "start_stream" }
{ "cmd": "stop_stream" }
{ "cmd": "set_format", "resolution": "1080p", "fps": 60, "codec": "hevc" }
{ "cmd": "mic", "id": "builtin:2" }
{ "cmd": "green_screen", "on": true, "maxDistance": 2.5 }
| リクエスト | 効果 |
|---|---|
POST /api/autostart | {"on":true|false}。自動開始のチェックボックスと同じプロパティを変更します。空の本文はfalseとして扱われず、拒否されます。 |
POST /api/recalibrate | 本文なし。リップシンクの測定を新たに開始します。 |
例#
# Start the camera on the only connected phone
curl -X POST http://localhost:9980/api/control -d '{"cmd":"start_stream"}'
# Zoom the source with id 2 to 3x
curl -X POST 'http://localhost:9980/api/control?src=2' -d '{"cmd":"zoom","value":3.0}'
# What is connected right now?
curl -s http://localhost:9980/api/sources
オフにする#
ツール → LensLink設定でブラウザコントロールパネルのチェックを外します。ポートはすぐに閉じ、ほかには影響しません。