LensLink
IdiomaPT

Painel de controle no navegador

O plugin disponibiliza os controles de câmera da tela Ao vivo em http://localhost:9980, em uma janela do navegador que você pode deixar ao lado do OBS. Ninguém precisa tocar no celular.

Abrindo o painel#

Abra http://localhost:9980 no computador que está rodando o OBS. O painel vem ativado por padrão; a opção fica em Ferramentas → Configurações do LensLink → Painel de controle no navegador.

Somente loopback. O painel escuta em 127.0.0.1, então nada na rede consegue acessá-lo. Isso é proposital, já que ele pode iniciar câmeras e não tem autenticação.

Porta do painel (padrão 9980) é uma configuração de todo o plugin, caso outra coisa já esteja usando essa porta.

O que tem nele#

Os mesmos controles do painel Ao vivo do app, na mesma ordem:

Ele reflete as mudanças feitas no celular, pausando enquanto você arrasta para nunca brigar com a sua mão. Uma fonte LensLink Screen não tem controles de câmera, e o painel avisa isso em vez de mostrar controles que não funcionam.

A API HTTP#

O painel é um dos clientes de uma pequena API HTTP na mesma porta; um stream deck ou um script pode ser outro. Todo endpoint aceita um ?src=<id> opcional; sem ele, o plugin escolhe a primeira fonte adequada.

Lendo o estado#

RequisiçãoRetorna
GET /api/sourcesTodas as fontes: id, name, connected, standby, screen.
GET /api/statusO texto de status (no idioma do OBS), o seu tone (idle, wait, ready, live ou error, para colori-lo sem ler o texto), mais screen, standby, connected, autoStart e a etapa sync da sincronia labial.
GET /api/diagnosticsO relatório de diagnóstico completo em texto simples: versões, hardware, configurações e estado de cada fonte. O mesmo conteúdo do botão em Ferramentas → Configurações do LensLink.
GET /api/stateO último retrato do estado da câmera enviado pelo celular: lentes, zoom, exposição, foco, equilíbrio de branco, formatos suportados. O mesmo cache que as propriedades da fonte leem, e é assim que as três interfaces ficam em sincronia.

Enviando comandos#

POST /api/control recebe um comando JSON por requisição. Comandos desconhecidos são ignorados de propósito, então um painel mais novo com um app mais antigo perde recursos em vez de quebrar.

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 }
RequisiçãoEfeito
POST /api/autostart{"on":true|false}: a mesma propriedade que a caixa de início automático altera. Um corpo vazio é rejeitado, não interpretado como false.
POST /api/recalibrateSem corpo. Inicia uma nova medição da sincronia labial.

Exemplos#

# 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

Desativando#

Desmarque Painel de controle no navegador em Ferramentas → Configurações do LensLink. A porta fecha na mesma hora; todo o resto continua igual.