Agora que temos um projetor fixado no teto do LHC, eu estava pensando em fazer um negócio pra facilitar distribuir coisas que forem projetadas lá, tanto pra facilitar eventos híbridos, quanto para eventos como Tosconf onde as palestras são gravadas.
Cabo longo HDMI ir do chão, perto da tela de projeção, até uma caixa com esse equipamento
Cabo longo HDMI entra na entrada (1) do switch automático de HDMI
Chromecast entra na entrada (2) do switch automático de HDMI
Saída do switch automático de HDMI entra no splitter de HDMI
Um cabo sai do splitter para o projetor, outro cabo vai para uma placa de captura HDMI
Placa de captura HDMI ligada no Raspberry Pi rodando Restreamer e OBS
Câmera PTZ ligada no Raspberry Pi, talvez até em outro Pi próximo à parede oposta à tela de projeção, ou abaixo do projetor, para capturar a imagem de quem estiver palestrando
Com isso:
Restreamer manda para YouTube, PeerTube, e até mesmo Chromecast para a TV de baixo ou uma TV que a palestrante consiga ver
OBS controla a câmera e outras coisas de OBS, tipo mudar posição das coisas na tela de streaming, ou até mesmo pedir pra ele seguir rostos automaticamente com o PTZ da câmera
Se ninguém tiver HDMI plugado para projetar direto, Chromecast projeta
Não precisa instalar software em nenhum lugar para quem estiver palestrando
As coisas que eu comprei eu pretendo levar quando for ao LHC no fim do ano.
Eu consegui montar boa parte disso, mas ainda não terminei. Espero conseguir ter pelo menos o básico funcionando essa semana ainda.
O povo concordou em botar esse equipamento no rack, o que é uma ideia legal. Aí o cabo longo vai pro projetor, e pegamos o HDMI da TV que está na parede e deixamos perto de onde palestrantes geralmente ficam. (Eu trouxe cabos HDMI mais curtos que podem ser usados na TV.)
Não sei ainda como vai ficar a câmera, mas a gente dá um jeito. Seria legal se fosse câmera IP, mas é USB, e isso atrapalha um pouco.
Por algum motivo eu não consigo usar a webcam e a placa de captura HDMI na mesma máquina, ao mesmo tempo. Dá um erro no dmesg sobre não ter banda suficiente para trocar o estado do dispositivo USB. Talvez funcione com outra máquina, mas não cheguei a testar.
Está quente demais para passar o cabo HDMI também, então é bem possível que alguém vá ter que terminar isso depois que eu voltar.
Eu configurei o Tailscale na máquina, então no pior dos casos eu ajudo a configurar remotamente.
Pensando aqui, e para a Tosconf[5], acho que o melhor é a gente levar em consideração as várias TV Box que a gente tem, rodando Android mesmo, e usá-las para ajudar na empreitada de capturar as imagens para fazer ou transmissão ao vivo da Tosconf (pelo PeerTube), ou gravação para uso posterior.
A minha idéia é:
Achar algum app pra Android que permita fazer streaming (via RTSP por exemplo) de câmera externa plugada na USB
Configurar o app para abrir no boot (com MacroDroid)
Usar uma TV Box para ligar a câmera motorizada
Usar uma TV Box para ligar os apetrechos de captura de HDMI
Configurar o OSB no X220 para receber os streams das duas TV Box e fazer o que tiver que fazer pra gravar/streamar
A gente pode inclusive setupar outro access point apenas para isso, para evitar usar a rede WiFi do LHC e diminuir latência e coisa do tipo (a verificar se vale a pena)
Me pareceu uma ideia mais simples, com chances maiores de funcionar, já que o tempo que perdi para configurar uma máquina só para fazer tudo não deu muito resultado.
O aplicativo pra Android que captura câmera não suporta câmera externa e eu não estou afim de adicionar suporte pra isso. Mas eu achei um negócio chamado v4l2rtspserver que me parece perfeito, só que vai precisar instalar um Linux numa das TV Box pra fazer isso funcionar.
O modelo “novo de TVBox” que temos no LHC ainda não conseguiram rodar um linux direto nela.
Conforme a documentação aqui do Tevo. O Juan também tentou e não conseguiu.
Vou esperar ele tentar (já que está com ela o equipamento) mais uma coisa, estou pensando em trocar para outro modelo de TVBox. Caso a Unicamp consiga trocar as que eu retirei para um outro modelo de TV Box.
Ah, pensei que já estava rolando, considerando que tem uma rodando servidor de Minecraft. Mas não precisa ser nela, pode ser em qualquer computador pequeno que dê pra ficar ali pendurado no projetor. Vai só capturar da captura de HDMI e mandar pra rede via RTSP, não precisa nada super poderoso.
Achei um app pra Android que permite fazer streaming de câmera externa pra RTSP. Testei aqui em casa e funcionou. É uma boa opção se a gente não conseguir fazer TVBox rodar algo não Android.
Eu buildei ele localmente e funcionou em um telefone velho aqui. Dá pra alterar pra quando abrir já começar o stream por exemplo, e configurar pra abrir já no boot.
Agora que o @Tevo conseguiu botar um Linux normalzão lá, o melhor esquema provavelmente vai ser um v4l2rtspserver mesmo. Aí dá pra configurar pra abrir no boot, sem precisar nem de interface gráfica, clicar nada – só ligar, esperar o boot, o negócio conectar no WiFi e o servidorzinho subir.
Se o desempenho não ficar legal, talvez dê pra usar o hardware de vídeo da Rockchip para fazer o encoding do vídeo usando esse fork do ffmpeg. Nem o v4l2rtspserver nem o liblivemedia que ele usa parece usar ffmpeg, mas se a gente precisar ir por esse caminho, tem como usar o rtsp-simple-server junto com esse fork do ffmpeg que usa o hardware da rockchip e aí deve funcionar bala.
Mas tomara que só o v4l2rtspserver funcione. Vamos testar ele primeiro. Se o vídeo engasgar ou coisa do tipo, ou a TV Box dar aquela travada/esquentar demais, aí é possível que só dê pra fazer usando a segunda opção.
Uma coisa que pode ser interessante também é colocar suporte à movimentação da câmera. Eu testei um negócio um tempo atrás que não lembro o nome e funcionou com aquela câmera que tem no LHC. Se olhar no meu laptop depois eu acho. Eu também estava colocando suporte à isso no plugin de PTZ do OBS, mas acabei parando de fazer por que tô sem câmera aqui pra testar. Mas deve ser mais fácil fazer isso usando comando via HTTP mandado pra câmera e recebido pelo v4l2rtspserver.
Testamos o setup com Linux na TV box e v4l2rtspserver ontem, que aparentemente funciona aceitavelmente, servindo a imagem da câmera em 4k codificada com MJPEG via RTSP. Não testamos nenhum outro codec, nem o fork do ffmpeg com codificação acelerada por hardware.
Infelizmente, o kernel que temos não suporta o chip de Wi-Fi da placa, um SSV6256P. Achei que o ssv6xxx na árvore da Rockchip serviria, mas aparentemente é só para outro modelo de chip. Achei esse driver, que consegui integrar na minha árvore do kernel e compilar, mas a UART da minha placa está esquisita e ainda não consegui testar.
O switch automático (1) seleciona entre entrada mais prioritária (3) e menos prioritária (2). Se não houver sinal (3), (2) mostra imagem e aí é possível fazer casting pela rede.
O splitter (4) divide o sinal entre a captura (6) e o projetor. Então é possível projetar tanto do Chromecast quanto do sinal que estiver vindo do chão.
A câmera USB tem PTZ (pan-tilt-zoom) e é controlável tanto por UVC via USB quanto pelo controle remoto (preso com imã na mão francesa). Se a câmera estiver capturando em menos de 4k, dá pra ativar o modo Ai, que segue a pessoa que estiver no foco dela. Favor manter o controle na mão francesa quando não estiver usando.
Para eventos, colocamos uma das nossas mesas modulares no fundo do salão superior, próximo às estantes com caixas:
Nesse sistema, tem um computador dedicado a rodar o OBS, recebendo via RTSP os sinais de vídeo da TV-Box. A rede é via cabo, ponto-a-ponto, sem passar pela rede do LHC. O OBS também recebe áudio pelo receptor do microfone de lapela, monta o vídeo (com 4 cenas diferentes, a serem trocadas pelo operador da área de vídeo), e grava em disco.
Durante uma apresentação, a anterior pode ser mandada para a nossa instância do Peertube diretamente da máquina de streaming através do Wi-Fi.
A câmera funcionando com PTZ sendo controlada pelo controle remoto:
Gastamos um tempo ontem na reta final para a Tosconf e descobrimos que o switch automático de HDMI tá com osmar, então decidimos não usá-lo. O cabo extensor USB não funciona com a câmera também, então vamos prender a parafernalha toda na parede ao invés de prendê-la junto com o projetor.
Eu já configurei ontem a TV Box para ter IP fixo, e irei ligar amanhã diretamente na máquina de streaming. Vou subir os v4l2rtspserver na mão, dentro de um tmux, ao invés de usar o udev como queríamos inicialmente, afim de ficar mais fácil ver os logs e agir quando alguma coisa parar de funcionar.
Não é o ideal mas o evento é amanhã e se as coisas automáticas não funcionam, a gente tenta no manual mesmo.
O setup tem potencial para ficar muito bom da próxima vez que a gente usar, só vai precisar gastar mais tempo e talvez pegar equipamento melhor ou arrumar o equipamento que a gente tem (o switch HDMI talvez dê pra arrumar, mas eu não quero arriscar até amanhã).