LensLink
SpracheDE

Browser-Steuerfeld

Das Plugin stellt die Kamerasteuerung des Live-Bildschirms unter http://localhost:9980 bereit, in einem Browserfenster, das du neben OBS parken kannst. Niemand muss das Smartphone anfassen.

Öffnen#

Öffne http://localhost:9980 auf dem Computer, auf dem OBS läuft. Das Steuerfeld ist standardmäßig aktiv; der Schalter dafür ist Werkzeuge → LensLink-Einstellungen → Browser-Steuerfeld.

Nur Loopback. Das Steuerfeld bindet sich an 127.0.0.1, sodass nichts im Netzwerk es erreichen kann. Das ist Absicht, denn es kann Kameras starten und hat keine Authentifizierung.

Port des Steuerfelds (Standard 9980) ist eine pluginweite Einstellung, falls dieser Port schon belegt ist.

Was es bietet#

Dieselben Bedienelemente wie das Live-Panel der App, in derselben Reihenfolge:

Es übernimmt Änderungen, die auf dem Smartphone gemacht werden, und pausiert dabei, solange du ziehst, damit es dir nie in die Quere kommt. Eine Quelle LensLink Screen hat keine Kamerasteuerung, und das Steuerfeld sagt das, statt funktionslose Schieberegler anzuzeigen.

Die HTTP-API#

Das Steuerfeld ist ein Client einer kleinen HTTP-API auf demselben Port; ein Stream Deck oder ein Skript kann ein weiterer sein. Jeder Endpunkt akzeptiert ein optionales ?src=<id>; ohne wählt das Plugin die erste passende Quelle.

Zustand abfragen#

AnfrageLiefert
GET /api/sourcesJede Quelle: id, name, connected, standby, screen.
GET /api/statusDen status-Text (in der Sprache von OBS), seinen tone (idle, wait, ready, live oder error, um ihn einzufärben, ohne den Text zu lesen), dazu screen, standby, connected, autoStart und die Lippensynchron-Stufe sync.
GET /api/diagnosticsDen ganzen Diagnosebericht als reinen Text: Versionen, Hardware, Einstellungen und Zustand jeder Quelle. Derselbe Inhalt wie über die Schaltfläche unter Werkzeuge → LensLink-Einstellungen.
GET /api/stateDen letzten Kamerazustand, den das Smartphone gemeldet hat: Objektive, Zoom, Belichtung, Fokus, Weißabgleich, unterstützte Formate. Derselbe Cache, den die Eigenschaften der Quelle lesen, und so bleiben die drei Oberflächen im Gleichschritt.

Befehle senden#

POST /api/control nimmt einen JSON-Befehl pro Anfrage entgegen. Unbekannte Befehle werden bewusst ignoriert, sodass ein neueres Steuerfeld mit einer älteren App eingeschränkt funktioniert, statt auszufallen.

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 }
AnfrageWirkung
POST /api/autostart{"on":true|false} – dieselbe Eigenschaft, die das Autostart-Kontrollkästchen ändert. Ein leerer Body wird abgelehnt und nicht als false gewertet.
POST /api/recalibrateKein Body. Startet eine neue Messung der Lippensynchronität.

Beispiele#

# 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

Ausschalten#

Deaktiviere Browser-Steuerfeld unter Werkzeuge → LensLink-Einstellungen. Der Port wird sofort geschlossen; alles andere bleibt unberührt.