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:
- Indicador de status com ponto, palavra e latência. Um segundo indicador aparece enquanto a calibração da sincronia labial roda e oferece Recalibrar depois de travada.
- Abas de fonte, quando há mais de uma fonte de câmera ao vivo: uma única página controla todos os celulares.
- Zoom, exposição (compensação de AE, ou ISO e obturador manuais), foco, equilíbrio de branco.
- Lanterna, Lente, Alternar.
- Mudanças de formato durante a transmissão: resolução, taxa de quadros, codec, microfone.
- Distância do assunto, enquanto a tela verde roda com assistência de profundidade.
- Iniciar câmera com a câmera ociosa, Parar câmera em vermelho com ela ao vivo, cada um com um botão Início automático.
- Pausar segura a transmissão sem encerrá-la: o celular continua conectado com a câmera rodando, o OBS mantém a fonte e mostra uma imagem parada, escurecida e desfocada, com um símbolo de pausa, e Retomar volta na mesma hora. O áudio continua passando, então um celular que também serve de microfone não é cortado.
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ção | Retorna |
|---|---|
GET /api/sources | Todas as fontes: id, name, connected, standby, screen. |
GET /api/status | O 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/diagnostics | O 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/state | O ú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ção | Efeito |
|---|---|
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/recalibrate | Sem 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.